この戦略は,コモディティチャネルインデックス (CCI) 指標に基づいており,トレンド逆転のタイミングを決定するために動的適応入口レベルを使用し,利益をロックするためにトレーリングストップ損失を使用しています. 戦略名"コモディティのための拡張適応CCI底部漁業取引戦略"は,この戦略の主要な側面を把握しています.CCI指標を使用して,逆転機会のために漁獲する過剰販売ゾーンを特定し,エントリータイミングを最適化するために適応入口レベルを採用します.
CCIの基本指標は,過剰販売ゾーンを特定するために使用され,したがってトレンド逆転の機会を暗示する.また,CCI過剰販売ゾーンの範囲は,異なる楽器や市場環境によって異なります.したがって,この戦略は,特定の見直し期間の最低CCIレベルを調査し,CCI購入エントリーレベルを動的に設定する"遠見"アプローチを採用しています.過去40日間の最低CCIが-90を超えると,-90は新しい過剰販売ゾーンの限界値になります.この適応型デザインにより,異なる市場条件に動的に適合し,強いダウントレンドの間により保守的なエントリーを追求し,範囲限定市場ではより積極的なエントリーを追求できます.
戦略は,過去40日,50日,その他の異なるバックバック日間の最低CCI読み上げをチェックします.最低CCIが次のレベル,例えば -90よりも高くなった場合, -90は新しいエントリーレベルになります.そして,エントリーレベルは -145 / -90 / -70 / -50 / -4 / 0 / +25 / +50 / +70の間を動的に切り替えることができます.CCIが対応レベルを下回ると,長いエントリー信号が起動されます.
さらに,ストップ・ロスは,価格とともにストップレベルが上昇する利益をロックするために使用されます.
固定エントリーレベルと比較して,このようなダイナミックなデザインは,最適化されたエントリータイミングを可能にします. 強いダウントレンドの間により保守的なエントリーを追求することでリスクが軽減され,レンジ・バインド市場ではより低いエントリーによりより多くの機会が獲得できます. これにより,戦略の適応性が向上します.
CCI自体は過買い/過売りレベルを特定するための明確で信頼性の高い指標です.CCIに基づいてトレンド逆転を判断する論理は証明されています.ダイナミックなエントリーデザインと組み合わせると,この戦略の全体的な利点は重要です.
トレンド逆転点を検出する論理には,いくつかの遅れの属性がある. 急激な価格急上昇またはクラッシュの間にエントリータイミングが正確ではない可能性があります. また,適応メカニズムは現在の市場環境に完璧に適合しない可能性があります. その結果,最適でないエントリーになります. 最後に,商品市場の高い変動は,ストップ損失パラメータが適切に設定されていない場合,大きな損失を引き起こす可能性があります.
主にCCI自身,エントリーレベル設計,ストップ損失パラメータが改善される.特定のインstrumentの最適なパラメータを正確に特定することで戦略のパフォーマンスを向上させることができます.
この戦略は,過買い/過売りゾーンを検出するためにCCIを使用する論理と,トレンド逆転を把握するためのダイナミックな適応性エントリーレベルデザインを組み合わせている.固定パラメータと比較して,ダイナミックエントリーレベルは適応性を大幅に向上させる.このストップロスの追跡付きのエントリー逆転キャプチャモデルでは,強い勢いで機会を掴み,時間をかけて損失を削減することができる.適切に構成されたパラメータにより,この戦略は持続可能性と強度を示している.より高い安定性と収益性を達成するために,CCIパラメータとエントリーレベルルールを常に最適化することで,さらなる改善が可能である.
/*backtest start: 2023-11-20 00:00:00 end: 2023-12-20 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Extended Adaptive CCI Entry Strategy for Commodities", shorttitle="Ext_Adaptive_CCI_Entry_Com", overlay=true) // Inputs cciLength = input(20, title="CCI Period") defaultCCIEntryOversold = input(-145, title="Default CCI Entry Oversold Level") adaptiveCCIEntryLevel90 = input(-90, title="Adaptive CCI Entry Level for 40 Days") adaptiveCCIEntryLevel70_50Days = input(-70, title="Adaptive CCI Entry Level for 50 Days") adaptiveCCIEntryLevel50 = input(-50, title="Adaptive CCI Entry Level for 60 Days") adaptiveCCIEntryLevel4 = input(-4, title="Adaptive CCI Entry Level for 90 Days") adaptiveCCIEntryLevel0 = input(0, title="Adaptive CCI Entry Level for 120 Days") adaptiveCCIEntryLevel25 = input(25, title="Adaptive CCI Entry Level for 140 Days") adaptiveCCIEntryLevel50_160Days = input(50, title="Adaptive CCI Entry Level for 160 Days") adaptiveCCIEntryLevel70_180Days = input(70, title="Adaptive CCI Entry Level for 180 Days") lookback40 = input(40, title="Lookback Period for -90 Level") lookback50 = input(50, title="Lookback Period for -70 Level") lookback60 = input(60, title="Lookback Period for -50 Level") lookback90 = input(90, title="Lookback Period for -4 Level") lookback120 = input(120, title="Lookback Period for 0 Level") lookback140 = input(140, title="Lookback Period for +25 Level") lookback160 = input(160, title="Lookback Period for +50 Level") lookback180 = input(180, title="Lookback Period for +70 Level") // Indicator Calculation cci = ta.cci(close, cciLength) // Determine adaptive entry level based on lookback periods var float entryLevel = defaultCCIEntryOversold // Initialize with the default level if ta.lowest(cci, lookback40) > adaptiveCCIEntryLevel90 entryLevel := adaptiveCCIEntryLevel90 if ta.lowest(cci, lookback50) > adaptiveCCIEntryLevel70_50Days entryLevel := adaptiveCCIEntryLevel70_50Days if ta.lowest(cci, lookback60) > adaptiveCCIEntryLevel50 entryLevel := adaptiveCCIEntryLevel50 if ta.lowest(cci, lookback90) > adaptiveCCIEntryLevel4 entryLevel := adaptiveCCIEntryLevel4 if ta.lowest(cci, lookback120) > adaptiveCCIEntryLevel0 entryLevel := adaptiveCCIEntryLevel0 if ta.lowest(cci, lookback140) > adaptiveCCIEntryLevel25 entryLevel := adaptiveCCIEntryLevel25 if ta.lowest(cci, lookback160) > adaptiveCCIEntryLevel50_160Days entryLevel := adaptiveCCIEntryLevel50_160Days if ta.lowest(cci, lookback180) > adaptiveCCIEntryLevel70_180Days entryLevel := adaptiveCCIEntryLevel70_180Days // Entry Condition longCondition = cci < entryLevel // Entry and Exit if (longCondition) strategy.entry("Long", strategy.long, qty=1) alert("Long entry executed at " + str.tostring(close), alert.freq_once_per_bar) trailOffset = input(10.0, title="Trailing Stop Offset in USD") strategy.exit("Trailing Stop", "Long", trail_offset = trailOffset, trail_price = close) if (close < entryLevel - trailOffset) alert("Long position closed at " + str.tostring(close), alert.freq_once_per_bar) // Plotting plot(series=cci, color=color.purple, title="CCI") hline(price=defaultCCIEntryOversold, color=color.red, title="Default CCI Entry Oversold Level") hline(price=adaptiveCCIEntryLevel90, color=color.orange, title="CCI -90 Level (40 Days)") hline(price=adaptiveCCIEntryLevel70_50Days, color=color.yellow, title="CCI -70 Level (50 Days)") hline(price=adaptiveCCIEntryLevel50, color=color.green, title="CCI -50 Level (60 Days)") hline(price=adaptiveCCIEntryLevel4, color=color.blue, title="CCI -4 Level (90 Days)") hline(price=adaptiveCCIEntryLevel0, color=color.purple, title="CCI 0 Level (120 Days)") hline(price=adaptiveCCIEntryLevel25, color=color.aqua, title="CCI +25 Level (140 Days)") hline(price=adaptiveCCIEntryLevel50_160Days, color=color.black, title="CCI +50 Level (160 Days)") hline(price=adaptiveCCIEntryLevel70_180Days, color=color.gray, title="CCI +70 Level (180 Days)")