Стратегия выхода из туристов

Автор:Чао Чжан, Дата: 2024-02-22 16:41:04
Тэги:

img

Обзор

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

Логика стратегии

Основными этапами этой стратегии являются:

  1. Определить флагшток: требует нового максимума в цене и прорыва ATR-канала.
  2. Определить высоту столба: измерить расстояние между вершиной столба и предыдущей SMA.
  3. Определить диапазон флага: Нижняя часть флага составляет 33% от высоты столба как минимальный диапазон.
  4. Определить флаг: Судить, если последние 3 бара все в диапазоне флага.
  5. Вход: Длинный ход, когда появляется флаг.
  6. Выход: Закрыть положение после фиксированных 6 баров.

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

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

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

  1. Использование паттернов флага для определения начала тренда является классическим методом технического анализа с высоким уровнем успеха.
  2. ATR и строгие ограничения дальности предотвращают множество ложных сигналов и улучшают точность входа.
  3. Фиксированные 6-барные выходной блокировки в некоторых прибыли и избегает рисков отклонения.
  4. Ясные правила, которые легко реализовать, понять и следовать.
  5. Может найти возможности в различных рыночных условиях, гибко.

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

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

  1. Флаги не могут полностью определить тенденции, неудачи все еще существуют.
  2. 6 бар выход может быть преждевременным и выход слишком рано.
  3. Неблагоприятные условия на рынке могут легко привести к ложным предположениям.
  4. Не в состоянии эффективно контролировать сумму одиночных потерь.

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

Руководство по оптимизации

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

  1. Объедините такие индикаторы, как MACD, KD, чтобы избежать ложных сигналов на нестабильных рынках.
  2. Параметризировать ATR мультипликатор, период выхода на основе рыночного режима для улучшения адаптивности.
  3. Установка остановки потери или учет коэффициента снижения прибыли для динамических выходов.
  4. Попробуйте подходы машинного обучения, чтобы найти лучшие функции, определяющие высоту флага.
  5. Оцените фактический уровень выигрыша и коэффициент прибыли, динамически регулируйте размер позиций.

Заключение

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


/*backtest
start: 2024-01-22 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © smith26
//This strategy enters on a bull flag and closes position 6 bars later.  Average true range is used instead of a moving average.
//The reason for ATR instead of MA is because with volatile securities, the flagpole must stand up a noticable "distance" above the trading range---which you can't determine with a MA alone.
//This is broken up into multiple parts: Defining a flagpole, defining the pole height, and defining the flag, which will be constrained to the top third (33%) of the pole height to be considered a flag.
//@version=4
strategy("Bull Flag v1.00", overlay=true)

ATR = atr(10) //Average True Range over last 10 bars.

upperATR = ohlc4[1] + ATR[1]  //Open + High + Low + Close divided by 4, + prior ATR.  Just used here for visually plotting the ATR upper channel.
lowerATR = ohlc4[1] - ATR[1] //Open + High + Low + Close divided by 4, - prior ATR.  Just used here for visually plotting the ATR lower channel.

//uncomment these two lines to see ATR channels
plot(upperATR, color=color.orange)
plot (lowerATR, color=color.orange)

//Current close higher than previous close, and current close minus current open is greater than 3 times the previous ATR.  "3x ATR" is chosen because any less was not a noticeable distance above the trading range.
flagpole1 = close>close[1] and (close-open) > (ATR[1] * 3)
plotshape(flagpole1, text="flagpole1", style=shape.arrowdown, size=size.huge) //Plots an arrow for flagpole1 for QA testing

//Two consecutive close higer than their previous close, and current close minus PREVIOUS open is greater than 3 times the previous ATR.
flagpole2 = close>close[1] and close[1]>close[2] and (close-open[1]) > (ATR[1] * 3)
plotshape(flagpole2, text="flagpole2", style=shape.arrowdown, size=size.huge, color=color.yellow) //Plots an arrow for flagpole2 for QA testing

//Three consecutive close higer than their previous close, and current close minus open from 2 bars ago is greater than 3 times the previous ATR.
flagpole3 = close>close[1] and close[1]>close[2] and close[2]>close[3] and (close-open[2]) > (ATR[1] * 3)
plotshape(flagpole3, text="flagpole3", style=shape.arrowdown, size=size.huge, color=color.white) //Plots an arrow for flagpole3 for QA testing

//A flagpole can be any of the three definitions of flagpole.
flagpole = flagpole1 or flagpole2 or flagpole3

//This will return the number of bars since "flagpole" was true.  Not being used, but could be useful.
//since_flagpole = barssince(flagpole)

after_pole_1 = flagpole[1] //This marks the bar directly after a flagpole.  
//plotshape(after_pole_1, text="after_pole_1", style=shape.cross, size=size.large, color=color.white) //Plots a cross for after_pole_1 for QA testing
after_pole_2 = flagpole[2] //This marks the bar two bars after a flagpole.  
after_pole_3 = flagpole[3] //This marks the bar three bars after a flagpole.  

//This returns the price at the "top" of the flagpole (using close price) at the most recent occurence, 0.
pole_top = valuewhen(flagpole, close, 0)
//plot(pole_top, trackprice=true)  //plots a horizontal line at the most recent pole_top

//Measures the distance between last pole top and the previous SMA.
pole_height = pole_top - sma(close, 10)[1] 
//plot(pole_height)

//This marks 33% below the pole_top, which will be the lowest point a flag can be.
flag_bottom = pole_top - (.33 * pole_height)
//plot(flag_bottom)

//The first, second, and third bars after the pole are considered part of a flag when open and close are between the pole_top and flag_bottom
flag1 = after_pole_1 and (open >= flag_bottom) and (open <= pole_top) and (close >= flag_bottom) and (close <= pole_top)
//plotshape(flag1, text="flag1", style=shape.flag, size=size.large, color=color.teal)
flag2 = after_pole_2 and (open >= flag_bottom) and (open <= pole_top) and (close >= flag_bottom) and (close <= pole_top)
//plotshape(flag2, text="flag2", style=shape.flag, size=size.large, color=color.teal)
flag3 = after_pole_3 and (open >= flag_bottom) and (open <= pole_top) and (close >= flag_bottom) and (close <= pole_top)
//plotshape(flag3, text="flag3", style=shape.flag, size=size.large, color=color.teal)

//When all three bars after a flagpole are a flag, the criteria are met and we have a "bull_flag"
//Specifically, when current bar is flag3, previous bar is flag2, and 2 bars ago is flag1, we have a bull_flag.
bull_flag = flag3 and flag2[1] and flag1[2]
plotshape(bull_flag, text="bull_flag", style=shape.flag, size=size.large, color=color.white) //Plots a flag for bull_flag for QA testing


if (bull_flag)
    strategy.entry("Long", strategy.long)

if barssince(bull_flag) == 6 //close 6 bars after entry.
    strategy.close("Long")

Больше