Прорыв тренда - стратегия длинной тени

Автор:Чао Чжан, Дата: 2023-11-15 16:43:17
Тэги:

img

Эта стратегия оценивает текущее направление тренда, рассчитывая соотношение длины тень бычьей/медвежьей, и определяет тренд с помощью индикатора ATR. Она открывает обратную позицию на точках прорыва и устанавливает стоп-лосс и прибыль для улавливания краткосрочных тенденций.

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

Стратегия в основном оценивает текущую тенденцию, рассчитывая соотношение тень бычьего / медвежьего.

Конкретная логика такова:

  1. Расчет медвежьей тени: близко - низко
  2. Расчет бычьей тени: высокий - открытый
  3. Примите максимальную длину тень медвежьей и бычьей.
  4. Вычислить длину тела свечи: высокий - низкий
  5. Расчет соотношения между тенью и длиной тела
  6. Если коэффициент > 0,5 и медвежий > бычий, судить о нисходящем тренде и длинной позиции
  7. Если соотношение > 0,5 и бычье > медвежье, судить о тенденции к росту и короткой позиции
  8. Подтвердить прорыв с длиной свечи > 0,75 * ATR
  9. Установите стоп-лосс и принимайте прибыль после входа, соотношение 2:1

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

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

  1. Соотношение теней точно определяет тенденцию
  2. АТР фильтрует ложные сигналы прорыва
  3. Стоп-лосс и получение прибыли управляют риском
  4. Соотношение риск-вознаграждение 2:1 соответствует стандарту квантовой торговли
  5. Подходит для краткосрочной торговли акциями с высокой волатильностью
  6. Простая и понятная логика, легко понятная

Риски

  1. Волатильность цен может привести к остановке потерь и увеличению потерь
  2. Производительность сильно зависит от настройки параметров
  3. Обратная тенденция может привести к убыткам
  4. Расширение стоп-лосса/прибыли может увеличить вероятность потери
  5. Неудачный выход может привести к большим потерям

Риски можно управлять с помощью разумного стоп-лосса, оптимизации параметров и своевременного выхода из позиции.

Улучшение

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

  1. Оптимизировать параметр соотношения теней для наилучшего значения
  2. Оптимизировать параметр ATR для наилучшей длины свечи
  3. Оптимизировать коэффициенты стоп-лосса/прибыли для оптимального соотношения риска и прибыли
  4. Добавьте размеров позиции, как постепенное увеличение позиции
  5. Добавление остановки потери для защиты прибыли
  6. Добавление других показателей к фильтрующим сигналам
  7. Оптимизировать период обратного тестирования и тестировать различные этапы рынка

С помощью многогранного тестирования и оптимизации можно максимизировать эффективность стратегии.

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


/*backtest
start: 2022-11-08 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
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/
// © ondrej17

//@version=4
strategy("longWickstrategy", overlay=true )
 
// Inputs
st_yr_inp = input(defval=2020, title='Backtest Start Year')
st_mn_inp = input(defval=01, title='Backtest Start Month')
st_dy_inp = input(defval=01, title='Backtest Start Day')
en_yr_inp = input(defval=2025, title='Backtest End Year')
en_mn_inp = input(defval=01, title='Backtest End Month')
en_dy_inp = input(defval=01, title='Backtest End Day')
sltp_inp = input(defval=0.8, title='N - % offset for N*SL and (2N)*TP')/100
 
// Dates
start = timestamp(st_yr_inp, st_mn_inp, st_dy_inp,00,00)
end = timestamp(en_yr_inp, en_mn_inp, en_dy_inp,00,00)
canTrade = time >= start and time <= end
// Indicators Setup


 
// Strategy Calcuations
lowerWick = (open > close) ? close-low : open - low
upperWick = (open > close) ? high-open : high-close
wickLength = max(lowerWick,upperWick)
candleLength = high-low
wickToCandleRatio = wickLength / candleLength
entryFilterCandleLength = candleLength > 0.75*atr(48)


// Entries and Exits
 
longCondition = entryFilterCandleLength and wickToCandleRatio > 0.5 and lowerWick > upperWick and canTrade and strategy.position_size == 0
shortCondition = entryFilterCandleLength and wickToCandleRatio > 0.5 and lowerWick < upperWick and canTrade and strategy.position_size == 0

strategy.entry("pendingLong", strategy.long, limit=low+wickLength/2, when = longCondition)
strategy.entry("pendingShort", strategy.short, limit=high-wickLength/2, when = shortCondition)

longStop = strategy.position_size > 0 ? strategy.position_avg_price*(1-sltp_inp) : na
longTP = strategy.position_size > 0 ? strategy.position_avg_price*(1+2*sltp_inp) : na
shortStop = strategy.position_size < 0 ? strategy.position_avg_price*(1+sltp_inp) : na
shortTP = strategy.position_size < 0 ? strategy.position_avg_price*(1-2*sltp_inp) : na

strategy.exit("longSLTP","pendingLong", stop=longStop, limit = longTP)
strategy.exit("shortSLTP","pendingShort", stop=shortStop, limit = shortTP)  
 

plot(longStop, color=color.red, style=plot.style_linebr, linewidth=2)
plot(shortStop, color=color.red, style=plot.style_linebr, linewidth=2)
plot(longTP, color=color.green, style=plot.style_linebr, linewidth=2)
plot(shortTP, color=color.green, style=plot.style_linebr, linewidth=2)

plotLongCondition = longCondition ? high+abs(open-close) : na
plot(plotLongCondition, style=plot.style_circles, linewidth=4, color=color.green)
plotShortCondition = shortCondition ? high+abs(open-close) : na
plot(plotShortCondition, style=plot.style_circles, linewidth=4, color=color.red)



Больше