Стратегия торговли спредом Williams Alligator


Дата создания: 2023-09-25 17:42:27 Последнее изменение: 2023-09-25 17:42:27
Копировать: 0 Количество просмотров: 1616
1
Подписаться
1617
Подписчики

Обзор

Стратегия основана на криптовалюте Билла Уильямса, но использует другой ценовой вход в линию Хайкена Аши. Это стратегия короткого скальпинга, которая работает в 1-минутных и 5-минутных временных рамках.

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

Основные принципы этой стратегии заключаются в следующем:

  1. Использование штрихов Heiken Ashi, а не стандартных штрихов в качестве ввода цены. Heiken Ashi может фильтровать рыночный шум, идентифицировать тенденции.

  2. Используйте три средние линии из индикатора рыбалки Билла Уильямса: нижняя, зубная и губная линии. Они похожи на скользящие средние и позволяют определить направление тенденции.

  3. Когда три равномерные линии расположены так: нижний косой, средний зубной и верхний губной линии, то это указывает на тенденцию к многоглазовому движению; когда они расположены в таком порядке: нижний косой, средний зубной и нижний губной линии, то это указывает на тенденцию к пустому глазу.

  4. Судя по направлению сущности и расположению рыболовных линий в Heiken Ashi. Сущность вверх и рыболовная линия в ряд смотрят больше, делают больше; сущность вниз и рыболовная линия в ряд смотрят вниз, делают пусто.

  5. Когда происходит изменение последовательности, это означает обратный тренд, и нужно вовремя остановить повреждение.

  6. Управление рисками с помощью фиксированных стоп-стоп и стоп-стоп-стоп. Можно выбрать целевые точки прибыли, стоп-стоп-стоп и отслеживание стоп-стоп для контроля каждого убытка.

Стратегия сочетает в себе двойные фильтры, использующие как идентификацию трендов Heiken Ashi, так и отклонения в соответствии с фиксированной рыбной линией, что создает стратегию торговли короткими линиями с высокой вероятностью.

Анализ преимуществ

Основные преимущества этой стратегии:

  1. Двойная фильтрация уменьшает количество ложных сигналов. Комбинация из Heiken Ashi и филевых проводов улучшает качество сигнала.

  2. Ясное и интуитивное суждение о тенденциях. Установка рыболовных линий является четкой и надежной, не вызывает сомнений.

  3. Эффективная ловля коротких линий. Подходит для скальпирования с 1 минутной до 5 минутной периодичностью.

  4. Простая настройка параметров. Не требует сложной оптимизации, используется небольшое количество параметров.

  5. Строгое управление рисками. Контроль за каждым убытком осуществляется с использованием стоп-стоп-лосс.

  6. Четкий механизм входа и выхода. Открытие позиции в соответствии с изменениями в расположении рыболовных линий.

  7. Легко копировать и реализовывать.

Анализ рисков

Основные риски этой стратегии:

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

  2. Риск возникновения шокирующих ситуаций. Во время свертывания ситуации, филеры часто пересекаются, что приводит к ошибочным сигналам.

  3. Риск переоптимизации. Неправильная оптимизация параметров может привести к пересоответствию кривой.

  4. Риск сбоя показателей. В экстремальных ситуациях рынок может полностью потерять рыболовные линии.

  5. Стоп-лома рискует быть взломанным. Быстрый взлом может вызвать потерю стоп-лома.

  6. Слишком высокая частота торгов рискованна. Слишком высокая частота торгов увеличивает торговые издержки и ненужные потери.

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

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

Эта стратегия может быть оптимизирована в следующих аспектах:

  1. Интеграция других показателей для фильтрации сигналов, повышает коэффициент выигрыша. Например, сочетание сильных и слабых показателей, таких как RSI.

  2. Настройка динамического стоп-лоска ATR для контроля риска потерь в одноразовом режиме.

  3. Добавление модуля управления позициями, оптимизация размера каждого открытия позиции. Можно увеличить позиции, когда тенденция более ясна.

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

  5. Оптимизация параметров в зависимости от типа рынка (например, акции, валюты и т. д.), чтобы они были более подходящими для данного сорта.

  6. Добавление модулей машинного обучения для оптимизации параметров.

  7. Проведите расчет выигрыша Expectancy и оптимизируйте Stop Loss Ratio.

При постоянном совершенствовании эта стратегия может стать стабильным набором стратегий торговли на коротких линиях.

Подвести итог

Эта стратегия использует Heiken Ashi в сочетании с Биллом Уильямсом, чтобы создать высоковероятную стратегию торговли короткой линией. Она обладает такими преимуществами, как двойная фильтрация показателей, простая настройка параметров и четкий механизм входа и выхода, что позволяет эффективно улавливать изменения в тенденции для совершения торгов с скальпированием. Но также требуется быть бдительным к колебаниям рынка.

Исходный код стратегии
/*backtest
start: 2022-09-18 00:00:00
end: 2023-09-24 00:00:00
period: 4d
basePeriod: 1d
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/
// © 03.freeman
//Scalping strategy based on Bill Williams Alligator technique but applied to heikin ashi candles
//This strategy has to be applied to standard candles and low time frames (1min to 5min)
//@version=4
strategy("Bill Williams Alligator improved", shorttitle="Scalping alligator",overlay=true)
//source = input(close)
useHA = input (true,"Use heikin ashi candle?")

// ----------MA calculation - ChartArt-------------
smoothinput = input(1, minval=1, maxval=5, title='Moving Average Calculation: (1=SMA), (2=EMA), (3=WMA), (4=Linear), (5=VWMA)')

calc_ma(src,l) => 
    smoothinput == 1 ? sma(src, l):smoothinput == 2 ? ema(src, l):smoothinput == 3 ? wma(src, l):smoothinput == 4 ? linreg(src, l,0):smoothinput == 5 ? vwma(src,l):na
//----------------------------------------------

heikinashi_close = security(heikinashi(syminfo.tickerid), timeframe.period, close)
heikinashi_open = security(heikinashi(syminfo.tickerid), timeframe.period, open)
heikinashi_hl2 = security(heikinashi(syminfo.tickerid), timeframe.period, hl2)

direzione=heikinashi_close>heikinashi_open and heikinashi_close[1]>heikinashi_open[1]? 1 : heikinashi_close<heikinashi_open and heikinashi_close[1]<heikinashi_open[1]? -1 : 0

jawLength = input(13, minval=1, title="Jaw Length")
teethLength = input(8, minval=1, title="Teeth Length")
lipsLength = input(5, minval=1, title="Lips Length")
jawOffset = input(8, title="Jaw Offset")
teethOffset = input(5, title="Teeth Offset")
lipsOffset = input(3, title="Lips Offset")
jaw = calc_ma(heikinashi_hl2, jawLength)
teeth = calc_ma(heikinashi_hl2, teethLength)
lips = calc_ma(heikinashi_hl2, lipsLength)
plot(jaw, title="jaw",offset = jawOffset, color=#3BB3E4)
plot(teeth, title="teeth",offset = teethOffset, color=#FF006E)
plot(lips, title="lips",offset = lipsOffset, color=#36C711)

longCondition = direzione[0]==1 and jaw<teeth and jaw<lips and teeth<lips 
shortCondition = direzione[0]==-1 and jaw>teeth and jaw>lips and teeth>lips


//  Strategy: (Thanks to JayRogers)
// === STRATEGY RELATED INPUTS ===
//tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
// the risk management inputs
inpTakeProfit   = input(defval = 0, title = "Take Profit Points", minval = 0)
inpStopLoss     = input(defval = 0, title = "Stop Loss Points", minval = 0)
inpTrailStop    = input(defval = 0, title = "Trailing Stop Loss Points", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset Points", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => direzione[0]==1 and jaw<teeth and jaw<lips and teeth<lips // functions can be used to wrap up and work out complex conditions
exitLong() => jaw>teeth or jaw>lips or teeth>lips
strategy.entry(id = "Buy", long = true, when = enterLong() )    // use function or simple condition to decide when to get in
strategy.close(id = "Buy", when = exitLong() )                  // ...and when to get out

// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => direzione[0]==-1 and jaw>teeth and jaw>lips and teeth>lips
exitShort() => jaw<teeth or jaw<lips or teeth<lips
strategy.entry(id = "Sell", long = false, when = enterShort())
strategy.close(id = "Sell", when = exitShort() )

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Buy", from_entry = "Buy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Sell", from_entry = "Sell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)

// === Backtesting Dates === thanks to Trost

testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2020, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testStopHour = input(23, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = true
// === /END

if not isPeriod
    strategy.cancel_all()
    strategy.close_all()