Стратегия следования за трендом Triple EMA


Дата создания: 2023-09-27 17:19:26 Последнее изменение: 2023-09-27 17:19:26
Копировать: 0 Количество просмотров: 456
1
Подписаться
1166
Подписчики

Обзор

Эта стратегия основана на стратегии Amazing scalper for majors with risk management, разработанной SoftKill21, и была изменена, чтобы уменьшить задержку за счет использования тройной скользящей средней вместо первоначальной простой скользящей средней. Эта стратегия применяется для 1-минутного цикла основных валютных пар, используя метод отслеживания тенденций, чтобы покупать и продавать операции в соответствии с золотым крестом и крестом быстрого EMA, стандартного EMA и медленного EMA. При этом в сочетании с торговыми часами в Лондоне и Нью-Йорке и принципами управления рисками определяется размер позиции.

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

В этой стратегии используются индексные подвижные средние с тремя различными периодами: 25-циклическая быстрая EMA, 50-циклическая стандартная EMA и 100-циклическая медленная EMA. При прохождении стандартной EMA и медленной EMA вверх по быстрой EMA создается сигнал покупки; при прохождении стандартной EMA и медленной EMA вниз по быстрой EMA создается сигнал продажи.

В частности, стратегия сначала рассчитывает три линии EMA, а затем определяет, образует ли быстрая EMA золотой перекресток или мертвую вилку со стандартной EMA и медленной EMA. Если одновременно удовлетворяются условия, соответствующие времени открытия рынка в Лондоне или Нью-Йорке, это создает сигнал покупки или продажи.

Анализ преимуществ

Эта стратегия имеет следующие преимущества:

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

  2. Использование технологии вторичного индексального сглаживания для вычисления EMA, снижение задержки и повышение чувствительности сигнала.

  3. Вместе с основными торговыми часами, чтобы избежать ошибочных сигналов во время не основных торговых часов.

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

  5. Логика стратегии проста, понятна, легко понятна, и подходит для начинающих.

  6. Оптимизируется для различных валютных пар и временных циклов, широко применяется.

Анализ рисков

Однако есть и риски, связанные с этой стратегией:

  1. EMA не может эффективно отфильтровывать кратковременные ложные прорывы, вызванные внезапными событиями, которые могут привести к ошибочному сигналу. Рекомендуется анализировать фильтрацию в сочетании с другими показателями.

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

  3. Принимая во внимание только два основных торгового времени, можно пропустить торговые возможности в другие времена. Можно проверить эффективность различных периодов времени.

  4. Нет механизма остановки убытков, не может эффективно контролировать односторонние убытки. Можно установить движущуюся остановку или временную остановку.

  5. EMA-пересечение имеет определенную отсталость и может пропустить лучший момент входа. Можно рассмотреть возможность снижения цикла EMA или в сочетании с другими предварительными показателями.

  6. Эффективность может зависеть от стоимости сделки. Рекомендуется соответствующая корректировка стоп-лосса и стоп-позиции.

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

Эта стратегия может быть оптимизирована в следующих аспектах:

  1. Тестирование различных параметров цикла EMA для поиска оптимального сочетания параметров. Можно вводить такие технологии, как адаптивное EMA и динамическая оптимизация цикла EMA.

  2. Добавление других фильтрующих показателей, таких как RSI, Брин-банды и т.д., повышает качество сигнала.

  3. Внедрение механизма управления динамическими позициями для корректировки позиций в зависимости от рыночной волатильности и прибыльности.

  4. Для ограничения убытков добавляется мобильный стоп, временный стоп.

  5. Проверка различных торговых периодов, чтобы найти оптимальное время для торгов.

  6. Оптимизация уровня остановок и убытков, балансировка размера выигрыша и выигрышной ставки. Внедрение умных убытков, таких как парализованная линия.

  7. Попытка улучшить методы расчета EMA, такие как линейное взвешивание EMA, чтобы уменьшить задержку.

  8. Поиск оптимальных параметров в сочетании с методами автоматического машинного обучения.

  9. Моделирование затрат на транзакции, адаптация системы для максимизации чистой прибыли.

С помощью вышеуказанной оптимизации можно повысить прибыльность системы, контролировать отступление, расширить сферу применения, что позволяет получить более мощную и стабильную торговую стратегию.

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

Общая идея этой стратегии ясна, она использует тройную EMA для идентификации тенденций, совмещает операции с основными торговыми моментами и определяет позиции с помощью пропорций счетов, что относится к типичной стратегии отслеживания тенденций. Стратегия имеет большое пространство для оптимизации.

Исходный код стратегии
/*backtest
start: 2023-09-19 00:00:00
end: 2023-09-26 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// original author SoftKill21
//@version=4
//@capam 

strategy(title="Triple EMA Scalper low lag strat", shorttitle="3EMA scalper", overlay=true)
strategy.initial_capital = 50000
len1 = input(25, minval=1, title="Length")
len2 = input(50, minval=1, title="Length")
len3 = input(100, minval=1, title="Length")

src = input(close, title="Source")
tmp1 = ema(src, len1)
tmp2 = ema(src, len2)
tmp3 = ema(src, len3)
fastemaOut = 2*tmp1 - ema(tmp1, len1)
standardemaOut = 2*tmp2 - ema(tmp2, len2)
slowemaOut = 2*tmp3 - ema(tmp3, len3)
//fastemaOut = sma(src, len1)
//standardemaOut = sma(src, len2)
//slowemaOut = sma(src, len3)

plot(fastemaOut, color=color.black, title="First EMA")
plot(standardemaOut, color=color.yellow, title="Second EMA")
plot(slowemaOut, color=color.blue, title="Third EMA")


timeinrange(res, sess) => time(res, sess) != 0


londopen = timeinrange(timeframe.period, "0300-1100") 
nyopen = timeinrange(timeframe.period, "0800-1600") 

longCondition = crossover(fastemaOut,standardemaOut) and crossover(fastemaOut,slowemaOut) and londopen //or nyopen)
shortCondition = crossunder(fastemaOut,standardemaOut) and crossunder(fastemaOut,slowemaOut) and londopen// or nyopen)

longCondition2 = crossover(fastemaOut,standardemaOut) and crossover(fastemaOut,slowemaOut) and nyopen
shortCondition2 = crossunder(fastemaOut,standardemaOut) and crossunder(fastemaOut,slowemaOut) and nyopen
tp = input(50,title="TP")
sl = input(100, title="SL")

tradeLondon =  input(title="Trade london session?", type=input.bool, defval=true)
tradeNewyork = input(title="Trade new york session?", type=input.bool, defval=true)

//MONEY MANAGEMENT--------------------------------------------------------------
balance = strategy.netprofit + strategy.initial_capital //current balance
floating = strategy.openprofit          //floating profit/loss
risk = input(1,type=input.float,title="Risk % of equity ")/100           //risk % per trade
temp01 = balance * risk     //Risk in USD
temp02 = temp01/sl        //Risk in lots
temp03 = temp02*100000      //Convert to contracts
size = temp03 - temp03%1000 //Normalize to 1000s (Trade size)
if(size < 1000)
    size := 1000        

if(tradeLondon==true)
    strategy.entry("long",1,when=longCondition)
    strategy.exit("tp/sl","long",profit=tp,loss=sl)
    
    strategy.entry("short",0,when=shortCondition)
    strategy.exit("tp/sl","short",profit=tp,loss=sl)

if(tradeNewyork==true)
    strategy.entry("long",1,when=longCondition2)
    strategy.exit("tp/sl","long",profit=tp,loss=sl)
    
    strategy.entry("short",0,when=shortCondition2)
    strategy.exit("tp/sl","short",profit=tp,loss=sl)

// strategy.risk.max_intraday_filled_orders(2)