Стратегия прорыва

Автор:Чао Чжан, Дата: 2024-01-24 11:25:01
Тэги:

img

Обзор

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

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

Стратегия прорыва силы использует две скользящие средние. Первая - 10-периодная EMA как быстрая скользящая средняя. Вторая - 200-периодная EMA как медленная скользящая средняя. Быстрая линия представляет текущую ценовую тенденцию, а медленная линия представляет долгосрочную ценовую тенденцию. Когда цены растут и проникают выше 10-дневной линии, это быстрый сигнал. Когда цены падают и проникают ниже 10-дневной линии, это медвежий сигнал.

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

Принцип стоп-лосса после занятия длинных/коротких позиций заключается в том, чтобы выйти из позиции, если цены снова нарушат 10-дневную скользящую среднюю величину.

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

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

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

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

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

  1. Когда цены сильно колеблются, торговые сигналы, генерируемые скользящими средними, могут отставать.

  2. Показатели RSI склонны к расхождениям, которые могут привести к ошибочному суждению о торговых сигналах.

  3. Неправильные параметры в долгосрочной перспективе могут привести к чрезмерной торговле.

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

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

Существует возможность дальнейшей оптимизации стратегии, в основном сосредоточенной на:

  1. Добавление адаптивных скользящих сред для автоматической корректировки параметров на основе волатильности рынка для повышения гибкости.

  2. Включить индикаторы волатильности, такие как полосы Боллинджера, чтобы справиться с сильными колебаниями цен на рынке.

  3. Увеличить алгоритмы машинного обучения посредством обучения ИИ для улучшения комбинаций параметров и правил торговли для улучшения автоматизации.

  4. Расширение выборки испытаний через портфели на нескольких рынках для проверки эффективности на разных рынках.

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

Резюме

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


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © JoseMetal
//@version=5

//== Constantes
c_blanco              = color.rgb(255, 255, 255, 0)
c_negro               = color.rgb(0, 0, 0, 0)
c_amarillo_radiactivo = color.rgb(255, 255, 0, 0)
c_cian_radiactivo     = color.rgb(0, 255, 255, 0)
c_verde_radiactivo    = color.rgb(0, 255, 0, 0)
c_verde               = color.rgb(0, 128, 0, 0)
c_verde_oscuro        = color.rgb(0, 80, 0, 0)
c_rojo_radiactivo     = color.rgb(255, 0, 0, 0)
c_rojo                = color.rgb(128, 0, 0, 0)
c_rojo_oscuro         = color.rgb(80, 0, 0, 0) 
c_naranja_oscuro      = color.rgb(200, 120, 0, 0)
noneColor             = color.new(color.white, 100)
max_float             = 10000000000.0



//== Funciones

//== Declarar estrategia y período de testeo
strategy("Estrategia Larry Connors", shorttitle="Estrategia Larry Connors", overlay=true)
fecha_inicio     = input(timestamp("1 Jan 2000"), title="• Fecha de inicio", group="Período de pruebas", inline="periodo_de_pruebas")
vela_en_fecha    = true
posicion_abierta = strategy.position_size != 0
LONG_abierto     = strategy.position_size > 0
SHORT_abierto    = strategy.position_size < 0

GRUPO_P           = "Posiciones"
P_permitir_LONGS  = input.bool(title="LONGS", group=GRUPO_P, defval=true, inline="posiciones")
P_permitir_SHORTS = input.bool(title="SHORTS", group=GRUPO_P, defval=true, inline="posiciones")

GRUPO_general = "General"
mostrar_color_velas = input.bool(title="Colorear velas", defval=true, group=GRUPO_general)



//== Inputs de indicadores
// Medias móviles simples
GRUPO_SMAs = "SMAs"
SMA_1_fuente = input.source(title="• (Media de salida) Fuente / Long.", group=GRUPO_SMAs, defval=close, inline="sma_1")
SMA_1_length = input.int(title="", group=GRUPO_SMAs, defval=10, minval=1, inline="sma_1")
SMA_2_fuente = input.source(title="• (Media tendencial) Fuente / Long.", group=GRUPO_SMAs, defval=close, inline="sma_2")
SMA_2_length = input.int(title="", group=GRUPO_SMAs, defval=200, minval=1, inline="sma_2")
SMA_1        = ta.ema(SMA_1_fuente, SMA_1_length)
SMA_2        = ta.ema(SMA_2_fuente, SMA_2_length)

// RSI
GRUPO_RSI    = "RSI"
RSI_src      = input.source(title="• Fuente / Longitud", group=GRUPO_RSI, defval=close, inline="rsi_calc")
RSI_length   = input.int(title="", group=GRUPO_RSI, defval=2, minval=1, inline="rsi_calc")
RSI          = ta.rsi(RSI_src, RSI_length)
RSI_nivel_os = input.int(title="• Sobreventa / Sobrecompra", group=GRUPO_RSI, defval=5, minval=0, maxval=99, inline="rsi_niveles")
RSI_nivel_ob = input.int(title="", group=GRUPO_RSI, defval=95, minval=1, maxval=100, inline="rsi_niveles")


//== Cálculo de condiciones
cierre_sobre_SMA_1 = close > SMA_1
tendencia_alcista  = close > SMA_2
RSI_en_sobreventa  = RSI < RSI_nivel_os
RSI_en_sobrecompra = RSI > RSI_nivel_ob



//== Entrada (deben cumplirse todas para entrar)
LONG_condition_1    = tendencia_alcista
LONG_condition_2    = not cierre_sobre_SMA_1 // Vela con cierre bajo la media rápida
LONG_condition_3    = RSI_en_sobreventa[1] and not RSI_en_sobreventa // Sobreventa en la vela anterior y ya no en la actual
all_LONG_conditions = LONG_condition_1 and LONG_condition_2 and LONG_condition_3
entrar_en_LONG      = P_permitir_LONGS and all_LONG_conditions and vela_en_fecha and not LONG_abierto

SHORT_condition_1    = not tendencia_alcista
SHORT_condition_2    = cierre_sobre_SMA_1 // Vela con cierre sobre la media rápida
SHORT_condition_3    = RSI_en_sobrecompra[1] and not RSI_en_sobrecompra // Sobrecompra en la vela anterior y ya no en la actual
all_SHORT_conditions = SHORT_condition_1 and SHORT_condition_2 and SHORT_condition_3
entrar_en_SHORT      = P_permitir_SHORTS and all_SHORT_conditions and vela_en_fecha and not SHORT_abierto

if (entrar_en_LONG)
    strategy.entry("Abrir Long", strategy.long)

if (entrar_en_SHORT)
    strategy.entry("Abrir Short", strategy.short)



//== Salida
exit_LONG_conditions  = cierre_sobre_SMA_1
exit_SHORT_conditions = not cierre_sobre_SMA_1


if (LONG_abierto and exit_LONG_conditions)
    strategy.close("Abrir Long")

if (SHORT_abierto and exit_SHORT_conditions)
    strategy.close("Abrir Short")


//== Ploteo en pantalla
// SMAs
plot(SMA_1, "Media de salida", color=color.aqua, linewidth=2)
plot(SMA_2, "Media tendencial", color=tendencia_alcista ? color.green : color.red, linewidth=4)

// Color de fondo
bgcolor = entrar_en_LONG ? color.new(color.green, 85) : entrar_en_SHORT ? color.new(color.red, 85) : color.new(color.black, 100)
bgcolor(bgcolor)

// Color de las velas según sobrecompra/sobreventa del RSI
color_velas = mostrar_color_velas ? (RSI_en_sobreventa ? #00a800 : RSI_en_sobrecompra ? #ca0000 : na) : na
barcolor(color_velas)


Больше