
Эта стратегия основана на нединамических средних показателях Маккина. Нединамические средние показатели Маккина являются улучшенной версией движущихся средних показателей, которые лучше улавливают изменения в рыночных тенденциях.
В этой стратегии используются две основные средние линии: 21-дневная скользящая средняя и 42-дневная скользящая средняя. Когда она пересекает долгосрочную среднюю линию, она рассматривается как сигнал к покупке; когда она пересекает долгосрочную среднюю линию, она рассматривается как сигнал к продаже.
Кроме того, для создания сигнала покупки, стратегия также должна удовлетворять условиям, когда цена выше нединамической средней МакКинга, цена превышает краткосрочную среднюю. Для сигнала продажи также необходимо удовлетворить условиям, когда цена ниже нединамической средней МакКинга, цена падает ниже краткосрочной средней.
В частности, условия для запуска покупательского сигнала следующие: проход длинной средней линии на короткой средней линии, закрытие цены выше, чем Макгин не средняя линия, закрытие цены прорыв вниз короткой средней линии. Условия для запуска продажи сигнала следующие: проход длинной средней линии ниже короткой средней линии, закрытие цены ниже Макгин не средняя линия, закрытие цены прорыв вверх короткой средней линии.
Формула расчета для нединамической средней Маккина: MDIt = MDIt-1 + (Close - MDIt-1) / Max(k * Period * (Close / MDIt-1) ^ 4, 1) ‒ где MDIt означает текущую стоимость, MDIt-1 - стоимость за предыдущий день, Close - закрывающую цену за день, k - плавную константу, Period - расчетный период. Эта формула позволяет средней отслеживать изменения цены в реальном времени.
Маккинфийский среднелинейный индикатор улучшает отсталость традиционной средней линии и позволяет быстрее улавливать изменения в ценовых тенденциях.
В сочетании с двумя равномерными линиями образуются торговые сигналы, которые могут эффективно отфильтровывать ложные прорывы.
Добавить условия, при которых цена будет выше/ниже средней Мак-Кинфи, чтобы избежать частых сделок в зонах колебаний.
Индекс использует движущуюся среднюю линию, что делает ее более чувствительной к недавним изменениям цен.
В условиях поперечного колебания рынка может возникнуть ложный сигнал, что приводит к убыткам. Можно соответствующим образом скорректировать параметры, отфильтровывая сигнал.
Прорыв в крупном масштабе может привести к невозможности своевременного строительства складов, и условия для входа должны быть соответственно смягчены.
Неправильная настройка параметров также может повлиять на эффективность стратегии.
Необходимо обратить внимание на системные риски, связанные с длительным владением, и установить точку остановки.
Можно проверить средние параметры для разных длин, чтобы найти более подходящую комбинацию.
Можно добавить другие технические показатели, такие как KD, MACD и т. Д., оптимизируя выбор точки покупки и продажи.
Можно скорректировать значение параметра k в зависимости от разных сортов и рынков, оптимизируя расчет Маккинсона.
Вместе с показателями волатильности можно реализовать динамический позиционный размер, контролируя одиночные риски.
Можно установить стоп-стоп для контроля риска потерь, а также можно экспериментировать с перемещением стоп-стоп для блокировки прибыли.
Эта стратегия использует способность быстрого отслеживания показателя неравномерности Маккина в сочетании с торговыми сигналами, образующимися при нарушении средней линии цены, чтобы эффективно отслеживать тенденцию и своевременно переключать позиции при переходе тенденции. По сравнению с традиционной стратегией двойной равномерности, эта стратегия может быстрее улавливать изменения в ценовой тенденции.
/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © LucasZancheta
//@version=4
strategy(shorttitle="Maguila", title="McGinley Dynamic Indicator", overlay=true)
//Médias móveis
MA1Period=input(21, title="MA1")
MA2Period=input(42, title="MA2")
MA1 = ema(close, MA1Period)
MA2 = ema(close, MA2Period)
aboveAverage = MA1 >= MA2
hunderAverage = MA2 >= MA1
//Período do backtest
startDate = input(title="Start Date", type=input.integer, defval=28, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer, defval=5, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer, defval=2019, minval=1800, maxval=2100)
endDate = input(title="End Date", type=input.integer, defval=28, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer, defval=5, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer, defval=2030, minval=1800, maxval=2100)
//Verifica se o candle está dentro do período do backtest
inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))
//Número de periodos da média móvel
period = input(title="Períodos", type=input.integer, defval=20)
//Constante K (0.6)
k = input(title="Constante K", type=input.float, defval=0.6)
//Preço de fechamento
closePrice = input(title="Preço", type=input.source, defval=close)
mdi = 0.0
//Fórmula de McGinley
mdi := na(mdi[1]) ? closePrice : mdi[1] + (closePrice - mdi[1]) / max((k * period * pow(closePrice / mdi[1], 4)), 1)
//Regra de coloração
mdiColor = closePrice > mdi ? color.green : closePrice < mdi ? color.red : color.black
//Inserindo as informações no gráfico
plot(MA1, color=color.blue, linewidth=2)
plot(MA2, color=color.purple, linewidth=2)
barcolor(mdiColor)
//Estratégia
buySignal = aboveAverage and closePrice > mdi and crossunder(low, MA1) and close > MA1
buyLoss = closePrice < mdi and close < MA1 and close < MA2
if (inDateRange)
strategy.entry("Compra", strategy.long, qty=1, when= buySignal)
strategy.exit("Gain da compra", "Compra", qty=1, profit=20)
strategy.close("Compra", qty=1, when= buyLoss, comment="Loss na operação")
sellSignal = hunderAverage and closePrice < mdi and crossover(high, MA1) and close < MA1
sellLoss = closePrice > mdi and close > MA1 and close > MA2
if (inDateRange)
strategy.entry("Venda", strategy.short, qty=1, when= sellSignal)
strategy.exit("Gain da venda", "Venda", qty=1, profit=20)
strategy.close("Venda", qty=1, when= sellLoss, comment="Loss na operação")
if (not inDateRange)
strategy.close_all()