Эта стратегия объединяет сигналы прорыва от экспоненциальной скользящей средней и индикатора MACD с длительными и короткими периодами хранения, чтобы реализовать прибыль через торговлю трендом и средней реверсией.
Стратегия основывается главным образом на:
Для определения основного направления тренда вычисляется 200-дневная EMA. Цена закрытия выше 200-й EMA указывает на тенденцию к росту, а ниже - на тенденцию к снижению.
Вычислить EMA на основе медианной цены наивысшей, самой низкой и цены закрытия, затем получить разницу между EMA и самыми высокими/низкими ценами для построения гистограммы MACD.
Вычислить 9-дневный MA гистограммы MACD для построения линии сигнала MACD.
Сигнал покупки генерируется, когда MACD пересекает линию сигнала выше, а сигнал продажи, когда MACD пересекает линию сигнала ниже.
Объедините анализ основных тенденций, чтобы определить, находится ли рынок в начале новой тенденции или просто краткосрочное изменение.
Стратегия сочетает в себе как тенденционную, так и среднюю реверсию торговли, которая может одновременно отслеживать долгосрочные тенденции и отслеживать краткосрочные возможности реверсии для решения различных рыночных условий.
К основным преимуществам относятся:
200-дневная EMA определяет направление основного тренда, избегает торговли против тренда.
Индикатор MACD чувствителен к краткосрочным изменениям цен и может улавливать прибыльные сигналы обратного движения.
Различные параметры для компонентов MACD могут генерировать торговые сигналы в разные временные рамки.
Интегрирует стратегии стоп-лосса для эффективного контроля одиночных потерь.
К основным рискам относятся:
Временное отставание может быть между торговыми сигналами от долгосрочных и краткосрочных индикаторов.
MACD как средний показатель реверсии может быть менее эффективным в период сильных тенденций.
Неправильное размещение стоп-лосса может привести к преждевременному запуску стоп-лосса или чрезмерному убытку.
Слишком частые сигналы могут ввести больше ложных сигналов.
Решения:
Оптимизировать параметры MACD для корректировки чувствительности индикатора.
Комбинируйте другие показатели для определения рыночных условий, избегайте слепого следования сигналам MACD.
Тестируйте и оптимизируйте параметры стратегии стоп-лосса.
Добавьте фильтры, чтобы уменьшить ложные сигналы.
Стратегия может быть оптимизирована посредством:
Оптимизировать параметры скользящей средней и MACD для получения более эффективных торговых сигналов.
Добавьте другие показатели, такие как объем, RSI, чтобы повысить эффективность стратегии.
Установите правила размещения позиций, а не фиксированное количество для каждой сделки.
Добавить более продвинутые правила выхода в дополнение к стоп-лосс, например, целевая прибыль, последующая остановка.
Бактэст с более реалистичными настройками комиссионных, чтобы имитировать реальную торговлю.
Проведите анализ ходьбы вперед, тест надежности для повышения надежности.
Стратегия сбалансирует тренд-следующий и средний реверсионный трейдинг. Суть заключается в надлежащей настройке параметров и правильном понимании основных тенденций. Оптимизируя параметры, добавляя фильтры, стратегия может улучшить оценку торговых сигналов и достичь более устойчивой прибыли. В целом эта стратегия имеет высокую степень интеграции и перспективы перспективного применения.
/*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")