Это 3-минутная краткосрочная стратегия экспертного советника для фьючерсов E-mini S&P500 (ES). Он генерирует торговые сигналы путем расчета ряда экспоненциальных скользящих средних и сочетания конкретных условий паттерна.
Основным показателем этой стратегии является средняя линия T3. T3 сначала рассчитывает набор экспоненциальных скользящих средних xe1 ~ x6 на основе определенного пользователем параметра T3. Затем он рассчитывает взвешенное среднее значение этих EMA с использованием конкретных коэффициентов в качестве окончательной средней линии T3.
При условии, что цена закрытия находится ниже средней линии T3, генерируется сигнал покупки. При условии, что цена закрытия находится выше средней линии T3, генерируется сигнал продажи. Кроме того, стратегия также рассматривает конкретные шаблоны свечей в качестве дополнительных условий входа. Торговые ордера будут отправлены только тогда, когда одновременно появляются условия шаблона и сигналы T3.
Наибольшая сила этой стратегии заключается в дизайне мультифильтров и оптимизации параметров. С одной стороны, сочетание фильтров ценового действия и графических шаблонов может уменьшить шум торговли. С другой стороны, ключевые параметры, такие как T3 и правила оценки шаблонов, могут быть оптимизированы для адаптации к разным рынкам и улучшения точности входа.
По сравнению с простыми скользящими средними, тройной механизм сглаживания индикатора T3 эффективен в фильтрации шума рынка и выявлении точек переворота тренда.
Основные риски этой стратегии возникают из-за ненадлежащей настройки параметров и чрезмерного периода удержания. Если параметр T3 установлен слишком большой, индикаторы отстанут от рынка; если установлен слишком маленький, это увеличивает вероятность шумных сделок. Кроме того, 3-минутные операции могут иметь огромные потери без своевременной остановки потери.
Для контроля рисков, во-первых, необходимо многократно проводить обратные тесты для определения оптимального диапазона параметров для различных продуктов. Во-вторых, для выхода из позиций с приемлемым процентом потерь на торговую позицию следует выполнять строгую стратегию стоп-лосса.
Для улучшения стратегии существует несколько направлений:
Оптимизировать параметр T3 для поиска оптимального диапазона для различных торговых инструментов
Улучшить логику оценки шаблонов для повышения точности распознавания шаблонов
Добавьте более продвинутые механизмы остановки потери, такие как отслеживание остановки потери
Добавить модуль управления деньгами на основе коэффициента прибыли или максимального привлечения
Добавить модуль автоматического обучения
Благодаря этим улучшениям стабильность и рентабельность стратегии могут постепенно повышаться.
Как краткосрочная стратегия внутридневного трейдинга, эта стратегия имеет такие преимущества, как огромное пространство оптимизации, несколько фильтров и быстрое исполнение ордеров.
/*backtest start: 2023-11-16 00:00:00 end: 2023-11-23 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("ES 3m Short Only (Triple RED)", overlay=true) // Alert Message '{{strategy.order.alert_message}}' //3min T3 = input(150)//to 600 xPrice3 = close xe1 = ta.ema(xPrice3, T3) xe2 = ta.ema(xe1, T3) xe3 = ta.ema(xe2, T3) xe4 = ta.ema(xe3, T3) xe5 = ta.ema(xe4, T3) xe6 = ta.ema(xe5, T3) b3 = 0.7 c1 = -b3*b3*b3 c2 = 3*b3*b3+3*b3*b3*b3 c3 = -6*b3*b3-3*b3-3*b3*b3*b3 c4 = 1+3*b3+b3*b3*b3+3*b3*b3 nT3Average = c1 * xe6 + c2 * xe5 + c3 * xe4 + c4 * xe3 // Buy Signal - Price is below T3 Average buySignal3 = xPrice3 < nT3Average sellSignal3 = xPrice3 > nT3Average //NinjaTrader Settings. acct = "Sim101" ticker = "ES 12-23" qty = 1 takeProfitTicks = 4 stopLossTicks = 16 tickSize = 0.25 takeProfitShort = close - takeProfitTicks * tickSize stopLossShort = close + stopLossTicks * tickSize OCOMarketShort = '{ "alert": "OCO Market Short", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '", "qty": "' + str.tostring(qty) + '", "take_profit_price": "' + str.tostring(takeProfitShort) + '", "stop_price": "' + str.tostring(stopLossShort) + '", "tif": "DAY" }' CloseAll = '{ "alert": "Close All", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '" }' IsUp = close > open IsDown = close < open PatternPlot = IsDown[2] and IsDown[1] and IsDown and close[1] <= high[0] and close[1] > close[0] and low[1] > low[0] and high[2] > high[1] and low[2] <= low[1] if (PatternPlot and sellSignal3) strategy.entry('Short', strategy.short, alert_message=OCOMarketShort) strategy.exit('Close Short', 'Short', profit=takeProfitTicks, loss=stopLossTicks, alert_message=CloseAll) //plotshape(PatternPlot, title="Custom Pattern", style=shape.circle, location=location.abovebar, color=color.red, size=size.small)