ダイナミックなSMMAとSMAクロスオーバー戦略

作者: リン・ハーンチャオチャン,日付: 2024-02-02 11:38:08
タグ:

img

概要

この戦略は,50期スムーズムービング・アベア (SMMA) と20期シンプルムービング・アベア (SMA) の間のクロスオーバー・シグナルを使用して,エントリーと出口を決定する.高速SMA線がスローSMMA線を越えると購入信号を生成し,SMAがSMMA線を下回ると販売信号を生成する.同時に,戦略は,利益とリスク制御をロックするために固定取利益とダイナミックストップ損失レベルをプリセットする.

戦略の論理

  1. 50 期間の SMMA と 20 期間の SMA を計算し,グラフ化します.
  2. SMAがSMMAを下から越えると,買い信号が生成される.また,SMAがSMMAを下から越えると,売り信号が生成される.
  3. 購入・販売・シグナルが発生すると,それぞれ"購入"と"販売"のポジションを設定します.
  4. 各ポジションに 150 ティックの固定得益レベルを設定します
  5. シグナルバーの次のバーの閉じる価格で動的なストップ・ロスのレベルを設定します.
  6. 価格が利得値に達すると,利得値が発生します.価格がストップ・ロスのレベルに達すると,ストップ・ロスは起動します.

優位性

  1. 二重移動平均戦略は,単純な原則で操作し,理解しやすい.
  2. SMMAは,傾向をより良く把握するための SMAに対する改善です.
  3. 異なる時期の SMA と SMMA を組み合わせることで,トレンドを把握しながらノイズをフィルターすることができます.
  4. ダイナミックストップロスの採用により,市場の変化に基づいてストップレベルを調整してリスクを効果的に制御できます.
  5. 利益のレベルを事前に設定することで 利益を適時に確保できます

リスク

  1. 双向移動平均戦略は,誤った信号を生成し,ウィップソーされる傾向があります.過剰取引を避けるためにシグナルフィルタリングを使用できます.
  2. 固定得益は強いトレンドを見逃す可能性があります.移動得益または得益比に基づく得益を考慮することができます.
  3. ダイナミックストップロスは,不安定な条件で市場価格にあまりにも近づく可能性があります.適切なストップロスの範囲の拡大を検討する必要があります.
  4. 製品と時間枠の違いには注意が必要です

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

  1. 最適な値を見つけるために,異なるパラメータ (サイクル周期,フィルター基準など) の組み合わせを試験する.

  2. フィルター信号に 音量ピークなどの要素を 組み込むことです

  3. 最適なパラメータを見つけるためにパラメータ最適化ツールを使用します.

  4. 利回りや利回り率に基づく出口など 他の利回り方法の統合を検討します

  5. 市場変動に基づいて動的ストップ損失範囲を計算する.

結論

この戦略は比較的シンプルな論理を持ち,二重移動平均値を通じてトレンド方向を把握する. 固定取利益とダイナミックストップロスの柔軟な使用は,利益とリスク管理のためにリスクと報酬のバランスをとります. さらにパラメータと論理の最適化は,この戦略を幅広い市場状況に適応させることができます.


/*backtest
start: 2023-01-26 00:00:00
end: 2024-02-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("50 SMMA and 20 SMA Crossover with TP and SL", overlay=true)

// Define 50 SMMA
smma50 = sma(close, 50)

// Define 20 SMA
sma20 = sma(close, 20)

// Plotting the SMMA and SMA
plot(smma50, color=color.blue, title="50 SMMA")
plot(sma20, color=color.red, title="20 SMA")

// Initialize TP and SL variables
tp = 150
var float sl_price = na

// Buy Signal
buySignal = crossover(sma20, smma50)
strategy.entry("Buy", strategy.long, when = buySignal)
strategy.exit("Take Profit/Stop Loss", from_entry="Buy", profit=tp, loss=sl_price)

// Sell Signal
sellSignal = crossunder(sma20, smma50)
strategy.entry("Sell", strategy.short, when = sellSignal)
strategy.exit("Take Profit/Stop Loss", from_entry="Sell", profit=tp, loss=sl_price)

// Update stop loss level on every crossover
if (buySignal or sellSignal)
    sl_price := close[bar_index + 1]

// Plot Stop Loss level
plotshape(series=sl_price != na, title="Stop Loss Level", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)


もっと