この戦略は,エラーズが提案したサイバーサイクルの理論に基づいて,スムーズな価格信号を計算し,スムーズな取引信号で取引戦略を設計する.それは効果的に市場のノイズをフィルタリングし,より信頼できる取引信号を生成することができます.
原始の価格信号 src をスムーズにスムーズにするため,二次順序のスムーズ化を行います.
調整された信号に基づいて周期指標サイクルを計算する.計算方法は: サイクル:= (1 -. 5アルファ) (1 - .5 アルファ)(スムーズ - 2滑らかな[1] + 滑らかな[2]) + 2(1 - アルファ)サイクル[1] - (1 - アルファ)(1 - アルファ) *サイクル[2]
ここで α は滑らかなパラメータです.
周期指標を指数関数的に平滑させ,最終的な取引信号信号を得る.計算方法は: 信号:=アルファ2サイクル + (1 - alpha2)nz (シグナル[1])
ここで α2 は第一順位の滑らかなパラメータである.
信号が信号を横切るときは長い[1];信号が信号を横切るときは短い[1].
価格信号の二次順位のスムーズ化は高周波のノイズを効果的にフィルタリングし,取引信号をより信頼性のあるものにすることができます.
エーラーズ・サイバーサイクル理論の適用により,市場の動向の転換点をより正確に決定することができます.
第次順位の指数式スムーズ化は 周期指標のノイズの一部をフィルタリングして より信頼性の高い取引信号を生成します
戦略のプロセス全体が合理的で科学的で パラメータ最適化空間が大きく 実績も優れています
他の技術指標戦略と同様に,この戦略もシステム市場リスクに比較的敏感で,ブラック・スワン・イベントの場合,大きな損失を負う可能性があります.
計算プロセスの複雑さにより,不適切なパラメータ設定は計算の遅延を引き起こし,その結果実際のパフォーマンスに影響を与えます.科学的で合理的な設定を確保するために,パラメータを慎重にテストする必要があります.
また,スムーズな処理は,市場のターニングポイントを間に合うように捉えることができず,機会を逃すかもしれない,遅れた取引信号につながります.スムーズなパラメータの設定はバランスをとらなければなりません.
適正なスムージングスキームを見つけるために,第一順位指数式スムージング,移動平均スムージングなど,さまざまな種類のスムージングアルゴリズムをテストすることができます.
適応性のあるパラメータ調整メカニズムが導入され,市場の状況に基づいてパラメータを動的に調整し,戦略の安定性を向上させることができます.
ストップ・ロストと 収益戦略は 単一の損失のリスクを軽減し 同時に利益を固定するように設計することができます.
他の機械学習モデルと組み合わせてモデルポートフォリオを作成し,他のモデルを使用して取引シグナルをフィルターすることができます.
この戦略は,価格信号のスムージングとエラーズサイバーサイクル指標の計算を通じて,取引シグナルをスムージングするエラーズサイバーサイクル取引戦略を設計する. 効果的にノイズをフィルタリングし,より信頼性の高い取引シグナルを生成することができます. 同時に,パラメータ空間は大きく,実際のパフォーマンスは良好です. 適応メカニズム,ストップ損失戦略,その他の最適化によって,戦略の安定性と有効性がさらに向上することができます.
/*backtest start: 2024-01-19 00:00:00 end: 2024-02-18 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Ehlers Cyber Cycle Strategy",overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 1, commission_type = strategy.commission.percent, commission_value = 0.1) src = input(hl2, title = "Source") alpha = input(.07, title = "Alpha") lag = input(9, title = "Lag") smooth = (src + 2 * src[1] + 2 * src[2] + src[3]) / 6 cycle = na if na(cycle[7]) cycle := (src - 2 * src[1] + src[2]) / 4 else cycle := (1 - .5 * alpha) * (1 - .5 * alpha) * (smooth - 2 * smooth[1] + smooth[2]) + 2 * (1 - alpha) * cycle[1] - (1 - alpha) * (1 - alpha) * cycle[2] alpha2 = 1 / (lag + 1) signal = na signal := alpha2 * cycle + (1 - alpha2) * nz(signal[1]) oppositeTrade = input(true) barsSinceEntry = 0 barsSinceEntry := nz(barsSinceEntry[1]) + 1 if strategy.position_size == 0 barsSinceEntry := 0 if (crossover(signal, signal[1]) and not oppositeTrade) or (oppositeTrade and crossunder(signal, signal[1])) strategy.entry("Long", strategy.long) barsSinceEntry := 0 if (crossunder(signal, signal[1]) and not oppositeTrade) or (oppositeTrade and crossover(signal, signal[1])) strategy.entry("Short", strategy.short) barsSinceEntry := 0 if strategy.openprofit < 0 and barsSinceEntry > 8 strategy.close_all() barsSinceEntry := 0 plot(0, title="ZeroLine", color=gray) plotSrc = signal cyclePlot = plot(plotSrc, title = "CyberCycle", color = blue) triggerPlot = plot(plotSrc[1], title = "Trigger", color = green) fill(cyclePlot, triggerPlot, color = plotSrc < plotSrc[1] ? red : lime, transp = 50)