Количественная торговая стратегия, основанная на экспоненциальной скользящей средней и индикаторах MACD


Дата создания: 2023-12-08 16:58:01 Последнее изменение: 2023-12-08 17:04:03
Копировать: 0 Количество просмотров: 706
1
Подписаться
1621
Подписчики

Количественная торговая стратегия, основанная на экспоненциальной скользящей средней и индикаторах MACD

Обзор

Стратегия, которая сочетает в себе прорывные сигналы индексных движущихся средних и MACD, устанавливает два длинных и коротких периода удержания позиций, чтобы получить прибыль от трендового слежения и обратной торговли.

Стратегический принцип

Эта стратегия основана на следующих принципах:

  1. Вычислите 200-дневную скользящую среднюю индекса, чтобы определить направление тенденции. Цены, которые закрываются выше этой средней, являются позитивными, а низкие - нисходящими.

  2. На основе средней цены на высочайшую цену, на низкую цену и на закрытую цену составляется скользящая средняя величина индекса, которая рассчитывается как разница между средней величиной и высочайшей и низкой ценой, и создается столбиковый график MACD.

  3. Вычислите 9-дневную подвижную среднюю по столбовому графику MACD, чтобы построить MACD-сигнальную линию.

  4. Когда MACD спускается вверх и пробивает сигнальную линию, то создает сигнал покупки; когда спускается вверх и пробивает сигнальную линию, то создает сигнал продажи.

  5. В сочетании с направлением большой тенденции, можно определить, входит ли рынок в более длинную тенденцию или перевернулся на короткую линию.

Стратегические преимущества

Эта стратегия, объединяющая трендовые и реверсионные сделки, позволяет отслеживать тенденции на более длинных периодах, а также ловить возможности для реверсий на коротких линиях, гибко реагируя на различные рыночные условия.

Конкретные преимущества включают:

  1. Используйте 200-дневную скользящую среднюю для определения направления основных тенденций и избегайте обратных операций.

  2. MACD более чувствителен к краткосрочным изменениям цен и может более эффективно улавливать возможности для обратного хода.

  3. Комбинация MACD с различными параметрами позволяет реализовать торговые сигналы в несколько временных рамок.

  4. В сочетании с стратегией “стоп-лосс” можно эффективно контролировать одиночные потери.

Стратегический риск

Основные риски этой стратегии:

  1. Когда долгосрочные индикаторы посылают торговые сигналы, может быть определенная временная разница, требующая комплексного суждения о тенденциях.

  2. MACD, как обратный индикатор, снижает свою интерпретационную силу при резких событиях.

  3. Неправильно настроенная точка остановки может привести к преждевременной или слишком большой остановке.

  4. Пробитые сигналы считаются слишком частыми, что может привести к появлению большего количества ложных сигналов.

Решение проблемы:

  1. Оптимизация параметров MACD, корректировка чувствительности показателя.

  2. В сочетании с другими показателями, чтобы избежать слепого отслеживания сигналов MACD.

  3. Тестирование и оптимизация параметров стратегии стоп-лосса.

  4. Добавьте условия фильтрации, чтобы избежать слишком много ложных сигналов.

Направление оптимизации стратегии

Эта стратегия может быть оптимизирована в следующих направлениях:

  1. Оптимизация параметров движущихся средних и MACD для получения более эффективных торговых сигналов.

  2. Добавление других индикаторов для повышения эффективности стратегии.

  3. Set up a position sizing strategy rather than fixed lots for each trade. Устанавливать стратегию размещения позиций для каждой сделки, а не фиксированное количество.

  4. Add more advanced exit rules rather than just stop loss. Such as profit target, trailing stops etc. Добавить более продвинутые правила выхода, а не просто стоп-лосс, например, стоп-стоп, мобильный стоп-лосс и т. д.

  5. Backtest with more complex fee settings to better simulate real trading environoment. Проверка с более сложными настройками сборов для лучшего моделирования реальной торговой среды.

  6. Walk forward analysis, robustness test among multiple products to enhance reliability. Анализ шагов вперед, тестирование надежности среди нескольких продуктов для повышения надежности.

Подвести итог

Стратегия одновременно учитывает тенденции и обратную торговлю. Ключевой момент заключается в точности установки параметров индикатора и понимания большого тренда. С помощью постоянной оптимизации параметров, увеличения волновых условий и других средств, стратегия может быть более точной в оценке рыночных сигналов и более стабильной прибыли.

Исходный код стратегии
/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Strategia EMA + Impulse MACD", shorttitle="EMA+IMACD", overlay=true)

// Impostazioni
ema_length = input(200, title="Periodo EMA a 200", type=input.integer)
lengthMA = input(34, title="Periodo EMA", type=input.integer)
lengthSignal = input(9, title="Periodo Signal", type=input.integer)
lengthImpulseMACD = input(12, title="Periodo Impulse MACD", type=input.integer)
lengthImpulseMACDSignal = input(9, title="Periodo Impulse MACD Signal", type=input.integer)
stopLossPeriod = input(20, title="Periodo Stop Loss", type=input.integer)

var float ema200 = na
if bar_index >= ema_length
    ema200 := ema(close, ema_length)

// Impulse MACD
var float hi = na
var float lo = na
var float mi = na
var float impulseMACD = na
var float impulseMACDSignal = na

calc_smma(src, len) =>
    var float smma = na
    if na(smma)
        smma := sma(src, len)
    else
        smma := (smma[1] * (len - 1) + src) / len
    smma

calc_zlema(src, length) =>
    ema1 = ema(src, length)
    ema2 = ema(ema1, length)
    d = ema1 - ema2
    ema1 + d

if bar_index >= lengthMA
    src = hlc3
    hi := calc_smma(high, lengthMA)
    lo := calc_smma(low, lengthMA)
    mi := calc_zlema(src, lengthMA)

    impulseMACD := (mi > hi) ? (mi - hi) : (mi < lo) ? (mi - lo) : 0
    impulseMACDSignal := sma(impulseMACD, lengthSignal)

// Calcolo dello stop loss
var float stopLossLong = na
var float stopLossShort = na

stopLossLong := lowest(low, stopLossPeriod)
stopLossShort := highest(high, stopLossPeriod)

// Calcolo del take profit
var float takeProfitLong = na
var float takeProfitShort = na

if not na(stopLossLong)
    takeProfitLong := close + (close - stopLossLong) * 1.5
if not na(stopLossShort)
    takeProfitShort := close - (stopLossShort - close) * 1.5

// Condizioni per aprire una posizione long
longCondition = not na(ema200) and not na(impulseMACD) and not na(impulseMACDSignal) and close > ema200 and impulseMACD < 0 and impulseMACDSignal < 0 and crossover(impulseMACD, impulseMACDSignal)

// Condizioni per aprire una posizione short
shortCondition = not na(ema200) and not na(impulseMACD) and not na(impulseMACDSignal) and close < ema200 and impulseMACD > 0 and impulseMACDSignal > 0 and crossunder(impulseMACD, impulseMACDSignal)

// Disegna l'EMA 200 sul grafico
plot(ema200, color=color.blue, title="EMA 200")

// Imposta lo stop loss e il take profit
strategy.entry("Long", strategy.long, when=longCondition)
strategy.entry("Short", strategy.short, when=shortCondition)
strategy.exit("Take Profit/Stop Loss Long", from_entry="Long", stop=stopLossLong, limit=takeProfitLong)
strategy.exit("Take Profit/Stop Loss Short", from_entry="Short", stop=stopLossShort, limit=takeProfitShort)

// Impulse MACD
plot(0, color=color.gray, linewidth=1, title="MidLine")
plot(impulseMACD, color=color.red, linewidth=2, title="ImpulseMACD", style=plot.style_histogram)
plot(impulseMACDSignal, color=color.blue, linewidth=2, title="ImpulseMACDSignal", style=plot.style_histogram)

// Disegna le operazioni long e short sul grafico
plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.triangleup, title="Long Entry")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.triangledown, title="Short Entry")