Strategi Identifikasi Momentum Breakout


Tanggal Pembuatan: 2023-11-02 14:39:22 Akhirnya memodifikasi: 2023-11-02 14:39:22
menyalin: 0 Jumlah klik: 554
1
fokus pada
1617
Pengikut

Strategi Identifikasi Momentum Breakout

Ringkasan

Strategi ini menguntungkan dengan mengidentifikasi saham yang naik dengan cepat, dan menempatkan lebih banyak posisi ketika mereka menembus tinggi baru, dengan menggunakan stop loss persentase tetap. Strategi ini termasuk dalam strategi pelacakan tren.

Prinsip

Strategi ini didasarkan pada dua indikator:

  1. RSI cepat: untuk menilai pergerakan harga dengan menghitung perubahan naik turun dari 3 garis K terbaru. Ketika RSI cepat di bawah 10, dianggap sebagai saham dalam keadaan overbearing.

  2. Filter utama: Menghitung ukuran rata-rata entitas dari 20 garis K terbaru, dan dianggap sebagai terobosan efektif ketika entitas harga 2,5 kali lebih besar dari entitas rata-rata.

Bila RSI cepat lebih rendah dari 10, dan filter entitas bekerja, buka lebih banyak posisi. Setelah itu, atur titik stop-stop tetap 20% ketika harga melebihi harga bukaan*(Rasio Stop + 1), maka stop akan dihapus.

Keuntungan dari strategi ini adalah bahwa Anda dapat menangkap peluang untuk menembus tahap awal tren, menilai area bawah dengan RSI cepat, dan menyaring entitas untuk menghindari false breakout. Menggunakan metode stop-loss tetap untuk mengunci setiap keuntungan tunggal, Anda dapat terus menangkap tren pasar.

Analisis Keunggulan

Strategi ini memiliki keuntungan sebagai berikut:

  1. Menggunakan RSI cepat untuk menentukan area overshoot di bawah, dapat meningkatkan akurasi entry.

  2. Mekanisme penyaringan utama dapat mencegah penembusan palsu akibat getaran.

  3. Dengan menggunakan metode stop loss dengan persentase tetap, Anda dapat terus menghasilkan uang dan mengamati tren.

  4. Strategi logisnya sederhana, jelas, dan mudah dimengerti.

  5. Struktur kode yang elegan, dapat diperluas, dan mudah untuk mengoptimalkan strategi.

  6. Strategi ini menghasilkan keuntungan positif yang stabil dan memiliki tingkat kemenangan yang tinggi selama periode penghitungan.

Analisis risiko

Strategi ini juga memiliki beberapa risiko yang perlu diperhatikan:

  1. Strategi ini tidak memiliki mekanisme stop loss, dan ada risiko peningkatan kerugian tunggal.

  2. Penetapan yang tidak tepat pada stop point dapat menyebabkan stop point prematur atau terlalu dalam.

  3. Dalam situasi yang tidak stabil, kerugian kecil dapat terjadi secara beruntun.

  4. Tidak mempertimbangkan biaya pembiayaan dan likuidasi, pendapatan langsung akan berkurang.

  5. Parameter strategi tidak dioptimalkan dengan baik, dan perlu disesuaikan dengan varietas yang berbeda.

Arah optimasi

Strategi ini dapat dioptimalkan dengan:

  1. Menambahkan mekanisme penghentian kerugian untuk mengendalikan kerugian tunggal.

  2. Mengoptimalkan titik tolak, memungkinkan untuk mengikuti tren secara dinamis.

  3. Optimalkan penentuan indikator terobosan, meningkatkan akurasi penerimaan.

  4. Menambahkan modul manajemen posisi untuk mengoptimalkan posisi.

  5. Tambahkan modul pengoptimalan parameter varietas untuk mengoptimalkan parameter varietas secara otomatis.

  6. Meningkatkan kondisi penyaringan untuk menghindari kerugian jika pasar terlalu bergejolak.

  7. Pertimbangkan untuk menambahkan modul manajemen biaya rata-rata posisi.

Meringkaskan

Strategi ini secara keseluruhan adalah strategi pelacakan tren yang sangat sederhana dan elegan. Ini menggunakan RSI yang cepat untuk menilai overshoot dan overshoot, filter entitas untuk menentukan terobosan yang efektif, dan mengambil posisi stop-loss tetap untuk mendapatkan keuntungan yang stabil. Meskipun ada beberapa ruang yang dapat dioptimalkan, strategi ini merespon dengan cepat dan cocok untuk menangkap situasi yang berubah dengan cepat. Strategi perdagangan yang sangat praktis.

Kode Sumber Strategi
/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// this is based on https://www.tradingview.com/v/PbQW4mRn/
strategy(title = "ONLY LONG V4 v1", overlay = true, initial_capital = 1000, pyramiding = 1000,
   calc_on_order_fills = false, calc_on_every_tick = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 50, commission_value = 0.075)

//study(title = "ONLY LONG V4 v1", overlay = true)

//Fast RSI
src = close
fastup = rma(max(change(src), 0), 3)
fastdown = rma(-min(change(src), 0), 3)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Body Filter
body = abs(close - open)
abody = sma(body, 20)

mac = sma(close, 20)
len = abs(close - mac)
sma = sma(len, 100)
max = max(open, close)
min = min(open, close)
up = close < open and len > sma * 2 and min < min[1] and fastrsi < 10 and body > abody * 2.5

// Strategy
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

var bool longCondition = na

longCondition := up == 1 ? 1 : na

// Get the price of the last opened long

var float last_open_longCondition = na

last_open_longCondition := longCondition ? close : nz(last_open_longCondition[1])

// Get the bar time of the last opened long

var int last_longCondition = 0

last_longCondition := longCondition ? time : nz(last_longCondition[1])

// Take profit
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

tp = input(20, "TAKE PROFIT %", type = input.float, minval = 0, step = 0.5)

long_tp = crossover(high, (1+(tp/100))*last_open_longCondition) and not longCondition

// Get the time of the last tp close

var int last_long_tp = na

last_long_tp := long_tp ? time : nz(last_long_tp[1])

Final_Long_tp = long_tp and last_longCondition > nz(last_long_tp[1])

// Count your long conditions

var int sectionLongs = 0

sectionLongs := nz(sectionLongs[1])

var int sectionTPs = 0

sectionTPs := nz(sectionTPs[1])

// Longs Counter

if longCondition
    sectionLongs := sectionLongs + 1
    sectionTPs := 0

if Final_Long_tp
    sectionLongs := 0
    sectionTPs := sectionTPs + 1
    
// Signals
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

// Long

// label.new(
//    x = longCondition[1] ? time : na, 
//    y = na, 
//    text = 'LONG'+tostring(sectionLongs), 
//    color=color.lime, 
//    textcolor=color.black,  
//    style = label.style_labelup, 
//    xloc = xloc.bar_time, 
//    yloc = yloc.belowbar,
//    size = size.tiny)
   
// Tp

// label.new(
//    x = Final_Long_tp ? time : na, 
//    y = na, 
//    text = 'PROFIT '+tostring(tp)+'%', 
//    color=color.orange, 
//    textcolor=color.black,  
//    style = label.style_labeldown, 
//    xloc = xloc.bar_time, 
//    yloc = yloc.abovebar,
//    size = size.tiny) 

ltp = iff(Final_Long_tp, (last_open_longCondition*(1+(tp/100))), na), plot(ltp, style=plot.style_cross, linewidth=3, color = color.white, editable = false)

// Backtesting
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

testStartYear = input(2019, "BACKTEST START YEAR", minval = 1, maxval = 2222) 
testStartMonth = input(01, "BACKTEST START MONTH", minval = 1, maxval = 12)
testStartDay = input(01, "BACKTEST START DAY", minval = 1, maxval = 31)
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

strategy.entry("long", strategy.long, when = longCondition and (time >= testPeriodStart))
strategy.exit("TP", "long", limit = (last_open_longCondition*(1+(tp/100))))

// Alerts
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

alertcondition(longCondition[1], title="Long Alert", message = "LONG")
alertcondition(Final_Long_tp, title="Long TP Alert", message = "LONG TP")