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

作者: リン・ハーンチャオチャン,日付: 2023年11月22日 16:38:26
タグ:

img

概要

移動平均クロスオーバー戦略は,移動平均をベースとしたシンプルで効果的な定量的な取引戦略である. 急速移動平均線と遅い移動平均線のクロスオーバーを使用して,買いと売却の信号を生成する. 速い線が下からスローラインを突破すると,買い信号が生成される. 速い線が上からスローラインを突破すると,販売信号が生成される. 移動平均線は,移動平均線を突破すると,販売信号が生成される. 移動平均線は,移動平均線を突破すると,移動平均線が移動し,移動平均線が移動し,移動平均線が移動し,移動平均線が移動し,移動平均線が移動し,移動平均線が移動し,移動平均線が移動し,移動平均線が移動し,移動平均線が移動し,移動平均線が移動し,移動平均線が移動し,移動平均線が移動し,移動平均線が移動し,移動平均線が移動し,移動平均線が移動し,移動平均線が移動し,移動平均線が移動し,移動平均線が移動し,移動平均線が

戦略の論理

この戦略の主な論理は,市場動向を判断するために移動平均値を用いることにある.移動平均値はランダムな市場ノイズをフィルターする機能を持つ.高速移動平均は価格変化により速く反応し,最新のトレンドを反映できる.ゆっくり移動平均は最新の価格変化によりゆっくり反応し,中長期的トレンドを表す.スローラインを通過する高速線の突破は,短期的トレンドが中長期的トレンドと一致するように逆転して,取引信号を生成することを意味します.

具体的には,この戦略は,まず高速移動平均 sig1 とスロー移動平均 sig2 を定義し,その後, sig1 と sig2 の間のクロスオーバー関係に基づいて購入・販売ポイントが決定される. sig1 が sig2 を下から突破すると,ロングコンディション longCondition が生成される. sig1 が上から sig2 を突破すると,ショートコンディション shortCondition が生成される. 戦略は,ロングとショートコンディションが満たされたときにオーダーを置き,ストップ・ロスを設定し,出口オーダーに利益を取ります.

利点分析

この戦略の利点は大きい.

  1. シンプルな論理,理解し実行しやすい
  2. 柔軟なパラメータ調整,異なる市場条件で最適化できます
  3. 信号をフィルタリングし,安定性を改善するために他の指標と組み合わせることができます.
  4. EURCHFの日々のデータでは,EMA15-EMA30コンボが 83%の勝利率を達成できる.

リスク分析

この戦略にはいくつかのリスクもあります:

  1. ストップ・ロスト・コンフィギュレーションが重要です
  2. バランス,横向市場での不良業績
  3. 幅広いテストとパラメータ調整を要求し,異なる製品と時間枠に適合します

最適化対策

  1. 判断のための他の指標を追加して,ウィプソーを避ける
  2. 異なる製品に適合する MA タイプとパラメータを調整する
  3. ストップ・ロスを最適化し,リスクを制御するために利益率を上げます

結論

一般的に,移動平均クロスオーバー戦略は,シンプルな論理,強力な実用性,安定性を持つ量子戦略である.パラメータ調節と適切な最適化により,さまざまな市場環境で安定した利益を生むことができる.定量的なトレーダーに焦点を当て,適用する価値があります.


/*backtest
start: 2023-11-14 00:00:00
end: 2023-11-16 04:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// Simple yet effective MA cross strategy.
// You'll have to tune the parameters to get an optimal win ratio.
// If JPY or XAU or any other currency with pips defined as the 
// second decimal digit are involved, do not forget to set the respective flag on.
//
// Created by vitelot/yanez/Vts, who's the same fellow with different user names
// December 2018 -- Merry Xmas
//
strategy("MA cross strategy Vts", overlay=true, initial_capital=1000, currency="EUR", pyramiding=0)

yr  = input(2016, title="Starting year to analyse")
src = input(close, title="Source")
maType = input( defval="EMA", title="MA Type", options=["SMA","EMA","HMA","McG","WMA"])
//
isJPY = input(false, title="Is JPY or XAU involved?") // JPY and Gold have the pips defined as the 2 decimal digit

maPar1 = input(26, minval=1, title="MA fast period")
maPar2 = input(51, minval=2, title="MA slow period")

atrPar = input(14,minval=1, title="ATR period")
atrMulSL = input(1.5, title="SL ATR multiplicator")
atrMulTP = input(1.0, title="TP ATR multiplicator")

hma(sig, n) => // Hull moving average definition
    wma( 2*wma(sig,round(n/2))-wma(sig,n), round(sqrt(n)))

mcg(sig,length) => // Mc Ginley MA definition
    mg = 0.0
    mg := na(mg[1]) ? ema(sig, length) : mg[1] + (sig - mg[1]) / (length * pow(sig/mg[1], 4))

ma(t,sig,len) =>
    if t =="SMA"
        sma(sig,len)
    else
        if t == "EMA"
            ema(sig,len)
        else
            if t == "HMA"
                hma(sig,len)
            else
                if t == "McG" // Mc Ginley
                    mcg(sig,len)
                else
                    wma(sig,len)
                    
        
sig1 = ma(maType, src, maPar1)
sig2 = ma(maType, src, maPar2)

tickFactor = isJPY? 1e3: 1e5
sl = atrMulSL*atr(atrPar)*tickFactor
tp = atrMulTP*atr(atrPar)*tickFactor

plot(sig1, color=aqua, title="MA1", linewidth=2)
plot(sig2, color=orange, title="MA2", linewidth=2)

longCondition = crossunder(sig2, sig1) and year>=yr // change the >= to == if you like exact years not a range
if (longCondition)
    strategy.entry("Long", strategy.long, qty=1) // exit trade when SL and TP are hit
    strategy.exit("Exit Long", "Long", loss=sl, profit=tp)
if (crossunder(sig1, sig2)) // or when the short condition is met
    strategy.close("Long")

shortCondition = crossover(sig2,sig1) and year>=yr // change the >= to == if you like exact years not a range
if (shortCondition)
    strategy.entry("Short", strategy.short, qty=1)
    strategy.exit("Exit Short", "Short", loss=sl, profit=tp)
if (crossover(sig1,sig2))
    strategy.close("Short")


もっと