一般的な移動平均クロスオーバー戦略


作成日: 2023-11-03 17:23:54 最終変更日: 2023-11-03 17:23:54
コピー: 0 クリック数: 707
1
フォロー
1617
フォロワー

一般的な移動平均クロスオーバー戦略

概要

移動平均線交差戦略は,非常に古典的でよく使用される技術分析戦略である.この戦略の核心思想は,異なる期間の移動平均線間の交差を買い売り信号として利用することである.短期移動平均線がより長い移動平均線を上から下を通るとき,買いの信号を生成し,短期移動平均線がより長い移動平均線を上から下を通るとき,売りの信号を生成する.

戦略原則

この戦略は,入力設定の入力移動平均のタイプ (SMA,EMA,WMA,RMA) と周期長,および反測の時間範囲を入力します.

変数関数の中で異なるタイプの移動平均を計算する. 計算された移動平均は,ma変数によって保存される.

クローズ価格がマを突破すると,買入シグナルが生成され,クローズ価格がマを突破すると,売出シグナルが生成されます.

ストップを設定するために,atrを使って14サイクル間の平均実際の波動幅を計算する. 通過点を基準として,上下加減2倍atrをストップ範囲として使う.

具体的には以下の通りです.

多頭入場:close上をmaで回測時間中に,止損点は入場点closeとする 多頭出場:closeの下穿 ma 減2倍atr 止損出場,または最高価格が入場点を超えたclose 加2倍atr 止止出場 空頭入場:close 下穿 ma で,回測時間において,止損点は入場点close 空頭出場:close上では,ma+2倍atrで出場を止めて,または入場点より低い最低値close+2倍atrで出場を止めて

戦略的優位性

  1. 戦略はシンプルで明快で,理解し,実行しやすい.
  2. 幅広い用途,異なる市場と品種に適用
  3. パラメータの設定は柔軟で,移動平均のタイプと周期は調整できます.
  4. ATR ストップはリスク管理に役立ちます

戦略リスク

  1. 移動平均戦略は,頻繁に取引し,利益の余地を減らすために,ストップを容易にする
  2. 移動平均は,大きな揺れのある状況で,誤った信号を発生させる可能性が高い.
  3. ATRの止損範囲は,大きな損失を防止する効果を得られないほど大きく,または小さくなります.

リスクの最適化には,以下の方法があります.

  1. 移動平均の周期を調整し,より長い周期平均を採用
  2. フィルタリング条件を増やして,地震の時に頻繁に取引を避ける
  3. ATRのパラメータを最適化するか,他の止損方法を採用する
  4. トレンド指数と大トレンドを組み合わせ,逆行操作を避ける

戦略最適化の方向性

この戦略は以下の点で最適化できます.

  1. 取引量,波動率などのフィルタリング条件を追加して,不合理な突破を避ける
  2. 市場変動に合わせて,自主的なATRのストップを適用します.
  3. Stoch,RSIなどの指標と組み合わせた多要素検証により,信号の質が向上します.
  4. トレンド判断を高め,逆操作を避ける
  5. 長期の損失を回避するためにEXITを時間的に採用する
  6. 移動平均周期パラメータを最適化して,最適なパラメータの組み合わせを探します.

要約する

移動平均線交差策略は,非常に典型的でよく使用される技術分析策略である.この策略の核心構想はシンプルで,容易に実装され,各市場に適用され,量化取引の入門策略の1つである.しかし,この策略には,頻繁にシグナルを生成し,容易な止損など,いくつかの問題がある.適切な最適化によって,この策略の現場パフォーマンスを大幅に向上させることができる.全体として,移動平均線交差策略は,非常に良い戦略開発の枠組みを提供し,量化取引策略の学習の基石である.

ストラテジーソースコード
/*backtest
start: 2023-10-03 00:00:00
end: 2023-11-02 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("MA Cross Strategy", overlay=true,commission_value = 0.1)

type = input(defval = "WMA", title = "MA Type: ", options=["RMA", "SMA", "EMA", "WMA"])

length = input(28)
source = close



// === INPUT BACKTEST RANGE ===
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear  = input(defval = 2000, title = "From Year", minval = 2000)

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



variant(type, src, len) =>
    v1 = sma(src, len)                                                  // Simple
    v2 = ema(src, len)                                                  // Exponential
    v5 = wma(src, len)                                                  // Weighted
    v7 = rma(src, len)                                                  // Smoothed
    type=="EMA"?v2 : type=="WMA"?v5 : type=="RMA"?v7 : v1
ma = variant(type,source, length)


atr = security(syminfo.tickerid, "D", atr(14))

range = valuewhen(cross(close,ma), (atr*2), na)

ep = valuewhen(cross(close,ma), close, na)

plot(ma,color=ma>ma[1]?color.blue:color.red,transp=0,linewidth=1)
plot(ep,color=#2196f3,transp=100,trackprice=true, offset=-9999)
plot(ep+range,color=#2196f3,transp=100,trackprice=true, offset=-9999)
plot(ep-range,color=#2196f3,transp=100,trackprice=true, offset=-9999)

strategy.entry("Long Entry", true, when = crossover(close,ma)  and window() , stop  = ep ) 
strategy.exit("Long Exit", "Long Entry", stop  = ep-range) 
strategy.exit("Long Exit", "Long Entry", when = high > ep+range ,stop = ep[1] ) 

strategy.entry("Short Entry", false, when = crossunder(close,ma)  and window() , stop  = ep ) 
strategy.exit("Short Exit", "Short Entry", stop  = ep+range) 
strategy.exit("Short Exit", "Short Entry", when = low < ep-range ,stop = ep[1] )