Strategi perdagangan breakout jangka pendek pembalikan

Penulis:ChaoZhang, Tanggal: 2023-11-21 17:03:32
Tag:

img

Gambaran umum

Strategi ini bertujuan untuk menangkap peluang perdagangan reversal jangka pendek. Ini akan membuka posisi pendek setelah N up-bar berturut-turut dan menutup posisi setelah M down-bar berturut-turut.

Logika

  1. Parameter input: Jumlah bar atas berturut-turut N, bar bawah berturut-turut M
  2. Definisi:
    • ups menghitung jumlah up-bar, harga> harga[1] kemudian +1, jika tidak, kembali ke 0
    • dns menghitung jumlah bar ke bawah, harga
  3. Masuk: pendek ketika ups≥N; posisi dekat ketika dns≥M
  4. Keluar: stop loss/take profit tetap atau akhir jangka waktu

Keuntungan

  1. Menangkap peluang perdagangan pembalikan, cocok untuk perdagangan jangka pendek
  2. Pengaturan kerangka waktu yang fleksibel untuk melayani rencana perdagangan yang berbeda
  3. Stop loss/take profit tertanam yang memfasilitasi manajemen risiko

Risiko

  1. Pembalikan jangka pendek mungkin gagal dan membalikkan kembali yang menyebabkan kerugian
  2. Parameter N, M yang wajar diperlukan, terlalu besar atau terlalu kecil tidak menguntungkan
  3. Waktu berhenti yang tidak tepat mungkin tidak dapat menghentikan kerugian tepat waktu

Arahan Optimasi

  1. Kombinasi dengan indikator tren untuk menghindari terhadap perdagangan tren
  2. Pengaturan dinamis parameter N, M
  3. Mengoptimalkan mekanisme stop loss

Kesimpulan

Strategi ini menangkap peluang perdagangan jangka pendek melalui pola garis K statistik. Penyesuaian parameter yang wajar dan langkah-langkah pengendalian risiko sangat penting untuk keuntungan yang stabil. Perbaikan lebih lanjut dalam menggabungkan analisis tren dan penyesuaian parameter dinamis dapat menyebabkan kinerja yang lebih baik.


/*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)






Lebih banyak