Торговая стратегия с несколькими целями на основе двойной экспоненциальной скользящей средней

EMA SMA TP SL 移动平均线 止损 多目标策略 交叉信号
Дата создания: 2025-08-21 09:01:39 Последнее изменение: 2025-08-21 09:01:39
Копировать: 0 Количество просмотров: 212
2
Подписаться
319
Подписчики

Торговая стратегия с несколькими целями на основе двойной экспоненциальной скользящей средней Торговая стратегия с несколькими целями на основе двойной экспоненциальной скользящей средней

Обзор

Многоцелевая торговая стратегия с двумя индексами - это количественная торговая система, основанная на перекрестных сигналах с краткосрочными и долгосрочными индексами. Стратегия использует перекрестные сигналы 9-ти и 21-ти циклов EMA в качестве входных сигналов, а также устанавливает до 10 целевых показателей прибыли и одну точку остановки для управления рисками и максимизации прибыли. Стратегия одновременно поддерживает многоцелевую двустороннюю торговлю, открывая прибыль при прохождении долгосрочной EMA в краткосрочной EMA, открывая при прохождении долгосрочной EMA в краткосрочной EMA и выходя при обратном перекрестке.

Стратегический принцип

Основные принципы этой стратегии основаны на пересечении индикаторов с перемещающимися средними и реализуются следующим образом:

  1. Вычислить два EMA: быстрый EMA ((9 циклов) и медленный EMA ((21 циклов)
  2. Когда быстрая EMA пересекает медленную EMA, образуется полисигнал
  3. Когда быстрая EMA проходит через медленную EMA, генерируется сигнал пустоты
  4. После входа в рынок стратегия автоматически рассчитывает 10 лестничных целей (TP1-TP10) и стоп-лосс в зависимости от входной цены
  5. Стратегия использует одинаковые процентные настройки для позиций с большим количеством и пустыми позициями, но в обратном направлении
  6. Для многоголовых, стоп-лосс устанавливается на 0,5% ниже цены входа, а целевая прибыль варьируется от 0,5% до 5,0% выше цены входа
  7. Стоп-лосс для пустого головы установлен на 0,5% выше цены входа, а целевая прибыль варьируется от 0,5% до 5,0% ниже цены входа
  8. Стратегия также выходит из позиции при появлении обратного креста.

Стратегия использует систематизированный метод управления рисками, используя по умолчанию 10% средств счета на каждую сделку, с начальным капиталом в 100 000 долларов и запретом на наживы.

Стратегические преимущества

  1. Простые и эффективные сигналы: EMA-крест - это широко используемый и проверенный торговый сигнал, который легко понять и реализовать. Параметры, установленные на цикле 921 лучше отражают среднесрочные тенденции.
  2. Многоцелевое управление прибыльюУстановка 10-ступенчатых целевых показателей прибыли, позволяющих трейдерам получать прибыль в разных ценовых уровнях, блокируя часть прибыли, а также продлевая прибыль как можно дольше.
  3. Строгий контроль рискаНа каждой сделке устанавливается четкая точка стоп-лосса, ограничивается максимальная доля потерь в каждой сделке, эффективно контролируется риск.
  4. ВизуализацияСтратегия: на графике четко обозначены все входные сигналы, стоп-лозы и целевые позиции, что помогает трейдеру интуитивно понять ситуацию на рынке.
  5. Двухсторонние транзакцииСтратегия поддерживает одновременную торговлю на нескольких площадках и позволяет искать возможности в различных рыночных условиях.
  6. Настройка параметров: все ключевые параметры (включая циклы EMA, stop loss ratio, profit target) могут быть настроены с помощью ввода, что повышает гибкость стратегии.
  7. Полная автоматизацияСтратегия: выполнение стратегии полностью автоматизировано, от распознавания сигналов до входа, установки стоп-лосс и прибыльных целей, а затем до выхода, без какого-либо вмешательства человека.

Стратегический риск

  1. Риск ложного проникновения: EMA-пересекающая система может создавать ложные сигналы на рынке в условиях колебаний, что может привести к частым сделкам и убыткам.
  2. СтойкостьПримечание: По умолчанию в текущей стратегии стоп-лизинг устанавливается на уровне 0,5%, что может быть слишком плотным на рынках с высокой волатильностью или в разновидностях, которые могут быть вызваны рыночным шумом.
  3. Однозначная зависимостьСтратегия опирается только на EMA-пересечение в качестве входного сигнала, без подтверждения в сочетании с другими техническими показателями или рыночными условиями, что увеличивает риск ошибочного суждения.
  4. Управление фиксированными средствами: фиксированное использование 10% средств счета на каждую сделку, не корректируемое в зависимости от динамики волатильности рынка или силы сигнала, может быть недостаточно оптимизировано.
  5. Отсутствие рыночной идентичностиВ случае, если рыночная среда не подходит для EMA-пересекающейся системы, она все равно будет генерировать сигналы.
  6. Выход из игры: Несмотря на то, что было установлено несколько целевых показателей, в действительности стратегия будет плавающей только на первом целевом уровне (TP1) или выходящей при обратном скрещивании, не достигнув истинной прибыли по партиям.

Для смягчения этих рисков рекомендуется ввести дополнительные фильтрующие условия, такие как индикатор интенсивности тренда, и рассмотреть возможность корректировки стоп-постов и целевых позиций в зависимости от динамики волатильности рынка.

Направление оптимизации стратегии

  1. Добавить фильтр: введение дополнительных технических индикаторов в качестве фильтров, таких как ADX (средний индекс тренда) для подтверждения силы тренда, или относительно сильный индикатор (RSI) для избежания торговли в зонах сверхпокупа и сверхпродажи.
  2. Динамическая остановка: изменение фиксированного стопроцентного стопа на динамический стоп, основанный на рыночной волатильности, например использование ATR (средняя величина истинной волатильности) умноженная на коэффициент для установки стоп-дистанции.
  3. Достижение реальной многоцелевой прибыли: изменение кода стратегии, чтобы достичь частичного ликвидации на различных целевых позициях, а не только на первой целевой позиции. Это требует разделения каждой сделки на несколько меньших позиций.
  4. Повышение механизмов определения тенденцийДобавление логики распознавания трендов, открытие позиций только в том случае, если есть четкое направление тренда, избежание частого трейдинга на волатильных рынках.
  5. Оптимизация управления капиталомДвижущаяся доля капитала в каждой сделке в зависимости от силы сигнала, рыночной волатильности или отзыва, а не фиксированное использование 10%.
  6. Добавление временного фильтраНеобходимо избегать торговли в периоды высокой волатильности перед открытием и закрытием рынка, а также во время публикации важных экономических данных.
  7. Введение движущейся стоп-стадии: когда цена движется в благоприятном направлении на некоторое расстояние, перемещение точки остановки до точки убыточного равновесия или более благоприятной позиции, защита уже выгодной.
  8. Увеличение защиты от трендаВ экстремальных рыночных условиях добавление противоположного индикатора в качестве предупредительного сигнала, чтобы избежать продолжения позиции в случае резкого рыночного переворота.

Благодаря этим оптимизациям можно значительно повысить устойчивость и рентабельность стратегии, а также снизить частоту отмены и убыточных сделок.

Подвести итог

Многоцелевая торговая стратегия с двумя индексами - это четкая, логически простая, количественная торговая система, основанная на классических перекрестных сигналах 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")