Strategi trailing stop loss berdasarkan support resistance dan terobosan volume rata-rata


Tanggal Pembuatan: 2024-01-11 17:58:26 Akhirnya memodifikasi: 2024-01-11 17:58:26
menyalin: 0 Jumlah klik: 548
1
fokus pada
1617
Pengikut

Strategi trailing stop loss berdasarkan support resistance dan terobosan volume rata-rata

Ringkasan

Gagasan utama dari strategi ini adalah untuk menentukan waktu masuk dengan menggabungkan resistensi dukungan dan volume transaksi yang terobosan, dan menggunakan indikator ATR untuk secara dinamis menyesuaikan harga tracking stop loss setelah keuntungan, sehingga mendapatkan lebih banyak potensi keuntungan.

Prinsip Strategi

Strategi ini terdiri dari beberapa bagian utama:

  1. Fungsi ta.pivothigh dan ta.pivotlow digunakan untuk menghitung nilai tertinggi dari garis L_Bars akar K dan nilai terendah dari garis R_Bars akar K, sebagai garis resistensi dan garis dukungan.

  2. Ketika harga close out melewati resistance line dan volume trading melampaui volume range, maka Anda harus melakukan over; ketika harga close out melewati support line dan volume trading melampaui volume range, maka Anda harus melakukan over.

  3. Setelah melakukan over, dengan close-ATR_LO sebagai stop panjang; setelah melakukan short, dengan close+ATR_SH sebagai stop pendek, untuk mencapai stop tracking yang disesuaikan secara dinamis.

  4. Dalam waktu perdagangan ((0915-1445), setiap hari melakukan sinyal perdagangan pertama, keuntungan atau kerugian mencapai jumlah yang berisiko dan tidak membuka order baru.

Keunggulan Strategis

  1. Menggunakan teori dukungan resistensi, menggabungkan indikator lalu lintas, membuat waktu masuk lebih akurat.

  2. Menggunakan indikator ATR untuk melacak stop loss, dapat menyesuaikan posisi stop loss secara fleksibel sesuai dengan tingkat fluktuasi pasar, untuk mengurangi kemungkinan pengembalian keuntungan setelah keuntungan.

  3. Kontrol yang tepat terhadap jumlah transaksi dalam satu hari dan risiko transaksi tunggal dapat membantu memahami tren dan menghindari kerugian yang berlebihan.

Risiko Strategis

  1. Resistensi dukungan mungkin gagal untuk memberikan sinyal masuk yang efektif.

  2. ATR yang terlalu besar dapat menyebabkan stop loss terlalu jauh dan meningkatkan risiko kerugian.

  3. Penetapan volume transaksi terlalu kecil, dapat menyebabkan peluang yang terlewatkan; terlalu besar, dapat menyebabkan sinyal kesalahan penilaian.

Solusi:

  • Sesuaikan parameter resistensi dukungan dengan karakteristik varietas yang berbeda

  • Optimalkan faktor ATR dan parameter penurunan volume transaksi

  • Kombinasi dengan indikator lain untuk menentukan waktu masuk

Arah optimasi strategi

  1. Kombinasi dengan indikator lain untuk menentukan waktu masuk, seperti Moving Average dan lain sebagainya

  2. Optimalisasi parameter nilai terendah ATR dan volume transaksi

  3. Optimalisasi parameter dinamis yang digabungkan dengan algoritma pembelajaran mesin

  4. Perluas ke varietas lain untuk mencari parameter

Meringkaskan

Strategi ini mengintegrasikan berbagai alat analisis, dengan menggunakan metode dukungan resistensi, volume transaksi, dan stop loss, mencapai efek yang lebih baik pada tahap pengukuran kembali. Namun, mungkin akan menghadapi lebih banyak ketidakpastian di pasar nyata, perlu meningkatkan kinerja pasar nyata lebih lanjut dengan pengoptimalan parameter dan pengenalan indikator penilaian lainnya. Secara keseluruhan, strategi ini jelas, mudah dipahami, dan memberikan contoh referensi yang bagus untuk strategi perdagangan kuantitatif.

Kode Sumber Strategi
/*backtest
start: 2024-01-03 00:00:00
end: 2024-01-10 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//   ____________                _________                      _____________
//  |____________|             ||________|                      ||__________|
//       ||            ____    ||        ||                     ||                    ______ ________    _____ ________
//       ||    |   || ||       ||________|| |   || ||    ||     ||     |   ||   /\\   |   // |______| || ||    |______|
//       ||    |===|| |===     ||__________ |   || ||    ||     ||     |===||  /__\\  |===      ||    ||   \\     ||
//       ||    |   || ||___    ||        || |___|| ||___ ||___  ||     |   || /    \\ |   \\    ||    || ___||    ||
//       ||                    ||________||                     ||__________
//       ||                    ||________|                      ||__________|
  
//@version=5
strategy("SUPPORT RESISTANCE STRATEGY [5MIN TF]",overlay=true )
L_Bars = input.int(defval = 10, minval = 1 , maxval = 50, step =1)
R_Bars = input.int(defval = 15, minval = 1 , maxval = 50, step =1)
volumeRange = input.int(20, title='Volume Break [threshold]', minval = 1)

// ═══════════════════════════ //
// ——————————> INPUT <——————— //
// ═══════════════════════════ //

EMA1 = input.int(title='PRICE CROSS EMA', defval = 150, minval = 10 ,maxval = 400)
factor1 = input.float(title='_ATR LONG',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL LONG")
factor2 = input.float(title='_ATR SHORT',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL SHORT")
risk = input.float(title='RISK',defval = 200 , minval = 1 , maxval = 5000 , step = 50, tooltip = "RISK PER TRADE")


var initialCapital = strategy.equity
t = time(timeframe.period, '0915-1445:1234567')
time_cond = not na(t)

// ══════════════════════════════════ //
// ———————————> EMA DATA <——————————— //
// ══════════════════════════════════ //
ema1 = ta.ema(close, EMA1)

plot(ema1, color=color.new(color.yellow, 0), style=plot.style_linebr, title='ema1')

// ══════════════════════════════════ //
// ————————> TRAIL DATA <———————————— //
// ══════════════════════════════════ //
// *******Calculate LONG TRAIL data*****
ATR_LO = ta.atr(14)*factor1

// *******Calculate SHORT TRAIL data*****
ATR_SH = ta.atr(14)*factor2

long_trail = close - ATR_LO
short_trail = close + ATR_SH

// Plot atr data
//plot(longStop, color=color.new(color.green, 0), style=plot.style_linebr, title='Long Trailing Stop')
//plot(shortStop , color=color.new(color.red, 0), style=plot.style_linebr, title='Short Trailing Stop')

// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //
// ————————————————————————————————————————————————————————> RESISTANCE/SUPPORT LEVELS DATA <————————————————————————————————————————————————————————————————————————————————————————————— //
// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //

Resistance_pi = fixnan(ta.pivothigh(L_Bars, R_Bars)[1])
Support_pi = fixnan(ta.pivotlow(L_Bars, R_Bars)[1])
r1 = plot(Resistance_pi, color=ta.change(Resistance_pi) ? na : color.red,  offset=-(R_Bars + 1),linewidth=2, title='RESISTANCE')
s1 = plot(Support_pi, color=ta.change(Support_pi) ? na : color.green, offset=-(R_Bars + 1),linewidth=2, title='SUPPORT')

//Volume 
vol_1 = ta.ema(volume, 5)
vol_2 = ta.ema(volume, 10)
osc_vol = 100 * (vol_1 - vol_2) / vol_2

// ══════════════════════════════════//
// ————————> LONG POSITIONS <————————//
// ══════════════════════════════════//
//******barinstate.isconfirmed used to avoid repaint in real time*******

if ( ta.crossover(close, Resistance_pi) and osc_vol > volumeRange and not(open - low > close - open) and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close >= ema1 )
    strategy.entry(id= "Long" ,direction = strategy.long, comment = "BUY")
    
plot(long_trail , color=color.new(color.blue, 0), style=plot.style_linebr, title='long Stop')

if strategy.position_size > 0 
    strategy.exit("long tsl", "Long" , stop = long_trail ,comment='SELL')
 
// ═════════════════════════════════════//
// ————————> SHORT POSITIONS <————————— //
// ═════════════════════════════════════//
if ( ta.crossunder(close, Support_pi) and osc_vol > volumeRange and not(open - close < high - open)  and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close <= ema1 )
    strategy.entry(id = "Short" ,direction = strategy.short,  comment = "SELL") 

if strategy.position_size < 0
    strategy.exit("short tsl", "Short" ,  stop = short_trail ,comment='BUY')

// ════════════════════════════════════════════════//
// ————————> CLOSE ALL POSITIONS BY 3PM <————————— //
// ════════════════════════════════════════════════//
strategy.close_all(when = hour == 14 and minute == 55)

// ════════════════════════════════════════//
// ————————> MAX INTRADAY LOSS  <————————— //
// ════════════════════════════════════════//
// strategy.risk.max_intraday_loss(type = strategy.cash, value = risk)