Стратегия торговли на основе динамического ценового диапазона и расхождения RSI: фильтрация тренда с использованием многопериодной скользящей средней и оптимизация динамического управления позициями

RSI MA DIVERGENCE DYNAMIC POSITION SIZING TREND FILTERING BOX RANGE
Дата создания: 2025-05-15 16:07:47 Последнее изменение: 2025-05-15 16:07:47
Копировать: 3 Количество просмотров: 306
2
Подписаться
319
Подписчики

Стратегия торговли на основе динамического ценового диапазона и расхождения RSI: фильтрация тренда с использованием многопериодной скользящей средней и оптимизация динамического управления позициями Стратегия торговли на основе динамического ценового диапазона и расхождения RSI: фильтрация тренда с использованием многопериодной скользящей средней и оптимизация динамического управления позициями

Обзор

Стратегия торговли с отклонением от динамического ценового диапазона и RSI - это комплексная количественная торговая система, которая объединяет три основных технологии: обнаружение ценового диапазона, отклонение от RSI и анализ тенденций движущихся средних. Стратегия специально разработана для OKX-сигнальных роботов с динамической позиционной корректировкой и некоторыми функциями позиционного равновесия.

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

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

Стратегия основана на трех ключевых компонентах:

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

  2. RSI отклоняется от проверкиСтратегия использует относительно сильный и слабый индекс (RSI) для вычисления динамики рынка и обнаружения отклонений между ценами и RSI. Когда цены достигают новых низких значений, а RSI достигает более высоких низких значений, образуется позиционное отклонение; когда цены достигают новых высоких значений, а RSI достигает более низких высоких значений, образуется позиционное отклонение.

  3. Анализ тенденций в движущихся средних: Стратегия рассчитывает движущиеся средние из нескольких типов (MA20, MA50, MA100 и MA200) на пользовательских временных рамках, чтобы определить рыночные тенденции путем анализа расположения этих средних и их цены относительно средних. Стратегия запускает несколько сигналов только во время нисходящих тенденций, чтобы обеспечить согласованность торгов с общей рыночной обстановкой.

Логика сделки выглядит следующим образом:

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

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

  1. Механизм многомерного подтвержденияВ сочетании с прорывом в ценовом диапазоне, отклонением от сигнала RSI и фильтрацией трендов на движущихся средних, создается многомерная система подтверждения сделок, что значительно повышает надежность и точность торговых сигналов.

  2. Динамическое управление позициями: стратегия динамически корректирует размер позиции в зависимости от рыночных условий и изменения цен, а не использует фиксированное распределение позиций. Это позволяет стратегии максимизировать потенциал прибыли в благоприятных рыночных условиях, а также контролировать риск в неблагоприятных условиях. формулаmath.max(math.min(math.pow((avgPrice - close)* 1000/5,1.1), 100), minEnterPercent)Обеспечьте гибкость и ограничение в корректировке позиций.

  3. Адаптация к рыночным условиям: С помощью перекрестного и рядового анализа движущихся средних стратегии могут адаптироваться к различным рыночным условиям и совершать сделки только в тех случаях, когда технические формы согласуются с общими тенденциями.

  4. Точные точки входа и выхода: отклонение от сигнала в сочетании с прорывом в ценовом диапазоне обеспечивает точную точку входа и выхода, уменьшая вероятность ложного сигнала. Параметры обратного обзора (leftLookback и rightLookback) повышают точность идентификации крайней точки.

  5. Визуализация отзывовСтратегия: На графике изображены ценовые диапазоны, движущиеся средние и торговые сигналы, обеспечивающие интуитивную визуальную обратную связь, которая помогает трейдерам понять и проверить торговые решения.

  6. Гибкая конфигурация параметровМногочисленные регулируемые параметры позволяют стратегии адаптироваться к различным рынкам и стилям торговли, таким как длина RSI, циклы ценовых промежутков и циклы отклонения от обратного пути.

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

  1. Риск ложного проникновения: Прорыв в ценовом диапазоне иногда может быть кратковременным, а не началом реальной тенденции. Это может привести к ненужным сделкам и привести к убыткам. Способ снижения риска заключается в добавлении подтверждающих факторов, таких как расширение цикла ретроспекции или увеличение подтверждения объема сделок.

  2. Риски чрезмерной торговлиДинамическая корректировка позиции может привести к чрезмерной торговле и увеличению затрат на торговлю. Рекомендуется установить разумные минимальные корректируемые пороги (minEnterPercent и minExitPercent) для предотвращения небольших колебаний цен, которые могут спровоцировать частую торговлю.

  3. Риск задержки средней линии: Подвижные средние имеют отсталость, особенно в быстро меняющихся рынках. Этот риск может быть уменьшен путем корректировки типа используемой средней линии (например, переход от SMA к EMA) или корректировки средней линии.

  4. Параметр ЧувствительностьСтратегия зависит от нескольких параметров, таких как RSI, средний цикл, и т. Д. Небольшие изменения в этих параметрах могут значительно повлиять на эффективность стратегии. Рекомендуется искать стабильные настройки, отслеживая различные комбинации параметров, и регулярно повторно оптимизировать параметры для адаптации к изменяющимся рыночным условиям.

  5. Зависимость от единого рынка: Стратегия может хорошо работать в определенных рыночных условиях, а плохо работать в других. Рекомендуется тестировать стратегию в разных рыночных условиях и в разных временных рамках, а также рассмотреть возможность добавления фильтров состояния рынка для приостановки торговли в неблагоприятных рыночных условиях.

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

  1. Подтверждение увеличения громкости: текущая стратегия основана только на цене и RSI для принятия торговых решений. При добавлении анализа объема сделок можно проверить эффективность прорыва в ценовом диапазоне, избегая ложных прорывов с недостаточным объемом сделок. Конкретное осуществление может быть осуществлено путем проверки того, превышает ли объем сделок при прорыве средний объем сделок за предыдущие несколько циклов.

  2. Введение механизма корректировки волатильностиВ периоды высокой волатильности, добавление фильтров сигналов или корректировка формулы размеров позиций, чтобы уменьшить риск ложного сигнала и контролировать максимальный риск выхода. Можно использовать показатель ATR (Average True Range) для количественной оценки волатильности и динамической корректировки торговых параметров.

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

  4. Введение многовременного анализа: Качество сигнала может быть улучшено путем добавления подтверждения тренда на более высоких временных рамках. Например, совершение сделки только в том случае, если тренд японской линии совпадает с трендом текущего торгового времени.

  5. Улучшение алгоритмов динамического позиционированияВ крайних случаях существующая криптовалютная функция может быть изменена слишком сильно или слишком мало. Можно рассмотреть более сложные алгоритмы, такие как адаптивные формулы, основанные на рыночной волатильности и текущей ситуации с прибылью, или ввести ограничения на рисковый проход, чтобы гарантировать, что отдельные сделки не оказывают чрезмерного влияния на общий портфель.

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

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

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

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

Исходный код стратегии
/*backtest
start: 2025-05-07 00:00:00
end: 2025-05-14 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
// Strategy: Box Range with RSI Divergence (Dynamic Adjustment - OKX Signal Format)
// © aws2333
//I'm chinese 
strategy("Kaito  Box with RSI Div(Dynamic Adjustment + MA + Long)", overlay=true,default_qty_type=strategy.percent_of_equity, default_qty_value=10)


rsiOverbought = 80 
rsiOversold = 13   
boxLength = input.int(3, title="Box Length", minval=1) 
rsiLength = input.int(2, title="RSI Length", minval=1) 
divergenceLookback = input.int(2, title="Divergence Lookback Period", minval=1) 
leftLookback = input.int(2, title="Left Lookback", minval=1)  
rightLookback = input.int(2, title="Right Lookback", minval=1) 
var float avgPrice = na       
//var float position_size = 0     

signalToken = input.string("**********", "Signal Token")
enterOrderType = input.string("limit", "Order Type", options=["market", "limit"])
enterOrderPriceOffset = input.float(0.05, "Order Price Offset", minval=0, maxval=100, step=0.01)
enterInvestmentType = input.string("percentage_investment", "Investment Type", options=["margin", "contract", "percentage_balance", "percentage_investment"])
exitOrderType = input.string("limit", "Order Type", options=["market", "limit"])
exitOrderPriceOffset = input.float(0.05, "Order Price Offset", minval=0, maxval=100, step=0.01)
exitInvestmentType = input.string("percentage_position", "Investment Type", options=["percentage_position"])
maxLag = input.float(30, "maxLag")

minEnterPercent = 1.3  
minExitPercent = 0.09  


highestHigh = ta.highest(high, boxLength) 
lowestLow = ta.lowest(low, boxLength)  


plot(highestHigh, title="Upper Box", color=color.new(color.green, 0), linewidth=1, style=plot.style_line)
plot(lowestLow, title="Lower Box", color=color.new(color.red, 0), linewidth=1, style=plot.style_line)


rsi = ta.rsi(low, rsiLength)


isLowestLeft = low < ta.lowest(low[1], leftLookback)  
isLowestRight = low <= ta.lowest(low, rightLookback) 
isLowestClose = isLowestLeft and isLowestRight      

isHighestLeft = low > ta.highest(low[1], leftLookback) 
isHighestRight = low >= ta.highest(low, rightLookback) 
isHighestClose = isHighestLeft and isHighestRight      

lowestClose = ta.lowest(low, divergenceLookback)
lowestRsi = ta.lowest(rsi, divergenceLookback)
highestClose = ta.highest(low, divergenceLookback)
highestRsi = ta.highest(rsi, divergenceLookback)


lowestClosePrev = ta.lowest(low[1], leftLookback)
lowestRsiPrev = ta.lowest(rsi[1], leftLookback)
highestClosePrev = ta.highest(low[1], leftLookback)
highestRsiPrev = ta.highest(rsi[1], leftLookback)



bullishDivergence = isLowestClose and (low < lowestClosePrev) and (rsi > lowestRsiPrev) and (rsi < rsiOversold)
bearishDivergence = isHighestClose and (low > highestClosePrev) and (rsi < highestRsiPrev) and (rsi > rsiOverbought)


ma(source, length, type) =>
    type == "SMA" ? ta.sma(source, length) :type == "EMA" ? ta.ema(source, length) :type == "SMMA (RMA)" ? ta.rma(source, length) :type == "WMA" ? ta.wma(source, length) :type == "VWMA" ? ta.vwma(source, length) :na


custom_timeframe = input.timeframe("3", "Custom time period (leave blank for current period)")


ma_type = input.string("SMA", "Moving average type", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])


ma20_period = input.int(20, "MA20 ", minval=1)
ma50_period = input.int(50, "MA50 ", minval=1)
ma100_period = input.int(100, "MA100 ", minval=1)
ma200_period = input.int(200, "MA200 ", minval=1)


source_close = request.security(syminfo.tickerid, custom_timeframe, close)


ma20 = ma(source_close, ma20_period, ma_type)
ma50 = ma(source_close, ma50_period, ma_type)
ma100 = ma(source_close, ma100_period, ma_type)
ma200 = ma(source_close, ma200_period, ma_type)


up_signal_1 = ma20 > ma200  
up_signal_2 = ma50 > ma200  
up_signal_3 = ma100 > ma200 
up_signal_4 = (high > ma20 and high > ma50 and high > ma100 and high > ma200)
up_trend = (up_signal_1 and up_signal_2 and up_signal_3 and (source_close > ma200)) or up_signal_4 


down_signal_1 = ma20 < ma200  
down_signal_2 = ma50 < ma200  
down_signal_3 = ma100 < ma200 
down_signal_4 = (low < ma20 and low < ma50 and low < ma100 and low < ma200)
down_trend = (down_signal_1 and down_signal_2 and down_signal_3 and (source_close < ma200)) or down_signal_4 




plot(ma20, color=color.yellow, title="MA20")
plot(ma50, color=color.orange, title="MA50")
plot(ma100, color=color.red, title="MA100")
plot(ma200, color=color.maroon, title="MA200")


var float longAddPercent = na 
var float shortAddPercent = na 
roundToFourDecimals(value) => math.round(value * 10000) / 10000

if not na(avgPrice)
    if close < avgPrice
        longAddPercent := roundToFourDecimals(math.max(math.min(math.pow((avgPrice - close)* 1000/5,1.1)  , 100), minEnterPercent)) 
    if close > avgPrice
        longAddPercent := 1
 
    if close == avgPrice
        longAddPercent := 1


if not na(avgPrice)
    if close < avgPrice
        shortAddPercent := 0.01
 
    if close > avgPrice
        shortAddPercent := roundToFourDecimals(math.max(math.min(math.pow((close - avgPrice)*1000,1.1), 100), minExitPercent)) 
    if close == avgPrice
        longAddPercent := 1


longSignal = (close <= lowestLow) and bullishDivergence
shortSignal = (close >= highestHigh) and bearishDivergence
plotLongSignal = down_trend and longSignal and close < avgPrice
plotShortSignal = up_trend and shortSignal and close > avgPrice  

if plotLongSignal
    label.new(bar_index, avgPrice, "average price: " + str.tostring(avgPrice, "#.####"), style=label.style_label_up, color=color.green, textcolor=color.white )
if plotShortSignal
    label.new(bar_index, avgPrice,"average price: " + str.tostring(avgPrice, "#.####"), style=label.style_label_down, color=color.red, textcolor=color.white)




if plotLongSignal
    label.new(
         bar_index, 
         close, 
         "LONG :" + str.tostring(longAddPercent, "#.####") + "%, Close: " + str.tostring(close, "#.####"), 
         style=label.style_label_up, 
         color=color.new(color.green, 80), 
         textcolor=color.white
         )

if plotShortSignal
    label.new(
             bar_index, 
             close, 
             "EXIT LONG :" + str.tostring(shortAddPercent, "#.####") + "%, Close: " + str.tostring(close, "#.####"), 
             style=label.style_label_down, 
             color=color.new(color.red, 80), 
             textcolor=color.white
             )


if longSignal

    avgPrice := na(avgPrice) ? close : (avgPrice + close) / 2 







  
if down_trend and longSignal
     
    strategy.entry("Long",strategy.long,qty=longAddPercent )
    
var float close_size = na

if up_trend and shortSignal 

    if strategy.position_size > 0
        close_size := strategy.position_size * (shortAddPercent/100)  
        strategy.order("Partial Close Long", strategy.short, close_size)