マルチEMAの上昇傾向戦略

作者: リン・ハーンチャオチャン開催日: 2024-01-22 12:04:05
タグ:

img

概要

マルチEMAブイッシュトレンド戦略は,トレンド決定のために異なる期間の複数の指数関数移動平均値 (EMA) をベースとしたトレンドフォロー戦略である. 10日間のEMA以上の価格ブレイクと他の長期間のEMAがブイッシュアライナメントにあるとき,長引く.そして8%のストップロスを利用して利益をロックする.

戦略の論理

この戦略は,10日,20日,50日,100日,150日および200日間の6つのEMAを使用しています.これらのEMAは,市場の現在の周期的な段階を決定するために使用されます.より短い期間のEMA (例えば10日) がより長い期間のEMA (例えば20日,50日) を交差すると,市場は牛傾向のマークアップ段階に入っていることを示します.

具体的には,次の条件が満たされている場合,戦略は長く続くでしょう.

  1. 10 日間 EMA は 20 日間 EMA より高い
  2. 20日間のEMAは50日間のEMAより高い
  3. 100 日間 EMA は 150 日間 EMA より高い
  4. 150 日間 EMA は 200 日間 EMA より高い
  5. 閉じる価格が10日間のEMAを横切る

ロングポジションを開いた後,8%のトライリングストップロスは利益をロックするために使用されます.これは,入場価格から価格が8%以上下がらない限りポジションがオープンに保たれるということです.引き下げが8%を超えると,ポジションはストップロスのために閉鎖されます.

要するに この戦略の鍵となるアイデアは 複数のEMAアライナメントによって確認されたときに オイールトレンドに入って 利益をロックするためにストップロスを利用することです

利点分析

マルチEMAの高値トレンド戦略には以下の主要強みがあります.

  1. 偽のブレイクを効果的にフィルタリングし,不必要な取引を減らすことで,マーカップサイクルを把握することができます.
  2. 複数のEMAフィルターはストップロスの確率を低くし,より安全なポジション保持を可能にします.
  3. 8%のストップ・ロスは 狭すぎたり 緩すぎたりせず 利益と損失のバランスをとっています
  4. この戦略は,さまざまな製品で最適化するために柔軟なパラメータ調整を可能にします.

リスク分析

この戦略には注意すべきリスクもあります.

  1. EMAの配列は100%のケースで 傾向の方向性を保証できません
  2. 8%のトレイルストップは 巨大なトレンドで 利益を失わせるかもしれません
  3. EMAシステムには固有の遅れがあり,ターニングポイントの確認はわずかに遅れる可能性があります.

これらのリスクに対処するために EMA期間を調整したり 判断力を向上させる補助指標を組み込むことで最適化することができます

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

この戦略の特徴を考えると,将来の最適化は次の側面に焦点を当てることができます.

  1. 適正なパラメータを見つけるために,EMAの異なる組み合わせと周期セットをテストします.
  2. 不必要なエントリを避けるためにトレンド強さを測定するために波動性指数指標を追加します.
  3. MACD,KDJなどの フィルタリング指標を追加します
  4. 機械学習アルゴリズムを動的ストップ損失実装に使う.

結論

マルチEMAブルトレンド戦略は,トレンド決定とリスク制御をバランスする,堅牢で信頼性の高いトレンドフォローシステムである.パラメータチューニングとアルゴリズム最適化によって改善の可能性は依然として高い.これは試し,研究する価値のある効果的な戦略である.


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

//@version=5
strategy('SirSeff\'s EMA Rainbow', overlay=true)
// Testing Start dates
testStartYear = input(2000, 'Backtest Start Year')
testStartMonth = input(1, 'Backtest Start Month')
testStartDay = input(1, 'Backtest Start Day')
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)
//Stop date if you want to use a specific range of dates
testStopYear = input(2100, 'Backtest Stop Year')
testStopMonth = input(12, 'Backtest Stop Month')
testStopDay = input(30, 'Backtest Stop Day')
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
// Component Code Stop

//TSP
trailStop = input.float(title='Long Trailing Stop (%)', minval=0.0, step=0.1, defval=8) * 0.01

longStopPrice = 0.0
longStopPrice := if strategy.position_size > 0
    stopValue = close * (1 - trailStop)
    math.max(stopValue, longStopPrice[1])
else
    0

//PLOTS
plot(series=strategy.position_size > 0 ? longStopPrice : na, color=color.new(color.red, 0), style=plot.style_linebr, linewidth=1, title='Long Trail Stop', offset=1, title='Long Trail Stop')
plot(ta.ema(close, 20))
plot(ta.ema(close, 50))
plot(ta.ema(close, 100))
plot(ta.ema(close, 150))
plot(ta.ema(close, 200))

//OPEN
longCondition =  ta.ema(close, 10) > ta.ema(close, 20) and ta.ema(close, 20) > ta.ema(close, 50) and ta.ema(close, 100) > ta.ema(close, 150) and ta.ema(close, 150) > ta.ema(close, 200)
if longCondition and ta.crossover(close,ta.ema(close,10)) and testPeriod()
    strategy.entry("BUY1", strategy.long)
    
if longCondition and ta.crossover(ta.ema(close,10),ta.ema(close,20)) and testPeriod()
    strategy.entry("BUY2'", strategy.long)

//CLOSE @ TSL
if strategy.position_size > 0 and testPeriod()
    strategy.exit(id='TSP', stop=longStopPrice)
    


もっと