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

作者: リン・ハーンチャオチャン, 日時: 2023-09-21 10:28:27
タグ:

概要

これは典型的な移動平均クロスオーバー・トレーディング戦略である. 移動平均は,快速移動平均と緩やかな移動平均のクロスオーバーポイントを取引シグナルとして使用する. 移動平均が下からゆっくり移動平均を上回ると,それは購入信号とみなされる. 移動平均が上からゆっくり移動平均を下回ると,それは販売信号とみなされる. この戦略は,2つの移動平均を組み合わせて,効果的に市場のノイズをフィルタリングし,トレンドを識別することができます.

戦略の原則

この戦略の主なステップは以下の通りです.

  1. 移動平均の期間を fastMA と移動平均の期間を slowMA と設定する.

  2. 入力型 Type をベースに,高速移動平均と遅い移動平均を計算します. Type=1 は単純な移動平均, Type=2 は指数移動平均です.

  3. バックテストの開始と終了を設定します.

  4. クロスオーバー関数を定義します. 速いがスローを越えると 購入信号を生成します. 速いがスローを越えると 販売信号を生成します.

  5. クロスオーバー機能が起動すると,バックテスト時間範囲内であれば,オープン・ロング・オーダーまたは閉じる・ショート・オーダーを発行します.

  6. バックテストウィンドウが終了し,またはクロスオーバー機能が下を横切ると,ロングオーダーを閉じる.

  7. 移動平均をグラフ化します

この戦略は,保持期間中のトレンドを決定し,それに応じて取引信号を生成するために,高速移動平均値と遅い移動平均値のクロスオーバーを使用する.バックテストタイムウィンドウは実際の取引をシミュレートする.

利点分析

この戦略の利点は

  1. 移動平均値は,傾向を決定し,ランダムな変動をフィルタリングするのに有効です.

  2. 移動平均値の組み合わせによって 傾向の変化が特定できます

  3. 移動平均のパラメータは,異なる期間の動向に適応するように調整できます.

  4. 簡単な移動平均と指数的な移動平均の柔軟な選択

  5. バックテスト機能は,戦略パラメータのテストと最適化を可能にします.

  6. シンプルで明快な論理で 分かりやすく実行できます

  7. 移動平均グラフを描くことは,動向と効果の視覚的な決定を可能にします.

リスク分析

この戦略のリスクは

  1. 範囲制限期間中に誤った信号を生成する可能性があります.

  2. 移動平均値は遅延効果があり,ターンポイントを見逃す可能性があります.

  3. 移動平均のクロスオーバーのみで,他の指標やフィルターはありません.

  4. 取引コストを考慮しない

  5. ストップ・ロスト戦略はない

  6. 不合理なパラメータ設定は 戦略のパフォーマンスに影響を与える可能性があります

  7. バックテストの時間範囲の誤った選択により,オーバーフィッティングが発生する可能性があります.

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

戦略は以下の側面で最適化できます.

  1. MACD,RSIなどの他の指標を追加して信号を確認し,精度を向上します.

  2. ストップ・ロスの戦略を追加して 単一の損失を制御します

  3. 異なる期間の移動平均パラメータを最適化する.

  4. 市場状況に基づくポジションサイズを追加します.

  5. 取引コストを考慮し 入口と出口を調整します

  6. オーバーフィッティングを避けるため 長い時間枠でテストします

  7. パラメータを継続的に最適化します

概要

移動平均クロスオーバー戦略は,単純で実践的なトレンドフォロー戦略である.ランダムな変動をフィルタリングし,トレンド方向を特定することができる.しかし,遅滞効果のような問題もあるため,他の指標と組み合わせるべきである.継続的な最適化とテストは,戦略のパフォーマンスを向上させ,ライブトレーディングのためにより信頼性を高めることができる.全体として,この戦略は,トレンド決定に対する比較的低い要件を持つ投資家に適している.


/*backtest
start: 2023-09-13 00:00:00
end: 2023-09-20 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
// strategy("MavCrossover v2", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

// Revision:        1
// Author:          @ToS_MavericK

// === INPUT SMA ===
fastMA  = input(defval = 13,  title = "FastMA", minval = 1, step = 1)
slowMA  = input(defval = 144,  title = "SlowMA", minval = 1, step = 1)
Type    = input(defval = 1,  title = "Type (1 = SMA, 2 = EMA)", minval = 1, maxval = 2, step = 1)
SlowMAIsFactor = input(false)

slowMA := SlowMAIsFactor == true ? round(fastMA * slowMA) : slowMA

// === 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 = 2018, title = "From Year", minval = 2012)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear    = input(defval = 2020, title = "To Year", minval = 2012)

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

// === MA SETUP ===
fast = Type == 1 ? sma(close, fastMA) : ema(close, fastMA)
slow = Type == 1 ? sma(close, slowMA) : ema(close, slowMA)

// === EXECUTION ===
strategy.entry("L", strategy.long, when = crossover(fast, slow) and window())   // buy long when "within window of time" AND crossover
strategy.close("L", when = crossunder(fast, slow) or time > finish)             // sell long when window ends OR crossunder         

plot(fast, title = 'FastMA', color = yellow, linewidth = 2, style = line)  // plot FastMA
plot(slow, title = 'SlowMA', color = aqua, linewidth = 2, style = line)    // plot SlowMA

もっと