複数のEMA期間のダイナミックトレーディング戦略


作成日: 2023-12-12 12:18:41 最終変更日: 2023-12-12 12:18:41
コピー: 1 クリック数: 1090
1
フォロー
1621
フォロワー

複数のEMA期間のダイナミックトレーディング戦略

概要

この戦略の核心思想は,複数の指数移動平均 ((EMA) の交差を基に取引信号を生成することである.短期のEMAで長期のEMAを履くと,多めに行い,短期のEMAの下で長期のEMAを履くと,平仓する.この戦略は,複数のEMAサイクルを配置することを許し,各EMAは独立に有効にされ,戦略は,すべての有効なEMAで交差取引を行う.

戦略原則

この戦略は8つのEMA周期を設定し,8日線,13,21,34,55,89,144および233日線である.これらのEMAは,独立してオンまたはオフに設定されるように構成されている.

より短期のEMAがより長いEMAを下から穿うとき,買いの信号を生じます.より短期のEMAがより長いEMAを上から下から穿うとき,売りの信号を生じます.もし両方のEMAが有効であれば,shorterEMA > longerEMAは多信号,shorterEMA < longerEMAは平仓信号となります.

例えば,55日EMAと89日EMAが有効である場合,55日EMAが89日EMAを穿う時,多行;55日EMAが89日EMAを穿う時,平行する.これは,この戦略の動態を調整するために使用されるEMAの組み合わせを,より長い周期からより短い周期に変換したり,またはその逆に変更したりすることを可能にします.

持仓数は,口座の利息をclose で割って,次に有効なEMAグループ数で割る.これは,各EMAのポジションサイズが同じであることを保証する.

優位分析

  • 異なるEMAを設定することで,戦略の周期的な柔軟性を調整できます.
  • 各EMAは,高度なカスタマイズを許可し,個別に構成できます.
  • EMA毎に比例して配置され,リスク管理に有利
  • 複数のEMAを使用し,異なる市場段階においてより適切なEMAに切り替えることができます.
  • 戦略はシンプルで明快で,理解しやすく,デビューできます.

リスク分析

  • EMAは,単一の指標として市場構造を特定できないので,誤った信号を発している可能性があります.
  • 大幅に揺れ動いている市場では,EMAが互いに交差しやすいため,取引頻度や滑り場コストが増加する.
  • EMAのパラメータは,異なる市場に対応するために最適化する必要があります.
  • 取引信号の確認には他の指標と組み合わせる必要があります.

経路指標や震動指標などの他の指標の組み合わせでEMAを使用することを検討することができます. フィルター信号,またはトレンドと逆転指標を組み合わせることができます. さらに,EMAパラメータを最適化することは非常に重要であり,異なる市場に合わせて調整する必要があります.

最適化の方向

この戦略は以下の点で最適化できます.

  1. EMAパラメータ最適化. EMAパラメータの最適化には,パラメータスキャンとウォーク・フォワード・アナリストの方法を使用する.

  2. フィルタリング条件の追加. EMAの交差時に,取引量フィルタ,波動率フィルタなどの誤信号を避けるために追加のフィルタリング条件を追加できます.

  3. 他の指標と組み合わせます.EMAはMACD,KDJ,ブリン帯などの他の指標と組み合わせて,それらの互補性を利用することができます.

  4. 動的にポジションを調整する.市場の変動率やトレンドの強さに応じて動的にポジションを調整することができる.

  5. 利回りの最適化: ストップ・ローズ・ストップ・レベルを最適化し,最適のリスク・リターン・比率を見つけること.

要約する

この戦略は全体的に非常にシンプルで直接的で,EMAを交差して短期および中期トレンドを捉えます.その優点は,高度に構成可能で柔軟性があり,トレーダーが自分のEMAに最も適した組み合わせを選択できるということです.しかし,単一の指標としてのEMAは誤った信号を生じやすので,この戦略の最大のリスクです.他の指標の組み合わせとパラメータの最適化により,より良い取引パフォーマンスを得ることができます.

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

//@version=2
strategy("EMA Fan", shorttitle = "EMA Fan", overlay=true)

// Revision:        1
// Author:          @ToS_MavericK

buyprice = 0.0
buyprice := buyprice[1]

// === INPUT SMA ===
EMA1  = input(8)
EMA2  = input(13)
EMA3  = input(21)
EMA4  = input(34)
EMA5  = input(55)
EMA6  = input(89)
EMA7  = input(144)
EMA8  = input(233)

EnableEMA1 = input(true)
EnableEMA2 = input(true)
EnableEMA3 = input(true)
EnableEMA4 = input(true)
EnableEMA5 = input(true)
EnableEMA6 = input(true)
EnableEMA7 = input(true)
EnableEMA8 = input(true)

//Profit  = input(defval = 5, type = integer, title = "Profit", minval = 1, step = 1)
//StopLoss    = input(defval = 15, type = integer, title = "StopLoss", minval = 1, step = 1)

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


// === 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"

// === SERIES SETUP ===
vEMA1 = ema(close, EMA1)
vEMA2 = ema(close, EMA2)
vEMA3 = ema(close, EMA3)
vEMA4 = ema(close, EMA4)
vEMA5 = ema(close, EMA5)
vEMA6 = ema(close, EMA6)
vEMA7 = ema(close, EMA7)
vEMA8 = ema(close, EMA8)

count = -1
if (EnableEMA1 == true)
    count := count + 1
if (EnableEMA2 == true)
    count := count + 1
if (EnableEMA3 == true)
    count := count + 1
if (EnableEMA4 == true)
    count := count + 1
if (EnableEMA5 == true)
    count := count + 1
if (EnableEMA6 == true)
    count := count + 1
if (EnableEMA7 == true)
    count := count + 1
if (EnableEMA8 == true)
    count := count + 1

// set position size
Amount = 1 / (close * count)

// === EXECUTION ===
strategy.entry("EMA1", strategy.long, qty = Amount, when = window() and crossover(vEMA1,vEMA2) and EnableEMA1 and EnableEMA2)
strategy.close("EMA1", time > finish or crossunder(vEMA1,vEMA2))

strategy.entry("EMA2", strategy.long, qty = Amount, when = window() and crossover(vEMA2,vEMA3) and EnableEMA2 and EnableEMA3)
strategy.close("EMA2", time > finish or crossunder(vEMA2,vEMA3))

strategy.entry("EMA3", strategy.long, qty = Amount, when = window() and crossover(vEMA3,vEMA4) and EnableEMA3 and EnableEMA4)
strategy.close("EMA3", time > finish or crossunder(vEMA3,vEMA4))

strategy.entry("EMA4", strategy.long, qty = Amount, when = window() and crossover(vEMA4,vEMA5) and EnableEMA4 and EnableEMA5)
strategy.close("EMA4", time > finish or crossunder(vEMA4,vEMA5))

strategy.entry("EMA5", strategy.long, qty = Amount, when = window() and crossover(vEMA5,vEMA6) and EnableEMA5 and EnableEMA6)
strategy.close("EMA5", time > finish or crossunder(vEMA5,vEMA6))

strategy.entry("EMA6", strategy.long, qty = Amount, when = window() and crossover(vEMA6,vEMA7) and EnableEMA6 and EnableEMA7)
strategy.close("EMA6", time > finish or crossunder(vEMA6,vEMA7))

strategy.entry("EMA7", strategy.long, qty = Amount, when = window() and crossover(vEMA7,vEMA8) and EnableEMA7 and EnableEMA8)
strategy.close("EMA7", time > finish or crossunder(vEMA7,vEMA8))

plot(vEMA1, title = 'EMA1', color = red, linewidth = 2, style = line)  // plot FastMA
plot(vEMA2, title = 'EMA2', color = orange, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA3, title = 'EMA3', color = yellow, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA4, title = 'EMA4', color = green, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA5, title = 'EMA5', color = teal, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA6, title = 'EMA6', color = blue, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA7, title = 'EMA7', color = maroon, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA8, title = 'EMA8', color = white, linewidth = 2, style = line)    // plot SlowMA

//plot(long_stop, title = 'High-ATR', color = red, linewidth = 2, style = line)    // plot SlowMA
//plot(short_stop, title = 'Low+ATR', color = green, linewidth = 2, style = line)    // plot SlowMA