SMAクロスオーバー取引戦略

作者: リン・ハーンチャオチャン開催日:2023年12月25日 (火) 16:03:48
タグ:

img

概要

この戦略は,シンプル・ムービング・アベレージ (SMA) のゴールデン・クロスとデッド・クロス原則に基づいて設計されている.この戦略は,2つのSMA,すなわち高速SMAと遅いSMAを使用している.高速SMAが低速SMAを下から越えると,購入信号が生成される.高速SMAが低速SMAを下から越えると,販売信号が生成される.

戦略の論理

この戦略は主に2つのSMA指標線に依存している.高速SMAは短い期間を持ち,価格変化をより早く捉えることができる.遅いSMAは長い期間を持ち,いくつかのノイズをフィルターすることができます.高速SMAが下からゆっくりとしたSMAの上に横切ると,短期上昇速度がより速くなり,購入信号を生成することを示します.高速SMAが上からゆっくりとしたSMA以下に横切ると,短期減少速度がより速くなり,販売信号を生成することを示します.

異なるSMA期間のパラメータを設定することで,戦略パラメータは,異なる市場環境に適応するために一定程度調整することができます.同時に,戦略は,歴史的なデータで戦略パラメータをテストするためのバックテストの時間範囲を設定することもできます.

利点分析

  • シンプルな論理でよく知られているSMA指標を使用します
  • 高い適応性のある,調整可能なSMA期間のパラメータ
  • パラメータ最適化のためにバックテストの時間範囲を設定できます
  • クロスオーバーを使ってシグナルを生成すると,一定のフィルタリング効果があり,間違った取引を減らすことができます.

リスク分析

  • 短期の機会を逃す可能性があります.
  • トレンドの勢いを決定できないため,信号生成の効率は不安定である可能性があります.
  • 誤ったSMA周期パラメータ設定は誤った信号を増やす.

上記のリスクに対処するために,次の措置が講じられます.

  • 適度に短縮して,感受性を向上させる.
  • 傾向の勢いを決定するために他の指標を組み込む
  • パラメータ最適化ツールを使用して最適なパラメータ組み合わせを見つけます

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

  • 単一の損失を制御するストップ損失戦略を追加
  • ポジション管理メカニズムを追加する
  • 他の技術指標と組み合わせる
  • 動的パラメータ最適化を達成するために機械学習アルゴリズムを追加する

概要

これは典型的なトレンドフォロー戦略である.ダブル・ムービング・平均クロスオーバーのシンプルな原則を適用することで,パラメータが適切に設定された場合,良い追跡結果を得ることができます.しかし,SMA自体は一定の遅れ効果を持ち,トレンドの勢いを決定することはできません.したがって,実際の応用では,他の補助ツールが導入され,指標組み合わせを形成し,自動パラメータ最適化とリスク管理手段を補完し,戦略を安定的に収益化する必要があります.


/*backtest
start: 2023-12-17 00:00:00
end: 2023-12-18 19:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//strategy(title="MA Cross Entry & Exit w/Date Range", overlay=true, initial_capital=10000, currency='USD')

strategy(title="SMA Cross Entry & Exit Strategy", overlay=true)

// Credit goes to this developer for the "Date Range Code"
// https://www.tradingview.com/script/62hUcP6O-How-To-Set-Backtest-Date-Range/


// === GENERAL INPUTS ===
// short ma
maFastSource   = input(defval = open, title = "Fast MA Source")
maFastLength   = input(defval = 36, title = "Fast MA Period", minval = 1)
// long ma
maSlowSource   = input(defval = open , title = "Slow MA Source")
maSlowLength   = input(defval = 46, title = "Slow MA Period", minval = 1)

// === SERIES SETUP ===
// a couple of ma's..
maFast = sma(maFastSource, maFastLength)
maSlow = sma(maSlowSource, maSlowLength)


// === PLOTTING ===
fast = plot(maFast, title = "Fast MA", color = red, linewidth = 2, style = line, transp = 30)
slow = plot(maSlow, title = "Slow MA", color = green, linewidth = 2, style = line, transp = 30)

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

// === LOGIC ===
//enterLong = crossover(maFast, maSlow)
//exitLong = crossover(maSlow, maFast)
enterLong = crossover(maSlow, maFast)
exitLong = crossover(maFast, maSlow)


// Entry //
strategy.entry(id="Long Entry", long=true, when=window() and enterLong)
strategy.entry(id="Short Entry", long=false, when=window() and exitLong)

// === FILL ====

fill(fast, slow, color = maFast > maSlow ? green : red)

もっと