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

作者: リン・ハーンチャオチャン,日付: 2023年11月21日 11:34:09
タグ:

img

概要

ダブル・ムービング・アベア・クロスオーバー戦略は,トレンドフォローする典型的な戦略である.異なる期間の2つのムービング・アベアを計算し,そのクロスオーバーを取引信号として利用し,市場のトレンドの方向性と勢いを把握する.

戦略の論理

この戦略は主に2つの移動平均値に基づいている.最初の移動平均値は短い期間を持ち,価格変化に迅速に対応することができる.第2の移動平均値は長い期間を持ち,ノイズをフィルターすることができる.短期移動平均が長期移動平均を横切ると,それは購入信号とみなされる.短期移動平均が長期移動平均を下回ると,それは販売信号とみなされる.

具体的には,この戦略は10期指数関数移動平均値 (Price1) と20期指数関数移動平均値 (Price2) を計算する.現在のバーのオープン価格と閉鎖価格の両方が2つの移動平均値よりも高い場合,購入信号が生成される.オープン価格と閉鎖価格の両方が2つの移動平均値よりも低い場合,販売信号が生成される.

このデザインは,トレンドが形成され始めるときに早期に入場し,トレンドに従うことを可能にします.トレンドが逆転すると,リスクを効果的に制御するために早速市場を退出することもできます.

利点

  • 傾向を早期に把握し,強い傾向を追跡する
  • 2つのMAクロスオーバーのフィルター
  • オープンと閉鎖価格の二重確認は,非効率な取引を減らす

リスク

  • ショットソーやリバース・トレードに 傾向がある
  • 交差信号が頻繁に発生する可能性があります
  • 大きいパラメータ調整スペースは,オーバーフィッティングにつながる可能性があります

強化

  • オプтимаルを見つけるために異なるパラメータセットをテスト
  • ストップ損失を制限損失サイズに追加する
  • 悪い取引を減らすためにフィルターを追加します
  • 他の指標を組み合わせてシグナルを確認する

概要

この戦略は比較的シンプルで,デュアルMAクロスオーバーでトレンドを把握し,基本的な量子戦略である.しかし,いくつかのリスクも伴い,異なる市場体制のためにさらなる最適化が必要である.より堅牢にするためにパラメータ,ストップ,フィルターなどを強化する余地がある.


/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//study(title="MA River CC v1", overlay = true)
strategy("MA River CC v1", overlay=true)
src = input(close, title="Source")

price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(10, title="1st MA Length")
type1 = input("EMA", "1st MA Type", options=["SMA", "EMA"])

ma2 = input(20, title="2nd MA Length")
type2 = input("EMA", "2nd MA Type", options=["SMA", "EMA"])

price1 = if (type1 == "SMA")
    sma(price, ma1)
else
    ema(price, ma1)
    
price2 = if (type2 == "SMA")
    sma(price, ma2)
else
    ema(price, ma2)


//plot(series=price, style=line,  title="Price", color=black, linewidth=1, transp=0)
plot(series=price1, style=line,  title="1st MA", color=blue, linewidth=2, transp=0)
plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0)


buy_entry = (open>price1 and open>price2) and (close>price1 and close>price2)  
sell_entry = (open<price1 and open<price2) and (close<price1 and close<price2)
buy_close = sell_entry
sell_close = buy_entry
//longCondition = crossover(price1, price2)    
if(buy_entry)
    strategy.entry("Long", strategy.long)
    
if(sell_entry)
    strategy.entry("Short", strategy.short)

strategy.close("Long" , when=buy_close)
strategy.close("Short",when=sell_close)



もっと