デュアル移動平均トレンド追跡取引システムと適応型動的フィルタリング戦略

EMA MA HMA
作成日: 2025-02-20 09:49:23 最終変更日: 2025-02-27 17:51:58
コピー: 0 クリック数: 305
2
フォロー
319
フォロワー

デュアル移動平均トレンド追跡取引システムと適応型動的フィルタリング戦略 デュアル移動平均トレンド追跡取引システムと適応型動的フィルタリング戦略

概要

この戦略は,複数の技術指標を組み合わせたトレンド追跡トレーディングシステムである.これは,主にSMAとインデックスの移動平均の交差信号に基づいており,ヘル移動平均 (HMA) のトレンド帯,ウィリアム指数 (%R),振動高低点分析などの複数の高度な機能を統合し,ダイナミックフィルタリングメカニズムによりより信頼性の高い取引信号を提供します.

戦略原則

戦略の核心的な論理は,以下の重要な要素に基づいています.

  1. 主なトレンド判断指標として周期100のSMAと周期200のEMAを使用
  2. 70サイクルを統合したHMAトレンド帯は,トレンドの動力を確認するために使用されます.
  3. ウィリアム指数 ((%R) を用いて動的サポート/レジスタンス位の計算
  4. 20回周期の回帰ウィンドウで波動の高低を検出する
  5. リアルタイム監視と更新
  6. 開盤初期フィルターと波動率の値 ((0.5%) を設定して偽信号を低減する

入場条件は,価格ステーションの双均線,%R指標の連続3つのK線が上昇し,20より大きい,K線が収束し,閉店価格が前の線より高い,価格が日中の変動値を超えない,を同時に満たす必要があります. 出口条件は,以下のいずれかの条件を満たす:価格が二重平均線を下回る,%R指標が-80未満である.

戦略的優位性

  1. 複数の技術指標の協同検証により,取引信号の信頼性が向上
  2. ダイナミックなフィルタリングメカニズムにより,波動の激しい時期に偽信号を効果的に減らす.
  3. 自動調整されたサポート抵抗値の計算により,戦略は市場への良好な適応性を有する
  4. オープン初期フィルタリングと波動の値制御を含む完全な日内取引管理機構
  5. パラメータは,異なる市場条件に応じて最適化するために,調整可能

戦略リスク

  1. 均線システムは,揺れ動いている市場で頻繁に偽信号を生成する可能性があります.
  2. 多重条件のフィルタリングにより,いくつかの潜在的な取引機会が逃れることがあります.
  3. 固定移動平均の周期は,異なる市場環境で異なったパフォーマンスを示す可能性があります.
  4. 国内取引のフィルタリングは,急速なトレンドの状況で重要な機会を逃す可能性があります.
  5. パラメータを過度に最適化すると,過度にフィットする問題が発生します.

戦略最適化の方向性

  1. 市場変動に適した自己適応均線周期計算の導入
  2. トレンド確認の信頼性を高めるため,取引量分析指標の増強
  3. 資金管理の効率化のための動的ストップ・ストップ・メカニズムの開発
  4. 市場波動率指数に追加し,フィルタリング条件を最適化する値設定
  5. 異なる時間周期における信号の協同性を考慮し,システムの安定性を強化する

要約する

これは,よく設計されたトレンド追跡取引システムであり,複数の技術指標の配合と厳格なフィルタリング機構により,信頼性を保証しながらも,優れた柔軟性を保っています.戦略の最適化スペースは,主にパラメータの自己適応性とリスク管理機構の完善にあります.トレーダーは,実用化される前に,さまざまな市場環境下でのパフォーマンスを十分にテストし,特定の状況に応じてパラメータ設定を調整することをお勧めします.

ストラテジーソースコード
/*backtest
start: 2025-01-01 00:00:00
end: 2025-01-31 23:59:59
period: 30m
basePeriod: 30m
exchanges: [{"eid":"Binance","currency":"TRB_USDT"}]
*/

//@version=5
strategy(title="EMA & MA Crossover Strategy", shorttitle="EMA & MA Crossover Strategy", overlay=true)

// Inputs
LengthMA = input.int(100, minval=1, title="MA Length")
LengthEMA = input.int(200, minval=1, title="EMA Length")
swingLookback = input.int(20, title="Swing Lookback")
Lengthhmaribbon = input.int(70, minval=1, title="HMA Ribbon")
// Input for ignoring the first `n` candles of the day
ignore_n_candles = input.int(1, "Ignore First N Candles", minval=0)
// Input for percentage threshold to ignore high run-up candles
run_up_threshold = input.float(0.5, "Run-up Threshold (%)", minval=0.0)

//====================================================================
hmacondition = ta.hma(close,Lengthhmaribbon)> ta.hma(close,Lengthhmaribbon)[1]

//====================================================================
// Function to drop the first `n` candles
dropn(src, n) =>
    na(src[n]) ? na : src

// Request data with the first `n` candles dropped
valid_candle = not na(dropn(close, ignore_n_candles))
// Check for run-up condition on the previous candle
prev_run_up = (high[1] - low[1]) / low[1] * 100

// Combine conditions: exclude invalid candles and ignore high run-up candles
valid_entry_condition = valid_candle and prev_run_up <= run_up_threshold

//======================================================
// Define the start of a new day based on time
var is_first = false
var float day_high = na
var float day_low = na

// Use time() to detect the start of a new day
t = time("1440") // 1440 = 60 * 24 (one full day in minutes)
is_first := na(t[1]) and not na(t) or t[1] < t

if is_first and barstate.isnew
    day_high := high
    day_low := low
else
    day_high := nz(day_high[1], high)
    day_low := nz(day_low[1], low)

// Update daily high and low
if high > day_high
    day_high := high

if low < day_low
    day_low := low

//====================================================
previousdayclose = request.security(syminfo.tickerid, "D", close)

day_highrange = previousdayclose*.018
//======================================================
length = input(title="Length", defval=14)
src = input(close, "Source")
_pr(length) =>
	max = ta.highest(length)
	min = ta.lowest(length)
	100 * (src - max) / (max - min)
percentR = _pr(length)

//======================================================
higherline = close* 1+((100-(percentR*-1))/100)
lowerline = close* 1-((100-(percentR*-1))/100)
//======================================================
// Moving Averages
xMA = ta.sma(close, LengthMA)
xEMA = ta.sma(xMA, LengthEMA)

// Plot the MA and EMA lines
plot(xMA, color=color.red, title="MA")
plot(xEMA, color=color.blue, title="EMA")

// Find recent swing high and low
recentHigh = ta.highest(high, swingLookback)
recentLow = ta.lowest(low, swingLookback)
//===============================================
emacondition = ta.ema(close,20)>ta.ema(close,30) and ta.ema(close,30)>ta.ema(close,40) and ta.ema(close,40)>ta.ema(close,50) and close >ta.ema(close,20)
// Define Buy Condition
buyCondition1 = (percentR>percentR[1] and percentR[1]>percentR[2] and percentR[2]>percentR[3]) and percentR>-20 and percentR[1]>-20
buyCondition = (close> xMA and close> xEMA) and (close > open and close > close[1]) or xMA>xEMA and close<day_highrange and hmacondition and emacondition

// Define Sell Conditions
sellCondition = (close < xMA and close < xEMA) or xMA<xEMA or percentR<-80

// Strategy Execution
if (buyCondition and buyCondition1 and valid_entry_condition)
    strategy.entry("Buy", strategy.long)

if (sellCondition)
    strategy.close("Buy")  // Close the long position

// Candle coloring for buy/sell indication
barcolor(buyCondition ? color.green : sellCondition ? color.red : na)
plot(higherline, color=color.olive, title="EMA")
plot(higherline, color=color.black, title="EMA")