シグナル平滑化に基づくエルスサイクル戦略


作成日: 2024-02-19 10:42:34 最終変更日: 2024-02-19 10:42:34
コピー: 2 クリック数: 627
1
フォロー
1617
フォロワー

シグナル平滑化に基づくエルスサイクル戦略

概要

この戦略は,平らな処理された価格信号を計算し,エラーズ (Ehlers) が提唱した循環指数理論と組み合わせて,取引信号を平らにするエラーズ循環取引戦略を設計する.この戦略は,市場騒音を効果的にフィルターし,より信頼性の高い取引信号を生成する.

戦略原則

  1. 原始価格信号srcを二次平滑処理して,平滑信号smoothを得る.

  2. 滑らかな信号に基づいて循環指数 cycle を計算する.計算方法は: cycle := (1 - .5 alpha) (1 - .5 alpha) (smooth - 2 smooth[1] + smooth[2]) + 2 (1 - alpha) cycle[1] - (1 - alpha) (1 - alpha) * cycle[2]

滑らかなパラメータである.

  1. 循環指数に一段指数平滑を行い,最終取引信号signal. 計算方法は: signal := alpha2 cycle + (1 - alpha2) nz(signal[1])

このうちα2は1次滑り参数である。

  1. シグナルがシグナルを通過する時[1]時より多くする;ときsignal下穿越signal[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)