Стратегия торговли EMA и MACD с отслеживанием стоп-лосса

Автор:Чао Чжан, Дата: 2023-09-20 11:21:14
Тэги:

Обзор

Эта стратегия объединяет показатели экспоненциальной скользящей средней (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 может уменьшить ложные сигналы. Другие индикаторы также могут быть объединены для фильтрации сигналов, таких как индикаторы объема или волатильности. Кроме того, процент стоп-лосса может быть скорректирован на основе рыночных условий, чтобы сбалансировать риск стоп-лосса и риски випса.

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

  1. Чтобы найти более подходящие параметры, можно было бы проверить различные комбинации периодов EMA.

  2. Другие показатели, такие как RSI, KD, могут быть добавлены для фильтрации сигналов и улучшения качества.

  3. Процентные показатели стоп-лосса могут быть скорректированы на основе различных продуктов с динамическими остановками.

  4. Для более настраиваемых правил входа и выхода можно использовать прорыв, распознавание моделей и другие методы.

  5. Машинное обучение может помочь в прогнозировании общего направления тренда, чтобы помочь 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)


Больше