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 độ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.
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ế.
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.
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.
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.
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.
Có chỗ cho việc tối ưu hóa thêm chiến lược, chủ yếu tập trung vào:
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.
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.
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.
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.
Đư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.
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)