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


作成日: 2023-11-23 13:38:02 最終変更日: 2023-11-23 13:38:02
コピー: 0 クリック数: 631
1
フォロー
1617
フォロワー

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

概要

均線交差戦略は,移動均線に基づく取引戦略である。それは,速い移動均線と遅い移動均線の交差を買入と売却のシグナルとして使用する。速い平均線が,下方から遅い平均線を突破すると,買入シグナルが生成され,速い平均線が,上方から下方から遅い平均線を突破すると,売却シグナルが生成される。

戦略原則

この策略は,sma関数を使用して指定された周期の単純移動平均を計算し,快速平均線と遅速平均線として用いられる.策略のデフォルトの快速平均線周期は18日であり,パラメータで調整できる.

速平均線が下方から緩慢平均線を突破すると,crossunder関数を使用して交差信号を検出し,買入信号を生成する.速平均線が上方から下方から緩慢平均線を突破すると,crossover関数を使用して交差信号を検出し,売出信号を生成する.

戦略は,トラック信号とエグジット信号によって自動取引を実現する.多頭入場は,高速平均線が下から遅い平均線を突破したときに誘発される.空頭入場は,高速平均線が上から遅い平均線を突破したときに誘発される.対応するエグジット信号は,逆転交差時に発生する.

優位分析

  • 移動均線交差を用いた強力なトレンド追跡能力により,価格トレンドを効果的に捉えることができる
  • 平均線戦略は単純で直接的で,論理的に明確で,容易に理解できる.
  • 平均線パラメータの調整により,戦略を最適化して,異なる市場環境に対応できます.
  • 自動化取引の戦略,人為的な介入なしの取引,運用コストの削減

リスクと解決策

  • 価格が振動区間にあるとき,無効な交差信号が複数回発生し,取引が頻繁になるリスクが生じます. フィルタリング条件を追加することで回避できます.
  • 異なるパラメータが戦略のパフォーマンスに大きく影響するので,パラメータ最適化に注意する必要があります.パラメータ最適化をリターンで測定するか,自主平均線を導入することができます.
  • 誤信号のリスクがあるため,他の指標のフィルタリング信号と組み合わせたり,補助条件として使用することができる.
  • 単一損失を制御するストップ・損失戦略を導入することができる.

最適化の方向

  • 適応均線または動的最適化均線パラメータを導入して,均線パラメータを動的に調整し,市場をよりよく追跡することができる.
  • フィルタリング条件を追加して,価格の変動やトレンド不明の時に誤ったシグナルを回避できます.例えば,取引量フィルタを導入します.
  • ブリン帯などの他の指標と組み合わせて,フィルターまたは入場補助条件として,戦略のパフォーマンスを向上させることができます.
  • 単一損失を許容範囲に抑えるために,ストップ・ロスの戦略を導入することができる.

要約する

均線交差策略は全体的に比較して古典的でシンプルなトレンド追跡策略である。この策略は,主に均線交差を取引信号として使用し,原理は単純で直接で,容易に理解でき,パラメータを調整して市場に適応することができる。しかし,いくつかの欠点もある.例えば,震動やトレンド転換の影響を受けやすいこと,シグナリングの頻度などである。これらの問題は,フィルタリング条件,動的にパラメータを調整し,ストップなど導入することによって改善できる。この策略は,幅広い最適化空間と方向性があり,量化取引の基本策の一つである。

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

//@version=3
strategy(title = "MA Close Strategy", shorttitle = "MA Close",calc_on_order_fills=true,calc_on_every_tick =true, initial_capital=21000,commission_value=.25,overlay = true,default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

MASource   = input(defval = open, title = "MA Source")
MaLength   = input(defval = 18, title = "MA Period", minval = 1)

StartYear = input(2018, "Backtest Start Year")
StartMonth = input(1, "Backtest Start Month")
StartDay = input(1, "Backtest Start Day")
UseStopLoss = input(true,"UseStopLoss")
stopLoss = input(50, title = "Stop loss percentage(0.1%)") 

window() => time >=  timestamp(StartYear, StartMonth, StartDay,00,00) ? true : false

MA = sma(MASource,MaLength)

plot(MA, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50)

long = crossunder(MA, close)
short = crossover(MA, close)

if (long)
    strategy.entry("LongId", strategy.long, when = long)
    strategy.exit("ExitLong", from_entry = "LongId", when = short)

if (short)
    strategy.entry("ShortId", strategy.short, when = short)
    strategy.exit("ExitShort", from_entry = "ShortId", when = long)

if (UseStopLoss)
    strategy.exit("StopLoss", "LongId", loss = close * stopLoss / 1000 / syminfo.mintick)
    strategy.exit("StopLoss", "ShortId", loss = close * stopLoss / 1000 / syminfo.mintick)