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

EMAとSMAに基づく戦略をフォローする多指標動的傾向

作者: リン・ハーンチャオチャン開催日:2024年12月27日 14:12:50
タグ:エイマSMAATRPPスーパートレンド

img

戦略の概要

この戦略は,複数の技術指標を組み合わせた動的なトレンドフォローシステムである.市場動向と取引機会を特定するために,ピボットポイント,スーパートレンド指標,移動平均クロスオーバー信号を統合する.この戦略の主要な特徴は,固定タイムフレーム分析アプローチであり,ピボットポイントを通じて信号を検証しながら信号の一貫性を確保する.

戦略の原則

この戦略は,次の基本的メカニズムに基づいて機能します.

  1. 分析のために固定時間枠の価格データを利用し,異なる時間枠からの干渉を避ける.
  2. 基礎を踏まえてトレンドを形成する 8 期間の EMA と 21 期間の EMA に基づいて SMA を計算する.
  3. トレンド方向確認のためのスーパートレンド指標を計算するためにATRとピボットポイントを組み合わせます.
  4. SMAのクロスオーバー信号は,ピボットポイントの3つの期間に発生する場合にのみ有効とみなす.
  5. 取引基準のサポート/レジスタンスレベルを動的に計算し,追跡する

戦略 の 利点

  1. 複数の指標のクロスバリデーションにより信号の信頼性が向上する
  2. 固定タイムフレーム分析は 偽信号の干渉を減らす
  3. ピボットポイントの検証は,取引がキー価格レベルで行われることを保証します.
  4. サポート/レジスタンスをダイナミックに追跡することで,ストップ・ロストとテイク・プロフィートのレベルが決定されます.
  5. スーパートレンド指標は,トレンド方向の追加的な確認を提供します.
  6. 柔軟なパラメータ設定により,異なる市場条件に調整できます

戦略リスク

  1. 複数の指標が信号遅延を引き起こす可能性があります
  2. 市場の範囲で過剰な誤った信号を生む可能性があります.
  3. 固定タイムフレーム分析は,他のタイムフレームで重要な信号を見逃す可能性があります.
  4. ピボットポイントの検証は重要な取引機会を逃す可能性があります.
  5. パラメータの最適化によりオーバーフィッティングが発生する

戦略の最適化方向

  1. 低波動期間の取引頻度を減らすため,波動性フィルタリングメカニズムを導入する
  2. ADX や MACD などのトレンド強度確認指標を追加します.
  3. 市場状況に基づいて動的に調整する適応性パラメータシステムを開発する
  4. 信号の信頼性を向上させるため,音量分析を組み込む
  5. 市場変動に応じて調整する動的ストップ・ロスのメカニズムを導入する

概要

この戦略は,複数の技術指標の組み合わせを通じて,比較的完全なトレンドを追跡する取引システムを確立する.その主な利点は,固定タイムフレーム分析とピボットポイント検証を通じて信号の信頼性を向上させることにある.一定の遅れリスクがあるものの,パラメータ最適化およびリスク管理措置を通じて効果的に制御することができる.トレーダーは,ライブ実装の前に徹底的なバックテストを行い,特定の市場特性に合わせてパラメータを調整することをお勧めする.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Buy Sell Pivot Point", overlay=true)

// Input Parameters
prd = input.int(defval=2, title="Periodo Pivot Point", minval=1, maxval=50)
Factor = input.float(defval=3, title="Fator ATR", minval=1, step=0.1)
Pd = input.int(defval=10, title="Periodo ATR", minval=1)
showpivot = input.bool(defval=false, title="Mostrar Pivot Points")
showlabel = input.bool(defval=true, title="Mostrar Buy/Sell Labels")
showcl = input.bool(defval=false, title="Mostrar PP Center Line")
showsr = input.bool(defval=false, title="Mostrar Support/Resistance")
sma1_length = input.int(defval=8, title="SMA 1")
sma2_length = input.int(defval=21, title="SMA 2")
timeframe_fix = input.timeframe("D", title="Timeframe Fixo")

// Request data from the fixed timeframe
fix_close = request.security(syminfo.tickerid, timeframe_fix, close)
fix_high = request.security(syminfo.tickerid, timeframe_fix, high)
fix_low = request.security(syminfo.tickerid, timeframe_fix, low)
fix_ph = request.security(syminfo.tickerid, timeframe_fix, ta.pivothigh(prd, prd))
fix_pl = request.security(syminfo.tickerid, timeframe_fix, ta.pivotlow(prd, prd))
fix_atr = request.security(syminfo.tickerid, timeframe_fix, ta.atr(Pd))

// Convert Pivot High/Low to valid boolean for conditions
ph_cond = not na(fix_ph)
pl_cond = not na(fix_pl)

// Draw Pivot Points
plotshape(ph_cond and showpivot, title="Pivot High", text="H", style=shape.labeldown, color=color.red, textcolor=color.red, location=location.abovebar, offset=-prd)
plotshape(pl_cond and showpivot, title="Pivot Low", text="L", style=shape.labelup, color=color.lime, textcolor=color.lime, location=location.belowbar, offset=-prd)

// Calculate the Center line using pivot points
var float center = na
lastpp = ph_cond ? fix_ph : pl_cond ? fix_pl : na
if not na(lastpp)
    center := na(center) ? lastpp : (center * 2 + lastpp) / 3

// Upper/Lower bands calculation
Up = center - (Factor * fix_atr)
Dn = center + (Factor * fix_atr)

// Get the trend
var float TUp = na
var float TDown = na
var int Trend = 0
TUp := na(TUp[1]) ? Up : fix_close[1] > TUp[1] ? math.max(Up, TUp[1]) : Up
TDown := na(TDown[1]) ? Dn : fix_close[1] < TDown[1] ? math.min(Dn, TDown[1]) : Dn
Trend := fix_close > TDown[1] ? 1 : fix_close < TUp[1] ? -1 : nz(Trend[1], 1)
Trailingsl = Trend == 1 ? TUp : TDown

// Plot the trend
linecolor = Trend == 1 ? color.lime : Trend == -1 ? color.red : na
plot(Trailingsl, color=linecolor, linewidth=2, title="PP SuperTrend")

// Plot Center Line
plot(showcl ? center : na, color=showcl ? (center < fix_close ? color.blue : color.red) : na, title="Center Line")

// Calculate Base EMAs
ema_8 = ta.ema(fix_close, 8)
ema_21 = ta.ema(fix_close, 21)

// Calculate SMAs based on EMAs
sma1 = ta.sma(ema_8, sma1_length)
sma2 = ta.sma(ema_21, sma2_length)

// Plot SMAs
plot(sma1, color=#ffff00, linewidth=2, title="SMA 1 (based on EMA 8)")
plot(sma2, color=#aa00ff, linewidth=2, title="SMA 2 (based on EMA 21)")

// Initialize variables to track pivot points
var float last_pivot_time = na

// Update the pivot time when a new pivot is detected
if (ph_cond)
    last_pivot_time := bar_index
if (pl_cond)
    last_pivot_time := bar_index

// Calculate the crossover/crossunder signals
buy_signal = ta.crossover(sma1, sma2)  // SMA 8 crossing SMA 21 upwards
sell_signal = ta.crossunder(sma1, sma2)  // SMA 8 crossing SMA 21 downwards

// Ensure signal is only valid if it happens within 3 candles of a pivot point
valid_buy_signal = buy_signal and (bar_index - last_pivot_time <= 3)
valid_sell_signal = sell_signal and (bar_index - last_pivot_time <= 3)

// Plot Buy/Sell Signals
plotshape(valid_buy_signal and showlabel, title="Buy Signal", text="BUY", style=shape.labelup, color=color.lime, textcolor=color.black, location=location.belowbar)
plotshape(valid_sell_signal and showlabel, title="Sell Signal", text="SELL", style=shape.labeldown, color=color.red, textcolor=color.white, location=location.abovebar)

// Get S/R levels using Pivot Points
var float resistance = na
var float support = na
support := pl_cond ? fix_pl : support[1]
resistance := ph_cond ? fix_ph : resistance[1]

// Plot S/R levels
plot(showsr and not na(support) ? support : na, color=showsr ? color.lime : na, style=plot.style_circles, offset=-prd)
plot(showsr and not na(resistance) ? resistance : na, color=showsr ? color.red : na, style=plot.style_circles, offset=-prd)

// Execute trades based on valid signals
if valid_buy_signal
    strategy.entry("Buy", strategy.long)
if valid_sell_signal
    strategy.entry("Sell", strategy.short)

// Alerts
alertcondition(valid_buy_signal, title="Buy Signal", message="Buy Signal Detected")
alertcondition(valid_sell_signal, title="Sell Signal", message="Sell Signal Detected")
alertcondition(Trend != Trend[1], title="Trend Changed", message="Trend Changed")


関連性

もっと