セッションブレイクアウトに基づく短期スプレッド取引戦略


作成日: 2023-09-20 17:00:16 最終変更日: 2023-09-20 17:00:16
コピー: 1 クリック数: 724
1
フォロー
1617
フォロワー

概要

この戦略は,複数時間枠の複数空間のストップボードと組み合わせて,セッションの時間帯でショートラインの突破を捕まえて分散取引を行う.

戦略原則

  1. 2つの時間枠の下での突破口を形成するために,当日の多空間の軌道と短期間の多空間の軌道を計算する.

  2. カスタマイズされた取引時間内でのみ取引を行う. 取引は,破綻期に突入し,平仓期を終了する.

  3. 価格をリアルタイムEMAとして入場価格として計算する.中軌道を越えると突破シグナルが生じる.

  4. 突破口の外の止損ラインを設定する. 突破が失敗すると止損する.

  5. 価格が中軌道に近くなると,突破が失敗したことを確認して平定する.

優位分析

  1. 複数の時間枠を組み合わせて,偽突破を効果的にフィルターできます.

  2. 重要なニュースイベントを避けるため,取引時間を制限します.

  3. EMAは価格を順番に追跡し,タイムリーに入場する.

  4. リスクのコントロールに役立つのは,ストップ・ローンを設定することです.

  5. 長期間の為替を強制的に設定することで,夜間のリスクは回避できます.

リスク分析

  1. ショートライン突破が停止損傷を誘発した場合.

  2. タイムラインの終わりまで,一部のブレイクが完全に稼働できない可能性があります.

  3. タイミングを間違えたり,取引の機会を逃したりします.

  4. 予想される利益の達成を保証できない.

  5. パーメータを最適化する際には,適合の問題が発生している可能性があります.

最適化の方向

  1. 異なる突破パラメータをテストし,最適な組み合わせを見つけます.

  2. 入学の正確性を高めるために,他の指標を評価する.

  3. 取引のタイミングを最適化し,利益とリスクのバランスをとる.

  4. 収益を抑える戦略と連携する方法を研究する.

  5. 異なる品種のパラメータ設定の差異性をテストする.

  6. 機械学習アルゴリズムによる動的最適化パラメータ.

要約する

この戦略は,セッション限定のブレイクによってショートラインの分散取引を試みている.偽のブレイクとリスク管理の面での最適化により,実用的で効率的なショートラインの取引戦略に改善することができる.

ストラテジーソースコード
/*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)
// -------------------------------------------------------------------------------------------------