Эта стратегия - это стратегия, которая сочетает в себе регрессию Надарая-Уотсона и канал 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)