異なるパラメータを持つ2つの徐々に変化する移動平均に基づく取引戦略


作成日: 2023-12-20 14:28:36 最終変更日: 2023-12-20 14:28:36
コピー: 0 クリック数: 660
1
フォロー
1621
フォロワー

異なるパラメータを持つ2つの徐々に変化する移動平均に基づく取引戦略

概要

漸進均線取引戦略は,2つの異なるパラメータの設定の指数移動平均 (Exponential Moving Average,EMA) の交差信号に基づいて取引を行う戦略である.それは,短期のEMAラインと長期のEMAラインを使用し,それらは交差するときに取引信号を生成し,速線がスローラインを向上して横断するときに多し,下を横断するときに平仓する.この戦略は,止損,ストップトラッキングなどのリスク管理手段を組み合わせて,利益をロックし,リスクを制御する.

戦略原則

この戦略の核心指標は,2つのEMA線である:快線と慢線である.快線のパラメータは,価格変化に反応するより敏感であるため,デフォルトで13日線に設定され,慢線のパラメータは,価格変化に反応するより遅いため,48日線に設定されている.短線が速く上昇すると,快線は遅い線よりも早く上昇し,短線が下がると,快線は遅い線よりも早く低下する.したがって,速線がゆっくりと上を突破することは,長線上を突破する信号であり,速線がゆっくりと下を突破することは,長線下を突破する信号である.

この原理に従って,この戦略は,快線が下から上へ突破する時に多めにして,価格が上昇し始めることを表示し,購入することができる.快線が上から下へ突破するときに平仓し,上昇傾向が終了することを表示し,適時にストップを凍結する.リスクを制御するために,戦略はまた,初期ストップと追跡ストップを設定した.初期ストップは入場価格の8%であり,追跡ストップは120点である.これは,価格が逆転するときにできるだけ早くストップして,損失を最小限に抑えることができる.

コード実装では,この策略は,クロスオーバーとクロスアンダーという2つの関数によってEMAの交差信号を判断し,交差が発生すると,対応するエントリーとクローズを誘発して,和平ポジションを購入する.

優位分析

漸進的均線取引戦略には以下の利点があります.

  1. 戦略信号はシンプルで明快で,理解しやすく,初心者向けに活用できます.

  2. 平均線指標は市場騒音をめる効果があり,トレンドの変化を検出できます.

  3. 配置性強,快速線参数,止損点位はカスタムで設定できます.

  4. リスクの管理には,ストップ・ローズと組み合わせる必要があります.

  5. 安定性がある.

リスク分析

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

  1. 市場が急激に波動する時には,EMAの交差信号は遅滞し,価格の変化をタイムリーに反映することができない.

  2. 速度が速い均線指標のパラメータの調整により,誤信号が多く発生する可能性があります.

  3. EMAの交差は,トレンドが弱く,価格の動きを効果的に捉えることができない.

  4. 戦略自体は,大レベルのトレンド分析を考慮していないため,市場の全体的な傾向が不明なときに,大傾向から逸脱する取引が生じる可能性があります.

このリスクは以下の方法で軽減できます.

  1. 均線交差信号の確認を他の指標と組み合わせて行う.例えばMACD,KDなど.

  2. EMAのパラメータを異なる市場に合わせて調整し,誤信号率を下げる.

  3. トレンド判断モジュールを追加し,長期平均線を参考にして全体の方向性を判断する.

最適化の方向

この戦略は以下の方向から最適化できます.

  1. ポジション開設条件のフィルターを追加し,不安定な状況で不必要な取引が過剰に発生するのを避ける. ポジション開設の値は,波動率,取引量などの指標と組み合わせて設定できます.

  2. 市場における高低,支柱等を組み合わせて,ストップ・ストップの位置を設定し,ストップ・ストップの正確性を向上させる.

  3. トレンド判断モジュールを追加し,より高い時間枠の長期トレンドを使って短期信号をフィルタリングし,大トレンドとの離散を回避します.

  4. EMAパラメータは,機械学習によって訓練され,最適化され,実際の市場状況に適して,誤信号率を下げることができる.

以上は,この戦略が将来改善・最適化できる主な方向です. 適切な指標とリスク管理手段の追加により,このEMAの交差戦略の効果が向上します.

要約する

漸進的均線取引戦略は,基本的なトレンドフォロー戦略である。価格トレンドを判断するためにEMA快線と慢線の交差を用い,ストップ・メカニズムと組み合わせてリスクを制御する。この戦略の信号は,シンプルで明快で,使いやすく,特に初心者向けに適し,量化入門の典型的な戦略の1つです。しかし,ある程度の遅れや誤報のリスクも存在します。将来,より多くの指標や手段を導入することで,この戦略を最適化して改善し,より複雑な市場環境で安定的に動作させることができる。

ストラテジーソースコード
/*backtest
start: 2022-12-13 00:00:00
end: 2023-12-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// *** USE AT YOUR OWN RISK ***
// 
strategy("EMA Strategy", shorttitle = "EMA Strategy", overlay=true, pyramiding = 3,default_qty_type = strategy.percent_of_equity, default_qty_value = 10)


// === Inputs ===
// short ma
maFastSource   = input(defval = close, title = "Fast MA Source")
maFastLength   = input(defval = 13, title = "Fast MA Period", minval = 1)

// long ma
maSlowSource   = input(defval = close, title = "Slow MA Source")
maSlowLength   = input(defval = 48, title = "Slow MA Period", minval = 1)

// invert trade direction
tradeInvert = input(defval = false, title = "Invert Trade Direction?")
// risk management
useStop     = input(defval = true, title = "Use Initial Stop Loss?")
slPoints    = input(defval = 25, title = "Initial Stop Loss Points", minval = 1)
useTS       = input(defval = true, title = "Use Trailing Stop?")
tslPoints   = input(defval = 120, title = "Trail Points", minval = 1)
useTSO      = input(defval = false, title = "Use Offset For Trailing Stop?")
tslOffset   = input(defval = 20, title = "Trail Offset Points", minval = 1)

// === Vars and Series ===
fastMA = ema(maFastSource, maFastLength)
slowMA = ema(maSlowSource, maSlowLength)

plot(fastMA, color=blue)
plot(slowMA, color=purple)

goLong() => crossover(fastMA, slowMA)
killLong() => crossunder(fastMA, slowMA)
strategy.entry("Buy", strategy.long, when = goLong())
strategy.close("Buy", when = killLong())

// Shorting if using
goShort() => crossunder (fastMA, slowMA)
killShort() => crossover(fastMA, slowMA)
//strategy.entry("Sell", strategy.short, when = goShort())
//strategy.close("Sell", when = killShort())

if (useStop)
    strategy.exit("XLS", from_entry ="Buy", stop = strategy.position_avg_price / 1.08 )
    strategy.exit("XSS", from_entry ="Sell", stop = strategy.position_avg_price * 1.08)