トリプル・EMA・クロスオーバー・ブレイクアウト戦略

作者: リン・ハーンチャオチャン, 日付: 2023-12-28 15:56:54
タグ:

img

概要

トリプルEMAクロスオーバーブレイクストラテジーは,3倍指数移動平均 (EMA) インディケーターを使用して,市場のトレンド方向を決定し,トレンドブレイクポイントにエントリーします.また,信号信頼性をフィルターするためにキャンドルスタイルのパターンを組み合わせます.

戦略の論理

この戦略は主に以下の原則に基づいています.

  1. 異なる期間 (200日,50日,20日) の3つの EMA を使用して,主要,中期,短期市場の動向を決定します.

  2. 短期EMA (20日) が中期EMA (50日) を超えると,買い信号が生成される.低くなると,売り信号が生成される.

  3. 信号の信頼性を確認するためにキャンドルスタイルのパターンを組み合わせます.前回のキャンドルの高値 (低値) よりも2番目のキャンドルの閉じる価格が高く (低い) なら,ブレイクアウトは信頼性があると考えられます.

  4. ストップ・ロスを設定し 利得レベルを設定し 合理的な価格変動を超えたリスクを制限します

利点分析

  1. 複数の EMA を使用することで,トレンド判断の精度が向上します.

  2. 偽の信号をキャンドルスタイクパターンでフィルタリングすることで 不必要な取引リスクが回避されます

  3. ストップ損失と利益を取ることは,単一の取引損失を効果的に制御します.

リスク分析

  1. 市場差異のある市場では,EMAは過剰な偽信号を生成し,市場の方向性を決定することができません.

  2. 単一指標システムは 複雑な市場状況において 限られた能力を有します

  3. 高料金市場での収益性の低下を招く取引コストを無視する.

最適化

  1. MACDやKDJなどの他の指標を導入して 統合されたシステムを作り 判断の正確さを向上させる

  2. 特定のシンボルやタイムフレームをバックテストしてパラメータを最適化して 戦略をより良く調整します

  3. 取引量を増やして 低量の偽信号を避ける

結論

トリプルEMAクロスオーバーブレイクアウト戦略は,EMAクロスオーバーを使用して市場動向を決定し,エントリータイミングを見つけるための明確でわかりやすい論理を持っています.しかし,複雑な市場状況に対処する際にいくつかの制限もあります.他の指標と組み合わせ,より多様な取引環境に適応するためにパラメータを最適化することが推奨されています.


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

//@version=5
strategy("GHG RETRACEMENT MODE 1", overlay=true)

entryLevel1 = input(0.5, "ENTRY LEVEL 1")
entryLevel2 = input(0.25, "ENTRY LEVEL 2")
entryLevel3 = input(0.0, "ENTRY LEVEL 3")

stopLevel = input(-0.35, "STOP LEVEL")
tpLevel = input(0.88, "TP LEVEL")
dontUseEma = input(false, "Don't Use EMA")


get_level(level, level100, level0) =>
    level * (level100 - level0) + level0

buySignal = close[2] < open[2] and close[1] > open[1] and close[0] > open[0] and high[0] > open[2] and high[1] < high[2]
sellSignal = close[2] > open[2] and close[1] < open[1] and close[0] < open[0] and low[0] < open[2] and low[1] > low[2]

if buySignal and (close[0] > ta.ema(close, 200) or dontUseEma)
    l = label.new(bar_index, na)
    entryPrice1 = get_level(entryLevel1, high[0], low[2])
    entryPrice2 = get_level(entryLevel2, high[0], low[2])
    entryPrice3 = get_level(entryLevel3, high[0], low[2])
    
    exitPrice = get_level(tpLevel, high[0], low[2])
    stopPrice = get_level(stopLevel, high[0], low[2])
    
    strategy.order("BUY 1", strategy.long, comment="BUY 1", limit=entryPrice1)
    strategy.exit("exit", "BUY 1", limit=high[0], stop=stopPrice)
    strategy.order("BUY 2", strategy.long, comment="BUY 2", limit=entryPrice2)
    strategy.exit("exit", "BUY 2", limit=high[0], stop=stopPrice)

    label.set_text(l, "Buy => " + str.tostring(close[2]) + "\nSL=> " + str.tostring(stopPrice) + "\nTP => " + str.tostring(exitPrice) )
    label.set_color(l, color.green)
    label.set_yloc(l, yloc.belowbar)
    label.set_style(l, label.style_label_up)
    
if sellSignal and (close[0] < ta.ema(close, 200) or dontUseEma)
    a = label.new(bar_index, na)
    entryPrice1 = get_level(entryLevel1, low[0], high[2])
    entryPrice2 = get_level(entryLevel2, low[0], high[2])
    entryPrice3 = get_level(entryLevel3, low[0], high[2])
    
    exitPrice = get_level(tpLevel, low[0], high[2])
    stopPrice = get_level(stopLevel,low[0], high[2])
    
    strategy.order("SELL 1", strategy.short, comment="SELL 1", limit=entryPrice1)
    strategy.exit("exit", "SELL 1", limit=low[0], stop=stopPrice) 
    strategy.order("SELL 2", strategy.short, comment="SELL 2", limit=entryPrice2)
    strategy.exit("exit", "SELL 2", limit=low[0], stop=stopPrice) 

    label.set_text(a,"Sell => " + str.tostring(close[2]) + "\nSL=> " + str.tostring(stopPrice) + "\nTP => " + str.tostring(exitPrice) )
    label.set_color(a, color.red)
    label.set_yloc(a, yloc.abovebar)
    label.set_style(a, label.style_label_down)
   


もっと