ダイナミック・ムービング・EMAのコンビネーション・量子戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-22 12:34:33
タグ:

img

概要

この戦略は,複数のタイムフレームで動作する動的移動平均の組み合わせ戦略である.トレンド判断とエントリー/エグジット・シグナルのために,異なる長さの指数移動平均 (EMA) を使用する. 戦略名の中のMAXは複数のEMAを意味し,ダイナミックはEMAの長さが調整可能であることを意味します.

戦略の論理

この戦略は,最も速いから最も遅いまで,異なる速度で動く7つのEMAを使用します. 3期EMA,15期EMA,19期EMA,50,100期EMA,150期EMA,200期EMA.これらの7つのEMAは,トラペソイド形式に配置されています.長期と短期信号を生成するために,閉じる価格は,強烈な逆転後トレンドエントリーを確保するために,これらのEMAを順番に突破する必要があります.

さらに,この戦略は,最近の高値の破綻と近値の過去高値の破綻を長期信号の確認に含め,近期低値の破綻と近値の低値の破綻を短期信号の確認に利用します.これは偽の破綻を避けるのに役立ちます.

エクジットルールは,閉じる価格がより速いEMAを順番に緩やかなEMAに向かって破って,トレンド逆転を示唆することを要求する.また,最新のバーの低値/高値が4以上のEMAを破ると,それはそのポジションの出口信号でもある.

利点分析

  • トラペゾイド形を形作る 7 つの異なる速度の EMA を使用することで,トレンド逆転点をより正確に特定することができます.
  • 新高低と過去高低を組み込むことで,誤ったブレイクシグナルが回避されます.
  • 厳格なデュアル エクシート ルールにより,タイムリーなストップ・ロスは可能です.

リスク分析

  • ストップ・ロスのメカニズムがないと 大きな損失の可能性が生じる
  • 二重退出規則が早退を招く可能性があります
  • 取引頻度や手数料のコストを増加させる.

解決策:

  1. 固定パーセントストップ損失とトラッキングストップ損失を追加します.
  2. 退出EMA長さを調整し,二重退出規則の厳格性を低下させる
  3. 取引頻度を減らすために EMA の長さを増加させる

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

  • 固定パーセントストップ損失,トライリングストップ損失などのストップ損失メカニズムを追加
  • 最適な組み合わせを見つけるために EMA パラメータを最適化
  • MACD,ATR,KDJなどの他の指標をフィルター信号に追加
  • トレンドにおける二次動向を把握するために範囲/チャネル戦略と組み合わせる
  • ポジションサイズルールを追加することを検討する

結論

この戦略は,トレンドを決定するために異なるスピードの7つのEMAを使用し,逆転を検出するために二重出口規則を使用する明確な論理を持っています. しかし,大きな損失リスクにつながるストップロスのメカニズムはありません. そして,早めに退出することがあります. ストップロスの追加,パラメータチューニング,インジケーターフィルタリングなどの側面では改善ができます.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Crypto MAX Trend", shorttitle="Crypto MAX", overlay = true  )
Length = input(3, minval=1)
Length2 = input(15, minval=1)
Length3 = input(19, minval=1)
//Length33 = input(25, minval=1)
Length4 = input(50, minval=1)
Length44 = input(100, minval=1)
Length5 = input(150, minval=1)
Length6 = input(171, minval=1)
Length66 = input(172, minval=1)

xPrice = input(close)

xEMA1 = ema(xPrice, Length)
xEMA2 = ema(xPrice, Length2)
xEMA3 = ema(xPrice, Length3)
//xEMA33 = ema(xPrice, Length33)
xEMA4 = ema(xPrice, Length4)
xEMA44 = ema(xPrice, Length44)
xEMA5 = ema(xPrice, Length5)
xEMA6 = ema(xPrice, Length6)
xEMA66 = ema(xPrice, Length66)

// plot(xEMA1, color=color.white)
// plot(xEMA2, color=color.red)
// plot(xEMA3, color=color.green)
// plot(xEMA4, color=color.purple)
// plot(xEMA44, color=color.gray)
// plot(xEMA5, color=color.maroon)
// plot(xEMA6, color=color.blue)
// plot(xEMA66, color=color.orange)


fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true



long = close >  xEMA1 and xEMA1 > xEMA2 and xEMA2 > xEMA3  and xEMA3 > xEMA4  and xEMA4 > xEMA44 and xEMA44 > xEMA5 and xEMA5> xEMA6  and xEMA6> xEMA66  and close > high[1] and high[1] > high[2] and close > high[3] and close > high[4] and close > high[5] and high[5] > high[6] and time_cond
short = close < xEMA1 and xEMA1 < xEMA2 and xEMA2 < xEMA3  and xEMA3 < xEMA4  and xEMA4 < xEMA44 and xEMA44 < xEMA5 and xEMA5< xEMA6 and  xEMA6< xEMA66 and close < low[1] and low[1] < low[2] and close < low[3] and close < low[4] and close< low[5] and low[5] < low[6] and time_cond

notlong = close < xEMA1
strategy.entry("long",1,when=long)
strategy.entry("short",0,when=short)


exitlong1 = xEMA1 < xEMA2 and xEMA2 < xEMA3 and xEMA3 < xEMA4
exitlong2 = crossunder(low,xEMA1) and crossunder(low,xEMA2) and crossunder(low,xEMA3) and crossunder(low,xEMA4)
exitshort1 = xEMA1 > xEMA2 and xEMA2 > xEMA3 and xEMA3 > xEMA4
exitshort2 = crossover(high,xEMA1) and crossover(high,xEMA2) and crossover(high,xEMA3) and crossover(high,xEMA4)

strategy.close("long", when = exitlong1 or exitlong2)
strategy.close("short", when= exitshort1 or exitshort2) 






 


もっと