
この戦略は,複数の技術指標を組み合わせたトレンド追跡トレーディングシステムである.これは,主にSMAとインデックスの移動平均の交差信号に基づいており,ヘル移動平均 (HMA) のトレンド帯,ウィリアム指数 (%R),振動高低点分析などの複数の高度な機能を統合し,ダイナミックフィルタリングメカニズムによりより信頼性の高い取引信号を提供します.
戦略の核心的な論理は,以下の重要な要素に基づいています.
入場条件は,価格ステーションの双均線,%R指標の連続3つのK線が上昇し,20より大きい,K線が収束し,閉店価格が前の線より高い,価格が日中の変動値を超えない,を同時に満たす必要があります. 出口条件は,以下のいずれかの条件を満たす:価格が二重平均線を下回る,%R指標が-80未満である.
これは,よく設計されたトレンド追跡取引システムであり,複数の技術指標の配合と厳格なフィルタリング機構により,信頼性を保証しながらも,優れた柔軟性を保っています.戦略の最適化スペースは,主にパラメータの自己適応性とリスク管理機構の完善にあります.トレーダーは,実用化される前に,さまざまな市場環境下でのパフォーマンスを十分にテストし,特定の状況に応じてパラメータ設定を調整することをお勧めします.
/*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")