Тенденция дивергенции MACD после стратегии

Автор:Чао Чжан, Дата: 2024-02-04 15:06:58
Тэги:

img

Обзор

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

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

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

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

Когда цена достигает нового максимума, но гистограмма MACD не достигает нового максимума, генерируется сигнал медвежьей дивергенции regular_bearish_div. Когда цена падает до нового минимума, но гистограмма MACD не падает до нового минимума, генерируется сигнал бычьей дивергенции regular_bullish_div.

Наконец, когда генерируются медвежие и бычьи сигналы дивергенции, стратегия выпускает короткие и длинные ордера соответственно и выходит из позиций с ATR стоп-лосс и take profit.

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

Эта стратегия имеет следующие преимущества:

  1. Используя дивергенцию между гистограммой MACD и ценой, он может зафиксировать изменения в ценовых тенденциях на ранней стадии.

  2. Настройки ATR стоп-лосса и прибыли разумны для эффективного контроля максимальных потерь на одну сделку.

  3. Использование следующего метода тренда может максимизировать заложенную прибыль.

  4. Разумные параметры фильтруют некоторые шумные торговые сигналы.

  5. Логика стратегии ясна и легко понятна, легко подтверждается в реальном торговле.

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

Эта стратегия также сопряжена с некоторыми рисками:

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

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

  3. Дивергентные сигналы с короткими циклами могут быть вызваны шумом и должны быть должным образом отфильтрованы.

  4. Несовместимые торговые продукты и настройки параметров также повлияют на эффективность стратегии.

Соответствующие решения:

  1. Увеличить требования длины и величины дивергенции для фильтрации ложных сигналов.

  2. Использовать ATR в качестве ориентира для остановки потерь и получения прибыли, корректировать кратники ATR для контроля рисков на одну сделку.

  3. Выберите различные параметры для различных торговых продуктов.

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

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

  1. Более сложное подтверждение дивергенции, например, подтверждение дивергенции объема.

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

  3. Оптимизируйте кратность ATR стоп-лосс и прибыль.

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

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

  6. Динамически корректировать параметры стратегии в соответствии с изменениями рыночных условий.

Резюме

Подводя итог, эта стратегия использовает расхождение между гистограммой MACD и ценой для определения трендов. Разумные параметры остановки потери и получения прибыли ATR могут контролировать риски в зависимости от сделки. Логика стратегии ясна и легко понятна, стоит проверить в режиме реального времени. Последующие оптимизации могут быть сделаны во многих аспектах для получения лучших результатов.


/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © bigwin_sun
// copyright: Tradingvue Limited    

//@version = 5
strategy(title = "Demigod : CDMA histogram Divergence strategy", shorttitle = "Demigod strategy", overlay = false, pyramiding = 100)

//macd input
fastMA = input.int(13, title = "fast Length", minval = 1,     group = "CDMA")
slowMA = input.int(34, title = "slow Length", minval = 1,     group = "CDMA")
src          = input.source(title = "source", defval = close, group = "CDMA")
signalSmooth = input.int(9, title="ma Length", minval = 1,    group = "CDMA")
//Divergenc
divLength    = input.int(title = "Divergenc Length",   defval = 5, minval = 1,   maxval = 50,  inline = "ATRLength",  group = "Divergence")
divStren     = input.float(title="Divergenc Strength", defval = 2, minval = 1.0, maxval = 5.0, inline = "ATRLength",  group = "Divergence")

//atr input
atrLength = input.int(13, title = "ATR Length", minval = 1,   inline = "ATRLength", group = "ATR")
m         = input.float(1.0,  "ATR multyple",   minval = 0.5, inline = "ATRLength", group = "ATR", step = 0.5)
collong   = input.color(color.teal, title = "upper color",  inline = "ATR显示", group = "ATR")
colshort  = input.color(color.red,  title = "under color",  inline = "ATR显示", group = "ATR")

// MACD---------------------------------------------------------------------------------------------------------------------------------
DivOffset = -2
macdLine   = ta.ema(src, fastMA) - ta.ema(src, slowMA)    
signalLine = ta.ema(macdLine, signalSmooth)
histogram  = macdLine - signalLine

histogramColor = if histogram > 0
    histogram > histogram[1] ? color.lime : color.green
else 
    histogram < histogram[1] ? color.maroon : color.red

// cdma histogram
plot(histogram, title = "MACD histogram", linewidth = 2, style = plot.style_histogram, color = histogramColor)
plot(0,         title = "zero line",      linewidth = 1,                               color = color.gray)

// Divergenc calculation-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//peak / valley fundation
f_top_fractal(_src)=>_src[4] < _src[2] and _src[3] < _src[2] and _src[2] > _src[1] and _src[2] > _src[0] and _src > 0
f_bot_fractal(_src)=>_src[4] > _src[2] and _src[3] > _src[2] and _src[2] < _src[1] and _src[2] < _src[0] and _src < 0
f_fractalize(_src)=>f_top_fractal(_src) ? 1 : f_bot_fractal(_src) ? -1 : 0

//peak / valley value
fractal_top1 = f_fractalize(histogram) > 0 ? true : false //histogram[2] : na
fractal_bot1 = f_fractalize(histogram) < 0 ? true : false //histogram[2] : na

//previouse peak or valley
high_prev1  = ta.valuewhen(fractal_top1, histogram[2], 0)[2]
high_price1 = ta.valuewhen(fractal_top1, high[2], 0)[2]
low_prev1   = ta.valuewhen(fractal_bot1, histogram[2], 0)[2]
low_price1  = ta.valuewhen(fractal_bot1, low[2], 0)[2]

//Divergenc : cdma histogram against candle value
regular_bearish_div1 = high[2] > high_price1 + divStren and histogram[2] < high_prev1 / divStren and ta.barssince(fractal_top1[1]) > divLength
regular_bullish_div1 = low[2]  < low_price1 - divStren  and histogram[2] > low_prev1 / divStren  and ta.barssince(fractal_bot1[1]) > divLength

//-------------------------cdma Divergenc range------------------------------------------------
//histogramColor
col1 = regular_bearish_div1 ? color.red : na
col2 = regular_bullish_div1 ? #00FF00EB : na
//plot
plot(title='看跌背离', series= fractal_top1 ? histogram[2] : na, color=col1, linewidth=3, offset=DivOffset)
plot(title='看涨背离', series= fractal_bot1 ? histogram[2] : na, color=col2, linewidth=3, offset=DivOffset)

// calculate ATR				--------------------------------------------------------------------------------------------------------------------------------------------------
atr = ta.ema(ta.tr(true), atrLength) * m
up = atr + high
dw = low - atr

//stratety : enrty and exit---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
if regular_bearish_div1 and fractal_top1
//if regular_bullish_div1 and fractal_bot1
    //label.new(bar_index, histogram[2], text = "Short", textcolor = color.white, color = color.gray,  style = label.style_label_lower_left)
    strategy.entry("Short", strategy.short, qty = 1)
    strategy.exit("exitShort", "Short", stop = up, limit = dw - atr)
if regular_bullish_div1 and fractal_bot1
//if regular_bearish_div1 and fractal_top1   
    //label.new(bar_index, histogram[2], text = "Long", textcolor = color.white, color = color.fuchsia, style = label.style_label_upper_left)
	strategy.entry("Long", strategy.long, qty = 1)
    strategy.exit("exitLong", "Long", stop = dw, limit = up + atr)


Больше