
リバースブレイク取引戦略は,価格が連続して上昇または下落するブレイクをベースに逆操作を行う取引戦略である.この戦略は,価格が連続して上昇または下落する周期を設定し,価格が一定の傾向を形成した後,利益を得るため逆操作を行う.
この戦略は主に以下の部分によって実行されます.
価格が連続して上下する周期の長さを設定します.つまり,consecutiveBarsUpとconsecutiveBarsDownで,現在の周期的な価格トレンドが設定の長さに達した後で取引信号を触発します.
現在の価格が前期価格と比較して下落を計算し,下落の状況に応じて現在の連続した上昇または下落の周期長さを計算するupsとdns。
回測の時間範囲を設定し,time_condで回測時間内でのみ動作するポリシーを制限する.
設定された日々の取引時間を設定し,timetobuyで設定された時間帯内でのみ取引シグナルを発信することを制限します.
価格の連続上昇周期が設定長さに達すると,多信号を発信し,strategy.long;価格の連続下落周期が設定長さに達すると,空信号を発信し,strategy.short。
ストップとストップの価格を設定できます. オーバーでは短期ストップを設定し,空白では長期ストップを設定します. オーバーでは長期ストップを設定し,空白では短期ストップを設定します.
取引シグナルを送信する際の通知を設定できます.
上記のパラメータと価格の判断により,条件が合っているときに多行または空行信号を発する.
この逆転戦略には以下の利点があります.
価格逆転のポイントを捕捉し,反転操作で良い利益を得ることができる.価格が傾向を形成した後,反転操作を行い,価格逆転時に利益を得ることができる.
設定可能なパラメータは柔軟で,市場に応じてパラメータを調整できます. 連続した上昇と下降の周期数を調整し,ストップ・ストップ・ロスの位を調整し,取引期間を制限し,実際の状況に応じてパラメータを最適化できます.
ストップ・ストップを追加してリスクを制御する.空白を多めにすると,ストップ・ストップとストップを事前に設定して取引リスクを制御する.
取引の提示メッセージが設定され,取引を自動化できます.取引信号が送信されたときにメッセージの提示が設定され,自動取引システムの使用と連携できます.
回測時間帯を設定して,戦略を簡単にテストできます. 回測時間帯の設定を追加して,異なる市場条件下で戦略の効果を簡単に観察できます.
この戦略にはいくつかのリスクがあります.
重要なニュースイベントを避ける 重要なニュース発表時に価格動きを判断できない,戦略は同時に多額の空調信号を発信し,損失を招く 重要な財務ニュースの発表時間を避ける
逆転が目立たない時は効果が少ない.傾向が目立たない時は,逆転操作の効果が悪く,慎重に使用する必要がある.
回測データ適合リスク。戦略の最適化は,回測データに過度に依存することを避けるためであり,回測データは将来の動きを意味しない。実況時にパラメータを適切に調整すべきである。
取引頻度が高すぎると市場がく.設定周期が短すぎると取引頻度が高すぎると長期にわたる安定した利益には不利である.
リスクを減らすために,適切なストップストップ戦略を最適化できます.既存の固定ストップストップは,トレンドフォローストップなどの方法としてさらに最適化できます.
この戦略は,以下の点でさらに最適化できます.
トレンド判断の仕組みを増やし,トレンドでない市場の乱反転を避ける.価格変動率,チャネルなどの指標を検知し,トレンドの程度を判断し,価格反転の点を逃さないようにする.
ストップ・ストップ戦略を最適化して,市場の変動に応じて自動的に調整できるようにする.余剰パーセントストップ,ATRストップなどの方法を採用して,ストップ・ストップの設定をよりスマートにすることができる.
加入量能指標判断。取引量変化などの指標と組み合わせ,K線形状のみに基づいて発生する誤信号を避ける。
複数の品種を組み合わせる. 戦略を異なる品種に適用し,組み合わせることで,単一品種のリスクを分散させることができる.
パラメータ最適化と機械学習.より多くの歴史データを収集し,機械学習方法を使用してパラメータを自動的に最適化して,戦略をより安定させる.
逆転突破取引戦略は,価格の逆転点を捕捉して逆操作を行うことで,良い取引信号を得ることができます. この戦略の優点は,柔軟に配置でき,リスクを制御でき,自動化取引に適していることです. しかし,一定のリスクもあります. 長期的に安定した利益を得るためには,パラメータと戦略の継続的な最適化と改善が必要です.
/*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)