Chiến lược đột phá lực lượng

Tác giả:ChaoZhang, Ngày: 2024-01-24 11:25:01
Tags:

img

Tổng quan

Chiến lược đột phá lực lượng là một chiến lược giao dịch định lượng dựa trên đường trung bình động và chỉ số sức mạnh tương đối (RSI). Nó phát hiện hướng xu hướng thị trường bằng cách theo dõi sự đột phá giá của đường trung bình động chính và sử dụng chỉ số RSI để xác định tín hiệu đầu vào. Ý tưởng cốt lõi là phát hành tín hiệu giao dịch khi giá vượt qua đường trung bình động, kết hợp với các tín hiệu mua quá / bán quá của chỉ số RSI.

Chiến lược logic

Chiến lược đột phá lực sử dụng hai đường trung bình động. Thứ nhất là đường EMA 10 giai đoạn như đường trung bình động nhanh. Thứ hai là đường EMA 200 giai đoạn như đường trung bình động chậm. Đường nhanh đại diện cho xu hướng giá hiện tại và đường chậm đại diện cho xu hướng giá dài hạn. Khi giá tăng và thâm nhập trên đường 10 ngày, đó là tín hiệu tăng. Khi giá giảm và thâm nhập dưới đường 10 ngày, đó là tín hiệu giảm.

Chiến lược này cũng kết hợp chỉ số RSI để xác định thời điểm nhập khẩu cụ thể. Nếu giá đang trong xu hướng tăng và điểm thấp của RSI xuất hiện dưới mức trung bình di chuyển nhanh (RSI giảm xuống dưới 5), một tín hiệu dài được kích hoạt. Nếu giá đang trong xu hướng giảm và điểm cao của RSI xuất hiện trên mức trung bình di chuyển nhanh (RSI vượt qua 95), một tín hiệu ngắn được kích hoạt.

Nguyên tắc dừng lỗ sau khi thực hiện các vị trí dài / ngắn là thoát khỏi vị trí nếu giá lại phá vỡ đường trung bình động 10 ngày.

Phân tích lợi thế

Lợi thế lớn nhất của chiến lược này là khả năng theo dõi xu hướng mạnh mẽ của nó. Đường trung bình động có chức năng đánh giá xu hướng tuyệt vời. Chiến lược này tận dụng đầy đủ các điểm mạnh của đường nhanh và đường chậm, trong đó đường nhanh đánh giá xu hướng ngắn hạn và đường chậm đánh giá xu hướng dài hạn. Khi đường nhanh có sự thâm nhập tăng của đường chậm, nó chỉ ra cả xu hướng tăng ngắn hạn và dài hạn, đó là một tín hiệu mua mạnh.

Việc bổ sung chỉ số RSI cũng tăng cường lợi thế của chiến lược. Kết hợp các điểm cao và thấp của RSI có thể hiệu quả phát ra các tín hiệu giao dịch khi các điều kiện mua quá mức hoặc bán quá mức xảy ra, cho phép tham gia vào các điểm đảo ngược tiềm năng để cải thiện hiệu suất thực tế.

Phân tích rủi ro

Mặc dù chiến lược có khả năng theo dõi xu hướng tương đối mạnh, nhưng không có chiến lược chỉ số kỹ thuật nào có thể tránh hoàn toàn tổn thất.

  1. Khi giá dao động mạnh mẽ, các tín hiệu giao dịch được tạo ra bởi đường trung bình động có thể bị chậm.

  2. Các chỉ số RSI có xu hướng phân kỳ có thể gây ra đánh giá tín hiệu giao dịch sai.

  3. Các thông số không phù hợp trong hoạt động dài hạn có thể dẫn đến giao dịch quá mức.

Để giảm thiểu rủi ro, các thông số như đường trung bình động và RSI có thể được điều chỉnh và tối ưu hóa, phạm vi dừng lỗ có thể được nới lỏng hợp lý, kích thước vị trí có thể được kiểm soát thích hợp.

Hướng dẫn tối ưu hóa

Có chỗ cho việc tối ưu hóa thêm chiến lược, chủ yếu tập trung vào:

  1. Thêm các đường trung bình động thích nghi để tự động điều chỉnh các thông số dựa trên biến động thị trường để cải thiện tính linh hoạt.

  2. Kết hợp các chỉ số biến động như Bollinger Bands để giải quyết biến động giá thị trường dữ dội.

  3. Tăng thuật toán học máy thông qua đào tạo AI để kết hợp các tham số tốt hơn và các quy tắc giao dịch để cải thiện tự động hóa.

  4. Mở rộng các mẫu thử nghiệm thông qua các danh mục đầu tư đa thị trường để xác nhận hiệu quả xuyên thị trường.

  5. Đưa ra các mô-đun phân tích cơ bản dựa trên các chính sách vĩ mô, các sự kiện lớn, v.v. để hỗ trợ quyết định chiến lược.

Tóm lại

Chiến lược đột phá lực lượng là một chiến lược dựa trên trung bình động thực tế. Nó đánh giá xu hướng thông qua sự thâm nhập giá của trung bình động nhanh và chậm và chính xác vào thị trường với sự giúp đỡ của các chỉ số RSI. Sự kết hợp này sử dụng đầy đủ các điểm mạnh của trung bình động và các chỉ số mua quá mức / bán quá mức. Chiến lược được xác nhận trên các thị trường khác nhau với lợi nhuận ổn định và rủi ro có thể kiểm soát được. Đây là một chiến lược giao dịch định lượng được khuyến cáo.


/*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)


Thêm nữa