この戦略は典型的な移動平均の交差取引戦略である。この戦略は,高速移動平均と遅い移動平均の交差点を買入信号として利用する。急速移動平均が,下からゆっくり移動平均を横切るときは,買入信号として扱われる;高速移動平均が,上から下からゆっくり移動平均を横切るときは,売り信号として扱われる。この戦略は,二つの移動平均を組み合わせて,市場騒音を効果的にフィルターして,トレンドを識別する。
この戦略は以下のステップを踏まえて行われます.
急速移動平均周期 fastMAと遅い移動平均周期 slowMAを設定する.
入力型 Type に基づいて,fast 移動平均とslow 移動平均を計算する.Type=1 の場合は単純移動平均,Type=2 の場合は指数移動平均となる.
startとfinishの回測時間帯を設定する.
交差関数を定義する.fastが上からスローを穿うとき,買入シグナルを生成する.fastが上から下からスローを穿うとき,売出シグナルを生成する.
交差関数がトリガーされたとき,もし回測時間枠内であれば,買ってポジションを開くか,平仓を売り出す指示を発行する.
回測ウィンドウの終わりに,または交差関数の下を穿ったとき,出出を閉じる指示を発する.
fast と slow のトレンドグラフを描く.
この戦略は,速い,ゆっくりとした移動平均の交差によって,保有期間のトレンドを判断し,それに応じて取引シグナルを生成する.同時に,実際の取引を模擬する反射時間ウィンドウを設定する.
この戦略の利点は以下の通りです.
移動平均はトレンドを判断するのに有効で,ランダムな波動を効果的にフィルターすることができます.
移動平均と移動平均の組み合わせにより,トレンドの変化を認識できます.
移動平均のパラメータを調整することで,異なる周期のトレンドに適応することができます.
シンプル移動平均または指数移動平均を選択する柔軟性があります.
戦略パラメータをテストして最適化するには,反省機能を使用できます.
戦略の論理はシンプルで明快で,実行が分かりやすい.
移動平均のグラフを描いて,傾向と効果を直感的に判断できます.
この戦略にはいくつかのリスクがあります.
集積範囲内で誤信号が発生する可能性があります.
移動平均は後退性があり,ターニングポイントを逃す可能性があります.
均線交差のみに依存し,他の指標や条件のフィルタリングと結合しない.
取引コストの影響は考慮されていません.
ストップ・ロスの策略は設定されていません.
パラメータの設定が不合理である場合, 策略の効果に影響を及ぼす可能性があります.
返信時間帯の選択が不適切で,過適合が生じる可能性があります.
この戦略は以下の点で最適化できます.
MACD,RSIなどの他の指標と組み合わせて信号を検証し,精度を高めます.
ストップ・ロスの戦略を導入し,単一損失をコントロールする.
移動平均のパラメータを最適化し,異なる周期に対応する.
倉庫開設管理を追加し,市場状況により異なる倉庫を採用する.
取引コストを考慮し,入場・退場ポイントを修正する.
超フィット感を避けるため,より長い時間帯のデータをテストします.
ウォークス・フォワード・アナリティクスを使って,パラメータを常に最適化します.
移動平均線交差策は,シンプルで実用的なトレンド追跡策である.ランダムな波動をフィルタリングしてトレンドの方向性を識別することができる.しかし,遅滞性などの問題も存在し,他の指標の組み合わせで使用するべきである.継続的な最適化テストによって,戦略の効果を向上させ,実態で適用することもより安全で信頼性がある.全体的に,この策は,トレンド判断に対する要求が低い投資家に適している.
/*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