Эта стратегия модифицирована от Amazing scalper SoftKill21
Стратегия использует три EMA с различными периодами: 25-периодный быстрый EMA, 50-периодный стандартный EMA и 100-периодный медленный EMA. Когда быстрый EMA пересекает стандартную EMA и медленную EMA, он генерирует сигнал покупки. Когда быстрый EMA пересекает стандартную EMA и медленную EMA, он генерирует сигнал продажи. Чтобы уменьшить задержку, EMA рассчитываются с использованием метода двойного экспоненциального сглаживания. Стратегия также проверяет, соответствуют ли часы открытия рынка сессий Лондона или Нью-Йорка условиям входа. Кроме того, размер позиции каждого ордера определяется динамически с использованием фиксированного процента акций счета для контроля риска.
В частности, стратегия сначала рассчитывает три линии EMA, а затем проверяет, формирует ли быстрая EMA золотой крест или смертельный крест со стандартной EMA и медленной EMA. Если условие также соответствует времени открытого рынка Лондона или Нью-Йорка, генерируются сигналы купли или продажи. При определении размера позиции стратегия рассчитывает фиксированный процент собственного капитала счета как рисковое воздействие, затем преобразует его в размер контракта и круглые лоты для динамической корректировки позиции для каждого заказа.
Стратегия имеет следующие преимущества:
Тройная EMA может эффективно сглаживать данные о ценах и определять направление тренда. Быстрая EMA чувствительна к изменениям цен, стандартная EMA неуклонно следит за ней, а медленная EMA фильтрует шум. При совместном использовании они могут фильтровать ложные прорывы и определять направление тренда.
Использование двойного экспоненциального сглаживания уменьшает задержку и делает сигналы более чувствительными.
Включение основных торговых сессий позволяет избежать вводящих в заблуждение сигналов в непиковое время.
Подход к управлению рисками регулирует размер позиции на основе собственного капитала счета, избегая чрезмерных потерь на отдельных сделках.
Логика проста и понятна, легко понять и реализовать, подходит для новичков.
Стратегия может быть оптимизирована и скорректирована для различных валютных пар и временных рамок с широкой применимостью.
Стратегия также сопряжена с некоторыми потенциальными рисками:
EMA не могут эффективно отфильтровать краткосрочные ложные прорывы, вызванные внезапными событиями, которые могут генерировать неправильные сигналы.
Фиксированное процентное размещение позиций не может динамически адаптироваться к волатильности рынка, что приводит к чрезмерному или недостаточному размещению позиций.
Рассматриваются только две основные сессии, которые могут упустить торговые возможности в других сессиях.
Отсутствие механизма стоп-лосса приводит к невозможности эффективного контроля односторонних потерь.
Снижение периодов EMA или включение ведущих индикаторов может помочь.
На эффективность могут повлиять затраты на транзакции.
Стратегия может быть оптимизирована в следующих аспектах:
Проверить различные параметры периода EMA, чтобы найти оптимальные комбинации.
Добавьте другие индикаторы фильтрации, такие как RSI, Bollinger Bands, чтобы улучшить качество сигнала.
Ввести динамическое распределение позиций на основе волатильности рынка и рентабельности.
Добавьте движение или время остановки потери, чтобы ограничить потери.
Проверяйте различные торговые сессии, чтобы найти оптимальные времена.
Оптимизируйте уровни получения прибыли и остановки убытков, чтобы сбалансировать размер прибыли и уровень выигрыша.
Попробуйте изменить расчет EMA как линейную взвешенную EMA, чтобы уменьшить задержку.
Используйте машинное обучение для поиска оптимальных параметров.
Модель затрат на транзакции и система корректировки для максимальной чистой прибыли.
С помощью вышеуказанных оптимизаций можно улучшить рентабельность системы, контролировать снижение затрат, расширить применимость, чтобы получить более мощную и надежную торговую стратегию.
Общая логика этой стратегии ясна, используя тройные 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)