マルチタイムフレーム・ダイナミック・EMA・トレーディング・戦略

作者: リン・ハーンチャオチャン,日付: 2023年12月12日 12:18:41
タグ:

img

概要

この戦略の主なアイデアは,複数の指数関数移動平均値 (EMA) のクロスオーバーに基づいて取引信号を生成することです. 短期EMAがより長期EMAを下からクロスするとロングになり,短期EMAがより長期EMAを下からクロスするとポジションを閉じます. この戦略は複数のEMA期間を構成することができ,各EMAは独立して有効化できます. 戦略はすべての有効化されたEMAでクロスオーバーを取引します.

戦略名

マルチタイムフレーム・ダイナミック・EMA・トレーディング・戦略

戦略原則

この戦略は8日,13日,21日,34日,55日,89日,144日,233日という8つのEMA期間を設定しています.これらのEMAは独立して有効または無効にすることができます.

短期のEMAが下から長期のEMAを横切るときに長信号を生成する.短期のEMAが上から長期のEMAを横切るときに退出信号を生成する.したがって,2つのEMAが有効である場合,短期のEMA > longerEMAは長信号であり,短めのEMA < longerEMAは退出信号である.

例えば,55日 EMA と 89日 EMA が有効になっている場合,55日 EMA が 89日 EMA を越えるときにストラテジーは長引く.55日 EMA が 89日 EMA を越えるときは終了する.これは,ストラテジーは使用された EMA 組み合わせを動的に調整し,より長いタイムフレームから短く,またはその逆に切り替えることができます.

ポジションのサイズ設定は,EMAのクロスオーバーごとにポジションのサイズが等しくなるように,口座の自己資本を,EMAが有効になった数で割った Closeで割るように設定されます.

利点分析

  • 異なるEMAを設定することで時間枠を調整する柔軟性
  • 各EMAは独立して有効/無効にすることができます.高度にカスタマイズできます.
  • EMA に均等に分布したポジション,リスク管理に有利
  • 複数の EMA を利用し,異なる市場段階に適した EMA に切り替えることができます.
  • シンプルで明確な論理,理解し,デバッグしやすい

リスク分析

  • EMAだけでは 市場構造を決定することはできません 誤った信号に敏感です
  • Whipsaw Markets は EMA の 過剰な 横断,取引 頻度 の 増加,スライプ コスト を 引き起こす
  • 異なる市場のためのEMAパラメータの最適化が必要
  • 信号の確認のために他の指標が必要かもしれません.

EMAを他の指標,例えばチャネルや振動器と組み合わせてシグナルをフィルターするか,トレンドおよび逆転指標を組み込むことを検討する.また,EMAパラメータを最適化することは非常に重要です.異なる市場のために調整する必要があります.

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

戦略は,いくつかの側面で最適化することができます:

  1. EMAのパラメータを最適化して パラメータスキャンやウォークフォワード分析を行って EMAの組み合わせを最適化します

  2. EMAクロスオーバーにフィルター条件を追加し,誤った信号を避ける.例えば,ボリュームフィルター,波動性フィルターなど.

  3. MACD,KDJ,ボリンジャーバンドなどの他の指標と組み合わせて 互いを補完する利点を得ます

  4. 市場変動やトレンド強度に基づいて,各EMAのポジションサイズを動的に調整する.

  5. ストップ・ロスを最適化し 利得レベルを設定して 最良のリスク・リターン比を達成します

結論

EMAは,短期および中期トレンドを把握するために,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


もっと