この戦略は,複数のイチモク・クラウド・シグナルを利用して,中期から長期間のトレンドを把握し,統合をフィルタリングし,強いトレンド方向性をフォローすることを目的とした純粋なトレンドフォロー戦略を設計します.
この戦略は主にテンカンセン,キジュンセン,チコウスペンおよびイチモククラウドからの他のキーインジケーターを使用する.長期的トレンドを判断するために,リードし,遅れのスペンの関係に焦点を当て,特定のエントリーと終了タイムを考慮すると,テンカンセンとキジュンセンクロスオーバーとクラウドとの価格関係の変化を観察する.
要約すると,基本論理は: 中長期トレンドを確認 -> 強いトレンド再開信号を待つ -> トレンドをフォローするために入力 -> ストップロスの後退.
具体的には,中長期トレンドを決定するために,リードするスパンと遅れのスパンの関係 (リードする緑のスパンの上向きトレンドをシグナルする上方および逆) を使用する.より大きなトレンドを確認した後,テンカンセンとキジュンセンとのクロスオーバーと価格ブレイクシグナルがトレンド再開を特定するために使用されます.エントリー後,キジュンセンは出口のための遅れのストップ損失として使用されます.
これは短期から中期間の統合をフィルタリングし,市場の一貫した優位性のために強い傾向を把握することができます.
(1) 中長期のトレンド方向を決定するためにイチモク・クラウドを使用することは,主要な方向性エッジを特定するのに有益です.
(2) テンカンセン/キジョンセンクロスオーバーとクラウドとの価格関係の変化により,統合を効果的にフィルタリングし,強力なトレンドを早期に把握できます.
(3) トレイリングストップ損失出口メカニズムは,孤立した損失を効果的に制御しながら,大きなトレンドに乗ることを可能にします.
(4) 様々なイチモク信号を組み合わせることで,トレンドを円滑にフォローする堅牢なシステムが作られます.
(1) より大きなトレンドを誤って特定するシステムリスク.より大きなトレンドが誤って診断された場合,すべての後の行動は誤った方向性リスクをもたらす.
(2) 入場タイミングの不適切な選択によるリスク.不適切な入場タイミングは,価格の不良の変動を招きます.
(3) ストップ が 太っ て 置かれ た リスク.極端 な 価格 動き は,計画 さ れ ない 損失 を 引き起こす,太っ て 置かれ た ストップ を 引き出す こと が でき ます.
(4) 取引頻度が高いため,取引コストが過剰である.パラメータの調整が不適切であれば,取引頻度やコストが過剰になる可能性があります.
(1) 最適パラメータを見つけるために,イチモク入力周期の異なる組み合わせをテストする.
(2) 入力フィルターを最適化して高品質の入力を確保する.
(3) リスクと報酬のバランスを取るためにストップ距離を調整する.
(4) 価格キー指標の距離に基づいて利益目標レベルを足し合わせることで,適応性のある利益採取メカニズムを作成します.
このイチモククラウドトレンドフォロー戦略は,トレンド,タイムエントリー,トレイルストップを診断するために複数のイチモク信号を合成する. 実践は,中長期トレンドを効果的に捉え,統合をフィルタリングし,一貫した優位性を達成できることを示しています. 将来の最適化とテストは,優れたリターンのためにパフォーマンスをさらに改善することができます.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Ichimoku trendfollowing", overlay=true, initial_capital=1000, commission_type=strategy.commission.cash_per_order, commission_value=0.04, slippage=2) //*************************** // INPUT BACKTEST RANGE * //*************************** FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2010, title = "From Year", minval = 2000) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2000) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true //*************** //* ICHIMOKU * //*************** //inizializzazione parametri,, tenkanPeriods = input(9, minval=1, title="Tenkan-Sen") kinjunPeriods = input(26, minval=1, title="Kinjun-Sen") senkouSpanBPeriods = input(52, minval=1, title="Senkou Span B") displacement = input(26, minval=1, title="-ChinkouSpan/+SenkouSpan A") //definizione Tenkan-Sen (9 Period), Kinjun-Sen (26 Period), Chinkou Span (Lagging Line) averageHighLow(period) => avg(lowest(period), highest(period)) tenkan= averageHighLow(tenkanPeriods) kinjun = averageHighLow(kinjunPeriods) senkouSpanA = avg(tenkan, kinjun) senkouSpanB = averageHighLow(senkouSpanBPeriods) //definisco il colore della kumo in base al trend. senkouSpan1Above = senkouSpanA >= senkouSpanB ? 1 : na senkouSpan2Below = senkouSpanA <= senkouSpanB ? 1 : na span1plotU = senkouSpan1Above ? senkouSpanA : na span2plotU = senkouSpan1Above ? senkouSpanB : na span1plotD = senkouSpan2Below ? senkouSpanA : na span2plotD = senkouSpan2Below ? senkouSpanB : na col = senkouSpanA >= senkouSpanB ? lime : red //plots Ichimoku plot(tenkan, title = 'Tenkan-Sen', linewidth=1, color=blue) plot(kinjun, title = 'Kinjun-Sen', linewidth=1, color=red) plot(close, title = 'Chinkou Span', linewidth=1, offset = -displacement, color=aqua) plot( senkouSpanA, title = 'Senkou Span A', style=line, linewidth=1, offset = displacement, color=lime) plot(senkouSpanB, title = 'Senkou Span B', style=line, linewidth=1, offset = displacement, color=red) //Cloud Lines Plot p1 = plot(span1plotU ? span1plotU : na, title = 'Senkou Span A Above Senkou Span B', style=linebr, linewidth=1, offset = displacement, color=col) p2 = plot(span2plotU ? span2plotU : na, title = 'Senkou Span B (52 Period) Below Span A Cloud', style=linebr, linewidth=1, offset = displacement, color=col) p3 = plot(span1plotD ? span1plotD : na, title = 'Senkou Span A (26 Period) Below Span B Cloud', style=linebr, linewidth=1, offset = displacement, color=col) p4 = plot(span2plotD ? span2plotD : na, title = 'Senkou Span B (52 Period) Above Span A Cloud', style=linebr, linewidth=1, offset = displacement, color=col) //Fills that color cloud based on Trend. fill(p1, p2, color=lime, transp=70, title='Kumo (Cloud)') fill(p3, p4, color=red, transp=70, title='Kumo (Cloud)') //*********************************************** //* condizioni ingresso ed uscita mercato * //*********************************************** isKumoRialzista = senkouSpanA >= senkouSpanB ? true : false isSopraKumo = (close > max(senkouSpanA[displacement], senkouSpanB[displacement])) isSottoKumo = (close < min(senkouSpanA[displacement], senkouSpanB[displacement])) isChinkouSpanSopra = high[displacement]<close isChinkouSpanSotto = low[displacement]>close filtroLong=isSopraKumo and isChinkouSpanSopra filtroShort=isSottoKumo and isChinkouSpanSotto //rimbalzato su kijun quando i prezzi stavano ritracciando e il trend era già in atto(tenkan >kijun x entrare long isPullBackLijunEntryLong = kinjun<tenkan and low<kinjun and (close>kinjun) isPullBackLijunEntryShort =kinjun>tenkan and high>kinjun and (close<kinjun) //Breackout Kumo isBreackoutKumoEntryLong = crossover(close, max(senkouSpanA[displacement], senkouSpanB[displacement])) and (close>tenkan) and (close>kinjun) isBreackoutKumoEntryShort = crossunder(close, min(senkouSpanA[displacement], senkouSpanB[displacement])) and (close<tenkan) and (close<kinjun) ConditionEntryLong = (isPullBackLijunEntryLong or isBreackoutKumoEntryLong ) and filtroLong ConditionEntryShort = (isPullBackLijunEntryShort or isBreackoutKumoEntryLong ) and filtroShort isExitLong = close<kinjun isExitShort = close>kinjun //ingressi ed uscite Mercato strategy.entry ("Long",long=true, when = window() and ConditionEntryLong) strategy.entry ("Short",long=false, when = window() and ConditionEntryShort) strategy.close(id="Long", when=isExitLong) strategy.close(id="Short", when=isExitShort) strategy.close_all(when=not window())