Strategi Scalping Penembusan Sesi

Penulis:ChaoZhang, Tanggal: 2023-09-20 17:00:16
Tag:

Gambaran umum

Strategi ini menggabungkan donchian multi-frame untuk scalp breakout jangka pendek selama sesi yang ditentukan pengguna.

Logika Strategi

  1. Hitung titik tengah hari dan jangka pendek untuk membentuk zona istirahat di seluruh kerangka waktu.

  2. Hanya berdagang selama sesi perdagangan yang dapat disesuaikan. Masuk pada awal sesi, keluar pada akhir sesi.

  3. Gunakan EMA real-time harga sebagai harga masuk.

  4. Berhenti di luar zona pelarian dan berhenti saat gagal.

  5. Tutup posisi saat harga jatuh kembali di dekat titik tengah, mengkonfirmasi gagal breakout.

Keuntungan

  1. Multi-timeframe menggabungkan untuk secara efektif menyaring kebocoran palsu.

  2. Sesi yang ditentukan menghindari risiko seputar peristiwa berita utama.

  3. Pelacakan EMA memungkinkan entri tepat waktu sesuai dengan momentum.

  4. Berhenti membantu mengendalikan risiko.

  5. Keluar paksa dari sesi menghindari risiko dalam semalam.

Risiko

  1. Kecelakaan jangka pendek mungkin menghadapi kegagalan dan berhenti.

  2. Beberapa breakout mungkin tidak sepenuhnya menguntungkan sebelum sesi berakhir.

  3. Definisi sesi yang buruk bisa kehilangan kesempatan.

  4. Tidak ada jaminan setiap breakout mencapai keuntungan yang diharapkan.

  5. Optimasi berisiko terlalu banyak parameter.

Peningkatan

  1. Uji parameter keluar untuk menemukan kombinasi optimal.

  2. Evaluasi indikator tambahan untuk meningkatkan akurasi entri.

  3. Mengoptimalkan sesi perdagangan untuk keseimbangan keuntungan vs risiko.

  4. Integrasi penelitian mengambil strategi keuntungan untuk mengunci keuntungan.

  5. Perbedaan parameter uji di berbagai simbol.

  6. Menggunakan pembelajaran mesin untuk optimasi parameter dinamis.

Kesimpulan

Strategi ini mencoba scalping jangka pendek pada istirahat sesi terbatas. Dengan optimasi di sekitar breakout palsu dan kontrol risiko, dapat disempurnakan menjadi sistem jangka pendek yang pragmatis dan efisien.


/*backtest
start: 2023-08-20 00:00:00
end: 2023-09-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Breakout Scalper", overlay=true)

// -------------------------------------------------------------------------------------------------
// INPUTS
// -------------------------------------------------------------------------------------------------
// Period of the "fast" donchian channel
fast_window = input(title="Fast Window",  defval=13, minval=1)
// Used for the volatility (atr) period
slow_window = input(title="Slow Window",  defval=52, minval=1)
// Period of EMA used as the current price
instant_period = input(title="Instant Period",  defval=3, minval=1)
// Minimum ratio of cloud width to ATR in order for trade to be active
cloud_min_percent = input(title="Minimum Cloud ATR Multiplier", type=float, defval=1.0, minval=0)
// Session where we allow trades to be active
trading_sesh = input(title="Trading Session",  defval='1000-1500')
// -------------------------------------------------------------------------------------------------

// -------------------------------------------------------------------------------------------------
// SESSION TIMING
// -------------------------------------------------------------------------------------------------
is_newbar(t) =>
    na(t[1]) and not na(t) or t[1] < t

day_time = time("D")
sess_time = time(timeframe.period, trading_sesh)
day_open_bar = is_newbar(day_time)
sess_open_bar = is_newbar(sess_time)
sess_close_bar = na(sess_time) and not na(sess_time[1])
sess_is_open = false
sess_is_open := sess_open_bar ? true : (sess_close_bar ? false : sess_is_open[1])
// -------------------------------------------------------------------------------------------------

// -------------------------------------------------------------------------------------------------
// DONCHIANS
// -------------------------------------------------------------------------------------------------
slow_high = na
slow_high := day_open_bar ? high : (high > slow_high[1] ? high : slow_high[1])
slow_low = na
slow_low := day_open_bar ? low : (low < slow_low[1] ? low : slow_low[1])
slow_mid = (slow_high + slow_low) / 2

fast_low = max(slow_low, lowest(fast_window))
fast_high = min(slow_high, highest(fast_window))
fast_mid = (fast_low + fast_high) / 2
// -------------------------------------------------------------------------------------------------


// -------------------------------------------------------------------------------------------------
// TREND CLOUD
// -------------------------------------------------------------------------------------------------
cloud_width = fast_mid - slow_mid
slow_atr = atr(slow_window)
cloud_percent = cloud_width / slow_atr
cloud_color = cloud_percent > cloud_min_percent ? green : (cloud_percent < -cloud_min_percent ? red : gray)

fp = plot(fast_mid, title="Fast MidR", color=green)
sp = plot(slow_mid, title="Slow MidR", color=red)
fill(fp, sp, color=cloud_color)
// -------------------------------------------------------------------------------------------------


// -------------------------------------------------------------------------------------------------
// INSTANT PRICE
// -------------------------------------------------------------------------------------------------
instant_price = ema(close, instant_period)
plot(instant_price, title="Instant Price", color=black, transp=50)
// -------------------------------------------------------------------------------------------------


// -------------------------------------------------------------------------------------------------
// ENTRY SIGNALS & STOPS
// -------------------------------------------------------------------------------------------------
buy_entry_signal = sess_is_open and (instant_price > fast_mid) and (cloud_percent > cloud_min_percent)
sell_entry_signal = sess_is_open and (instant_price < fast_mid) and (cloud_percent < -cloud_min_percent)
buy_close_signal = sess_close_bar or (cloud_percent < 0)
sell_close_signal = sess_close_bar or (cloud_percent > 0)

entry_buy_stop = slow_high
entry_sell_stop = slow_low
exit_buy_stop = max(slow_low, fast_low)
exit_sell_stop = min(slow_high, fast_high)

entry_buy_stop_color = (strategy.position_size == 0) ? (buy_entry_signal ? green : na) : na
plotshape(entry_buy_stop, location=location.absolute, color=entry_buy_stop_color, style=shape.circle)
entry_sell_stop_color = (strategy.position_size == 0) ? (sell_entry_signal ? red : na) : na
plotshape(entry_sell_stop, location=location.absolute, color=entry_sell_stop_color, style=shape.circle)
exit_buy_stop_color = (strategy.position_size > 0) ? red : na
plotshape(exit_buy_stop, location=location.absolute, color=exit_buy_stop_color, style=shape.xcross)
exit_sell_stop_color = (strategy.position_size < 0) ? green : na
plotshape(exit_sell_stop, location=location.absolute, color=exit_sell_stop_color, style=shape.xcross)
// -------------------------------------------------------------------------------------------------


// -------------------------------------------------------------------------------------------------
// STRATEGY EXECUTION
// -------------------------------------------------------------------------------------------------
strategy.entry("long", strategy.long, stop=entry_buy_stop, when=buy_entry_signal)
strategy.cancel("long", when=not buy_entry_signal)
strategy.exit("stop", "long", stop=exit_buy_stop)
strategy.entry("short", strategy.short, stop=entry_sell_stop, when=sell_entry_signal)
strategy.cancel("short", when=not sell_entry_signal)
strategy.exit("stop", "short", stop=exit_sell_stop)
strategy.close("long", when=buy_close_signal)
strategy.close("short", when=sell_close_signal)
// -------------------------------------------------------------------------------------------------

Lebih banyak