Strategi dagangan jangka pendek pelarian K-line songsang


Tarikh penciptaan: 2023-11-21 17:03:32 Akhirnya diubah suai: 2023-11-21 17:03:32
Salin: 0 Bilangan klik: 555
1
fokus pada
1617
Pengikut

Strategi dagangan jangka pendek pelarian K-line songsang

Gambaran keseluruhan

Strategi ini digunakan untuk menangkap peluang perdagangan berbalik garis pendek. Ia akan membuka kedudukan kosong selepas N akar K garis berturut-turut naik, dan posisi kosong selepas M akar K garis berturut-turut turun.

Prinsip

  1. Parameter input: N baris K terus naik, M baris K terus turun
  2. Tentukan logik:
    • ups statistik naik K baris, harga> harga[1] ialah +1, atau reset menjadi 0
    • dns statistik penurunan K baris, price
  3. Masuk: kosong apabila ups≥N; kosong apabila dns≥M
  4. Keluar: Stop loss tetap atau pengakhiran tempoh

Kelebihan

  1. Menangkap peluang perdagangan terbalik, sesuai untuk operasi garis pendek
  2. Fleksibiliti dalam menetapkan tempoh dagangan yang sesuai dengan rancangan dagangan yang berbeza
  3. Penangguhan kerosakan terbina dalam untuk mengawal risiko

Risiko

  1. Pembalikan garis pendek tidak semestinya berjaya dan mungkin menyebabkan kerugian
  2. Perlu parameter N, M, terlalu besar atau terlalu kecil tidak baik
  3. Pengaturan berhenti yang tidak betul mungkin tidak dapat menghentikan kerosakan tepat pada masanya

Arah pengoptimuman

  1. Mengelakkan operasi berlawanan arah dengan indikator trend
  2. N, M parameter penyesuaian dinamik
  3. Optimumkan mekanisme penangguhan

ringkaskan

Strategi ini menangkap peluang perdagangan garis pendek dengan mengkaji bentuk garis K. Menetapkan parameter yang munasabah dan langkah-langkah kawalan angin adalah penting untuk mendapatkan keuntungan yang stabil. Hasil yang lebih baik dijangka dicapai dengan menggabungkan penilaian trend dan parameter penyesuaian dinamik.

Kod sumber strategi
/*backtest
start: 2023-11-13 00:00:00
end: 2023-11-20 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

// Strategy
strategy("Up/Down Short Strategy", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)

// There will be no short entries, only exits from long.
strategy.risk.allow_entry_in(strategy.direction.short)

consecutiveBarsUp = input(1, title='Consecutive Bars Up')
consecutiveBarsDown = input(1, title='Consecutive Bars Down')

price = close

ups = 0.0
ups := price > price[1] ? nz(ups[1]) + 1 : 0

dns = 0.0
dns := price < price[1] ? nz(dns[1]) + 1 : 0

// Strategy Backtesting
startDate  = input(timestamp("2021-01-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time, title='Backtesting End Date')

time_cond  = true

//Time Restriction Settings
startendtime = input("", title='Time Frame To Enter Trades')
enableclose = input(false, title='Enable Close Trade At End Of Time Frame')
timetobuy = (time(timeframe.period, startendtime))
timetoclose = na(time(timeframe.period, startendtime))

// Stop Loss & Take Profit Tick Based
enablesltp = input(false, title='Enable Take Profit & Stop Loss')
stopTick = input(5.0, title='Stop Loss Ticks', type=input.float) / 100
takeTick = input(10.0, title='Take Profit Ticks', type=input.float) / 100

longStop = strategy.position_avg_price - stopTick
shortStop = strategy.position_avg_price + stopTick
shortTake = strategy.position_avg_price - takeTick
longTake = strategy.position_avg_price + takeTick

plot(strategy.position_size > 0 and enablesltp ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesltp ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enablesltp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enablesltp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit")

// Alert messages
message_enterlong  = input("", title="Long Entry message")
message_entershort = input("", title="Short Entry message")
message_closelong = input("", title="Close Long message")
message_closeshort = input("", title="Close Short message")
message_takeprofit = input("", title="Take Profit message")
message_stoploss = input("", title="Stop Loss message")

// Strategy Execution
if (ups >= consecutiveBarsUp) and time_cond and timetobuy
    strategy.entry("Long", strategy.long, stop = high + syminfo.mintick, alert_message = message_enterlong)
    
if (dns >= consecutiveBarsDown) and time_cond and timetobuy
    strategy.entry("Short", strategy.short, stop = low + syminfo.mintick, alert_message = message_entershort)
    
if strategy.position_size > 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closeshort)
    
if strategy.position_size > 0 and enablesltp and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_takeprofit)
if strategy.position_size < 0 and enablesltp and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_stoploss)