
यह एक बहु-तकनीकी सूचक-आधारित प्रवृत्ति ट्रैकिंग रणनीति है, जो गतिशील रूप से स्थिति को समायोजित करने के माध्यम से ट्रेडिंग की अवधि को पूरा करती है। यह रणनीति मुख्य रूप से बाजार की प्रवृत्ति विश्लेषण और ट्रेडिंग सिग्नल उत्पन्न करने के लिए सूचकांक चलती औसत (ईएमए), सापेक्ष रूप से मजबूत सूचक (आरएसआई) और प्रवृत्ति दिशा सूचकांक (एडीएक्स) का उपयोग करती है, जबकि वास्तविक अस्थिरता की चौड़ाई (एटीआर) का उपयोग गतिशील स्टॉप-लॉस और लाभ लक्ष्य निर्धारित करने के लिए किया जाता है।
रणनीति एक प्रवृत्ति ट्रैकिंग ट्रेडिंग प्रणाली है जिसमें कई तकनीकी संकेतक शामिल हैं। यह मुख्य रूप से ईएमए के माध्यम से मूल्य प्रवृत्ति की दिशा निर्धारित करता है, आरएसआई बाजार के ओवरबॉट और ओवरसोल की स्थिति का आकलन करता है, एडीएक्स प्रवृत्ति की ताकत को सत्यापित करता है, और अंत में एटीआर का उपयोग करके स्थिति आकार और जोखिम प्रबंधन पैरामीटर को गतिशील रूप से समायोजित करता है। रणनीति कई प्रकार के स्थिति गणना विधियों का समर्थन करती है, जिसमें खाते का प्रतिशत, स्थिर पूंजी और स्थिर अनुबंधों की संख्या शामिल है।
यह एक व्यापक रूप से कई तकनीकी संकेतकों का उपयोग कर प्रवृत्ति को ट्रैक करने की रणनीति है, जो बहुआयामी प्रवृत्ति की पुष्टि और बेहतर जोखिम प्रबंधन तंत्र के माध्यम से अपेक्षाकृत स्थिर व्यापार को प्राप्त करता है। इस रणनीति का लाभ प्रणालीगत प्रवृत्ति की पुष्टि तंत्र और लचीली स्थिति प्रबंधन में है, लेकिन इस पर ध्यान देने की आवश्यकता है कि संकेतकों की पिछड़ापन और बाजार की स्थिति के अनुकूलता जैसे मुद्दों को भी ध्यान में रखा जाए। निरंतर अनुकूलन और जोखिम नियंत्रण में सुधार के माध्यम से, इस रणनीति को विभिन्न प्रकार के बाजार की स्थिति में स्थिर प्रदर्शन बनाए रखने की उम्मीद है।
/*backtest
start: 2025-02-10 00:00:00
end: 2025-02-17 00:00:00
period: 45m
basePeriod: 45m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA Momentum Scalper", shorttitle="EMS", overlay=true, pyramiding=0)
// === ПАРАМЕТРЫ ===
posSizeMethod = input.string("Capital %", title="Метод расчета позиции", options=["% Based", "Capital %", "Fixed Capital Based", "Fixed Contract Size"])
riskPerTrade = input.float(3, title="Риск на сделку (%)", minval=0.1, maxval=100, step=0.5) / 100
capitalPctPerTrade = input.float(10, title="Доля капитала на сделку (%)", minval=0.1, maxval=100, step=0.5) / 100
fixedCapitalAmount = input.float(100, title="Фиксированная сумма капитала", minval=0)
fixedContractSize = input.int(10, title="Фиксированный размер контракта")
atrLength = input.int(14, title="Длина ATR")
atrMultiplierSL = input.float(2.5, title="ATR множитель для SL")
atrMultiplierTP = input.float(1.5, title="ATR множитель для TP")
timeoutBars = input.int(20, title="Выход через X баров, если нет TP/SL")
emaLength = input.int(50, title="Длина EMA")
rsiLength = input.int(14, title="Длина RSI")
rsiOverbought = input.int(70, title="RSI перекупленность")
rsiOversold = input.int(30, title="RSI перепроданность")
adxLength = input.int(14, title="Длина ADX")
adxThreshold = input.float(20, title="Порог ADX для тренда")
leverage = input.int(15, title="Плечо", minval=1, maxval=100)
// === ИНДИКАТОРЫ ===
atr = ta.atr(atrLength)
ema = ta.ema(close, emaLength)
rsi = ta.rsi(close, rsiLength)
// === ADX ===
diPlus = ta.rma(math.max(high - high[1], 0), adxLength)
diMinus = ta.rma(math.max(low[1] - low, 0), adxLength)
dx = 100 * math.abs(diPlus - diMinus) / (diPlus + diMinus)
adx = ta.rma(dx, adxLength)
// === УСЛОВИЯ ВХОДА ===
longEntry = ta.crossover(close, ema) and rsi > 50 and adx > adxThreshold
shortEntry = ta.crossunder(close, ema) and rsi < 50 and adx > adxThreshold
// === РАСЧЕТ РАЗМЕРА ПОЗИЦИИ ===
var float qty = na
riskAmount = strategy.equity * riskPerTrade
stopLossDistance = atr * atrMultiplierSL
positionSize = riskAmount / stopLossDistance
if (posSizeMethod == "% Based")
qty := strategy.equity * riskPerTrade / (atr * atrMultiplierSL)
else if (posSizeMethod == "Capital %")
qty := strategy.equity * capitalPctPerTrade / close
else if (posSizeMethod == "Fixed Capital Based")
qty := fixedCapitalAmount / close
else if (posSizeMethod == "Fixed Contract Size")
qty := fixedContractSize
qty := qty * leverage // Умножаем на плечо
// === СТОП-ЛОСС И ТЕЙК-ПРОФИТ ===
entryPrice = close
stopLossLong = entryPrice - atrMultiplierSL * atr
stopLossShort = entryPrice + atrMultiplierSL * atr
takeProfit1 = entryPrice + atrMultiplierTP * atr * (longEntry ? 1 : -1)
takeProfit2 = entryPrice + atrMultiplierTP * atr * (longEntry ? 2 : -2) / 1.5
// === ТРЕЙЛИНГ-СТОП ===
trailStopDistance = atr * atrMultiplierSL
if (longEntry)
strategy.entry("Long", strategy.long, qty=qty)
strategy.exit("Exit Long", "Long", stop=stopLossLong, limit=takeProfit1, trail_points=trailStopDistance)
alertMessage = syminfo.ticker + " LONG\n" +
"Leverage: Cross " + str.tostring(leverage) + "x\n" +
"➡️ Entry: " + str.tostring(entryPrice) + "\n" +
"🟢 Take profit 1: " + str.tostring(takeProfit1) + "\n" +
"🛑 Stop loss: " + str.tostring(stopLossLong)
alert(alertMessage, alert.freq_once_per_bar_close)
if (shortEntry)
strategy.entry("Short", strategy.short, qty=qty)
strategy.exit("Exit Short", "Short", stop=stopLossShort, limit=takeProfit1, trail_points=trailStopDistance)
alertMessage = syminfo.ticker + " SHORT\n" +
"Leverage: Cross " + str.tostring(leverage) + "x\n" +
"➡️ Entry: " + str.tostring(entryPrice) + "\n" +
"🟢 Take profit 1: " + str.tostring(takeProfit1) + "\n" +
"🛑 Stop loss: " + str.tostring(stopLossShort)
alert(alertMessage, alert.freq_once_per_bar_close)
// === ВИЗУАЛИЗАЦИЯ ===
plotshape(longEntry, color=color.green, style=shape.labelup, location=location.belowbar, text="BUY")
plotshape(shortEntry, color=color.red, style=shape.labeldown, location=location.abovebar, text="SELL")
plot(ema, color=color.blue, title="EMA")
bgcolor(rsi > rsiOverbought or rsi < rsiOversold ? color.new(color.gray, 80) : na)