Торговля по трендовой линии в реальном времени на основе точек разворота и наклона

ATR ADX MA
Дата создания: 2024-04-26 15:34:28 Последнее изменение: 2024-04-26 15:34:28
Копировать: 2 Количество просмотров: 859
1
Подписаться
1617
Подписчики

Торговля по трендовой линии в реальном времени на основе точек разворота и наклона

Обзор

Эта стратегия использует опорные точки (PivotHigh и PivotLow), чтобы идентифицировать высокие и низкие точки колебаний цены, и на основе этого начертить линию тренда вверх и вниз. Склонность трендовой линии вычисляется методами, такими как ATR (средний реальный диапазон), стандартная разница или линейная регрессия, и корректируется умноженной на коэффициент склонности.

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

  1. Используйте функции ta.pivothigh () и ta.pivotlow () для обнаружения высоких и низких точек колебаний (ph) и (pl) в течение определенного периода.
  2. В зависимости от выбранного метода вычисления ((ATR, стандартное отклонение или линейная регрессия) вычисляется наклон трендовой линии, а корректировка производится умножением на коэффициент наклонности ((mult)).
  3. Используя склонность и цены базиса, вычислите текущие значения линий восходящего тренда (upper) и нисходящего тренда (lower).
  4. Оценить, прорвала ли текущая цена закрытия линию тренда: если цена закрытия выше линии тренда вверх, создается сигнал прорыва вверх; если цена закрытия ниже линии тренда вниз, создается сигнал прорыва вниз.
  5. На графике вы можете начертить линию тренда и выбрать, растягивать ли линию тренда.
  6. Торговля по сигналу прорыва: вверх прорыв открывает множественный лист, вниз прорыв открывает пустой лист.

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

  1. Стратегия, основанная на объективных фактах ценового поведения (опорные точки и трендовые линии), генерирует торговые сигналы с определенной надежностью и стабильностью.
  2. Склонение трендовой линии может быть динамически скорректировано в зависимости от волатильности рынка, чтобы адаптироваться к различным рыночным условиям.
  3. Пользователь может гибко выбирать методы расчета скольжения и параметры, чтобы оптимизировать эффективность стратегии.
  4. Стратегия предлагает два режима сигналов: в реальном времени и с задержкой, чтобы удовлетворить потребности различных пользователей.
  5. Встроенная функция оповещения помогает пользователям своевременно получать доступ к торговым возможностям.

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

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

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

  1. Введение большего количества технических показателей или характеристик ценового поведения, таких как объем торгов, волатильность и т. д., чтобы помочь подтвердить сигнал прорыва трендовой линии и повысить качество сигнала.
  2. Фильтрация торговых сигналов с учетом таких факторов, как продолжительность прорыва трендовой линии, интенсивность прорыва, чтобы уменьшить количество ложных сигналов.
  3. Оптимизация управления позициями и контроля риска, например, изменение размеров позиций в зависимости от силы рыночных тенденций или динамики волатильности, установка разумных стоп-лосс и стоп-стоп позиций.
  4. Оптимизация параметров, например, с использованием машинного обучения или алгоритмов оптимизации для поиска оптимальной комбинации параметров.

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

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

Исходный код стратегии
/*backtest
start: 2023-04-20 00:00:00
end: 2024-04-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(" only Ajay ", overlay=true)

//------------------------------------------------------------------------------
//Settings
//------------------------------------------------------------------------------{
length = input.int(14, 'Swing Detection Lookback')
mult = input.float(1., 'Slope', minval = 0, step = .1)
calcMethod = input.string('Atr', 'Slope Calculation Method', options = ['Atr','Stdev','Linreg'])
backpaint = input(true, tooltip = 'Backpainting offset displayed elements in the past. Disable backpainting to see real time information returned by the indicator.')

//Style
upCss = input.color(color.teal, 'Up Trendline Color', group = 'Style')
dnCss = input.color(color.red, 'Down Trendline Color', group = 'Style')
showExt = input(true, 'Show Extended Lines')

//------------------------------------------------------------------------------}
//Calculations
//------------------------------------------------------------------------------{
var upper = 0.
var lower = 0.
var slope_ph = 0.
var slope_pl = 0.

var offset = backpaint ? length : 0

n = bar_index
src = close

ph = ta.pivothigh(length, length)
pl = ta.pivotlow(length, length)

//Slope Calculation Method
slope = switch calcMethod
    'Atr'    => ta.atr(length) / length * mult
    'Stdev'  => ta.stdev(src,length) / length * mult
    'Linreg' => math.abs(ta.sma(src * n, length) - ta.sma(src, length) * ta.sma(n, length)) / ta.variance(n, length) / 2 * mult

//Get slopes and calculate trendlines
slope_ph := ph ? slope : slope_ph
slope_pl := pl ? slope : slope_pl

upper := ph ? ph : upper - slope_ph
lower := pl ? pl : lower + slope_pl

var upos = 0
var dnos = 0
upos := ph ? 0 : close > upper - slope_ph * length ? 1 : upos
dnos := pl ? 0 : close < lower + slope_pl * length ? 1 : dnos

//------------------------------------------------------------------------------}
//Extended Lines
//------------------------------------------------------------------------------{
// var uptl  = line.new(na,na,na,na, color = upCss, style = line.style_dashed, extend = extend.right)
// var dntl  = line.new(na,na,na,na, color = dnCss, style = line.style_dashed, extend = extend.right)

// if ph and showExt
//     uptl.set_xy1(n-offset, backpaint ? ph : upper - slope_ph * length)
//     uptl.set_xy2(n-offset+1, backpaint ? ph - slope : upper - slope_ph * (length+1))

// if pl and showExt
//     dntl.set_xy1(n-offset, backpaint ? pl : lower + slope_pl * length)
//     dntl.set_xy2(n-offset+1, backpaint ? pl + slope : lower + slope_pl * (length+1))

//------------------------------------------------------------------------------}
//Plots
//------------------------------------------------------------------------------{
plot(backpaint ? upper : upper - slope_ph * length, 'Upper', color = ph ? na : upCss, offset = -offset)
plot(backpaint ? lower : lower + slope_pl * length, 'Lower', color = pl ? na : dnCss, offset = -offset)

//Breakouts
upBreakout = upos > upos[1]
dnBreakout = dnos > dnos[1]

if (upBreakout)
    strategy.entry("Up Breakout", strategy.long)

if (dnBreakout)
    strategy.entry("Down Breakout", strategy.short)

//------------------------------------------------------------------------------}
//Alerts
//------------------------------------------------------------------------------{
alertcondition(upos > upos[1], 'Upward Breakout', 'Price broke the down-trendline upward')
alertcondition(dnos > dnos[1], 'Downward Breakout', 'Price broke the up-trendline downward')

//------------------------------------------------------------------------------}