Эта стратегия использует скользящие средние кроссоверы и индикатор ATR для реализации автоматизированного тренда после торговли. Она длинная, когда быстрая EMA пересекается выше медленной EMA, и короткая, когда быстрая EMA пересекается ниже медленной EMA. В то же время она использует индикатор ATR для оценки направления тренда и отправляет торговые сигналы только тогда, когда ATR указывает на наличие тренда.
Стратегия основывается на двух технических показателях:
Линии EMA: использует две линии EMA с различными параметрами, быстрой и медленной. Когда быстрая EMA пересекает над медленной EMA, это считается длинным сигналом. Когда быстрая EMA пересекает ниже медленной EMA, это считается коротким сигналом.
Индикатор ATR: индикатор ATR измеряет величину и силу колебаний цен для оценки тенденции текущего движения.
Сочетая кроссоверы EMA для выявления торговых возможностей и фильтр ATR для избежания режимов низкой трендности, стратегия направлена на то, чтобы избежать подрыва во время рыночной нестабильности.
Преимущества этой стратегии включают:
Торговля осуществляется только тогда, когда ATR определяет тенденцию, что помогает избежать срыва во время недирекционных режимов.
Использование простой логики быстрого и медленного перекрестки EMA для определения торговых сигналов.
Настраиваемая чувствительность и плавность EMA посредством корректировки параметров.
Полная автоматизированная торговая система, построенная всего с двумя простыми индикаторами, легко реализуемая в редакторе Pine.
Минимальная потребность в постоянном настройке параметров, подход "настроить и забыть".
Некоторые риски, которые следует учитывать, включают:
Кроссоверы EMA могут генерировать ложные сигналы, приводящие к ненужным потерям.
Оценка тренда ATR также может быть подвержена ошибкам, упуская торговые возможности.
Большие новостные события могут спровоцировать изменения, которые быстрое пересечение EMA может пропустить, требуя ручного вмешательства.
Эти риски могут быть уменьшены с помощью оптимизации.
К основным направлениям оптимизации относятся:
Добавление других индикаторов для создания комбинированной системы и улучшения точности сигнала.
Выбор параметров EMA и ATR, наиболее подходящих для конкретного рынка, на основе символов и временных рамок торговли.
Внедрение оптимизации динамических параметров с помощью машинного обучения для корректировки показателей на основе текущих рыночных условий вместо использования фиксированных статических значений.
В целом, это очень практичная стратегия, следующая за трендом. Простой комбинацией двух индикаторов он создает относительно полную торговую систему. Благодаря корректировке параметров он может быть адаптирован к трейдерам с различными предпочтениями и стилями. В то же время дальнейшее расширение и оптимизация могут сделать эффективность стратегии еще лучше. Простая, но эффективная логика торговли в сочетании с сильным потенциалом оптимизации делает это полезной количественной стратегией для исследования и применения в долгосрочной перспективе.
/*backtest start: 2022-12-05 00:00:00 end: 2023-12-11 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This strategy has been created for GMT trade 4h by Zhukov //@version=5 strategy('ZhukovTrade', overlay=true, calc_on_every_tick=true, currency=currency.USD) // INPUT: // Options to enter fast and slow Exponential Moving Average (EMA) values emaFast = input.int(title='Fast EMA', defval=100, minval=1, maxval=9999) emaSlow = input.int(title='Slow EMA', defval=200, minval=1, maxval=9999) // Option to select trade directions tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Both') // Options that configure the backtest date range startDate = input(title='Start Date', defval=timestamp('01 Jan 2023 00:00')) endDate = input(title='End Date', defval=timestamp('31 Dec 2023 23:59')) // CALCULATIONS: // Use the built-in function to calculate two EMA lines fastEMA = ta.ema(close, emaFast) slowEMA = ta.ema(close, emaSlow) emapos = ta.ema(close,200) // PLOT: // Draw the EMA lines on the chart plot(series=fastEMA, color=color.new(color.orange, 0), linewidth=2) plot(series=slowEMA, color=color.new(color.blue, 0), linewidth=2) plot(series=emapos, color=color.new(color.red, 0), linewidth=2) // CONDITIONS: // Check if the close time of the current bar falls inside the date range inDateRange = true // Translate input into trading conditions longOK = tradeDirection == 'Long' or tradeDirection == 'Both' shortOK = tradeDirection == 'Short' or tradeDirection == 'Both' // Decide if we should go long or short using the built-in functions longCondition = ta.crossover(fastEMA, slowEMA) shortCondition = ta.crossunder(fastEMA, slowEMA) // ORDERS: // Set take profit and stop loss percentages take_profit_percent = input(0, title="Take Profit Percent") stop_loss_percent = input(0, title="Stop Loss Percent") // Submit entry (or reverse) orders atrPeriod = input(12, "ATR Length") factor = input.float(3.0, "Factor", step = 0.01) [supertrend, direction] = ta.supertrend(factor, atrPeriod) bodyMiddle = plot((open + close) / 2, display=display.none) upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr) downTrend = plot(direction < 0? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr) fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false) fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false) if longCondition and inDateRange if longOK and direction<0 strategy.entry(id='long', direction=strategy.long, alert_message = "LONG") if shortCondition and inDateRange if shortOK and direction>0 strategy.entry(id='short', direction=strategy.short, alert_message = "SHORT") // Submit exit orders in the cases where we trade only long or only short if strategy.position_size > 0 and take_profit_percent strategy.exit(id='tp long',from_entry ="long",profit = take_profit_percent) if strategy.position_size > 0 and stop_loss_percent strategy.exit(id='sl long',from_entry="long",loss=stop_loss_percent) if strategy.position_size < 0 and stop_loss_percent strategy.exit(id='sl short',from_entry="short",loss=stop_loss_percent) if strategy.position_size < 0 and take_profit_percent strategy.exit(id='tp short',from_entry="short",profit = take_profit_percent)