Strategi traing stop loss berdasarkan rintangan sokongan dan penembusan volum purata


Tarikh penciptaan: 2024-01-11 17:58:26 Akhirnya diubah suai: 2024-01-11 17:58:26
Salin: 0 Bilangan klik: 548
1
fokus pada
1617
Pengikut

Strategi traing stop loss berdasarkan rintangan sokongan dan penembusan volum purata

Gambaran keseluruhan

Idea utama strategi ini adalah untuk menentukan masa masuk yang digabungkan dengan penembusan pada tahap rintangan sokongan dan jumlah transaksi, dan menggunakan indikator ATR untuk mencapai harga pengesanan hentian kerugian secara dinamik selepas keuntungan, untuk mendapatkan lebih banyak keuntungan yang berpotensi.

Prinsip Strategi

Strategi ini terdiri daripada beberapa bahagian logik:

  1. Menggunakan fungsi ta.pivothigh dan ta.pivotlow untuk mengira nilai tertinggi pada garisan L_Bars akar K dan nilai terendah pada garisan R_Bars akar K, sebagai garisan rintangan dan garisan sokongan.

  2. Apabila harga penutupan melintasi garis rintangan dan jumlah dagangan melepasi nilai terendah volumeRange, buat lebih banyak; apabila harga penutupan melintasi garis sokongan di bawah dan jumlah dagangan melepasi nilai terendah volumeRange, buat kosong.

  3. Selepas melakukan lebih banyak, dengan close-ATR_LO sebagai berhenti panjang; selepas melakukan kosong, dengan close+ATR_SH sebagai berhenti pendek, untuk mencapai penyesuaian dinamik untuk mengesan berhenti.

  4. Pada waktu perdagangan ((0915-1445), tidak ada pesanan baru dibuka selepas isyarat perdagangan pertama dilakukan setiap hari, keuntungan atau kerugian mencapai jumlah yang berisiko.

Kelebihan Strategik

  1. Menggunakan teori rintangan sokongan, menggabungkan penunjuk kuantiti lalu lintas, untuk membuat masa masuk lebih tepat.

  2. Dengan menggunakan indikator ATR untuk mengesan hentian, anda boleh menyesuaikan kedudukan hentian anda secara fleksibel mengikut tahap turun naik pasaran, untuk mengurangkan kemungkinan pulangan keuntungan selepas keuntungan.

  3. Pengendalian yang betul terhadap jumlah dagangan dalam satu hari dan risiko dagangan tunggal membantu untuk memahami trend dan mengelakkan kerugian yang berlebihan.

Risiko Strategik

  1. Rintangan sokongan mungkin gagal untuk memberikan isyarat kemasukan yang berkesan.

  2. ATR ditetapkan terlalu besar, yang boleh menyebabkan jarak henti terlalu jauh, meningkatkan risiko kerugian.

  3. Penetapan jumlah transaksi terlalu kecil boleh menyebabkan peluang yang terlewatkan; penetapan terlalu besar boleh menyebabkan isyarat kesalahan penilaian.

Penyelesaian:

  • Sesuaikan parameter rintangan sokongan mengikut ciri-ciri pelbagai jenis

  • Mengoptimumkan faktor ATR dan parameter nilai terhad

  • Kaedah ini juga digunakan untuk menentukan masa masuk ke dalam permainan.

Arah pengoptimuman strategi

  1. Ia dikombinasikan dengan petunjuk lain untuk menentukan masa masuk, seperti purata bergerak dan sebagainya.

  2. Pengoptimuman untuk ATR dan parameter nilai terhad

  3. Mengoptimumkan parameter dinamik dengan algoritma pembelajaran mesin

  4. Meluas ke varieti lain, cari parameter

ringkaskan

Strategi ini mengintegrasikan pelbagai alat analisis dan mencapai kesan yang lebih baik pada tahap pengukuran dengan menggunakan kaedah sokongan rintangan, jumlah perdagangan dan hentikan kerugian. Namun, lebih banyak ketidakpastian mungkin dihadapi di pasaran nyata dan perlu meningkatkan lagi prestasi pasaran nyata dengan pengoptimuman parameter dan pengenalan petunjuk penghakiman lain. Secara keseluruhan, strategi ini jelas dan mudah difahami, memberikan contoh rujukan yang baik untuk strategi perdagangan kuantitatif.

Kod 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)