
Эта стратегия использует как сигнал покупки и продажи перекрестки быстрой EMA-линии и медленной EMA-линии для автоматической торговли в соответствии с перекрестками равномерной линии. Быстрая EMA-линия сжимает ценовые изменения, а медленная EMA-линия сглаживает ценовые изменения.
Стратегия создает торговые сигналы, в основном, путем вычисления быстрой и медленной линий EMA и сравнения отношений между двумя равномерными линиями.
Во-первых, в входных параметрах устанавливается цикл быстрого ЭМА emaFast на 1, таким образом, быстрое ЭМА может сдерживать изменения цены. В то же время устанавливается цикл медленного ЭМА, где EmaSlowBuy используется для генерации сигнала покупки, а EmaSlowSell - для генерации сигнала продажи.
Затем, в зависимости от цикла ввода, рассчитывается быстрая EMA и медленная EMA. Быстрая EMA имеет фиксированный цикл 1, чтобы следить за ценой; медленная EMA является регулируемым параметром, чтобы сгладить данные о цене.
Далее, сравнить относительно больших размеров быстрых ЭМА и медленных ЭМА, чтобы судить о перекрестных ситуациях. Если быстрые ЭМА пересекают медленные ЭМА с нижнего направления, то это создает золотую вилку, удовлетворяющую условию покупки; если быстрые ЭМА падают с верхнего направления и нарушают медленные ЭМА, то это создает мертвую вилку, удовлетворяющую условию продажи.
Наконец, при выполнении условий покупки и продажи, выполните соответствующие указания на открытие и закрытие позиции, чтобы завершить сделку. В то же время, проверьте, находится ли текущее время в пределах отсчета времени, чтобы избежать ошибочных сделок за пределами диапазона дат.
В зависимости от риска можно рассмотреть следующие меры оптимизации:
В сочетании с другими показателями фильтрует перекрестный сигнал EMA, чтобы избежать ошибочного сигнала
Настройка параметров EMA в соответствии с волатильностью рынка, снижение частоты торгов
Повышение учета сбоев и остановок, контроль риска
Оптимизация циклов быстрых ЭМА с использованием более подходящих параметров в конкретных рыночных условиях
Повышение оценки тенденций, чтобы избежать чрезмерной торговли в условиях нестабильного рынка
Эта стратегия может быть оптимизирована в следующих направлениях:
Можно найти наиболее эффективную комбинацию параметров в исторических данных, пройдя через различные параметры emaFast и emaSlow, используя методы пошаговой оптимизации или случайной оптимизации.
Например, можно использовать MACD, KDJ, Brin Belt и другие индикаторы, чтобы избежать ошибочного сигнала при перекрестном EMA.
Для того, чтобы определить, насколько сильна или слаба тенденция, необходимо рассчитать среднюю истинную величину волны и другие показатели, чтобы избежать рыночных потрясений.
Изучение оптимальных стоп-пойнтов для контроля риска потерь и определение разумных стоп-пойнтов для максимизации прибыли.
Можно тестировать не только комбинации быстрого и медленного EMA, но и комбинации двойного, трехкратного и даже многократного EMA, чтобы найти лучшие параметры.
Для более тенденциозных рынков можно соответствующим образом ускорить цикл EMA, а для шокирующих рынков - замедлить его.
Общая концепция EMA Cross Strategy ясна и понятна, используя проверенные технические показатели для определения времени покупки и продажи. Стратегия является настраиваемой и может быть оптимизирована путем корректировки параметров EMA, что позволяет разработать торговую стратегию для различных рыночных условий. Однако сигналы EMA являются отсталыми и требуют повторного тестирования, чтобы найти оптимальную комбинацию параметров. Кроме того, необходимо оптимизировать для риска, проводить проверку сигнала в сочетании с другими показателями и оптимизировать методы остановки убытков, что снижает отказ от отзывов и повышает прибыльность.
/*backtest
start: 2023-10-10 00:00:00
end: 2023-11-09 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(
"EMA Cross Strategy with Custom Buy/Sell Conditions",
overlay=true
)
// INPUT:
// Options to enter fast Exponential Moving Average (EMA) value
emaFast = 1
// Options to enter slow EMAs for buy and sell signals
slowEMABuy = input(title="Slow EMA for Buy Signals", defval=20, minval=1, maxval=9999)
slowEMASell = input(title="Slow EMA for Sell Signals", defval=30, minval=1, maxval=9999)
// Option to select trade directions
tradeDirection = input(title="Trade Direction", options=["Long", "Short", "Both"], defval="Both")
// Options that configure the backtest date range
startDate = input(title="Start Date", type=input.time, defval=timestamp("01 Jan 2018 00:00"))
endDate = input(title="End Date", type=input.time, defval=timestamp("31 Dec 2025 23:59"))
// CALCULATIONS:
// Use a fixed fast EMA of 1 and calculate slow EMAs for buy and sell signals
fastEMA = ema(close, emaFast)
slowEMABuyValue = ema(close, slowEMABuy)
slowEMASellValue = ema(close, slowEMASell)
// PLOT:
// Draw the EMA lines on the chart
plot(series=fastEMA, color=color.orange, linewidth=2)
plot(series=slowEMABuyValue, color=color.blue, linewidth=2, title="Slow EMA for Buy Signals")
plot(series=slowEMASellValue, color=color.red, linewidth=2, title="Slow EMA for Sell Signals")
// CONDITIONS:
// Check if the close time of the current bar falls inside the date range
inDateRange = true
// Translate input into trading conditions for buy and sell signals
buyCondition = crossunder(slowEMABuyValue, fastEMA)
sellCondition = crossover(slowEMASellValue, fastEMA)
// Translate input into overall trading conditions
longOK = (tradeDirection == "Long") or (tradeDirection == "Both")
shortOK = (tradeDirection == "Short") or (tradeDirection == "Both")
// ORDERS:
// Submit entry (or reverse) orders based on buy and sell conditions
if (buyCondition and inDateRange)
strategy.entry("Buy", strategy.long)
if (sellCondition and inDateRange)
strategy.close("Buy")
// Submit exit orders based on opposite trade conditions
if (strategy.position_size > 0 and sellCondition)
strategy.close("Sell")
if (strategy.position_size < 0 and buyCondition)
strategy.close("Sell")