Движущаяся средняя кроссоверная тенденция Жукова по стратегии

Автор:Чао Чжан, Дата: 2023-12-12 12:24:11
Тэги:

img

Обзор

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

Логика стратегии

Стратегия основывается на двух технических показателях:

  1. Линии EMA: использует две линии EMA с различными параметрами, быстрой и медленной. Когда быстрая EMA пересекает над медленной EMA, это считается длинным сигналом. Когда быстрая EMA пересекает ниже медленной EMA, это считается коротким сигналом.

  2. Индикатор ATR: индикатор ATR измеряет величину и силу колебаний цен для оценки тенденции текущего движения.

Сочетая кроссоверы EMA для выявления торговых возможностей и фильтр ATR для избежания режимов низкой трендности, стратегия направлена на то, чтобы избежать подрыва во время рыночной нестабильности.

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

Преимущества этой стратегии включают:

  1. Торговля осуществляется только тогда, когда ATR определяет тенденцию, что помогает избежать срыва во время недирекционных режимов.

  2. Использование простой логики быстрого и медленного перекрестки EMA для определения торговых сигналов.

  3. Настраиваемая чувствительность и плавность EMA посредством корректировки параметров.

  4. Полная автоматизированная торговая система, построенная всего с двумя простыми индикаторами, легко реализуемая в редакторе Pine.

  5. Минимальная потребность в постоянном настройке параметров, подход "настроить и забыть".

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

Некоторые риски, которые следует учитывать, включают:

  1. Кроссоверы EMA могут генерировать ложные сигналы, приводящие к ненужным потерям.

  2. Оценка тренда ATR также может быть подвержена ошибкам, упуская торговые возможности.

  3. Большие новостные события могут спровоцировать изменения, которые быстрое пересечение EMA может пропустить, требуя ручного вмешательства.

Эти риски могут быть уменьшены с помощью оптимизации.

Руководство по оптимизации

К основным направлениям оптимизации относятся:

  1. Добавление других индикаторов для создания комбинированной системы и улучшения точности сигнала.

  2. Выбор параметров EMA и ATR, наиболее подходящих для конкретного рынка, на основе символов и временных рамок торговли.

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

Заключение

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


/*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)


Больше