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

Автор:Чао Чжан, Дата: 2024-04-26 15:34:28
Тэги:ATRADXМ.А.

img

Обзор

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

Принцип стратегии

  1. Используйте функции ta.pivothigh (() и ta.pivotlow (()) для обнаружения высоких (ph) и низких (pl) за определенный период.
  2. Вычислить наклон линии тренда на основе выбранного метода расчета (ATR, стандартное отклонение или линейная регрессия) и скорректировать его путем умножения на коэффициент наклонности (mult).
  3. Используя цены на наклон и цены на поворотные точки, вычислить текущие значения линии восходящего тренда (верхняя) и линии нисходящего тренда (нижняя).
  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')

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


Связанные

Больше