Стратегия отслеживания множественных скользящих средних и динамическая система управления позициями

EMA ATR
Дата создания: 2025-02-27 10:20:18 Последнее изменение: 2025-02-27 10:20:18
Копировать: 0 Количество просмотров: 478
2
Подписаться
319
Подписчики

Стратегия отслеживания множественных скользящих средних и динамическая система управления позициями Стратегия отслеживания множественных скользящих средних и динамическая система управления позициями

Обзор

Система управления динамическими позициями с многократным отслеживанием средних линий - это количественная торговая стратегия, основанная на многократных движущихся средних показателях (EMA). Эта стратегия, контролируя пять различных циклов (EMA: 12, 144, 169, 576 и 676), создает полную торговую систему, включающую определение тенденций, идентификацию входных сигналов, создание партий, динамические остановки и динамические остановки.

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

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

  1. Механизм определения тенденций:

    • Условия многооборотной тенденции: EMA12 > EMA144 > EMA169 > EMA576 > EMA676
    • Условия по воздушному тренду: EMA12 < EMA144 < EMA169 < EMA576 < EMA676
  2. Сигнал входа:

    • Многоочередной вход: на основе удовлетворения многоочередной тенденции, когда низкая точка пересекает EMA144 и цена закрытия находится выше EMA169
    • Вход в пустой рынок: на основе удовлетворения пустой тенденции, когда высота превышает EMA144 и цена закрытия находится ниже EMA169
  3. Строительство складов:

    • Первая позиция: соответствует сигналу входа и не имеет позиции
    • Второй пост: удовлетворяет входным сигналам и в настоящее время имеет позицию
    • Три-пять построек: на основе удовлетворения входного сигнала, также требуется интервал времени между последним построением более 50 K-линий
  4. Динамическая остановка повреждений:

    • Каждая позиция использует динамическую точку остановки, основанную на минимальной цене (многоголовной) или максимальной цене (пустой) на 12 линиях K при создании позиции
    • При использовании стратегии симметричной остановки, целевая цена “входная цена + (входная цена - цена остановки) “
    • Прибыль по партиям: при достижении точки остановки каждой позиции сначала уменьшается на 50%, а остальные остаются до достижения точки остановки
  5. Общий контроль риска:

    • Когда EMA12 пересекается с EMA144 показателем (((, EMA12 падает ниже EMA144 в многополосном тренде, или EMA12 пробивается ниже EMA144 в воздушном тренде), полная нижняя позиция

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

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

  1. Систематическое определение тенденций:

    • Система определения трендов с использованием трёхмерных EMA из пяти различных циклов, снижающая риск ложных прорывов
    • Портфель индикаторов EMA обеспечивает количественную оценку силы и слабости тренда, что позволяет более объективно принимать торговые решения
  2. Точный механизм поступления:

    • Крушение цены и средней линии в качестве условий для входа, повышающих эффективность входа
    • Требование подтверждения входного сигнала в пределах 12 K-линий, снижение риска отстающих сделок
  3. Разумное управление деньгами:

    • Поддерживает строительство складов в разных стадиях развития рынка, с возможностью создания до пяти складов.
    • Последующее строительство хранилища должно удовлетворять минимальному временному интервалу ((50 K-линий), чтобы избежать чрезмерного строительства хранилища за короткое время
  4. Гибкая стратегия получения прибыли:

    • Применение принципа “симметричной остановки” для получения позиций преимущества в соответствии с целями, рассчитанными на основе динамики цены входа и точки остановки
    • Прибыль по партиям (по 50% позиций), блокирование части прибыли при сохранении пространства для прибыли
  5. Строгий контроль риска:

    • Каждая позиция устанавливает отдельную точку остановки, основанную на недавнем диапазоне колебаний (12 K-линий)
    • Сигнал обратного тренда (пересечение EMA12 и EMA144) запускает полную ликвидацию и своевременное остановку
  6. Высокая степень адаптации:

    • Поддерживает одновременную многоголовую и пустоголовую торговлю и адаптируется к различным рыночным условиям
    • С помощью параметров (например, ATR, количество K-линий) может быть адаптировано к различным видам и периодам

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

  1. Риск отставания от средней:

    • Существует определенная отсталость EMA, которая может привести к неблагоприятному времени входа или выхода из рынка в условиях резкой волатильности
    • Методы смягчения: можно рассмотреть возможность использования в сочетании с краткосрочными показателями динамики в качестве вспомогательных методов для повышения скорости реакции системы
  2. Финансовое давление на строительство складов:

    • Стратегия наращивания запасов, поддерживающая до пяти позиций, может привести к чрезмерной концентрации капитала.
    • Метод смягчения: должна быть установлена разумная доля средств на каждое строительство, исходя из общего объема средств, чтобы обеспечить равномерное распределение средств
  3. Ограничения параметра фиксированного цикла:

    • Циклы EMA в коде ((12, 144, 169, 576, 676) являются фиксированными и могут не применяться во всех рыночных условиях
    • Методы смягчения: внедрение методов расчета адаптационного цикла или создание процесса оптимизации параметров для разных сортов
  4. Потенциальные проблемы с симметрией:

    • В условиях сильного тренда симметричные стопы могут быть слишком рано выгодны и упускать большую доходность.
    • Метод смягчения: можно рассмотреть возможность установки стоп-траек на оставшиеся 50% позиций, чтобы приспособиться к сильному тренду
  5. Слишком строгие условия для поступления:

    • Комбинация из нескольких условий (обоснованная линейка + ценовая перекрестка + подтверждение закрытия) может привести к пропуску частичного эффективного сигнала
    • Метод смягчения: для различных стадий рынка, можно установить дополнительные механизмы входа, повысить чувствительность захвата сигнала
  6. Риски зависимости от данных:

    • Стратегии, зависящие от длительных периодов ЭМА (например, 576, 676), требуют достаточно длинных исторических данных для эффективного функционирования
    • Метод смягчения: в случае недостаточности данных можно рассмотреть возможность использования альтернативных показателей или адаптировать методы расчета долгосрочных ЭМА

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

  1. Внедрение механизма адаптивных параметров:

    • изменение фиксированных циклов ЭМА ([12, 144, 169, 576, 676]) на самостоятельные параметры, основанные на волатильности рынка
    • Причина оптимизации: существуют значительные различия в оптимальных циклах EMA в различных рыночных условиях, а адаптивные механизмы могут повысить универсальность стратегии
  2. Улучшение фильтрации входящих сигналов:

    • Объединение таких показателей, как объем торговли, рыночная волатильность (например, ATR), для добавления дополнительных условий подтверждения входных сигналов
    • Причина оптимизации: чисто равномерный перекрестный сигнал подвержен рыночным помехам, дополнительные условия фильтрации улучшают качество сигнала
  3. Совершенствование системы управления капиталом:

    • Доля капитала при каждом открытии позиции, динамически скорректированная на основе общей суммы на счетах и рыночной волатильности
    • Причины оптимизации: текущая стратегия фиксирует распределение средств в пропорции, не может автоматически корректироваться в зависимости от уровня риска, внедрение динамического управления капиталом повышает эффективность использования средств
  4. Оптимизация механизма остановки:

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

    • Внедрение механизма фильтрации времени торговли, чтобы избежать периодов высокой волатильности (например, перед открытием и закрытием) или во время публикации важных данных
    • Причина оптимизации: рыночные колебания в определенные периоды времени часто не имеют направления, а дополнительная временная фильтрация позволяет избежать ненужных сделок
  6. Добавление оценки интенсивности тренда:

    • Разработка индикатора интенсивности тренда, позволяющего торговать только в том случае, когда интенсивность тренда достигает порога
    • Причина оптимизации: текущая стратегия также дает сигналы в условиях слабого тренда, введение оценки силы тренда может уменьшить ложные сигналы в рыночных волатильности
  7. Построение многоциклической системы синхронизации:

    • Тенденционное суждение в сочетании с более высокими временными циклами в качестве фильтра направления торговли
    • Причина оптимизации: одноциклические торговые системы подвержены кратковременным колебаниям, а многоциклическая синхронность повышает стабильность системы

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

Система управления динамическими позициями с многократным отслеживанием средних линий является структурированной, логически четкой и количественной стратегией торговли. Эта стратегия создает рамки для определения тенденций с помощью комбинации множественных ЭМА, определяет время входа через взаимодействие цены и ключевых средних линий, а также реализует тонкое управление капиталом и контроль риска с помощью создания запасов и динамического стоп-стоп. Преимущества стратегии заключаются в систематизации, точных механизмах входа, умном управлении капиталом и строгом контроле риска, что позволяет ей иметь определенную пригодность для различных рыночных условий.

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

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

Исходный код стратегии
/*backtest
start: 2024-09-08 00:00:00
end: 2024-12-08 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("专业级交易系统", overlay=false, close_entries_rule = "ANY")
x1 = input.float(1.5,"atr倍数",step=0.1)
x2 = input.int(50,"k线数量",step=1)
s1 = strategy.opentrades.entry_price(0)
s2 = strategy.opentrades.entry_price(1)
s3 = strategy.opentrades.entry_price(2)
s4 = strategy.opentrades.entry_price(3)
s5 = strategy.opentrades.entry_price(4)
s6 = strategy.opentrades.entry_price(5)
s7 = strategy.opentrades.entry_price(6)
s8 = strategy.opentrades.entry_price(7)
s9 = strategy.opentrades.entry_price(8)
c = strategy.position_size,o = strategy.opentrades
ema12_len = input.int(12,"EMA12长度")
ema144_len = input.int(144, "EMA144长度")
ema169_len = input.int(169,"EMA169长度")
ema576_len = input.int(376, "EMA576长度")
ema676_len = input.int(576,"EMA676长度")
ema12 = ta.ema(close,ema12_len)
ema144 = ta.ema(close, ema144_len)
ema169 = ta.ema(close, ema169_len)
ema576 = ta.ema(close, ema576_len)
ema676 = ta.ema(close, ema676_len)
e3 = ta.valuewhen(o ==2 and o[1] == 1 and c > 0,bar_index,0)
e4 = ta.valuewhen(o ==3 and o[1] == 2 and c > 0,bar_index,0)
e5 = ta.valuewhen(o ==4 and o[1] == 3 and c > 0,bar_index,0)
le1 = false
le1 := c <= 0 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 ? false : le1[1]
le11 = false
le11 := le1 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144,bar_index,0) < 12 ? true : false
le2 = false
le2 := c > 0 and o == 1 and o[1] == 1 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 or o < 1? false : le2[1]
le21 = false
le21 := le2 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144 and o == 1 and o[1]==1,bar_index,0) < 12 ? true : false
le3 = false
le3 := c > 0 and o == 2 and o[1] == 2 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 or o < 2? false : le3[1]
le31 = false
le31 := le3 and bar_index - e3 > 50 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144 and o == 2 and o[1]==2,bar_index,0) < 12 ? true : false
le4 = false
le4 := c > 0 and o == 3 and o[1] == 3 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 or o < 3? false : le4[1]
le41 = false
le41 := le4 and bar_index - e4 > 50 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144 and o == 3 and o[1]==3,bar_index,0) < 12 ? true : false
le5 = false
le5 := c > 0 and o == 4 and o[1] == 4 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 or o < 4? false : le5[1]
le51 = false
le51 := le5 and bar_index - e5 > 50 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144 and o == 4 and o[1]==4,bar_index,0) < 12 ? true : false
d1 = ta.valuewhen(o == 1 and o[1] == 0 and c > 0,ta.lowest(12),0)
d2 = ta.valuewhen(o == 2 and o[1] == 1 and c > 0,ta.lowest(12),0)
d3 = ta.valuewhen(o == 3 and o[1] == 2 and c > 0,ta.lowest(12),0)
d4 = ta.valuewhen(o == 4 and o[1] == 3 and c > 0,ta.lowest(12),0)
d5 = ta.valuewhen(o == 5 and o[1] == 4 and c > 0,ta.lowest(12),0)
if le11 and close > ema12 and o == 0
    strategy.order("l1",strategy.long,comment="第一单")
if c > 0 and o > 0
    strategy.exit("出场1","l1",limit = 2*s1- d1,stop= d1,qty_percent = 50)
    strategy.exit("出场11","l1",stop= d1)

if le21 and close > ema12 and o == 1
    strategy.order("l2",strategy.long,comment="第二单")
if c > 0 and o == 2
    strategy.exit("出场2","l2",limit = 2*s2- d2,stop= d2,qty_percent = 50)
    strategy.exit("出场21","l2",stop= d2)

if le31 and close > ema12 and o == 2
    strategy.order("l3",strategy.long,comment="第三单")
if c > 0 and o == 3
    strategy.exit("出场3","l3",limit = 2*s3- d3,stop= d3,qty_percent = 50)
    strategy.exit("出场31","l3",stop= d3)

if le41 and close > ema12 and o == 3
    strategy.order("l4",strategy.long,comment="第四单")
if c > 0 and o == 4 
    strategy.exit("出场4","l4",limit = 2*s4- d4,stop= d4,qty_percent = 50)
    strategy.exit("出场41","l4",stop= d4)

if le51 and close > ema12 and o == 4
    strategy.order("l5",strategy.long,comment="第五单")
if c > 0 and o == 5
    strategy.exit("出场5","l5",limit = 2*s5- d5,stop= d5,qty_percent = 50)
    strategy.exit("出场51","l5",stop= d5)
bgcolor(le2?color.red:na)
if c > 0 and ema12 < ema144
    strategy.close_all("跌破均线全部出场")

//做空
es3 = ta.valuewhen(o ==2 and o[1] == 1 and c < 0,bar_index,0)
es4 = ta.valuewhen(o ==3 and o[1] == 2 and c < 0,bar_index,0)
es5 = ta.valuewhen(o ==4 and o[1] == 3 and c < 0,bar_index,0)
se1 = false
se1 := c >= 0 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169? true :  close > ema169 or ema12 > ema144 ? false : se1[1]
se11 = false
se11 := se1 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144,bar_index,0) < 12 ? true : false
se2 = false
se2 := c < 0 and o == 1 and o[1] == 1 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169? true :  close > ema169 or ema12 > ema144 or o < 1? false : se2[1]
se21 = false
se21 := se2 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144 and o == 1 and o[1]==1,bar_index,0) < 12 ? true : false
se3 = false
se3 := c < 0 and o == 2 and o[1] == 2 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169 ? true :  close > ema169 or ema12 > ema144 or o < 2? false : se3[1]
se31 = false
se31 := se3 and bar_index - es3 > 50 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144 and o == 2 and o[1]==2,bar_index,0) < 12 ? true : false
se4 = false
se4 := c < 0 and o == 3 and o[1] == 3 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169? true :  close > ema169 or ema12 > ema144 or o < 3? false : se4[1]
se41 = false
se41 := se4 and bar_index - es4 > 50 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144 and o == 3 and o[1]==3,bar_index,0) < 12 ? true : false
se5 = false
se5 := c < 0 and o == 4 and o[1] == 4 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169 ? true :  close > ema169 or ema12 > ema144 or o < 4? false : se5[1]
se51 = false
se51 := se5 and bar_index - es5 > 50 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144 and o == 4 and o[1]==4,bar_index,0) < 12 ? true : false
ds1 = ta.valuewhen(o == 1 and o[1] == 0 and c < 0 ,ta.highest(12),0)
ds2 = ta.valuewhen(o == 2 and o[1] == 1 and c < 0,ta.highest(12),0)
ds3 = ta.valuewhen(o == 3 and o[1] == 2 and c < 0,ta.highest(12),0)
ds4 = ta.valuewhen(o == 4 and o[1] == 3 and c < 0,ta.highest(12),0)
ds5 = ta.valuewhen(o == 5 and o[1] == 4 and c < 0,ta.highest(12),0)
if se11 and close < ema12 and o == 0
    strategy.order("s1",strategy.short,comment="第一单")
if c < 0 and o > 0
    strategy.exit("出场1","s1",limit = 2*s1- ds1,stop= ds1,qty_percent = 50)
    strategy.exit("出场11","s1",stop= ds1)

if se21 and close < ema12 and o == 1
    strategy.order("s2",strategy.short,comment="第二单")
if c < 0 and o == 2
    strategy.exit("出场2","s2",limit = 2*s2- ds2,stop= ds2,qty_percent = 50)
    strategy.exit("出场21","s2",stop= ds2)

if se31 and close < ema12 and o == 2
    strategy.order("s3",strategy.short,comment="第三单")
if c < 0 and o == 3
    strategy.exit("出场3","s3",limit = 2*s3- ds3,stop= ds3,qty_percent = 50)
    strategy.exit("出场31","s3",stop= ds3)

if se41 and close < ema12 and o == 3
    strategy.order("s4",strategy.short,comment="第四单")
if c < 0 and o == 4 
    strategy.exit("出场4","s4",limit = 2*s4- ds4,stop= ds4,qty_percent = 50)
    strategy.exit("出场41","s4",stop= ds4)

if se51 and close < ema12 and o == 4
    strategy.order("s5",strategy.short,comment="第五单")
if c < 0 and o == 5
    strategy.exit("出场5","s5",limit = 2*s5- ds5,stop= ds5,qty_percent = 50)
    strategy.exit("出场51","s5",stop= ds5)
bgcolor(se1?color.red:na)
if c < 0 and ema12 > ema144
    strategy.close_all("跌破均线全部出场")
kaiguan = input.bool(true,"均线开关")
plot(ema12,force_overlay=true)
plot(ema144, "EMA144", color=color.new(#008000, 0),force_overlay=true)
plot(ema169, "EMA169", color=color.red,force_overlay=true)
plot(kaiguan?ema576:na,color=color.yellow,force_overlay=true)
plot(kaiguan?ema676:na,color=color.yellow,force_overlay=true)
//plotshape(series=entrySignal,title="买入信号",location=location.belowbar,color=color.new(color.green, 0),style=shape.labelup,text="BUY",textcolor=color.new(color.white, 0))