Стратегия основана на пересечении движущихся средних и ATR-индикаторов для автоматизации трендового отслеживания торгов. При пересечении медленной линии EMA на линии быстрой EMA принимается многоочередная позиция; при пересечении медленной линии EMA ниже линии быстрой EMA принимается короткоочередная позиция. Вместе с тем, в сочетании с ATR-индикаторами для определения направления тренда, только тогда, когда ATR определяет направление тренда, подается торговый сигнал.
Стратегия основана на двух технических показателях:
Средняя линия EMA: средняя линия EMA с двумя различными параметрами, рассматривается как многоголовый сигнал при прохождении медленной линии на быстрой линии и как пустой сигнал при прохождении нижней.
ATR-индикатор: ATR-индикатор позволяет определять величину и силу колебаний цен, и, таким образом, определяет тенденционность текущего движения. Когда ATR-значение меньше, это означает, что в настоящее время он находится в сборе, и в это время не следует строить позиции; когда ATR-значение больше и направлено вверх, это означает, что в настоящее время он находится на рынке тренда, и в это время ждет EMA-золотого форка.
Поиск возможностей для покупки и продажи через пересечение средней линии EMA, в сочетании с индикатором ATR, чтобы отфильтровать слабые трендовые торговые сигналы и избежать заключения в рыночной колебательной консолидации.
Эта стратегия имеет следующие преимущества:
Торговля только в том случае, если индикатор ATR считает, что это тенденция, помогает избежать запертия в неизвестном колебании.
Проще и эффективнее найти точки купли-продажи, используя принципы перекрестного движения по скоростной равномерной линии.
С помощью параметров чувствительность и гладкость средней линии ЭМА могут быть скорректированы в соответствии с личными предпочтениями.
Полностью автоматизированная система торговли, реализуемая с использованием всего двух простых индикаторов, может быть легко разработана и оптимизирована с помощью редактора Pine.
Не требуется часто корректировать параметры, чтобы реализовать простые стратегии ParameterSet и Forget.
Однако есть и другие риски, о которых следует помнить:
EMA-пересечение легко создает ложные сигналы, которые могут привести к ненужным потерям. Можно сгладить некоторые показатели, скорректировав параметры EMA.
ATR-индикаторы иногда могут ошибочно оценивать сводку и тенденции, что приводит к упущенным торговым возможностям.
Сама стратегия не учитывает крупномасштабный факторный анализ, и если есть серьезные новости о рыночном реверсии, то очень сложно сделать быстрый и равномерный перекрестный выбор, и в этом случае требуется искусственное вмешательство.
Эти риски можно снизить с помощью оптимизации.
В этой стратегии есть несколько основных улучшений:
Можно рассмотреть возможность добавления других показателей, чтобы сформировать систему комбинации показателей, повысить точность сигналов. Например, в сочетании с показателем RSI избежать риска перекупа и перепродажи.
Можно выбрать наиболее подходящие параметры в зависимости от разных типов торгов, различных торговых зон, чтобы параметры 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)