移動平均クロスオーバー戦略は,移動平均をベースとした取引戦略である. 移動平均と緩やかな移動平均のクロスオーバーを買い・売る信号として使用する. 速いMAが下から緩やかなMAを超えると,買い信号が生成される. 速いMAが上から緩やかなMAを下に突破すると,売り信号が生成される.
この戦略は,SMA関数を使用して,Fast MAとSlow MAとして指定された期間の単純な移動平均を計算します.デフォルトのFast MA期間は18日で,パラメータによって調整できます.
低速MAが低速MAの上を横切ると,クロスアンダー関数はクロスオーバー信号を検知し,購入信号を生成する.高速MAが低速MAの下を横切ると,クロスオーバー関数はクロスオーバー信号を検知し,販売信号を生成する.
この戦略は,トラックシグナルと出口シグナルを通じて自動取引を実現する. 速いMAが遅いMAを超えるとロングエントリーが起動し,速いMAが遅いMAを下回るとショートエントリーが起動する. 対応する出口シグナルも逆クロスオーバーで生成される.
MAクロスオーバー戦略は,クラシックでシンプルなトレンドフォロー戦略である.主にMASクロスオーバーを簡単な論理と実装で取引信号として使用する.パラメータチューニングを通じて適応することができる.しかし,振動やトレンド逆転,高い信号周波数などへの易感性などの欠点も有する.これらのフィルター,ダイナミックパラメータ,ストップ損失などによって改善することができる.この戦略には広範な最適化空間と方向性があり,基本的な定量的な取引戦略の1つです.
/*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)