ダブル・ムービング・アベレア・クロスオーバー戦略 (Dual Moving Average Crossover Strategy) は,一般的なトレンドフォロー戦略である.トレンド方向を特定し,そのクロスオーバーに基づいてトレード信号を生成するために,異なる期間の2つのムービング・アベレアを使用する.特に,短い期間のムービング・アベレアが長い期間の1を超えると,上向きのトレンドを示す黄金十字が形成される.逆に,短いMAが長いMAを下向きのトレンドを示す,死亡十字が形成される.
この戦略は主に6期,14期,25期および80期EMAラインを使用します.まずこれらのEMA値を計算し,その後,6期EMAと他の3つのEMAのクロスオーバーに基づいてトレンド方向を特定します.
6 期間の EMA が 14 期間の EMA や 25 期間の EMA を越え,80 期間の EMA を越えると,買い信号が生成されます.これは,短期間の MA が中長期間の MA を破っていることを示し,上昇傾向が始まると,購入を検討することができます.
6期間のEMAが14期間のEMAまたは25期間のEMAを下回り,80期間のEMAを下回ると,セールシグナルが生成されます.これは,短期間のMAが中期から長期間のMAに突破され,下落傾向が始まることを示します.
シグナル発生後,戦略はロングまたはショートポジションを開く.損失がリスク制御の
この戦略の利点は次のとおりです.
MAクロスオーバーを使用してトレンドを決定することは成熟した信頼性の高い技術指標です.
複数のタイムフレームを組み合わせることで誤った信号が減少する. 6期MASは信号を生成し,14期MASは確認し,25期MASは全体的な傾向を定義する.
ストップロスはリスクをコントロールし 資本を効果的に保護します
論理は単純で明快で 分かりやすく 検証も容易です
市場状況の変化に最適化するために,MA期間を調整できます.
この戦略によるリスクは以下のとおりです.
価格は,範囲中にMAを周回し,過度の無効信号を生成することがあります.MA期間はそれに応じて調整できます.
固定ストップ損失は,あまりにも硬いかもしれません.代わりにトライリングストップまたはダイナミックストップを使用することを検討してください.
ストップロスのリスクは,突然の価格ギャップに打たれます.そのような場合,ストップロスをスキップするために追加の論理を追加します.
短期的な価格変動に反応できない.他の指標を使ってフィルターを追加する.
適性移動平均値を使うことを検討してください
戦略を最適化する方法:
市場に対してより敏感なパラメータを見つけるために,異なるMA期間の組み合わせをテストする.
ストップ・ランリスクを減らすため,ストップ・ロスのメカニズムを改善し,トラッキング・ストップやダイナミック・ストップを使用する.
KDJ,MACDなどのフィルター指標を追加して,レンジング中に過剰な取引を避ける.
入口規則を最適化して 誤信号を減らすために 入口前に MA 交差が完全に形成されるのを待って
変動率に基づいて周期を自動的に調整する適応性移動平均を使用する.
ポジションのサイズを市場状況に基づいて調整するためのポジションサイズを調整するルールを追加する.
利益の取り出しを組み込む
概要すると,この二重移動平均クロスオーバー戦略は,シンプルなMAクロスオーバー論理に基づいてトレンド方向を容易に特定し,制御可能なリスクを持っています.中長期トレンドを追跡するのに適しています.しかし,戦略にはエントリールール,ストップ損失技術,フィルター条件などを通じて最適化のための十分な余地があります.全体として,合理的なメリットとデメリットを持つ戦略をフォローする堅牢なベースライントレンドとして機能します.学習と練習に価値がある.
/*backtest start: 2022-11-06 00:00:00 end: 2023-11-12 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy(title = " bhramaji EMA Cross Strategy", shorttitle = "EMA Cross",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) StartYear = input(2018, "Backtest Start Year") StartMonth = input(1, "Backtest Start Month") StartDay = input(1, "Backtest Start Day") UseStopLoss = input(true,"UseStopLoss") stopLoss = input(20, title = "Stop loss percentage(0.1%)") maSource = input(defval = close, title = "MA Source") maLength6 = input(defval = 6, title = "MA Period 6", minval = 1) maLength14 = input(defval = 14, title = "MA Period 14", minval = 1) maLength25 = input(defval = 25, title = "MA Period 25", minval = 1) maLength80 = input(defval = 80, title = "MA Period 80", minval = 1) ma6 = ema(maSource, maLength6) ma14 = ema(maSource, maLength14) ma25 = ema(maSource, maLength25) ma80 = ema(maSource, maLength80) ma_6_plot = plot(ma6 , title = "MA 6", color = red, linewidth = 2, style = line, transp = 50) ma14_plot = plot(ma14, title = "MA 14", color = green, linewidth = 2, style = line, transp = 50) ma25_plot = plot(ma25, title = "MA 25", color = blue, linewidth = 2, style = line, transp = 50) ma80_plot = plot(ma80, title = "MA 80", color = silver, linewidth = 2, style = line, transp = 50) longEMA = (crossover(ma6, ma14) or crossover(ma6, ma25)) and (ma6>ma80) exitLong = (crossunder(ma6, ma14) or crossunder(ma6, ma25)) shortEMA = (crossunder(ma6, ma14) or crossunder(ma6, ma25)) and (ma6< ma80) exitShort =(crossover(ma6, ma14) or crossover(ma6, ma25)) if (longEMA) strategy.entry("LongId", strategy.long) if (shortEMA) strategy.entry("ShortId", strategy.short) if (UseStopLoss) strategy.exit("StopLoss", "LongId", loss = close * stopLoss / 1000 / syminfo.mintick) strategy.exit("StopLoss", "ShortId", loss = close * stopLoss / 1000 / syminfo.mintick)