
この戦略は,平らな処理された価格信号を計算し,エラーズ (Ehlers) が提唱した循環指数理論と組み合わせて,取引信号を平らにするエラーズ循環取引戦略を設計する.この戦略は,市場騒音を効果的にフィルターし,より信頼性の高い取引信号を生成する.
原始価格信号srcを二次平滑処理して,平滑信号smoothを得る.
滑らかな信号に基づいて循環指数 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]
滑らかなパラメータである.
このうちα2は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)