Strategi ini menggabungkan donchian pelbagai jangka masa untuk memulihkan kemerosotan jangka pendek semasa sesi yang ditakrifkan pengguna.
Mengira titik pertengahan hari dan jangka pendek untuk membentuk zon pecah merentasi jangka masa.
Hanya berdagang semasa sesi dagangan yang boleh disesuaikan. Masuk pada permulaan sesi, keluar pada akhir sesi.
Gunakan EMA masa nyata harga sebagai harga masuk.
Berhenti di luar zon pelarian dan berhenti apabila gagal.
Tutup kedudukan apabila harga jatuh kembali berhampiran titik pertengahan, mengesahkan kegagalan.
Menggabungkan pelbagai jangka masa untuk menapis pelarian palsu dengan berkesan.
Sesi yang ditentukan mengelakkan risiko mengenai peristiwa berita utama.
Pengesanan EMA membolehkan entri tepat pada masanya selaras dengan momentum.
Henti membantu mengawal risiko.
Penarikan sesi paksa mengelakkan risiko semalam.
Pelarangan jangka pendek mungkin menghadapi whipsaws dan berhenti keluar.
Sesetengah pelarian mungkin tidak mendapat keuntungan sepenuhnya sebelum sesi berakhir.
Definisi sesi yang buruk boleh kehilangan peluang.
Tiada jaminan setiap pelarian mencapai keuntungan yang diharapkan.
Pengoptimuman risiko parameter yang terlalu sesuai.
Uji parameter keluar untuk mencari kombinasi yang optimum.
Menilai penunjuk tambahan untuk meningkatkan ketepatan kemasukan.
Mengoptimumkan sesi dagangan untuk keseimbangan keuntungan vs risiko.
Penyelidikan integrasi mengambil strategi keuntungan untuk mengunci keuntungan.
Perbezaan parameter ujian di pelbagai simbol.
Menggunakan pembelajaran mesin untuk pengoptimuman parameter dinamik.
Strategi ini cuba scalping jangka pendek pada penyemburan sesi terhad. Dengan pengoptimuman di sekitar penyemburan palsu dan kawalan risiko, ia boleh disempurnakan menjadi sistem jangka pendek yang pragmatis dan cekap.
/*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) // -------------------------------------------------------------------------------------------------