
この戦略は,二重移動平均の交差を取引信号として利用し,ATRのストップと組み合わせてトレンドを追跡する取引を行う.その核心思想は,短期移動平均で長期移動平均を穿越するときに多めにし,下を穿越するときに空いてし,同時にATRを使用してストップを設定し,ダイナミックにトレーリングストップを行うことである.
この戦略は,主に2つの移動平均のセットによってトレンドの方向を判断する.急速な移動平均の長さは25日であり,遅い移動平均の長さは100日である.急速な移動平均の上に遅い移動平均を横断すると買いの信号が生じ,急速な移動平均の下のゆっくりとした移動平均を横断すると売りの信号が生じます.
部分的な偽信号をフィルターするために,策略は,交差回数計crossCountを追加した. 信号は,高速移動平均が,lookback期間 (デフォルト25日) 内の交差回数がmaxNoCross (デフォルト10回) よりも少ない場合にのみ,トリガーされる.
さらに,戦略は,最初のシグナルが送信された後に,価格が2つの移動平均の間の間に再入った場合,シグナルが確認されるという確認メカニズムを追加しました.
入場後,戦略はATR指標を使用して止損距離を設定する. ATRは,過去一定期間の価格変動の範囲を測定し,ここでATRの14倍で止損距離を設定する. 止損線は,価格の動きとともに浮動追跡する.
この戦略の利点は以下の通りです.
双移動平均と交差フィルタリングの組み合わせにより,偽信号を効果的にフィルターして,より強力なトレンドを捉えることができます.
偽の突破口の空白を防ぐために,確認メカニズムを増やす.
ATRの浮動追跡ストップは,利潤を最大限に引き上げ,過大撤収を防止します.
簡単な最適化パラメータが少なく,実行しやすい.
デジタル通貨と従来の基礎市場を含む多種多様な市場で適用できます.
複数の指標を総合的に利用して戦略を構築することで,戦略はより堅牢になります.
この戦略には以下のリスクがあります.
動平均は,震動の整合期に頻繁に交差し,複数の損失を引き起こす可能性があります.
ATRパラメータの設定を間違えた場合,ストップダメージが過度に緩やかまたは過度に緊密になる可能性があります.
巨大な空飛ぶやギャップは,直接停止を誘発する可能性があります.
価格の急激な波動による重大事件によって,直接的な損失が発生する可能性があります.
移動平均のパラメータが不合理である場合,トレンドを逃したり,偽信号を多く生成したりする可能性があります.
最近の価格変動の範囲の変化は,ATRのストップダメージ距離の不適合を引き起こす可能性があります.
この戦略は,以下の点でさらに最適化できます.
移動平均のパラメータを最適化して,より適切な組み合わせを見つけます.異なる周期パラメータと重力移動平均をテストすることができます.
異なるATR周期パラメータをテストして,よりよい止損距離を見つけます.
取引量増幅,振動指数などの追加のフィルタリング条件を追加し,信号品質を向上させる.
動向を判断する指標を組み合わせて,震動の状況に巻き込まれるのを避ける.
機械学習のアルゴリズムを追加し,ヒストリックデータ訓練により,パラメータの組み合わせを自動的に最適化します.
ショートラインのノイズに惑わされないように,大レベルグラフで確認をさらに探してください.
利回りポジションの減仓ルールを設定し,徐々に利回りをロックします.
この戦略は,双移動平均の交差,トレンドフィルタリング,確認機構およびATR動的停止などの複数の技術指標を使用しています.パラメータの最適化とリスク管理の面でも改善の余地がありますが,取引の考え方はシンプルで,複製を容易に実施し,より堅牢なトレンド追跡戦略です.
/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("QuantCat Intraday Strategy (15M)", overlay=true)
//MA's for basic signals, can experiment with these values
fastEMA = sma(close, 25)
slowEMA = sma(close, 100)
//Parameters for validation of position
lookback_value = 25
maxNoCross=10 //value used for maximum number of crosses on a certain MA to mitigate noise and maximise value from trending markets
//Amount of crosses on MA to filter out noise
ema25_crossover = (cross(close, fastEMA)) == true ? 1 : 0
ema25_crossover_sum = sum(ema25_crossover, lookback_value) ///potentially change lookback value to alter results
crossCount = (ema25_crossover_sum <= maxNoCross)
//Entries long
agrLong = ((crossover(fastEMA, slowEMA)) and (crossCount == true)) ? true : false
consLong = ((close < fastEMA) and (close > slowEMA) and (fastEMA > slowEMA) and (crossCount == true)) ? true : false
//Entries short
agrShort = ((crossunder(fastEMA, slowEMA)) and (crossCount == true)) ? true : false
consShort = ((close > fastEMA) and (close < slowEMA) and (fastEMA < slowEMA) and (crossCount == true)) ? true : false
//ATR
atrLkb = input(14, minval=1, title='ATR Stop Period')
atrRes = input("15", title='ATR Resolution')
atr = request.security(syminfo.tickerid, atrRes, atr(atrLkb))
//Strategy
longCondition = ((agrLong or consLong) == true)
if (longCondition)
strategy.entry("Long", strategy.long)
shortCondition = ((agrShort or consShort) == true)
if (shortCondition)
strategy.entry("Short", strategy.short)
//Stop multiplier
stopMult = 4
//horizontal stoplosses
longStop = na
longStop := shortCondition ? na : longCondition and strategy.position_size <=0 ? close - (atr * stopMult) : longStop[1]
shortStop = na
shortStop := longCondition ? na : shortCondition and strategy.position_size >=0 ? close + (atr * stopMult) : shortStop[1]
//Strategy exit functions
strategy.exit("Long ATR Stop", "Long", stop=longStop)
strategy.exit("Short ATR Stop", "Short", stop=shortStop)
//Plots
redgreen = (fastEMA > slowEMA) ? green : red
p1 = plot(fastEMA, title="Fast EMA", color=redgreen, linewidth=2)
p2 = plot(slowEMA, title="Slow EMA", color=redgreen, linewidth=2)
fill(p1, p2, color=redgreen)
s1 = plot(longStop, style=linebr, color=red, linewidth=2, title='Long ATR Stop')
s2 = plot(shortStop, style=linebr, color=red, linewidth=2, title='Short ATR Stop')
fill(p2, s1, color=red, transp=95)
fill(p2, s2, color=red, transp=95)