WMX Фракталы Уильямса Стратегия обратного поворота

Автор:Чао Чжан, Дата: 2023-12-15 10:37:01
Тэги:

img

Обзор

Эта стратегия использует принцип фрактального прорыва индикатора Уильямса и сочетает в себе специфические K-линейные модели для разработки эффективной модели длинного и короткого открытия и закрытия.

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

Эта стратегия использует точки фрактала в индикаторе Уильямса для определения сигналов обратного движения.

Конкретно, в стратегии определен пользовательский индикатор под названием WMX Williams Fractals. Он использует факторные функции для определения верхнего фрактала (upFractal) и нижнего фрактала (dnFractal).

Логика верхнего фрактала такова: самая высокая цена текущей K-линии выше, чем самая высокая цена предыдущих n K-линий (n является регулируемым параметром), таким образом образуется верхний фрактал.

Логика нижнего фрактала заключается в том, что самая низкая цена текущей K-линии ниже, чем самая низкая цена предыдущих n K-линий, тем самым образуя нижний фрактал.

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

Затем, в сочетании с направлением K-линии, чтобы определить конкретные торговые сигналы. Когда верхний фрактал сформирован, и закрытие выше, чем открытие, перейдите на длинный. Когда нижний фрактал сформирован, и закрытие ниже, чем открытие, перейдите на короткий.

Преимущества стратегии

  1. Используйте индикатор Уильямса для определения времени перехода.

  2. Комбинировать направление K-линии для подтверждения торговых сигналов и избежать неблагоприятных регионов, не являющихся трендом.

  3. Немногие параметры, которые должны регулировать только фрактальный период n, легко тестировать и оптимизировать.

  4. Гибкие настройки для открытия позиций, правила размещения позиций, условия закрытия и т. д., легко применяемые в режиме реального времени.

Стратегические риски

  1. После фрактальных форм, рынок может не полностью перевернуться, нужно сочетать с суждением о тренде.

  2. Установка позиции стоп-лосса должна быть осторожной, чтобы не быть выбитым шумными огромными движениями волатильности.

  3. Параметр n должен корректироваться для различных продуктов. Если период слишком большой или слишком маленький, это повлияет на результаты.

Решения:

  1. Можно добавить такие показатели, как скользящая средняя, чтобы судить о основных тенденциях, избегать торговли против тенденций.

  2. Использовать динамический стоп-лосс или установить разумный стоп-лосс, основанный на выводе.

  3. Используйте анализ ходьбы вперед для оптимизации параметров и поиска оптимальных значений.

Направления оптимизации стратегии

  1. Фрактальные стратегии реверсии, как правило, формируют многократную прибыль, а затем снова обращаются вспять, чтобы сформировать убытки.

  2. Текущий простой метод стоп-лосса не может эффективно отслеживать движения рынка. Можно попробовать более продвинутые методы стоп-лосса, такие как движущий стоп-лосс, временный стоп-лосс, динамический стоп-лосс и т. Д.

  3. В настоящее время используется только направление 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 )
        






Больше