2つの移動平均のクロスオーバー戦略

作者: リン・ハーンチャオチャン, 日付: 2023-12-01 18:18:16
タグ:

img

概要

この戦略は,二重移動平均のクロスオーバートレンドフォローシステムに基づいています. 急速な単純な移動平均 (SMA) とゆっくりとした重度の移動平均 (VWMA) を組み合わせ,両線が交差するときに取引信号を生成します.

低速SMAが低速VWMAを超えると,購入信号が生成される.低速SMAが低速VWMAを超えると,販売信号が生成される.この戦略はリスク管理のためにストップロスのメカニズムも採用している.

戦略の論理

この戦略の核心ロジックは,二重移動平均のクロスオーバーシステムにあります.特に,以下の技術指標を使用します.

  1. 簡単な移動平均値 (SMA):過去 n 日間の閉店価格の算術平均値で,最近の平均価格を反映する.
  2. 価格変動の速度は,価格変動に迅速に対応するより最近の価格により高い重みを割り当て,過去 n 日間の閉店価格の重度の平均値である.

低速SMAは価格変化に迅速に対応するための短い見直し期間があり,低速VWMAは平滑化するための長い見直し期間があります.短期および長期トレンドが同じ方向に並べると,低速VWMAの上の高速SMAは購入信号を生成し,下の横断は販売信号を生成します.

ストップ・ロスのメカニズムも設定します 価格が不利な方向に動くと 時間をかけて損失を削減します

利点分析

  1. 市場動向の変化を追跡するために迅速に対応する
  2. 効果的なストップ・ロストメカニズムによる良好な抽出制御
  3. シンプルで直感的で 理解し実行しやすい
  4. 異なる市場環境で最適化可能なパラメータ

リスク分析

  1. ダブルMA戦略は,牛市で誤った信号を与える傾向があります.
  2. 適切なパラメータ調整が失敗に繋がる
  3. 時折のフラッシュクラッシュは損失を引き起こす可能性があります

リスク管理

  1. 確認のために傾向フィルタリング指標を使用する
  2. パラメータ設定を最適化
  3. 単一の損失を合理的に制御するためのストップ損失戦略を採用する.

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

戦略は以下の側面で強化できる:

  1. RSI,ボリンジャー帯などの他の指標を組み込む 信号の精度を高める
  2. 周期間の移動平均の長さを最適化する
  3. 総額指標を組み合わせ,重要な資本流入点での取引
  4. バックテストの結果に基づいてパラメータを調整して最適を見つける
  5. 市場変動に基づいてストップを調整するダイナミックストップロスを採用する

結論

結論として,これは非常に実践的なトレンドフォロー戦略です. 取引信号を生成するために直感的な二重移動平均クロスオーバーを使用し,高速および遅い移動平均の調整によりトレンド変化を効果的に捉えます. ストップ損失メカニズムはまた,良いリスク管理を保証します. 補完指標とパラメータ最適化により,戦略はさらに優れた取引パフォーマンスを達成することができます.


/*backtest
start: 2023-11-23 00:00:00
end: 2023-11-28 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//strategy(title="Bitlinc Entry v0.1 VWMA / SMA / MRSI SQQQ 94M", overlay=true, initial_capital=10000, currency='USD')

strategy(title="Bitlinc Entry v0.1 VWMA / SMA / MRSI SQQQ 94M", 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 = close, title = "Simple MA Source")
maFastLength   = input(defval = 6, title = "Simple MA Length", minval = 1)
// long ma
maSlowSource   = input(defval = high, title = "VW MA Source")
maSlowLength   = input(defval = 7, title = "VW MA Period", minval = 1)


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


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

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, 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 ? color.green : color.red)

// === MRSI ===
//
//

basis = rsi(close, input(50))

ma1 = ema(basis, input(2))
ma2 = ema(basis, input(27))

oversold = input(32.6)
overbought = input(63)

//plot(ma1, title="RSI EMA1", color=blue)
//plot(ma2, title="RSI EMA2", color=yellow)

obhist = ma1 >= overbought ? ma1 : overbought
oshist = ma1 <= oversold ? ma1 : oversold

//plot(obhist, title="Overbought Highligth", style=columns, color=color.maroon, histbase=overbought)
//plot(oshist, title="Oversold Highligth", style=columns, color=color.yellow, histbase=oversold)

//i1 = hline(oversold, title="Oversold Level", color=white)
//i2 = hline(overbought, title="Overbought Level", color=white)

//fill(i1, i2, color=olive, transp=100)

// === LOGIC ===
enterLongMrsi = crossover(ma1, oversold)
exitLongMrsi = crossover(ma1, overbought)

// Entry //
strategy.entry(id="MRSI Long Entry", long=true, when=window() and enterLongMrsi)
strategy.entry(id="MRSI Short Entry", long=false, when=window() and exitLongMrsi)

//hline(50, title="50 Level", color=white)

もっと