Тенденция после стратегии, основанной на регрессии Надарая-Уотсона и канале ATR

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

img

Обзор

Эта стратегия - это стратегия, которая сочетает в себе регрессию Надарая-Уотсона и канал ATR для определения направления тренда и пунктов входа.

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

Во-первых, эта стратегия использует регрессию ядра Надарайи-Уотсона для расчета двух кривых регрессии с различными задержками и сравнивает перекресток двух кривых для определения направления тренда. В частности, она рассчитывает кривые регрессии h-период и h-задержки соответственно. Когда кривая h-задержки пересекает кривую h-период, это указывает на длинный сигнал. Когда кривая h-задержки пересекает ниже кривой h-период, это указывает на короткий сигнал.

Во-вторых, эта стратегия использует канал ATR для определения точек входа. Верхняя рельса - это кривая регрессии плюс мультипликатор ATR n-периода, а нижняя рельса - кривая регрессии минус мультипликатор ATR n-периода. Она длинна, когда цена проходит через нижнюю рельсу, и коротка, когда цена проходит через верхнюю рельсу.

Наконец, устанавливается механизм стоп-лосса. Если цена остается ниже входной цены для последовательных стоп-лосс-бар, позиция будет закрыта стоп-лосом.

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

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

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

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

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

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

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

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

Мы можем рассмотреть возможность объединения других индикаторов для оценки сигналов тренда и обратного движения, таких как VOLUME, MACD и т. д., чтобы улучшить стабильность и точность стратегии.

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

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

Резюме

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


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

//@version=5
strategy("Custom Strategy with Stop Loss and EMA", overlay=true)

src = input(close, title='Source')
h = input(10, title='Lookback Window', tooltip='The number of bars used for the estimation.')
r = input(10, title='Relative Weighting', tooltip='Relative weighting of time frames.')
x_0 = input(50, title='Start Regression at Bar',  tooltip='Bar index on which to start regression.')
lag = input(2, title='Lag', tooltip='Lag for crossover detection.')
stopLossBars = input(3, title='Stop Loss Bars', tooltip='Number of bars to check for stop loss condition.')
emaPeriod = input(46, title='EMA Period',  tooltip='Period for Exponential Moving Averages.')

lenjeje = input(32, title='ATR Period', tooltip='Period to calculate upper and lower band')
coef = input(2.7, title='Multiplier', tooltip='Multiplier to calculate upper and lower band')

// Function for Nadaraya-Watson Kernel Regression
kernel_regression1(_src, _size, _h) =>
    _currentWeight = 0.0
    _cumulativeWeight = 0.0
    for i = 0 to _size + x_0
        y = _src[i] 
        w = math.pow(1 + (math.pow(i, 2) / ((math.pow(_h, 2) * 2 * r))), -r)
        _currentWeight += y * w
        _cumulativeWeight += w
    [_currentWeight, _cumulativeWeight]

// Calculate Nadaraya-Watson Regression
[currentWeight1, cumulativeWeight1] = kernel_regression1(src, h, h)
yhat1 = currentWeight1 / cumulativeWeight1
[currentWeight2, cumulativeWeight2] = kernel_regression1(src, h-lag, h-lag)
yhat2 = currentWeight2 / cumulativeWeight2

// Calculate Upper and Lower Bands
upperjeje = yhat1 + coef * ta.atr(lenjeje)
lowerjeje = yhat1 - coef * ta.atr(lenjeje)

// Plot Upper and Lower Bands
plot(upperjeje, color=color.rgb(0, 247, 8), title="Upper Band", linewidth=2)
plot(lowerjeje, color=color.rgb(255, 0, 0), title="Lower Band", linewidth=2)

// Calculate EMAs
emaLow = ta.ema(low, emaPeriod)
emaHigh = ta.ema(high, emaPeriod)

// Plot EMAs
plot(emaLow, color=color.rgb(33, 149, 243, 47), title="EMA (Low)", linewidth=2)
plot(emaHigh, color=color.rgb(255, 153, 0, 45), title="EMA (High)", linewidth=2)

// Long Entry Condition
longCondition = low < lowerjeje
strategy.entry("Long", strategy.long, when=longCondition)

// Stop Loss Condition
stopLossCondition = close[1] < strategy.position_avg_price and close[2] < strategy.position_avg_price and close[3] < strategy.position_avg_price
strategy.close("Long", when=stopLossCondition)

// Close and Reverse (Short) Condition
shortCondition = high > upperjeje
strategy.close("Long", when=shortCondition)
strategy.entry("Short", strategy.short, when=shortCondition)

Больше