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

Автор:Чао Чжан, Дата: 2023-12-08 16:58:01
Тэги:

img

Обзор

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

Принцип стратегии

Стратегия основывается главным образом на:

  1. Для определения основного направления тренда вычисляется 200-дневная EMA. Цена закрытия выше 200-й EMA указывает на тенденцию к росту, а ниже - на тенденцию к снижению.

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

  3. Вычислить 9-дневный MA гистограммы MACD для построения линии сигнала MACD.

  4. Сигнал покупки генерируется, когда MACD пересекает линию сигнала выше, а сигнал продажи, когда MACD пересекает линию сигнала ниже.

  5. Объедините анализ основных тенденций, чтобы определить, находится ли рынок в начале новой тенденции или просто краткосрочное изменение.

Преимущества

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

К основным преимуществам относятся:

  1. 200-дневная EMA определяет направление основного тренда, избегает торговли против тренда.

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

  3. Различные параметры для компонентов MACD могут генерировать торговые сигналы в разные временные рамки.

  4. Интегрирует стратегии стоп-лосса для эффективного контроля одиночных потерь.

Риски

К основным рискам относятся:

  1. Временное отставание может быть между торговыми сигналами от долгосрочных и краткосрочных индикаторов.

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

  3. Неправильное размещение стоп-лосса может привести к преждевременному запуску стоп-лосса или чрезмерному убытку.

  4. Слишком частые сигналы могут ввести больше ложных сигналов.

Решения:

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

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

  3. Тестируйте и оптимизируйте параметры стратегии стоп-лосса.

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

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

Стратегия может быть оптимизирована посредством:

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

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

  3. Установите правила размещения позиций, а не фиксированное количество для каждой сделки.

  4. Добавить более продвинутые правила выхода в дополнение к стоп-лосс, например, целевая прибыль, последующая остановка.

  5. Бактэст с более реалистичными настройками комиссионных, чтобы имитировать реальную торговлю.

  6. Проведите анализ ходьбы вперед, тест надежности для повышения надежности.

Заключение

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


/*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")


Больше