
Тренд-регулируемая динамическая входная стратегия для создания многосторонних позиций в ожидании регресса после краткосрочного изменения тренда, а также для трейдеров, которые немедленно выходят на верхние позиции, когда рыночные условия благоприятствуют нисходящему движению. Эта стратегия объединяет в себе перекрестные подтверждения тренда SMA, фиксированные процентные регулируемые точки входа, а также регулируемые параметры управления рисками для оптимального исполнения торгов.
В основе стратегии лежит использование пересечения простых движущихся средних (SMA) в течение 10 и 25 циклов для подтверждения направления тренда в сочетании с 150-циклическим индексом движущихся средних (EMA) в качестве дополнительного фильтрующего условия для пустого трейдинга. Многоуровневые сделки не вводятся сразу после пересечения SMA, а вводятся после того, как цена будет отклонена до определенного процента. Этот метод оптимизирует цену входа и повышает риск-вознаграждение.
Эта стратегия состоит из нескольких ключевых частей:
Механизм признания тенденций:
Механизм многоголосного перенаправления:
Правила головоломки:
Управление рисками и стратегии выхода:
Стратегия использует постоянные переменные, чтобы отслеживать сигнал обратного вызова и гарантировать, что он поступает в нужное время. Когда нет позиций, система перезапускает все знаки и уровни, чтобы подготовиться к следующему торговому сигналу.
После глубокого анализа кода, эта стратегия показала следующие значительные преимущества:
Оптимизированное время поступления:
Всестороннее управление рисками:
Фильтрация на основе тенденций:
Визуальные отзывы:
Высокая степень адаптации:
Несмотря на все преимущества данной стратегии, следует учитывать следующие риски:
Риски быстрого рынка:
Рыночные потрясения:
Ограничения в управлении рисками с фиксированными баллами:
Чрезмерная зависимость от технических показателей:
Риски оптимизации параметров:
Основываясь на анализе кода, можно выделить несколько ключевых направлений, в которых эта стратегия может быть оптимизирована:
Динамическое управление рисками:
stopDistance = input.float(2.0) * ta.atr(14)РасчетФильтрация интенсивности тренда:
Анализ многовременных рамок:
Интеллектуальная обратная связь:
Подтверждение объема сделки:
Параметры адаптации:
Тренд-регулирование, регулирующее риски Динамическая входная стратегия является тщательно разработанной торговой системой, которая сочетает в себе идентификацию тенденций, оптимизацию входа и всестороннее управление рисками. Ожидая ценового отклонения и последующего входа в систему, стратегия получает более высокий коэффициент цены входа и возврата на риск, чем простая система перекрестных SMA.
Ключевым преимуществом этой стратегии является ее гибкость и настраиваемость, позволяющая трейдерам корректировать параметры в соответствии с личными предпочтениями в отношении риска и рыночными условиями. В то же время, интегрированные функции управления рисками (включая остановки, остановки и страховые пункты) обеспечивают полную защиту средств.
Тем не менее, в стратегии также есть некоторые ограничения, в том числе ограничения по управлению рисками в условиях шокирующих рынков и фиксированных баллов. С помощью оптимизации рекомендаций, таких как динамическое управление рисками, фильтрация силы тренда и подтверждение объема торгов, можно значительно повысить устойчивость стратегии и ее общую производительность.
Для трейдеров, занимающихся торговлей на колебаниях, это идеальная базовая стратегия, которая может быть дополнительно настроена в соответствии с индивидуальным стилем торговли и целями. С помощью разумной настройки параметров и постоянной регулировки мониторинга эта стратегия имеет потенциал для обеспечения стабильных результатов торговли в различных рыночных условиях.
/*backtest
start: 2024-08-01 00:00:00
end: 2025-03-25 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("BTCUSD with adjustable sl,tp",
overlay=true,
initial_capital=10000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=10,
calc_on_every_tick=true)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ USER INPUTS
// ─────────────────────────────────────────────────────────────────────────────
longSignalStyle = input.string("Label Up", title="Long Signal Style", options=["Label Up", "Arrow Up", "Cross"])
shortSignalStyle = input.string("Label Down", title="Short Signal Style", options=["Label Down", "Arrow Down", "Cross"])
// Adjustable exit parameters (in points)
tpDistance = input.int(1000, "Take Profit Distance (points)", minval=1)
slDistance = input.int(250, "Stop Loss Distance (points)", minval=1)
beTrigger = input.int(500, "Break-Even Trigger Distance (points)", minval=1)
// Adjustable retracement percentage for long pullback entry (e.g. 0.01 = 1%)
retracementPct = input.float(0.01, "Retracement Percentage (e.g. 0.01 for 1%)", step=0.001)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ INDICATORS: SMA & EMA
// ─────────────────────────────────────────────────────────────────────────────
sma10 = ta.sma(close, 10)
sma25 = ta.sma(close, 25)
ema150 = ta.ema(close, 150)
plot(sma10, color=color.blue, title="SMA 10")
plot(sma25, color=color.red, title="SMA 25")
plot(ema150, color=color.orange, title="EMA 150")
// ─────────────────────────────────────────────────────────────────────────────
// ▌ ENTRY CONDITIONS
// ─────────────────────────────────────────────────────────────────────────────
longCondition = ta.crossover(sma10, sma25)
shortCondition = ta.crossunder(sma10, sma25)
shortValid = close < ema150 // Only take shorts if price is below EMA150
// Plot immediate entry signals (for visual reference)
plotshape(longCondition and (strategy.position_size == 0), title="Long Signal",
style=(longSignalStyle == "Label Up" ? shape.labelup : (longSignalStyle == "Arrow Up" ? shape.triangleup : shape.cross)),
location=location.belowbar, color=color.green, text="Long", size=size.small)
plotshape(shortCondition and shortValid and (strategy.position_size == 0), title="Short Signal",
style=(shortSignalStyle == "Label Down" ? shape.labeldown : (shortSignalStyle == "Arrow Down" ? shape.triangledown : shape.cross)),
location=location.abovebar, color=color.red, text="Short", size=size.small)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ LONG PULLBACK ENTRY USING FIXED PERCENTAGE RETRACEMENT
// ─────────────────────────────────────────────────────────────────────────────
// We use persistent variables to track the pullback signal.
var bool longSignalActive = false
var float pullHigh = na // highest high since long signal activation
var float retraceLevel = na // level = pullHigh * (1 - retracementPct)
// Only consider new entries when no position is open.
if strategy.position_size == 0
// When a long crossover occurs, activate the signal and initialize pullHigh.
if longCondition
longSignalActive := true
pullHigh := high
// If signal active, update pullHigh and compute retracement level.
if longSignalActive
pullHigh := math.max(pullHigh, high)
retraceLevel := pullHigh * (1 - retracementPct)
// When price bounces upward and crosses above the retracement level, enter long
if ta.crossover(close, retraceLevel)
strategy.entry("Long", strategy.long)
longSignalActive := false
// Short entries: enter immediately if conditions are met
if shortCondition and shortValid
strategy.entry("Short", strategy.short)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ EXIT CONDITIONS WITH ADJUSTABLE TP, SL & BE
// ─────────────────────────────────────────────────────────────────────────────
var bool beLong = false
var bool beShort = false
// LONG EXIT LOGIC
if strategy.position_size > 0 and strategy.position_avg_price > 0
longEntry = strategy.position_avg_price
// Additional exit: if SMA(10) crosses below SMA(25) while price < EMA150, exit long
if ta.crossunder(sma10, sma25) and close < ema150
label.new(bar_index, low, "SMA Exit", style=label.style_label_down, color=color.red, textcolor=color.white)
strategy.close("Long", comment="SMA Cross Exit")
// Break-even trigger if price moves in favor by beTrigger points
if close >= longEntry + beTrigger
beLong := true
effectiveLongStop = beLong ? longEntry : (longEntry - slDistance)
if close <= effectiveLongStop
label.new(bar_index, low, (beLong ? "BE Hit" : "SL Hit"), style=label.style_label_down, color=color.red, textcolor=color.white)
strategy.close("Long", comment=(beLong ? "BE Hit" : "SL Hit"))
if close >= longEntry + tpDistance
label.new(bar_index, high, "TP Hit", style=label.style_label_up, color=color.green, textcolor=color.white)
strategy.close("Long", comment="TP Hit")
// SHORT EXIT LOGIC
if strategy.position_size < 0 and strategy.position_avg_price > 0
shortEntry = strategy.position_avg_price
// Basic stop logic
if close >= shortEntry + slDistance
label.new(bar_index, high, (beShort ? "BE Hit" : "SL Hit"), style=label.style_label_up, color=color.red, textcolor=color.white)
strategy.close("Short", comment=(beShort ? "BE Hit" : "SL Hit"))
// Take profit logic
if close <= shortEntry - tpDistance
label.new(bar_index, low, "TP Hit", style=label.style_label_down, color=color.green, textcolor=color.white)
strategy.close("Short", comment="TP Hit")
// Break-even trigger
if close <= shortEntry - beTrigger
beShort := true
effectiveShortStop = beShort ? shortEntry : (shortEntry + slDistance)
if close >= effectiveShortStop
label.new(bar_index, high, (beShort ? "BE Hit" : "SL Hit"), style=label.style_label_up, color=color.red, textcolor=color.white)
strategy.close("Short", comment=(beShort ? "BE Hit" : "SL Hit"))
// Reset BE flags when no position is open
if strategy.position_size == 0
beLong := false
beShort := false
// Reset the pullback signal
if not longSignalActive
pullHigh := na
retraceLevel := na