双動平均追跡ストップ損失戦略

作者: リン・ハーンチャオチャン開催日:2024年2月5日 13:45:51
タグ:

img

概要

この戦略は,高速移動平均値がスロー移動平均値を超えると購入信号を生成する.同時に,平均値の真の範囲に基づいて,販売信号を設定するために,ストップ損失価格を計算する.この戦略は,市場動向を効果的に追跡し,利益を得るときに適時に損失を削減することができます.

原則

  1. Fast Moving Average (EMA): 価格変動に迅速に対応する12日間指数関数移動平均値.
  2. スロー・ムービング・アベア (SMA): 中長期トレンドを示す45日間のシンプル・ムービング・アベア.
  3. 速いMAが遅いMAを横切るときに買い信号が生成される.
  4. ストップ・ロスの基準として計算されるのは15日間の平均真差 (ATR) です.
  5. ATR (例えば 6 x ATR) に基づいて後続ストップ損失幅を設定し,ストップ価格をリアルタイムで更新します.
  6. ストップ・ロスの値を下回るときにセール・シグナルが生成されます

この戦略は,トレンドフォローとストップ損失管理の利点を組み合わせます.中長期トレンドを追跡し,ストップ損失を通じて単一の取引損失を制御することができます.

利点分析

  1. MAコンボは,動向を効果的に特定し,信号の信頼性を高めます.
  2. ATR ベースのストップ損失はストップ価格を合理化し過度に敏感性を防ぐ.
  3. 戦略の論理はシンプルで パラメータは柔軟です

リスク分析

  1. 短期的なチャンスを逃す可能性があります.
  2. 過剰な緩やかなストップ損失は収益性を損なう.
  3. 過剰なストレッチストップ損失は取引頻度と手数料を増加させる.
  4. 変動する波動性は,ATRパラメータの安定性に影響を与える可能性があります.

ストップ損失幅をバランスするためにパラメータを最適化できます.入力のタイミングを改善するために他の指標も組み合わせることができます.

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

  1. 最適なMAsを見つけるためにより多くのパラメータ組み合わせをテストします.
  2. ATR マルチプリキュアを 特定のストック特性に合わせて調整する.
  3. 必要な取引を避けるため,ボリューム指標のようなフィルタリング条件を追加します.
  4. パラメータの安定性をテストするために 履歴データを蓄積します

結論


/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//created by XPloRR 24-02-2018

strategy("XPloRR MA-Buy ATR-MA-Trailing-Stop Strategy",overlay=true, initial_capital=1000,default_qty_type=strategy.percent_of_equity,default_qty_value=100)

testStartYear = input(2005, "Start Year")
testStartMonth = input(1, "Start Month")
testStartDay = input(1, "Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2050, "Stop Year")
testStopMonth = input(12, "Stop Month")
testStopDay = input(31, "Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriodBackground = input(title="Background", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

emaPeriod = input(12, "Exponential MA")
smaPeriod = input(45, "Simple MA")
stopPeriod = input(12, "Stop EMA")
delta = input(6, "Trailing Stop #ATR")

testPeriod() => true

emaval=ema(close,emaPeriod)
smaval=sma(close,smaPeriod)
stopval=ema(close,stopPeriod)
atr=sma((high-low),15)

plot(emaval, color=blue,linewidth=1)
plot(smaval, color=orange,linewidth=1)
plot(stopval, color=lime,linewidth=1)

long=crossover(emaval,smaval) 
short=crossunder(emaval,smaval)

//buy-sell signal
stop=0
inlong=0
if testPeriod()
    if (long and (not inlong[1]))
        strategy.entry("buy",strategy.long)
        inlong:=1
        stop:=emaval-delta*atr
    else
        stop:=iff((nz(emaval)>(nz(stop[1])+delta*atr))and(inlong[1]),emaval-delta*atr,nz(stop[1]))
        inlong:=nz(inlong[1])
        if ((stopval<stop) and (inlong[1]))
            strategy.close("buy")
            inlong:=0
            stop:=0
else
    inlong:=0
    stop:=0
plot(stop,color=green,linewidth=1)


もっと