Стратегия Mala Adaptive Moving Average - это количественная торговая стратегия, основанная на индикаторе MESA Adaptive Moving Average, разработанном Джоном Эхлерсом.
Стратегия Mala Adaptive Moving Average использует генератор синусных волн для получения торговых сигналов. Синусная волна определяется тенью, брошенной на вертикальную ось вращающимся вектором (называемым фазором). Когда вектор вращается на 360 градусов, один цикл завершается. Сигналы покупки генерируются, когда вектор проходит один угол, а сигналы продажи, когда он проходит другой угол. Таким образом, торговые решения определяются с точки зрения углов в частотном домене, а не характеристик формы волны в временном домене, что делает стратегию более надежной в разных фьючерсных контрактах и рыночных условиях.
В частности, стратегия сначала сглаживает и сдерживает цену, затем вычисляет два компонента синусной волны: компонент I в фазе и компонент Q в квадратуре. Эти два компонента накладываются и фильтруются сдвигом фаз, чтобы получить окончательный Re и Im. Re и Im отражают информацию о частоте синусной волны. Периодный период может быть получен из atanIm/Re. Сглаженный период сглаживания определяется на основе ожидаемого диапазона периода. Информация о периоде и фазе определяет кривые MAMA и FAMA, перекрестки которых производят торговые сигналы. Параметр альфа динамически регулируется в пределах определенного диапазона на основе изменения уровня изменения периода и фазы дельта, что позволяет индикатору адаптироваться к изменениям в рыночных условиях.
Стратегия Mala Adaptive Moving Average имеет следующие преимущества:
Использование синусных волн и фаз в качестве торговых сигналов делает стратегию более надежной, не подверженной влиянию характеристик формы волны в временной области.
Приспособляемость периодов и параметров позволяет сильно адаптироваться к изменениям рынка.
Кривые MAMA и FAMA зависят исключительно от ценовых характеристик без задержек, своевременно фиксируя изменение тренда.
Чувствительность стратегии может быть скорректирована с помощью настройки параметров, чтобы соответствовать различным стилям торговли.
Ясная и простая логика облегчает понимание, модификацию и применение для исследований и преподавания.
Стратегия Mala Adaptive Moving Average также несет в себе следующие риски:
В зависимости от периодов и фаз синусовой кривой, аномальные искажения цен могут генерировать неправильные сигналы.
Твердые границы, установленные в оценке периода, приводят к недостаточной плавности в изменениях периода.
Фазовое блокирование и блокирование периода вокруг ключевых точек приводят к колебаниям кривых, потенциально отсутствующим оптимальным входам и выходам.
Применимость параметров и кривых уменьшается при усилении волатильности рынка.
В качестве технического показателя стратегия имеет тенденцию к ложным прорывам и ложным сигналам вокруг важных технических уровней.
Эти риски могут быть смягчены за счет более сглаженных параметров, фильтрации сигналов с другими показателями, корректировки размеров позиций и т. д.
Стратегия мала адаптивных скользящих средних может быть улучшена в следующих аспектах:
Улучшить расчет периодов и параметров для более естественной плавности, например, внедрение статистических методов для лучшего моделирования цен.
Фильтруйте сигналы по волатильности, объему и фундаментальным показателям для повышения точности.
Оптимизировать настройки параметров и контроль скольжения для снижения затрат на торговлю и повышения надежности.
Внедрение машинного обучения и генетических алгоритмов для оптимизации динамических параметров.
Разработать комбинации с системами тренда и среднего отклонения, основанными на различных входах и выходах для повышения рентабельности.
Стратегия Mala Adaptive Moving Average использует анализ синусных волн для генерации торговых сигналов, автоматически адаптируясь к изменениям рынка посредством динамической настройки параметров, что делает ее достаточно надежной и широко применимой. По сравнению с другими стратегиями адаптивных скользящих средних, она демонстрирует более высокую практичность и стабильность.
/*backtest start: 2022-11-30 00:00:00 end: 2023-12-06 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/ // © dongyun //@version=4 strategy("自适应移动平均的MESA系统", overlay=true) fastlimit = input(0.5,'') slowlimit = input(0.05,'') smooth = 0.0 detrender = 0.0 I1 = 0.0 Q1 = 0.0 JI = 0.0 JQ = 0.0 I2 = 0.0 Q2 = 0.0 Re = 0.0 Im = 0.0 period = 0.0 smoothperiod = 0.0 phase = 0.0 deltaphase = 0.0 alpha = 0.0 MAMA = 0.0 FAMA = 0.0 price = 0.0 price := (high + low)/2 PI = 2 * asin(1) if (bar_index > 5) smooth := (4*price + 3*price[1] + 2*price[2] + price[3])/10 detrender := (.0962*smooth + .5769*nz(smooth[2]) - .5769*nz(smooth[4]) - .0962*nz(smooth[6]))*(.075*nz(period[1]) + .54) // compute InPhase and Quadrature components Q1 := (.0962*detrender + .5769*nz(detrender[2]) - .5769*nz(detrender[4]) - .0962*nz(detrender[6]))*(.075*nz(period[1]) + .54) I1 := nz(detrender[3]) // advance the pulse of i1 and q1 by 90 degrees JI := (.0962*I1 + .5769*nz(I1[2]) - .5769*nz(I1[4]) - .0962*nz(I1[6]))*(.075*nz(period[1]) + .54) JQ := (.0962*Q1 + .5769*nz(Q1[2]) - .5769*nz(Q1[4]) - .0962*nz(Q1[6]))*(.075*nz(period[1]) + .54) //phase addition for 3-bar averaging I2 := I1 - JQ Q2 := Q1 + JI //smooth the i and q components before applying I2 := .2*I2 + .8*nz(I2[1]) Q2 := .2*Q2 + .8*nz(Q2[1]) // hymodyne discriminator Re := I2*I2[1] + Q2*nz(Q2[1]) Im := I2*Q2[1] + Q2*nz(I2[1]) Re := .2*Re + .8*nz(Re[1]) Im := .2*Im + .8*nz(Im[1]) if (Im != 0 and Re != 0) period := 2 * PI/atan(Im/Re) if (period > 1.5 * nz(period[1])) period := 1.5*nz(period[1]) if (period < .67*nz(period[1])) period := .67*nz(period[1]) if (period < 6) period := 6 if (period > 50) period := 50 period := .2*period + .8*nz(period[1]) smoothperiod := .33*period + .67*nz(smoothperiod[1]) if (I1 != 0) phase := (180/PI) * atan(Q1/I1) deltaphase := nz(phase[1]) - phase if (deltaphase < 1) deltaphase := 1 alpha := fastlimit/deltaphase if(alpha < slowlimit) alpha := slowlimit MAMA := alpha*price + (1 - alpha)*nz(MAMA[1]) FAMA := .5*alpha*MAMA + (1 - .5*alpha)*nz(FAMA[1]) if (FAMA < MAMA) strategy.entry("Long", strategy.long) else if (FAMA > MAMA) strategy.entry("Short", strategy.short)