対照的なブレイクアウト取引戦略は,連続した価格上昇または下落に基づく対照的な信号を取って,ショート条件を満たしたときにロングまたはショート条件を満たしたときにショートする戦略です.特定の戦略で資産が損失しか生み出さない場合,対照的な取引をすることで利益を得ることを目的としています.
戦略は主に以下の部分で実施されます.
価格上昇と低下の連続期間の設定,すなわち連続BarsUpと連続BarsDown.当期トレンドが設定された長さに達すると,取引信号が起動します.
前期価格に対する現在の価格の上昇と低下を計算する.上昇と減少に基づいて,現在の連続した上昇または減少期間の上昇と減少の長さを計算する.
バックテストの時間範囲を設定して time_cond までのバックテストの時間内にのみ戦略を操作することを制限します.
日々の取引時間を設定して, timetobuy を通して設定された時間枠内でのみ発行される取引シグナルを制限します.
連続した上昇サイクルが設定された長さに達すると,strateg.longで長い信号を発します.連続した減少サイクルが設定された長さに達すると,strateg.shortで短い信号を発します.
ストップ・ロストとテイク・プロフィート価格を設定できます. 長期ポジションの短期ストップとショートポジションの長期ストップを設定します. 長期ポジションの長期テイク・プロフィートとショートポジションの短期テイク・プロフィートを設定します.
送信中に取引信号メッセージを設定できます.
上記のパラメータと価格レベルに基づいて条件が満たされたときに長または短信号を発行します.
この逆の脱出戦略には次の利点があります
価格逆転点を捕捉する.逆向きの操作は良い利益を得ることができます.価格がトレンドを形成するときに反対方向の操作は価格逆転で利益を得ることができます.
柔軟な設定可能なパラメータ.連続期間のパラメータは調整可能であり,ストップ損失と利益のレベルを設定することができ,取引時間枠は制限できます.パラメータは市場状況に応じて最適化できます.
Stop loss と take profit はリスクをコントロールできます.Stop loss と take profit を事前に設定することで,ロングやショート後に取引リスクをコントロールできます.
トレードメッセージは自動取引を容易にする.トレードシグナルメッセージの設定は自動取引システムとの統合を容易にする.
バックテストの時間範囲は戦略テストを容易にする.バックテストの時間範囲の設定を追加することで,異なる市場条件下で戦略のパフォーマンスを簡単に観察することができます.
この戦略には,注意すべきいくつかのリスクもあります.
重要なニュースイベントを避ける.主要な発表中に価格動向は予測不可能で,同時に長短の信号と損失を引き起こす.主要な経済リリースを避けるべきである.
逆転が不明である場合,効果が低い.傾向が曖昧である場合,逆転取引は慎重に使用する必要があります.
バックテストデータオーバーフィッティングリスク.最適化は,将来の傾向を表さないバックテストデータへの過度な依存を避けるべきである. ライブ取引中にパラメータを適切に調整すべきである.
高取引頻度は過剰取引の危険性があります. 短サイクル設定は,過剰な取引頻度と長期的な安定した利益のリスクを引き起こす可能性があります.
ストップ・ロストとテイク・プロフィート戦略はリスクを減らすために最適化することができる.固定ストップはトライリングストップにさらに改善することができる.
この戦略は,次の側面においてさらに最適化することができる.
トレンドを測定し,逆転を捕捉するために波動性,チャネルなどを使用して,トレンドを検出し,トレンドではない市場でランダムな逆転を避けるためにトレンド検出を追加します.
市場変動に基づいて調整するストップとテイクを最適化し,パーセントベース,ATRまたは他の適応方法を使用します.
価格パターンのみから 誤った信号を避けるために 量分析を追加します
複数の製品にわたるポートフォリオの多様化により,単一の資産リスクが軽減されます.
パラメータ最適化と機械学習.より多くの歴史的データを収集し,機械学習を使用して,より堅牢な戦略のためのパラメータを自動最適化します.
逆転ブレイクアウト戦略は,逆転操作を通じて価格逆転を捕獲することで良い取引信号を提供します.利点は柔軟な構成,リスク管理,自動取引に適性などです.しかし,リスクは存在し,長期の安定した利益のためにパラメータと論理の継続的な改善が必要です.
/*backtest start: 2023-10-17 00:00:00 end: 2023-10-24 00:00:00 period: 45m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // Strategy strategy("Up/Down Strategy - Contrarian", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash) 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 = true timetoclose = true // 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") // Strategy Execution if (dns >= consecutiveBarsDown) and time_cond and timetobuy strategy.entry("Long", strategy.long, stop = high + syminfo.mintick, alert_message = message_enterlong) if (ups >= consecutiveBarsUp) 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_closelong) if strategy.position_size > 0 and enablesltp and time_cond strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)