
Многоцелевая торговая стратегия с двумя индексами - это количественная торговая система, основанная на перекрестных сигналах с краткосрочными и долгосрочными индексами. Стратегия использует перекрестные сигналы 9-ти и 21-ти циклов EMA в качестве входных сигналов, а также устанавливает до 10 целевых показателей прибыли и одну точку остановки для управления рисками и максимизации прибыли. Стратегия одновременно поддерживает многоцелевую двустороннюю торговлю, открывая прибыль при прохождении долгосрочной EMA в краткосрочной EMA, открывая при прохождении долгосрочной EMA в краткосрочной EMA и выходя при обратном перекрестке.
Основные принципы этой стратегии основаны на пересечении индикаторов с перемещающимися средними и реализуются следующим образом:
Стратегия использует систематизированный метод управления рисками, используя по умолчанию 10% средств счета на каждую сделку, с начальным капиталом в 100 000 долларов и запретом на наживы.
Для смягчения этих рисков рекомендуется ввести дополнительные фильтрующие условия, такие как индикатор интенсивности тренда, и рассмотреть возможность корректировки стоп-постов и целевых позиций в зависимости от динамики волатильности рынка.
Благодаря этим оптимизациям можно значительно повысить устойчивость и рентабельность стратегии, а также снизить частоту отмены и убыточных сделок.
Многоцелевая торговая стратегия с двумя индексами - это четкая, логически простая, количественная торговая система, основанная на классических перекрестных сигналах EMA, дополненная многоцелевой управляемой прибылью и стоп-лосс-устройствами. Эта стратегия подходит для краткосрочной и среднесрочной трендовой торговли и лучше всего работает на рынках с четкой тенденцией.
Хотя дизайн стратегии относительно прост, он включает в себя ключевые элементы торговой стратегии: входные сигналы, условия выхода, управление стоп-убытками и целевые показатели прибыли. Основные преимущества стратегии заключаются в том, что она ясна, легко понятна и реализуема, а также обеспечивает хорошую визуальную поддержку.
Однако существуют и другие ограничения стратегии, такие как зависимость от одного показателя, отсутствие идентификации рыночной среды и недостаточная гибкость управления капиталом. Существует большой простор для оптимизации стратегии путем добавления фильтров тенденций, оптимизации механизмов остановки убытков, достижения реальной поэтапной прибыли и улучшения методов управления капиталом.
Для трейдеров эта стратегия может служить базовой структурой для индивидуальной адаптации и оптимизации в соответствии с личными предпочтениями в отношении риска и особенностями торгового сорта для достижения лучших результатов торговли.
/*backtest
start: 2024-08-21 00:00:00
end: 2025-08-20 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_OKX","currency":"BNB_USDT","balance":5000}]
*/
//@version=5
strategy("9/21 EMA with 10 Targets + Stoploss",
overlay = true,
initial_capital = 100000,
default_qty_type = strategy.percent_of_equity,
default_qty_value = 10,
pyramiding = 0)
// === Inputs ===
emaFastLen = input.int(9, "Fast EMA Length")
emaSlowLen = input.int(21, "Slow EMA Length")
slPercent = input.float(0.5, "Stoploss %", step=0.1)
// 10 Targets
tp1Percent = input.float(0.5, "Target 1 %", step=0.1)
tp2Percent = input.float(1.0, "Target 2 %", step=0.1)
tp3Percent = input.float(1.5, "Target 3 %", step=0.1)
tp4Percent = input.float(2.0, "Target 4 %", step=0.1)
tp5Percent = input.float(2.5, "Target 5 %", step=0.1)
tp6Percent = input.float(3.0, "Target 6 %", step=0.1)
tp7Percent = input.float(3.5, "Target 7 %", step=0.1)
tp8Percent = input.float(4.0, "Target 8 %", step=0.1)
tp9Percent = input.float(4.5, "Target 9 %", step=0.1)
tp10Percent = input.float(5.0, "Target 10 %", step=0.1)
// === EMA Calculation ===
emaFast = ta.ema(close, emaFastLen)
emaSlow = ta.ema(close, emaSlowLen)
// === Entry Conditions ===
longCond = ta.crossover(emaFast, emaSlow)
shortCond = ta.crossunder(emaFast, emaSlow)
// === Entry ===
if (longCond and strategy.position_size <= 0)
strategy.entry("BUY", strategy.long)
if (shortCond and strategy.position_size >= 0)
strategy.entry("SELL", strategy.short)
// === Series Variables for Targets ===
var float tp1 = na
var float tp2 = na
var float tp3 = na
var float tp4 = na
var float tp5 = na
var float tp6 = na
var float tp7 = na
var float tp8 = na
var float tp9 = na
var float tp10 = na
var float stopLevel = na
// === Long Positions ===
if strategy.position_size > 0
stopLevel := strategy.position_avg_price * (1 - slPercent/100)
tp1 := strategy.position_avg_price * (1 + tp1Percent/100)
tp2 := strategy.position_avg_price * (1 + tp2Percent/100)
tp3 := strategy.position_avg_price * (1 + tp3Percent/100)
tp4 := strategy.position_avg_price * (1 + tp4Percent/100)
tp5 := strategy.position_avg_price * (1 + tp5Percent/100)
tp6 := strategy.position_avg_price * (1 + tp6Percent/100)
tp7 := strategy.position_avg_price * (1 + tp7Percent/100)
tp8 := strategy.position_avg_price * (1 + tp8Percent/100)
tp9 := strategy.position_avg_price * (1 + tp9Percent/100)
tp10 := strategy.position_avg_price * (1 + tp10Percent/100)
strategy.exit("Exit Long", "BUY", stop=stopLevel, limit=tp1)
// === Short Positions ===
if strategy.position_size < 0
stopLevel := strategy.position_avg_price * (1 + slPercent/100)
tp1 := strategy.position_avg_price * (1 - tp1Percent/100)
tp2 := strategy.position_avg_price * (1 - tp2Percent/100)
tp3 := strategy.position_avg_price * (1 - tp3Percent/100)
tp4 := strategy.position_avg_price * (1 - tp4Percent/100)
tp5 := strategy.position_avg_price * (1 - tp5Percent/100)
tp6 := strategy.position_avg_price * (1 - tp6Percent/100)
tp7 := strategy.position_avg_price * (1 - tp7Percent/100)
tp8 := strategy.position_avg_price * (1 - tp8Percent/100)
tp9 := strategy.position_avg_price * (1 - tp9Percent/100)
tp10 := strategy.position_avg_price * (1 - tp10Percent/100)
strategy.exit("Exit Short", "SELL", stop=stopLevel, limit=tp1)
// === Plotting ===
plot(emaFast, "EMA 9", color=color.yellow, linewidth=2)
plot(emaSlow, "EMA 21", color=color.orange, linewidth=2)
// Global plots (avoid local scope error)
plot(tp1, "TP1", color=color.new(color.green, 0))
plot(tp2, "TP2", color=color.new(color.green, 10))
plot(tp3, "TP3", color=color.new(color.green, 20))
plot(tp4, "TP4", color=color.new(color.green, 30))
plot(tp5, "TP5", color=color.new(color.green, 40))
plot(tp6, "TP6", color=color.new(color.green, 50))
plot(tp7, "TP7", color=color.new(color.green, 60))
plot(tp8, "TP8", color=color.new(color.green, 70))
plot(tp9, "TP9", color=color.new(color.green, 80))
plot(tp10, "TP10", color=color.new(color.green, 90))
plot(stopLevel, "Stoploss", color=color.red, linewidth=2)
// Entry Signals
plotshape(longCond, title="BUY Signal", style=shape.labelup, color=color.green, text="BUY")
plotshape(shortCond, title="SELL Signal", style=shape.labeldown, color=color.red, text="SELL")