Питаго Картография MACD отклоняется от стратегии отслеживания тренда

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

毕达哥蜡烛图MACD指标背离趋势跟踪策略

Обзор

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

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

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

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

Когда цена создает новые высокие, но MACD не создает новые высокие, то получается сигнал regulark_bearish_div; когда цена создает новые низкие, но MACD не создает новые низкие, то получается сигнал regulark_bullish_div.

Наконец, стратегия выпускает "делай больше" и "сделай меньше" инструкции, когда появляются сигнал "остановить потерю" и "остановить выход" с помощью ATR.

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

По словам одного из них, "это очень важно".

  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 отклоняется от стратегии отслеживания тренда, используя характеристики отклонения между 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)


Больше информации