
Эта стратегия относится к стратегии отслеживания тренда, которая реализует торговые сигналы для золотых и мертвых форков с двойными ЭМА путем вычисления быстрого и медленного ЭМА и сравнения их величины. Простая стратегия отслеживания тренда заключается в том, чтобы генерировать сигнал покупки при прохождении медленной линии на быстрой линии и сигнал продажи при прохождении медленной линии под быстрой линией.
Основная логика этой стратегии состоит из следующих частей:
Вычислить скоростную EMA и медленную EMA: вычислить скоростную EMA с длиной fastInput и медленную EMA с длиной slowInput через функцию ta.ema (().
Настройка диапазона времени отсчета: настройка фильтра отсчета с помощью параметров useDateFilter, настройка времени начала и окончания отсчета backtestStartDate и backtestEndDate.
Производство торговых сигналов: с помощью функций ta.crossover ((() и ta.crossunder ((() сравнивается величина отношений между EMA скоростной линии и EMA медленной линии, генерируя сигнал покупки при прохождении медленной линии на скоростной линии и сигнал продажи при прохождении медленной линии под скоростной линией.
Обработка ордеров за пределами временного диапазона: за пределами временного диапазона отсчета отменяются невыполненные ордера и уравняются все позиции.
Нарисуйте скользящие средние: Нарисуйте скользящие средние для быстрого EMA и медленного EMA на графике.
Это очень простая стратегия отслеживания трендов, которая имеет следующие преимущества:
Стратегическая логика проста, легко понятна и реализуема.
EMA упростила ценовые данные, что позволило снизить уровень шума в торговле.
Можно настроить параметры цикла EMA, чтобы адаптироваться к различным рыночным условиям.
Гибкий диапазон времени отсчета для тестирования в определенный период времени.
Оптимизируемые условия входа и выхода, используемые в сочетании с другими показателями.
В этой стратегии также есть некоторые риски, о которых следует помнить:
Двойная стратегия EMA является слишком гибкой и не может реагировать на изменения рынка.
Существуют риски частых и повторяющихся сделок.
Неправильная настройка параметров EMA может привести к ошибке торгового сигнала.
Необоснованный диапазон времени отслеживания может привести к пересоответствию.
Существует неизбежный риск отзыва и убытков.
Риск можно контролировать путем оптимизации параметров, соответствующего фильтра колебаний, установки стоп-убытков и т. д.
Эта стратегия может быть оптимизирована в следующих аспектах:
Оптимизация параметров цикла EMA, выбор оптимальной комбинации параметров.
Добавить фильтры на другие показатели, чтобы избежать ненужных сделок.
Повышение стратегии сдерживания убытков, контроль за единичными потерями.
Фильтры, такие как тенденции и волатильность, снижают частоту торгов.
Проверка контрактов различных сортов, чтобы найти оптимальную стратегию, применимую к объектам.
Использование слайдов, контроль затрат и т.д. позволяет сделать отсчет более реалистичным.
Эта стратегия в целом является очень простой двойной стратегией EMA Gold Fork Dead Fork, логика четкая и понятная, она генерирует торговый сигнал с помощью сравнения быстрого и медленного линии EMA. Преимущества этой стратегии заключаются в простоте реализации, но также есть некоторые проблемы, такие как частота торговли, которая может привести к переоптимизации и т. Д. Следующий шаг может быть улучшен с точки зрения оптимизации параметров, контроля риска и т. Д., что делает стратегию более устойчивой и практичной.
/*backtest
start: 2022-11-06 00:00:00
end: 2023-11-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("MollyETF_EMA_Crossover", overlay = true, initial_capital = 100000, default_qty_value=100, default_qty_type=strategy.percent_of_equity)
fastInput = input( 10, "Fast EMA")
slowInput = input( 21, "Slow EMA")
// Calculate two moving averages with different lengths.
float fastMA = ta.ema(close, fastInput)
float slowMA = ta.ema(close, slowInput)
// STEP 1. Create inputs that configure the backtest's date range
useDateFilter = input.bool(true, title="Filter Date Range of Backtest",
group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2018"),
title="Start Date", group="Backtest Time Period",
tooltip="This start date is in the time zone of the exchange " +
"where the chart's instrument trades. It doesn't use the time " +
"zone of the chart or of your computer.")
backtestEndDate = input(timestamp("7 Sep 2023"),
title="End Date", group="Backtest Time Period",
tooltip="This end date is in the time zone of the exchange " +
"where the chart's instrument trades. It doesn't use the time " +
"zone of the chart or of your computer.")
// STEP 2. See if current bar falls inside the date range
inTradeWindow = true
// STEP 3. Include the date filter with the entry order conditions
// Enter a long position when `fastMA` crosses over `slowMA`.
if inTradeWindow and ta.crossover(fastMA, slowMA)
strategy.entry("buy", strategy.long)
// Enter a short position when `fastMA` crosses under `slowMA`.
if inTradeWindow and ta.crossunder(fastMA, slowMA)
strategy.close_all(comment="sell")
// STEP 4. With the backtest date range over, exit all open
// trades and cancel all unfilled pending orders
if not inTradeWindow and inTradeWindow[1]
strategy.cancel_all()
strategy.close_all(comment="Date Range Exit")
// Plot the moving averages.
plot(fastMA, "Fast MA", color.aqua)
plot(slowMA, "Slow MA", color.orange)