動的移動平均に基づくトレンドフォロー戦略


作成日: 2024-01-02 10:44:53 最終変更日: 2024-01-02 10:44:53
コピー: 0 クリック数: 559
1
フォロー
1621
フォロワー

動的移動平均に基づくトレンドフォロー戦略

概要

この戦略は,動的均線指標に基づいて,価格トレンドのリアルタイム追跡を実現し,均線の突破によって取引シグナルを発信する.戦略の優点は,パラメータの設定が簡単で,シグナル判断が明確で,中長期線のポジションに適している.

戦略原則

この戦略は,ALMA,EMA,SMAなどの複数のタイプの均線を含むダイナミック均線指標を使用する.基本原則は,価格が平均線を突破するとき,多めにすること;価格が平均線を突破するとき,空白すること.すなわち,均線を価格トレンドの晴雨表として使用し,方向転換が起こるときに取引信号を発する.

具体的には,戦略は高低点形成の均線を使用し,その後,低点均線を多信号線として,高点均線を空調信号線として使用する. 閉盘価格が低点均線より高いときは,多行; 閉盘価格が高点均線より低いときは,空調する.

平均線指数を使って価格の動向を判断し,突破原理と組み合わせて信号を発信し,シンプルで実用的なトレンド追跡戦略を形成する.

戦略的優位性

  • 平均線指標を用いた判断,パラメータ設定がシンプル,操作が簡単
  • 信号判断のルールは明確で,偽信号は発生しません.
  • 自由に選択可能な均線アルゴリズム,市場の変化に対応する柔軟性
  • 平均線パラメータを調整して,異なる周期のトレンドに対応
  • 複数の時間枠で信号を検証し,信頼性を向上させる

リスクと解決

  • 平均線指標が遅れているため,一部の機会を逃している可能性がある.
    • 平均周期を適切に短縮するか,指数移動平均EMAを使用する
  • 短期的な大きな震動,停損リスク
    • ストップ幅を適切に緩め,十分な移動空間を確保する.
  • 長期にわたってリスクを抱え続けると 早期に止められない可能性もある
    • 他の指標と組み合わせた判断で,高さや低さを追うのを避ける

戦略の最適化

  • 平均線アルゴリズムとパラメータを異なる品種特性に合わせて調整する
  • 戦略の効果を高めるために,副指標の判断を増やす
  • 障害防止装置の追加
  • 複数の時間枠での信号信頼性を評価する
  • 機械学習の組み合わせで より良いパラメータを 探す

要約する

この戦略は,均線指標を使用して価格トレンドの方向を判断し,突破理論に基づいて取引信号を発信する. 利点は,使いやすいこと,中長期線に適したポジションを保持し,パラメータを介して市場の変化に適応する調整が可能である. 短期的な震動と長期にわたる保有によるリスクを予防するために注意が必要であり,損失ストップを介して解決することができる. 戦略の効果を高めるためにより多くの指標を使用すること,およびマシンの学習を使用してより良いパラメータを見つけるという最適化のための余地がある.

ストラテジーソースコード
/*backtest
start: 2023-12-02 00:00:00
end: 2024-01-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Baseline Strategy - evo", shorttitle="Baseline", overlay=true)

//INPUTS
mat =               input("ALMA", "MA Type", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "ALMA"])
baseline =          input(55, title="MA Length")
src =               input(ohlc4, title="Closing Source")

offset =            input(0.85, step=0.05, title="Offset (alma only)")
sigma =             input(10, title="Sigma (alma only)")

useCurrentRes =     input(true, title="Use Current Resolution")
resCustom =         input("1440", title="Timeframe")

showsignals =       input(false, title="Show Signals ?")

//BASELINE
baselinehigh = 

 mat=="SMA" ? sma(high,baseline) : 
 mat=="EMA" ? ema(high,baseline) : 
 mat=="WMA" ? wma(high,baseline) : 
 mat=="HMA" ? wma(2*wma(high, baseline/2)-wma(high, baseline), round(sqrt(baseline))) : 
 mat=="VWMA" ? vwma(high,baseline) : 
 mat=="RMA" ? rma(high,baseline) :
 mat=="ALMA" ? alma(high, baseline, offset, sigma) : na

baselinelow = 

 mat=="SMA" ? sma(low,baseline) : 
 mat=="EMA" ? ema(low,baseline) : 
 mat=="WMA" ? wma(low,baseline) : 
 mat=="HMA" ? wma(2*wma(low, baseline/2)-wma(low, baseline), round(sqrt(baseline))) : 
 mat=="VWMA" ? vwma(low,baseline) : 
 mat=="RMA" ? rma(low,baseline) : 
 mat=="ALMA" ? alma(low, baseline, offset, sigma) : na

//RESOLUTION
res =               useCurrentRes ? timeframe.period : resCustom

mtfhigh =           security(syminfo.tickerid, res, baselinehigh)
mtflow =            security(syminfo.tickerid, res, baselinelow)

//PLOTS
plot(mtfhigh, color=color.navy, linewidth=2, transp=0, title="Baseline High")
plot(mtflow, color=color.navy, linewidth=2, transp=0, title="Baseline Low")

long =              src > mtfhigh
short =             src < mtflow

barcolor(long ? #ffe0b2 : short ? #2a2e39 : not long and not short ? #b09e82 : na, title="BaseLine BarColor")

signal = 0
signal := long ? 1 : short ? 2 : nz(signal[1])

plotshape(showsignals ? (signal != signal[1] and long ? mtflow : na) : na, title="Long", location=location.absolute, size=size.small, style=shape.labelup, text="Long", textcolor=color.black, transp=40, color=#00ff00)
plotshape(showsignals ? (signal != signal[1] and short ? mtfhigh : na) : na, title="Short", location=location.absolute, size=size.small, style=shape.labeldown, text="Short", textcolor=color.white, transp=40, color=#ff0000)

alertcondition(signal != signal[1], title="Trend Change !", message="Trend Change !")

if (long)
    strategy.entry("Long", strategy.long)
if (short)
    strategy.entry("Short", strategy.short)