Стратегия основана на перекрестных сигналах двух индексов сдвигающихся средних ((EMA)). Открывая позиции, когда краткосрочные EMA пересекают долгосрочные EMA, они делают больше; когда краткосрочные EMA пересекают долгосрочные EMA, они делают меньше. Стратегия также вводит механизм остановки убытков и фильтр времени торговли, чтобы контролировать риск и оптимизировать эффективность стратегии.
Эта стратегия использует два различных цикла EMA в качестве основы для определения тенденции. По сравнению с простой движущейся средней (SMA), EMA может быстрее реагировать на изменения цен и более рационально распределять вес. Когда долгосрочная EMA проходит через краткосрочную EMA, это означает, что цена может сформировать восходящую тенденцию, и тогда открывается больше позиций; наоборот, когда долгосрочная EMA проходит через краткосрочную EMA, это означает, что восходящая тенденция может закончиться, и тогда закрывается.
Помимо равнолинейного перекрестного сигнала, стратегия также вводит механизм остановки убытков. С одной стороны, установлена фиксированная процентная остановка, то есть, когда цена снижается относительно цены открытия позиции более чем на определенное количество процентов, вынуждается плавная позиция, чтобы контролировать убытки; с другой стороны, также можно выбрать плавную позицию, когда цена закрытия цены ниже предыдущей K-линии.
Кроме того, в стратегии также введены фильтры времени торгов. Пользователи могут самостоятельно устанавливать время начала и окончания торгов, чтобы избежать торгов в определенные периоды времени (например, праздники, неторговые периоды и т. д.).
Простота использования: стратегия имеет четкую логику, используя только два EMA в качестве торговых сигналов, что позволяет легко понять и реализовать.
Тренд-слежение: EMA может быстро реагировать на изменения цен, что позволяет стратегии вовремя улавливать формирование и окончание трендов, что позволяет получать доход от тренд-слежения.
Управление рисками: введение фиксированного процентного стоп-лосса и стоп-лосса, основанного на цене закрытия предыдущей K-линии, позволяет эффективно контролировать потери и отзывы от одной сделки.
Гибкость параметров: пользователь может настроить свой цикл EMA, процент стоп-ложа, использование стоп-ложа на предыдущей K-линии, временной промежуток торговли и т. д. в соответствии с его потребностями, чтобы оптимизировать эффективность стратегии.
Риск оптимизации параметров: производительность стратегии зависит от выбора параметров, таких как циклы EMA, процент стоп-убытков и т. Д. Ненадлежащие параметры могут привести к плохой производительности стратегии. Поэтому необходимо оптимизировать и отсчитывать параметры на исторических данных, чтобы выбрать оптимальные параметры.
Рыночный риск: эта стратегия применяется в основном на трендовых рынках, где частые сделки могут привести к большим отступлениям в условиях рыночных колебаний или обратного тренда. Поэтому необходимо изменить параметры стратегии в зависимости от состояния рынка или прекратить использование стратегии.
Стоимостный риск: эта стратегия может привести к увеличению количества сделок, что увеличит стоимость сделок. Поэтому необходимо выбрать подходящий торговый стандарт и объем сделок и контролировать стоимость каждой сделки.
Введение большего количества технических индикаторов: на основе перекрестных сигналов EMA, ввод других технических индикаторов, таких как RSI, MACD и т. Д., формирует многофакторный торговый сигнал, повышает точность определения тенденции.
Динамический стоп: в зависимости от рыночной волатильности, ATR и других показателей, динамически корректируйте стоп-позиции, чтобы максимально уменьшить потери прибыли от стоп-убытков при одновременном контроле риска.
Управление позициями: в зависимости от силы рыночных тенденций, отклонения цены от средней линии и т. Д., Динамически корректируйте размер позиции, увеличивая позиции при сильных тенденциях и уменьшая позиции при ослаблении или неясности тенденций.
Оптимизация машинного обучения: используйте алгоритмы машинного обучения для оптимизации параметров стратегии, автоматически выбирая оптимальную комбинацию параметров, повышая прибыль стратегии и снижая риск пересочетания.
Эта двулинейная кросс-количественная стратегия определяет тенденцию с помощью перекрестных сигналов двух EMA, в то же время внедряет механизм остановки убытков и фильтр времени торговли, обеспечивая хороший баланс между способностью отслеживать тенденцию и управлять риском. Несмотря на простую логику стратегии, стабильная прибыль может быть получена в условиях трендовых рынков с разумной оптимизацией параметров и управлением риском. В будущем эта стратегия может быть усовершенствована с помощью внедрения большего количества технических показателей, динамических стоп-позиций, управления и оптимизации машинного обучения для дальнейшего повышения эффективности стратегии.
/*backtest
start: 2023-03-02 00:00:00
end: 2024-03-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ZenAndTheArtOfTrading / www.PineScriptMastery.com
// @version=5
strategy("EMA strategy",
overlay=true,
initial_capital=50000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100, // 100% of balance invested on each trade
commission_type=strategy.commission.cash_per_contract,
commission_value=0.005) // Interactive Brokers rate
// Get user input
i_ma1 = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA")
i_ma2 = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA")
i_stopPercent = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline")
i_lowerClose = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2")
i_startTime = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")
// Get indicator values
ma1 = ta.ema(close, i_ma1)
ma2 = ta.ema(close, i_ma2)
// Check filter(s)
f_dateFilter = true
// Check buy/sell conditions
var float buyPrice = 0
buyCondition = close > ma1 and strategy.position_size == 0 and f_dateFilter
sellCondition = close < ma2 and strategy.position_size > 0 //and (not i_lowerClose or close < low[1])
stopDistance = strategy.position_size > 0 ? ((buyPrice - close) / close) : na
stopPrice = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na
stopCondition = strategy.position_size > 0 and stopDistance > i_stopPercent
// Enter positions
if buyCondition
strategy.entry(id="Long", direction=strategy.long)
if buyCondition[1]
buyPrice := open
// Exit positions
if sellCondition or stopCondition
strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
buyPrice := na
// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)
plot(ma1, color=color.blue)
plot(ma2, color=color.orange)