2つの移動平均のブレイクアウト戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-24 14:49:29
タグ:

img

概要

ダブル・ムービング・平均ブレイクアウト戦略は,高速移動平均と遅い移動平均をベースとした定量的な取引戦略である. 異なる期間の2つの指数的な移動平均 (EMA) を取引シグナルとして使用する. 急速なEMAが遅いEMAを超えると,購入信号が生成される. 急速なEMAが遅いEMAを下回ると,販売信号が生成される.

戦略の論理

この戦略の主な論理は,取引信号を形成するために,高速移動平均と遅い移動平均を使用することです. 戦略は,高速EMA期間を12日,遅いEMA期間を26日と定義します. 計算方法は以下のとおりです:

  1. 2 日間の値配列の指数的な移動平均 AP を計算する
  2. 移動平均を計算する 12 日間の AP をベースに
  3. スロー移動平均を計算する 26 日間の AP をベースにしたスロー
  4. 移動平均線を比較してみましょう.
    1. スローがスローを越えると,それは上昇信号です.
    2. 速度はスローを下回る時,それは下落の信号です
  5. 価格と移動平均関係を組み合わせた特定の取引信号を特定する.
    1. 上昇信号: 速> 遅 && AP> 速
    2. 低迷信号: 速い<スロー&&AP<速い

市場動向を決定し,取引シグナルを生成するために高速移動平均と遅い移動平均のクロスオーバーを使用することは,典型的な二重移動平均戦略です.

利点分析

二重移動平均のブレイクアウト戦略は以下の利点があります.

  1. 戦略の論理は シンプルで明快で 分かりやすく 実行できます
  2. 移動平均期間が異なる市場環境に適応するように調整できます
  3. 長期と短期のポジションの両方により高いリターンを達成できるようにする
  4. 価格と移動平均を組み合わせることでより正確な取引信号が生成できます.
  5. 移動平均値 の 遅延 特性 は 市場 の 騒音 を 効果的に フィルタリング できる

リスク分析

二重移動平均のブレイクアウト戦略には,いくつかのリスクもあります:

  1. 市場が範囲に制限されている場合,より多くの誤った信号が発生する可能性があります.
  2. 二重移動平均戦略は,構造的市場の変化を無視し,曲線フィッティングを引き起こす可能性があります
  3. 単なる技術指標に頼ることは,損失のリスクのある偽のブレイクに脆弱です

解決策:

  1. 移動平均期を最適化し,現在の市場状況により良く適応する
  2. 偽のブレイクを避けるためにボリュームなどの他の指標で信号を確認します
  3. 利益/損失比を制御し,リスクを軽減するための戦略を採用する

オプティマイゼーションの方向性

二重移動平均のブレイクアウト戦略は,次の側面で最適化することができる:

  1. 市場変化に適応するために,より適した移動平均期間の組み合わせを見つける
  2. 有効性を確保するために信号フィルタリングのための音量などの指標を追加します
  3. 市場構造指標を組み込み,傾向を特定し,パラメータを調整する
  4. 動的移動平均を採用し,市場変化に基づいて期間を自動的に調整することができる.
  5. リスクを効果的に制御し,資本を保護するためのストップ損失戦略を組み込む

結論

ダブル・ムービング・平均ブレイクアウト戦略は,シンプルで実用的な定量的な取引戦略です. 簡単な論理と実装などの利点があり,市場適応性の問題もあります. パラメータ最適化,シグナルフィルタリング,リスク管理などを通じて,安定した収益性の高い取引システムにすることができます. 全体的に,ダブル・ムービング・平均戦略は,定量的なトレーダーのための深層の研究と適用に値する優れた戦略プロトタイプです.


/*backtest
start: 2023-01-17 00:00:00
end: 2024-01-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("CDC Action Zone V.2", overlay=true)

// CDC ActionZone V2 29 Sep 2016
// CDC ActionZone is based on a simple 2MA and is most suitable for use with medium volatility market
// 11 Nov 2016 : Ported to Trading View with minor UI enhancement
LSB = input(title="Long/Short", defval="Long only", options=["Long only", "Short only" , "Both"])
src = input(title="Data Array",type=input.source,defval=ohlc4)
prd1=input(title="Short MA period", type=input.integer,defval=12)
prd2=input(title="Long MA period",type=input.integer,defval=26)
AP = ema(src,2)
Fast = ema(AP,prd1)
Slow = ema(AP,prd2)


Bullish = Fast>Slow
Bearish = Fast<Slow

Green = Bullish and AP>Fast
Red = Bearish and AP<Fast
Yellow = Bullish and AP<Fast
Blue = Bearish and AP>Fast

Buy = Bullish and Bearish[1]
Sell = Bearish and Bullish[1]


alertcondition(Buy,"Buy Signal","Buy")
alertcondition(Sell,"Sell Signal","Sell")


//Plot

l1=plot(Fast,"Fast", linewidth=1,color=color.red)
l2=plot(Slow,"Slow", linewidth=2,color=color.blue)
bcolor = Green ? color.lime : Red ? color.red : Yellow ? color.yellow : Blue ? color.blue : na
barcolor(color=bcolor)
fill(l1,l2,bcolor)

// === INPUT BACKTEST RANGE ===
FromYear  = input(defval = 2000, title = "From Year", minval = 1920)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 1921)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"


if LSB == "Long only" and Buy and window()
    strategy.entry("L",true)
if LSB == "Long only" and Sell and window()
    strategy.close("L",qty_percent=100,comment="TP Long")
if LSB == "Both" and Buy and window()
    strategy.entry("L",true)
if LSB == "Both" and Sell and window()
    strategy.entry("S",false)
if LSB == "Short only" and Sell and window()
    strategy.entry("S",false)
if LSB == "Short only" and Buy and window()
    strategy.close("S",qty_percent=100,comment="TP Short")

もっと