Градиентная квантовая стратегия MACD

Автор:Чао Чжан, Дата: 2023-12-19 16:14:50
Тэги:

img

Обзор

Эта стратегия рассчитывает свечи Хайкина-Аши для сглаживания ценовых линий и объединяет индикатор MACD для генерации торговых сигналов, реализуя количественную стратегию, которая отслеживает средне- и долгосрочные тенденции.

Логика стратегии

  1. Вычислить открытые, закрытые, высокие и низкие цены Хайкина-Аши, чтобы сопоставить свечи Хайкина-Аши и плавные ценовые тенденции.

  2. Установите параметры MACD: быстрая длина 12, медленная длина 26, длина сигнала 9.

  3. Вычислите медленную линию DEA, быструю линию DEA и гистограмму MACD.

  4. Пройти длинный, когда гистограмма MACD пересекает выше 0, пройти короткий, когда пересекает ниже 0.

  5. Добавить фильтры года, месяца и дня, чтобы ограничить торговлю определенным временным диапазоном.

Анализ преимуществ

  1. Свечи Хайкина-Аши эффективно отфильтровывают рыночный шум, чтобы определить тенденции.

  2. MACD дает четкие сигналы торгового тренда.

  3. Объединение Heikin-Ashi и MACD улучшает качество сигнала и рентабельность.

  4. Временные фильтры помогают оптимизировать график торговли на основе исторической производительности.

Анализ рисков

  1. Потенциальные большие убытки при изменении тренда.

  2. Неправильные параметры MACD могут генерировать чрезмерные бесполезные сигналы.

  3. Строгие временные фильтры могут упустить хорошие торговые возможности.

Контрмеры:

  1. Установите стоп-лосс/прибыль для ограничения потерь.

  2. Оптимизировать параметры MACD для определения наилучшей комбинации.

  3. Добавьте показатели для определения местных тенденций.

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

  1. Испытайте различные комбинации параметров, чтобы найти оптимальный.

  2. Добавьте механизмы стоп-лосса, такие как стоп-лосс.

  3. Добавьте такие показатели, как EMA, KDJ, чтобы определить точки перехода.

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

Резюме

Эта стратегия сглаживает ценовое действие с помощью свечей Хайкина-Аши и определяет направление тренда и сигналы входа с помощью индикатора MACD Tradingview для реализации квантовой стратегии, следующей за трендом. По сравнению с обычными стратегиями MACD, она фильтрует некоторый шум для более четкой идентификации тренда. Дальнейшие улучшения оптимизации параметров, стоп-лосса и индикаторов комбо могут улучшить его стабильность и прибыльность.


/*backtest
start: 2023-11-18 00:00:00
end: 2023-12-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("MACD ASHI BARS .v1 ", overlay=false,default_qty_type = strategy.percent_of_equity, default_qty_value = 100,commission_type=strategy.commission.percent,commission_value=0.1,slippage=1)

// Calculation HA Values 
haopen  = 0.0
haclose = (open + high + low + close) / 4
haopen := na(haopen[1]) ? (open + close) / 2 : (haopen[1] + haclose[1]) / 2
hahigh  = max(high, max(haopen, haclose))
halow   = min(low,  min(haopen, haclose))

// HA colors
hacolor = haclose > haopen ? color.green : color.red
src=haclose



fastmacd = input(12,title='MACD Fast  Line Length')
slowmacd = input(26,title='MACD Slow Line Length')
signalmacd = input(9,title='Signal Line Length')

macdslowline1 = sma(src,slowmacd)
macdslowline2 = sma(macdslowline1,slowmacd)
DEMAslow = ((2 * macdslowline1) - macdslowline2 )

macdfastline1 = sma(src,fastmacd)
macdfastline2 = sma(macdfastline1,fastmacd)
DEMAfast = ((2 * macdfastline1) - macdfastline2)

MACDLine = (DEMAfast - DEMAslow)

SignalLine = sma(MACDLine, signalmacd)

delta = MACDLine-SignalLine




swap1 = delta>0?color.green:color.red



plot(delta,color=swap1,style=plot.style_columns,title='Histo',histbase=0,transp=20)
p1 = plot(MACDLine,color=color.blue,title='MACD Line')
p2 = plot(SignalLine,color=color.red,title='Signal')
fill(p1, p2, color=color.blue)
hline(0)



yearfrom = input(2020)
yearuntil =input(2042)
monthfrom =input(1)
monthuntil =input(12)
dayfrom=input(1)
dayuntil=input(31)







if ( crossover(delta,0)  and   year >= yearfrom and year <= yearuntil and month>=monthfrom and month <=monthuntil and dayofmonth>=dayfrom and dayofmonth < dayuntil) 
    strategy.entry("MMAL", strategy.long, stop=close, oca_name="TREND",  comment="AL")
    
else
    strategy.cancel(id="MMAL")


if (  crossunder(delta,0) and  year >= yearfrom and year <= yearuntil and month>=monthfrom and month <=monthuntil and dayofmonth>=dayfrom and dayofmonth < dayuntil ) 

    strategy.entry("MMSAT", strategy.short,stop=close, oca_name="TREND",  comment="SAT")
else
    strategy.cancel(id="MMSAT")
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    


Больше