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

作者: リン・ハーンチャオチャン,日付: 2023年11月3日 17:23:54
タグ:

img

概要

移動平均クロスオーバー戦略は,非常に古典的で一般的に使用される技術分析戦略である.この戦略の基本的なアイデアは,異なる期間の移動平均間のクロスオーバーを取引信号として使用することです.短期移動平均が下から長期移動平均を上回ると,購入信号が生成されます.短期移動平均が上から長期移動平均を下に回ると,販売信号が生成されます.

戦略の論理

この戦略は,入力を使用して移動平均の種類 (SMA,EMA,WMA,RMA) と期間,およびバックテストの時間帯を設定します.

変数関数では様々な種類の移動平均が計算され,計算された移動平均はma変数に保存されます.

閉じる価格がmaを超えると,買い信号が生成されます.閉じる価格がmaを下回ると,売り信号が生成されます.

ストップ・ロスを設定するには, 14 期間の平均真の範囲 atr を計算します.クロスオーバーポイントを基準として,ストップ・ロスの範囲として 2 倍 atr を加算または減算します.

具体的エントリーと出口ロジックは次のとおりです

長いエントリー:ma の上,バックテストの時間範囲内で接近点を横切る.ストップ・ロストポイントはエントリー・ポイントを接近する.
ロング エクシート:ストップ ロス エクシートでは,ma 未満のクロスを2倍割る,またはメリット エクシートでは,最高価格がエントリーポイントを2倍割る.

短入口:ma未満でバックテスト時間範囲内での近点交差,ストップ損失ポイントは入口点に近い
ショート エクシート:ストップ ロス エクシートでは,ma+2x atrの上のクロスを閉じる.または,メリット エクシートでは,エントリー ポイントより低い最低価格を閉じる-2x atrを閉じる.

戦略 の 利点

  1. 戦略のアイデアは単純で明確で,理解し実行しやすい
  2. 広く使用され,異なる市場や製品に適しています
  3. 柔軟なパラメータ設定,調整可能な移動平均の種類と期間
  4. ATRストップロスを利用してリスクを制御する

戦略 の リスク

  1. 移動平均戦略は頻繁に取引とストップロスを生み出し,利益の可能性を低下させる傾向があります
  2. 非常に不安定な市場では,移動平均値が誤解を招く信号を生む可能性があります
  3. ATRストップ損失範囲は,あまりにも広いまたは狭すぎるかもしれない,巨大な損失を防ぐのに失敗

リスクに対処するために,次の側面で最適化を行うことができます:

  1. 移動平均期間を調整し,より長い期間移動平均を使用
  2. 波動性のある市場での頻繁な取引を避けるためにフィルター条件を追加する
  3. ATR パラメータを最適化するか,他のストップ・ロスト方法を使用する
  4. トレンド指標を組み合わせて全体的なトレンドを決定し,反トレンド取引を避ける

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

この戦略は,次の側面で最適化できます.

  1. 無理的なブレイクを避けるために,ボリューム,揮発性などのフィルター条件を追加します.
  2. 適応型ATRストップ損失を使用し,ストップ損失範囲は市場の変動に変化します.
  3. 信号の質を改善するために,多要素確認のためのストック,RSIおよび他の指標を組み合わせる
  4. 逆トレンド取引を避けるためにトレンド決定を追加する
  5. 時間出口を使用して,あまりにも長く負ける保持を避けるために
  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] ) 


もっと