Эта стратегия объединяет показатели экспоненциальной скользящей средней (EMA) и скользящей средней дивергенции конвергенции (MACD) для генерации торговых сигналов и использует стоп-лосс для контроля рисков.
Когда быстрая линия EMA пересекает медленную линию EMA, и гистограмма MACD становится медвежьей, стратегия становится длинной. Когда существует длинная позиция, устанавливается нисходящая линия стоп-лосса. Если цена опустится ниже линии стоп-лосса на определенный процент, длинная позиция будет остановлена.
В частности, стратегия использует 7-дневную EMA и 14-дневную EMA для построения быстрой и медленной EMA. Значение MACD получается путем вычитания 26-дневной EMA из 12-дневной EMA, а линия сигнала получается с 9-дневной EMA MACD. Когда 7-дневная EMA пересекает 14-дневную EMA и значение MACD пересекает линию сигнала, открывается длинная позиция. Затем устанавливается линия снижения стоп-лосса. Если цена падает с более высоких уровней на определенный процент, длинная позиция будет остановлена.
Эта стратегия сочетает в себе индикаторы EMA и MACD, которые могут эффективно отфильтровывать ложные прорывы. EMA оценивает направление тренда, а MACD определяет точки входа. Сочетание обоих может уменьшить частоту торговли при одновременном улучшении качества сигнала.
В результате проведенных обратных тестов было установлено, что эта стратегия может приносить достойную прибыль даже на медвежьих рынках, что указывает на определенную устойчивость.
Стратегия опирается в основном на индикаторы, с риском быть обманутыми. Во время консолидации с диапазоном, EMA и MACD могут генерировать чрезмерные ложные сигналы, что приводит к переоценке и потерям.
Расширение периодов EMA может уменьшить ложные сигналы. Другие индикаторы также могут быть объединены для фильтрации сигналов, таких как индикаторы объема или волатильности. Кроме того, процент стоп-лосса может быть скорректирован на основе рыночных условий, чтобы сбалансировать риск стоп-лосса и риски випса.
Чтобы найти более подходящие параметры, можно было бы проверить различные комбинации периодов EMA.
Другие показатели, такие как RSI, KD, могут быть добавлены для фильтрации сигналов и улучшения качества.
Процентные показатели стоп-лосса могут быть скорректированы на основе различных продуктов с динамическими остановками.
Для более настраиваемых правил входа и выхода можно использовать прорыв, распознавание моделей и другие методы.
Машинное обучение может помочь в прогнозировании общего направления тренда, чтобы помочь EMA.
В целом стратегия довольно надежна, генерируя достойную доходность даже на медвежьих рынках. Но существуют определенные риски, требующие настройки параметров и фильтрации сигналов. Дальнейшая оптимизация с другими техническими индикаторами и машинным обучением может значительно улучшить ее. Вкратце, стратегия обеспечивает надежный шаблон для количественной торговли.
/*backtest start: 2023-09-12 00:00:00 end: 2023-09-19 00:00:00 period: 10m basePeriod: 1m 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/ // © Coinrule //@version=5 strategy('EMA and MACD with Trailing Stop Loss', overlay=true, initial_capital=1000, process_orders_on_close=true, default_qty_type=strategy.percent_of_equity, default_qty_value=30, commission_type=strategy.commission.percent, commission_value=0.1) showDate = input(defval=true, title='Show Date Range') timePeriod = time >= timestamp(syminfo.timezone, 2022, 1, 1, 0, 0) notInTrade = strategy.position_size <= 0 // EMAs fastEMA = ta.ema(close, 7) slowEMA = ta.ema(close, 14) plot(fastEMA, color = color.blue) plot(slowEMA, color = color.green) //buyCondition1 = ta.crossover(fastEMA, slowEMA) buyCondition1 = fastEMA > slowEMA // DMI and MACD inputs and calculations [macd, macd_signal, macd_histogram] = ta.macd(close, 12, 26, 9) buyCondition2 = ta.crossover(macd_signal, macd) // Configure trail stop level with input options longTrailPerc = input.float(title='Trail Long Loss (%)', minval=0.0, step=0.1, defval=3) * 0.01 shortTrailPerc = input.float(title='Trail Short Loss (%)', minval=0.0, step=0.1, defval=1) * 0.01 // Determine trail stop loss prices longStopPrice = 0.0 shortStopPrice = 0.0 longStopPrice := if strategy.position_size > 0 stopValue = close * (1 - longTrailPerc) math.max(stopValue, longStopPrice[1]) else 0 shortStopPrice := if strategy.position_size < 0 stopValue = close * (1 + shortTrailPerc) math.min(stopValue, shortStopPrice[1]) else 999999 if (buyCondition1 and buyCondition2 and notInTrade and timePeriod) strategy.entry(id="Long", direction = strategy.long) strategy.exit(id="Exit", stop = longStopPrice, limit = shortStopPrice) //if (sellCondition1 and sellCondition2 and notInTrade and timePeriod) //strategy.close(id="Close", when = sellCondition1 or sellCondition2)