資源の読み込みに... 荷物...

アドバンスト・ウェーブトレンドとEMAのリボン・フュージョン・トレーディング戦略

作者: リン・ハーンチャオチャン, 日付: 2025-01-06 15:21:57
タグ:WTエイマHLC3SMAマルチ

img

概要

この戦略は,WaveTrendオシレーター指標とEMAリボンを組み合わせた高度な取引システムである.これらの2つの技術指標を統合することにより,市場のトレンド逆転点を正確に把握できる取引戦略を作成する.この戦略は,資本を保護しながらより高い収益を追求するために動的なストップ・ロストとテイク・プロフィート設定を使用する.

戦略の原則

戦略の核心は,トレード信号を識別するためにWaveTrendインジケーターと8つのEMAラインをシネージ的に利用することにある.WaveTrendインジケーターは,価格と移動平均の間の偏差を計算することによって市場過剰購入および過剰販売状況を測定する.EMAリボンでは,異なる期間の移動平均のクロスオーバーを通じてトレンド方向を確認する.具体的には:

  1. EMA2 が EMA8 を越えたとき,または血のダイヤモンドパターンのない青い三角形信号が表示されたとき (EMA2 が EMA3 を越えたとき) 長信号が起動します.
  2. EMA8 が EMA2 を越えたり,血のダイヤのパターンが現れたりすると短信号が発信されます.
  3. ストップ・ロスは,前回の反信号の後の極点に設定され,リスクを効果的に制御します.
  4. 利得目標はストップ損失距離の2〜3倍に設定され,良いリスク・リターン比を示しています

戦略 の 利点

  1. 双重確認メカニズムは取引信号の信頼性を向上させる
  2. ダイナミックストップ・ロスの設定は,市場の変動により適しています.
  3. 明確なリスク/報酬比設定
  4. EMAのリボンにより,市場全体の動向が決定される
  5. WaveTrend インディケーターは,市場の過剰購入/過剰販売状態を効果的に識別します.
  6. 分かりやすく実行できる 明確な戦略論理

戦略リスク

  1. 異なる市場で頻繁に誤った信号を生む可能性があります
  2. ダイナミックストップは,激しい波動の際に容易に引き起こすことができます.
  3. 過去データに基づく指標は,市場体制の変化中に失敗する可能性があります.
  4. 複数の技術指標が信号遅延を引き起こす可能性があります 解決策:
  • 波動性フィルターを追加して,変動市場における誤った信号を減らす
  • ストップ・ロスの設定を幅広くする
  • トレンド強度確認メカニズムを追加する

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

  1. 動的ストップ・ロスの調整のために波動性指標 (ATRなど) を導入する
  2. シグナル信頼性を向上させるためにボリューム確認メカニズムを追加する
  3. 強いトレンド市場での取引にトレンド強度フィルターを追加することを検討する
  4. WaveTrend パラメータを最適化し,異なる市場状況により適性
  5. 異なる時間枠における信号の相乗効果を研究する

概要

波動トレンドとEMAリボンを使用することで,主要なトレンドを把握し,トレンド逆転点に間に合うことができる.動的なストップ・ロストとテイク・プロフィート管理メカニズムは,良いリスク管理能力を備えている.戦略最適化の潜在力は,主にシグナルフィルタリングとリスク管理を改善することにある.


/*backtest
start: 2024-12-06 00:00:00
end: 2025-01-04 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("VuManChu Cipher A Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.fixed, default_qty_value=1.0)

// === 函数定义 ===
// WaveTrend函数
f_wavetrend(_src, _chlen, _avg, _malen) =>
    _esa = ta.ema(_src, _chlen)
    _de = ta.ema(math.abs(_src - _esa), _chlen)
    _ci = (_src - _esa) / (0.015 * _de)
    _tci = ta.ema(_ci, _avg)
    _wt1 = _tci
    _wt2 = ta.sma(_wt1, _malen)
    [_wt1, _wt2]

// EMA Ribbon函数
f_emaRibbon(_src, _e1, _e2, _e3, _e4, _e5, _e6, _e7, _e8) =>
    _ema1 = ta.ema(_src, _e1)
    _ema2 = ta.ema(_src, _e2)
    _ema3 = ta.ema(_src, _e3)
    _ema4 = ta.ema(_src, _e4)
    _ema5 = ta.ema(_src, _e5)
    _ema6 = ta.ema(_src, _e6)
    _ema7 = ta.ema(_src, _e7)
    _ema8 = ta.ema(_src, _e8)
    [_ema1, _ema2, _ema3, _ema4, _ema5, _ema6, _ema7, _ema8]

// === 变量声明 ===
var float stopPrice = na      // 止损价格变量
var float targetPrice = na    // 止盈价格变量
var float lastLongPrice = na
var float lastShortPrice = na
var float highestSinceLastLong = na
var float lowestSinceLastShort = na

// === WaveTrend参数 ===
wtChannelLen = input.int(9, title = 'WT Channel Length')
wtAverageLen = input.int(13, title = 'WT Average Length')
wtMASource = hlc3
wtMALen = input.int(3, title = 'WT MA Length')

// === EMA Ribbon参数 ===
ema1Len = input.int(5, "EMA 1 Length")
ema2Len = input.int(11, "EMA 2 Length")
ema3Len = input.int(15, "EMA 3 Length")
ema4Len = input.int(18, "EMA 4 Length")
ema5Len = input.int(21, "EMA 5 Length")
ema6Len = input.int(24, "EMA 6 Length")
ema7Len = input.int(28, "EMA 7 Length")
ema8Len = input.int(34, "EMA 8 Length")

// === 计算指标 ===
// WaveTrend计算
[wt1, wt2] = f_wavetrend(wtMASource, wtChannelLen, wtAverageLen, wtMALen)

// WaveTrend交叉条件
wtCross = ta.cross(wt1, wt2)
wtCrossDown = wt2 - wt1 >= 0

// EMA Ribbon计算
[ema1, ema2, ema3, ema4, ema5, ema6, ema7, ema8] = f_emaRibbon(close, ema1Len, ema2Len, ema3Len, ema4Len, ema5Len, ema6Len, ema7Len, ema8Len)

// === 交易信号 ===
longEma = ta.crossover(ema2, ema8)
shortEma = ta.crossover(ema8, ema2)
redCross = ta.crossunder(ema1, ema2)
blueTriangle = ta.crossover(ema2, ema3)
redDiamond = wtCross and wtCrossDown
bloodDiamond = redDiamond and redCross

// 更新最高最低价
if not na(lastLongPrice)
    highestSinceLastLong := math.max(high, nz(highestSinceLastLong))
if not na(lastShortPrice)
    lowestSinceLastShort := math.min(low, nz(lowestSinceLastShort))

// === 交易信号条件 ===
longCondition = longEma or (blueTriangle and not bloodDiamond)
shortCondition = shortEma or bloodDiamond

// === 执行交易 ===
if (longCondition)
    // 记录多头入场价格
    lastLongPrice := close
    // 重置最高价跟踪
    highestSinceLastLong := high
    
    stopPrice := nz(lowestSinceLastShort, close * 0.98)  // 使用前一个空头信号后的最低价作为止损
    float riskAmount = math.abs(close - stopPrice)
    targetPrice := close + (riskAmount * 2)  // 止盈为止损距离的2倍
    
    strategy.entry("做多", strategy.long)
    strategy.exit("多头止盈止损", "做多", limit=targetPrice, stop=stopPrice)

if (shortCondition)
    // 记录空头入场价格
    lastShortPrice := close
    // 重置最低价跟踪
    lowestSinceLastShort := low
    
    stopPrice := nz(highestSinceLastLong, close * 1.02)  // 使用前一个多头信号后的最高价作为止损
    float riskAmount = math.abs(stopPrice - close)
    targetPrice := close - (riskAmount * 3)  // 止盈为止损距离的2倍
    
    strategy.entry("做空", strategy.short)
    strategy.exit("空头止盈止损", "做空", limit=targetPrice, stop=stopPrice)

// === 绘制信号 ===
plotshape(longCondition, style=shape.triangleup, color=color.green, location=location.belowbar, size=size.small, title="做多信号")
plotshape(shortCondition, style=shape.triangledown, color=color.red, location=location.abovebar, size=size.small, title="做空信号")

// 绘制止损线
plot(strategy.position_size > 0 ? stopPrice : na, color=color.red, style=plot.style_linebr, linewidth=2, title="多头止损线")
plot(strategy.position_size < 0 ? stopPrice : na, color=color.red, style=plot.style_linebr, linewidth=2, title="空头止损线")

// 绘制止盈线
plot(strategy.position_size > 0 ? targetPrice : na, color=color.green, style=plot.style_linebr, linewidth=2, title="多头止盈线")
plot(strategy.position_size < 0 ? targetPrice : na, color=color.green, style=plot.style_linebr, linewidth=2, title="空头止盈线")

関連性

もっと