シンプルな二重移動平均クロスオーバー取引戦略に基づく


作成日: 2023-12-25 16:03:48 最終変更日: 2023-12-25 16:03:48
コピー: 0 クリック数: 643
1
フォロー
1623
フォロワー

シンプルな二重移動平均クロスオーバー取引戦略に基づく

概要

この戦略は,単純な移動平均 ((SMA)) の金叉死叉原理に基づいて設計されている.戦略は,速いSMAと遅いSMAの2つのSMAを使用し,速いSMAが下方から遅いSMAを突破すると,買いのシグナルを生成し,速いSMAが上方から下方から遅いSMAを突破すると,売りのシグナルを生成する.

戦略原則

この戦略は主に2つのSMA指標ラインに依存している.その中,急速なSMAの間は短い設定で,価格の変化をより早く捉えることができる;ゆっくりとしたSMAの間は長い設定で,部分的なノイズをフィルターすることができる.速いSMAが下方からゆっくりとしたSMAを交差するとき,短期価格がより速く上昇し,買入シグナルを生成することを意味する.速いSMAが上方から下方からゆっくりとしたSMAを交差するとき,短期価格がより速く下落し,販売シグナルを生成することを意味する.

異なるSMA周期パラメータを設定することにより,戦略のパラメータを異なる市場環境に適した程度に調整できます. 同時に,この戦略は,裏付けの時間範囲を設定し,歴史的なデータ上で戦略パラメータをテストすることを可能にします.

優位分析

  • SMAの基本は簡単でわかりやすいものです
  • 調整可能なSMA周期パラメータ,適応性強
  • 回測時間範囲を設定して,パラメータを最適化できます.
  • 交差方式で信号を生成し,突破信号にフィルタリング作用があり,誤取引を減らす.

リスク分析

  • SMA自身は後退しており,ショートラインの機会を逃している可能性がある.
  • 傾向の強さを判断できず,信号の効果が不安定になる可能性がある
  • SMA周期パラメータが正しく設定されていなければ,誤信号が増加します.

このリスクに対して,以下の措置を講じることができます.

  • 適切なSMAサイクルを短縮し,感受性を高めること
  • 他の指標と組み合わせたトレンドの強さ
  • パラメータ最適化ツールで最適なパラメータの組み合わせを探します.

最適化の方向

  • 単一損失を抑えるためのストップ・ロース戦略を強化する
  • ポジション管理機構の追加
  • 他の技術指標と組み合わせる
  • 機械学習アルゴリズムを追加し,動態パラメータ最適化を実現する.

要約する

この戦略は,典型的なトレンド追跡戦略の1つである. シンプルな二均線交差原理を適用し,パラメータを適切な条件で設定すると,優れた追跡効果を得ることができる. しかし,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)