
Эта стратегия использует прорывные принципы индикатора Вильгельма, в сочетании с определенной формой K-линии, чтобы разработать эффективную модель открытия и закрытия позиций с большим количеством свободных позиций, что позволяет точно делать дополнительные позиции в ключевых точках обратной ситуации, улавливать тенденции средней короткой линии и получать дополнительную прибыль.
Эта стратегия использует точку деформации в индексе Вильгельма для определения обратного сигнала. При появлении верхней или нижней деформации, если она совпадает с направлением объекта K-линии, производится сигнал торговли.
В частности, в стратегии определяется пользовательский показатель WMX Williams Fractals. В этом показателе используется функция коэффициентов для определения верхнего (upFractal) и нижнего (dnFractal) классификаторов.
Логика выбора верхнего классификатора заключается в следующем: максимальная величина текущей K-линии выше максимальной величины предыдущей n-корневой K-линии (n - параметры), таким образом, формируется прорыв верхнего классификатора.
Логика определения нижней классификации такова: минимальная цена текущей линии K ниже минимальной цены предыдущей n-коренной линии K, таким образом, формируется прорыв в нижней классификации.
Получив верхнюю и нижнюю классификацию, можно определить, изменились ли они, то есть от ничего до есть или от есть до нет. В этот момент классификация только образовалась, что означает большую вероятность обратного хода.
Затем объедините направление K-линейной сущности, чтобы определить конкретный торговый сигнал. Когда формируется верхняя классификация, когда Close выше Open, сделайте больше; когда формируется текущая классификация, когда Close ниже Open, сделайте пустое.
Для определения времени реверсии используется классификационная точка Вильгельма, которая является проверенным и надежным техническим показателем.
Для подтверждения торговых сигналов в сочетании с направлением K-линии для предотвращения хаотичных chops в не трендовых зонах
Меньшие параметры, требующие только регулировки циклов сортировки n, легко тестировать и оптимизировать
Гибкие правила открытия позиций, такие как размер позиции, условия и т. д., легко применяются в реальном мире
После формирования классификации, ситуация может не полностью измениться, и необходимо сочетать тенденции.
Осторожность в установке места остановки, чтобы предотвратить остановку движения от шума
Параметр n требует корректировки в зависимости от разных сортов, слишком большой или слишком маленький цикл может повлиять на эффективность
Решение проблемы:
Показатели, такие как скользящие средние, могут быть использованы для определения тенденций, чтобы избежать негативных позиций.
Динамическое отслеживание остановки или установление разумных ограничений на отзыв остановки
Оптимизация параметров с использованием метода Walk Forward Analysis, чтобы найти оптимальные параметры
На основе классифицированной стратегии реверса легко создать ситуацию, когда после многократного получения прибыли снова реверс приводит к убыткам. Можно рассмотреть возможность добавления фильтрации тренда, чтобы еще больше ограничить диапазон торговли и уменьшить ненужные реверсные сделки.
В настоящее время методы остановки убытков относительно просты и не позволяют эффективно отслеживать ход событий. Можно попробовать добавить такие методы остановки убытков, как мобильная остановка, временная остановка, динамическая остановка и т. Д.
В настоящее время можно судить только о физическом направлении K-линий. Если учесть больше информации о K-линиях, таких как теневая линия, положение замыкания, можно разработать более точный торговый сигнал.
Эта стратегия относится к реверсивной стратегии, основанной на технических показателях. Она использует классификацию индекса Уильяма, чтобы запечатлеть тенденцию изменения акций индекса в ключевые моменты, в сочетании с объектами K-линии, чтобы сформировать торговый сигнал с целью достижения дополнительной прибыли.
В отличие от других стратегий обратного пути, эта стратегия может быть использована в реальном мире благодаря ее параметрической разработке, логической ясности, простоте понимания, удобству в настройке параметров и простоте тестирования. Следующий шаг - дальнейшая оптимизация стратегии путем определения тенденции, остановки убытков и т. Д.
/*backtest
start: 2023-11-14 00:00:00
end: 2023-12-14 00:00:00
period: 1h
basePeriod: 15m
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/
// © WMX_Q_System_Trading
//@version=4
SystemName="WMX Williams Fractals strategy V4"
InitCapital = 1000000
InitPosition = 100
InitCommission = 0.075
InitPyramidMax = 10
strategy(title=SystemName, shorttitle=SystemName, overlay=true, initial_capital=InitCapital, default_qty_type=strategy.percent_of_equity, default_qty_value=InitPosition, commission_type=strategy.commission.percent, commission_value=InitCommission)
//study("WMX Williams Fractals", shorttitle="WMX Fractals", format=format.price, precision=0, overlay=true)
// Define "n" as the number of periods and keep a minimum value of 2 for error handling.
n = input(title="Periods", defval=2, minval=2, type=input.integer)
h=close
l=close
factorh(High)=>
upFractal = ( (High[n+2] < High[n]) and (High[n+1] < High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
or ( (High[n+3] < High[n]) and (High[n+2] < High[n]) and (High[n+1] == High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
or ( (High[n+4] < High[n]) and (High[n+3] < High[n]) and (High[n+2] == High[n]) and (High[n+1] <= High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
or ( (High[n+5] < High[n]) and (High[n+4] < High[n]) and (High[n+3] == High[n]) and (High[n+2] == High[n]) and (High[n+1] <= High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
or ((High[n+6] < High[n]) and (High[n+5] < High[n]) and (High[n+4] == High[n]) and (High[n+3] <= High[n]) and (High[n+2] == High[n]) and (High[n+1] <= High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
upFractal
upFractal=factorh(h)
factorl(Low)=>
dnFractal = ( (Low[n+2] > Low[n]) and (Low[n+1] > Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
or ( (Low[n+3] > Low[n]) and (Low[n+2] > Low[n]) and (Low[n+1] == Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
or ( (Low[n+4] > Low[n]) and (Low[n+3] > Low[n]) and (Low[n+2] == Low[n]) and (Low[n+1] >= Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
or ( (Low[n+5] > Low[n]) and (Low[n+4] > Low[n]) and (Low[n+3] == Low[n]) and (Low[n+2] == Low[n]) and (Low[n+1] >= Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
or ((Low[n+6] > Low[n]) and (Low[n+5] > Low[n]) and (Low[n+4] == Low[n]) and (Low[n+3] >= Low[n]) and (Low[n+2] == Low[n]) and (Low[n+1] >= Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
dnFractal=factorl(l)
U=valuewhen(upFractal[0]!= upFractal[1],l[0],3)
L=valuewhen(dnFractal[0]!=dnFractal[1],h[0],3)
longcon=crossover(close ,L) and close>open
shortcon=crossunder(close ,U) and close<open
if longcon
strategy.entry("Long", strategy.long, when = strategy.position_size <= 0 )
if shortcon
strategy.entry("Short", strategy.short, when = strategy.position_size >= 0 )