Стратегия ключевой точки разворота рынка


Дата создания: 2023-12-15 10:37:01 Последнее изменение: 2023-12-15 10:37:01
Копировать: 0 Количество просмотров: 754
1
Подписаться
1621
Подписчики

Стратегия ключевой точки разворота рынка

Обзор

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

Стратегический принцип

Эта стратегия использует точку деформации в индексе Вильгельма для определения обратного сигнала. При появлении верхней или нижней деформации, если она совпадает с направлением объекта K-линии, производится сигнал торговли.

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

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

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

Получив верхнюю и нижнюю классификацию, можно определить, изменились ли они, то есть от ничего до есть или от есть до нет. В этот момент классификация только образовалась, что означает большую вероятность обратного хода.

Затем объедините направление K-линейной сущности, чтобы определить конкретный торговый сигнал. Когда формируется верхняя классификация, когда Close выше Open, сделайте больше; когда формируется текущая классификация, когда Close ниже Open, сделайте пустое.

Стратегические преимущества

  1. Для определения времени реверсии используется классификационная точка Вильгельма, которая является проверенным и надежным техническим показателем.

  2. Для подтверждения торговых сигналов в сочетании с направлением K-линии для предотвращения хаотичных chops в не трендовых зонах

  3. Меньшие параметры, требующие только регулировки циклов сортировки n, легко тестировать и оптимизировать

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

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

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

  2. Осторожность в установке места остановки, чтобы предотвратить остановку движения от шума

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

Решение проблемы:

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

  2. Динамическое отслеживание остановки или установление разумных ограничений на отзыв остановки

  3. Оптимизация параметров с использованием метода Walk Forward Analysis, чтобы найти оптимальные параметры

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

  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 )