シグナルスムージング エーラーズ サイバーサイクル戦略

作者: リン・ハーンチャオチャン,日付: 2024-02-19 10:42:34
タグ:

img

概要

この戦略は,エラーズが提案したサイバーサイクルの理論に基づいて,スムーズな価格信号を計算し,スムーズな取引信号で取引戦略を設計する.それは効果的に市場のノイズをフィルタリングし,より信頼できる取引信号を生成することができます.

戦略原則

  1. 原始の価格信号 src をスムーズにスムーズにするため,二次順序のスムーズ化を行います.

  2. 調整された信号に基づいて周期指標サイクルを計算する.計算方法は: サイクル:= (1 -. 5アルファ) (1 - .5 アルファ)(スムーズ - 2滑らかな[1] + 滑らかな[2]) + 2(1 - アルファ)サイクル[1] - (1 - アルファ)(1 - アルファ) *サイクル[2]

    ここで α は滑らかなパラメータです.

  3. 周期指標を指数関数的に平滑させ,最終的な取引信号信号を得る.計算方法は: 信号:=アルファ2サイクル + (1 - alpha2)nz (シグナル[1])

    ここで α2 は第一順位の滑らかなパラメータである.

  4. 信号が信号を横切るときは長い[1];信号が信号を横切るときは短い[1].

利点分析

  1. 価格信号の二次順位のスムーズ化は高周波のノイズを効果的にフィルタリングし,取引信号をより信頼性のあるものにすることができます.

  2. エーラーズ・サイバーサイクル理論の適用により,市場の動向の転換点をより正確に決定することができます.

  3. 第次順位の指数式スムーズ化は 周期指標のノイズの一部をフィルタリングして より信頼性の高い取引信号を生成します

  4. 戦略のプロセス全体が合理的で科学的で パラメータ最適化空間が大きく 実績も優れています

リスク分析

  1. 他の技術指標戦略と同様に,この戦略もシステム市場リスクに比較的敏感で,ブラック・スワン・イベントの場合,大きな損失を負う可能性があります.

  2. 計算プロセスの複雑さにより,不適切なパラメータ設定は計算の遅延を引き起こし,その結果実際のパフォーマンスに影響を与えます.科学的で合理的な設定を確保するために,パラメータを慎重にテストする必要があります.

  3. また,スムーズな処理は,市場のターニングポイントを間に合うように捉えることができず,機会を逃すかもしれない,遅れた取引信号につながります.スムーズなパラメータの設定はバランスをとらなければなりません.

オプティマイゼーションの方向性

  1. 適正なスムージングスキームを見つけるために,第一順位指数式スムージング,移動平均スムージングなど,さまざまな種類のスムージングアルゴリズムをテストすることができます.

  2. 適応性のあるパラメータ調整メカニズムが導入され,市場の状況に基づいてパラメータを動的に調整し,戦略の安定性を向上させることができます.

  3. ストップ・ロストと 収益戦略は 単一の損失のリスクを軽減し 同時に利益を固定するように設計することができます.

  4. 他の機械学習モデルと組み合わせてモデルポートフォリオを作成し,他のモデルを使用して取引シグナルをフィルターすることができます.

概要

この戦略は,価格信号のスムージングとエラーズサイバーサイクル指標の計算を通じて,取引シグナルをスムージングするエラーズサイバーサイクル取引戦略を設計する. 効果的にノイズをフィルタリングし,より信頼性の高い取引シグナルを生成することができます. 同時に,パラメータ空間は大きく,実際のパフォーマンスは良好です. 適応メカニズム,ストップ損失戦略,その他の最適化によって,戦略の安定性と有効性がさらに向上することができます.


/*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)

もっと