ダブルスルーストラテジーは,開通価格と前日の範囲に基づいて上位および下位帯を設定し,上向きブレイクでロング,下向きブレイクでショートを行います.ブレイクによって形成されたトレンド取引機会を把握することを目的としています.
最近のNバーで最高高HHと最低低LLを計算する.
前日の HC と LC を計算する.
前日の範囲 HH-LC と HC-LL の範囲が大きい.
上位帯は開店価格+k1*レンジです
低帯域のセールラインは開通価格マイナスk2*範囲です
BuyLine の上から閉じる時,ロングにします. SellLine の下から閉じる時,ショートにします.
この戦略の主な利点は:
オープニング価格のブレイクによって形成されたトレンドを捉えています
バンドは,主観性を回避して,歴史的な変動に基づいて自動的に設定されます.
カスタマイズできる k 値は,異なる揮発性を持つ製品に適しています.
突破信号は比較的高品質です
柔軟な保持期間により,異なる時間枠における傾向を把握できます.
この戦略の主なリスクは
帯の合理的な範囲を決定する難しさ 過剰なフィットリスク
ブレイクアウトは誤った信号で ストップ・ロスは必要だ
固定保有期間が市場に動的に適応できない.
バックテストのデータが不足すると 曲線がフィットします
長期取引と短期取引を同時に実施する難しさ
解決策:
オーバーフィッティングを避けるため,より大きなデータセットで k 値を最適化します.
適切なストップロスを設定して,取引ごとに損失を制限します.
逆トレンド取引を避けるためにトレンドフィルターを追加します.
保持期間を"日中"に短縮することを検討する.
順次位置サイズ付けで リアルタイムで検証する
戦略を改善する方法:
帯域のk値を動的に調整する.
音量フィルターを追加して 突破信号を確認する
利益を守るため ストップロスを動かす
位置測定のために突破強さを評価する.
トレンドとレンジを区別して 戦略を分解します
ダブルスルーストラテジーは,開拓価格の周辺のトレンド取引機会を把握することができます. しかし,パラメータ設定と保持期間最適化にはリスク管理を考慮して改善のための大きな余地があります. ライブ取引では,保守的なパラメータから始め,ポジションを徐々にサイズアップしてください.
/*backtest start: 2023-09-11 00:00:00 end: 2023-09-18 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Dual Thrust Strategy",overlay=true,initial_capital=1000) k1=input(0.67,type=float,step=0.01) k2=input(0.62,type=float,step=0.01) TimeFrame=input('240') len=input(20) HH=security(syminfo.tickerid,TimeFrame,highest(high,len),barmerge.lookahead_off) LC=security(syminfo.tickerid,TimeFrame,lowest(close,len),barmerge.lookahead_off) HC=security(syminfo.tickerid,TimeFrame,highest(close,len),barmerge.lookahead_off) LL=security(syminfo.tickerid,TimeFrame,lowest(low,len),barmerge.lookahead_off) Range=max(HH-LC,HC-LL) BuyLine=security(syminfo.tickerid,"D",open,barmerge.lookahead_off)+k1*Range SellLine=security(syminfo.tickerid,"D",open,barmerge.lookahead_off)-k2*Range plot(BuyLine,color=blue,linewidth=2,offset=1,transp=70) plot(SellLine,color=red,linewidth=2,offset=1,transp=70) LongCondition=crossover(close,BuyLine) ShortCondition=crossunder(close,SellLine) strategy.entry("enter long",true,1,when=LongCondition) strategy.entry("enter short",false,1,when=ShortCondition) plotshape(LongCondition and strategy.position_size<0?low:na,style=shape.labelup,location=location.absolute,color=blue,text="Long",textcolor=white,size=size.small) plotshape(ShortCondition and strategy.position_size>0?high:na,style=shape.labeldown,location=location.absolute,color=red,text="Short",textcolor=white,size=size.small) alertcondition(LongCondition and strategy.position_size<0,title='Long_DT') alertcondition(ShortCondition and strategy.position_size>0,title='Short_DT')