
Chiến lược phá vỡ trường lực là một chiến lược giao dịch định lượng dựa trên các chỉ số trung bình di chuyển và tương đối mạnh. Chiến lược này đánh giá xu hướng của thị trường bằng cách phát hiện giá phá vỡ các đường trung bình di chuyển quan trọng, kết hợp với chỉ số RSI để xác định thời gian vào. Ý tưởng cốt lõi là phát tín hiệu giao dịch khi giá phá vỡ đường trung bình di chuyển, được hỗ trợ bởi tín hiệu mua quá mức của chỉ số RSI.
Chiến lược phá vỡ trường lực sử dụng hai đường trung bình di chuyển, đầu tiên là EMA 10 chu kỳ làm trung bình di chuyển nhanh, và thứ hai là EMA 200 chu kỳ làm trung bình di chuyển chậm. Đường nhanh đại diện cho xu hướng giá hiện tại, đường chậm đại diện cho xu hướng giá dài hạn.
Chiến lược này cũng kết hợp các chỉ số RSI để xác định thời điểm nhập cảnh cụ thể. Nếu giá đang trong xu hướng tăng, khi RSI thấp hơn đường trung bình di chuyển nhanh (RSI nhỏ hơn 5), sẽ phát đi nhiều tín hiệu. Nếu giá đang trong xu hướng giảm, khi RSI cao hơn đường trung bình di chuyển nhanh (RSI lớn hơn 95), sẽ phát đi tín hiệu dừng.
Nguyên tắc dừng lỗ sau khi thực hiện thêm lệnh giảm giá là dừng lỗ nếu giá giảm trở lại hoặc phá vỡ đường 10 ngày.
Ưu điểm 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ẽ. Đường trung bình di chuyển tự nó có chức năng phán đoán xu hướng tốt. Chiến lược tận dụng tối đa lợi thế của đường trung bình nhanh và chậm, đường nhanh phán đoán hướng xu hướng ngắn hạn, đường chậm phán đoán hướng xu hướng dài hạn.
Việc bổ sung các chỉ số RSI cũng làm tăng lợi thế của chiến lược. Sự kết hợp của các điểm cao và thấp của RSI có thể hiệu quả trong việc phát ra tín hiệu giao dịch khi hiện tượng quá mua quá bán xảy ra, do đó có thể tham gia vào các điểm đảo ngược có thể, tăng hiệu quả chiến đấu của chiến lược.
Mặc dù chiến lược này có khả năng theo dõi xu hướng mạnh mẽ, nhưng không có chiến lược chỉ số kỹ thuật nào có thể tránh hoàn toàn thua lỗ, vẫn có một số rủi ro. Cụ thể, có thể có những rủi ro sau:
Để giảm rủi ro, có thể điều chỉnh các tham số trung bình di chuyển, tối ưu hóa các tham số RSI, giãn khoảng cách đường dừng thích hợp, kiểm soát hợp lý quy mô vị trí. Các tham số được tối ưu hóa nên được xác minh đầy đủ trong việc đo lại.
Chiến lược này có thể được tối ưu hóa hơn nữa, chủ yếu tập trung vào các khía cạnh sau:
Tăng mức trung bình di chuyển thích ứng, tự động điều chỉnh các tham số trung bình di chuyển theo biến động của thị trường, làm cho nó linh hoạt hơn.
Thêm các chỉ số biến động, chẳng hạn như BRI, có thể giúp đối phó hiệu quả với môi trường thị trường có biến động mạnh về giá cả.
Thêm các thuật toán học máy, đào tạo các tham số và quy tắc giao dịch tốt hơn thông qua AI, làm cho chiến lược thông minh hơn.
Tích hợp nhiều thị trường, mở rộng số lượng mẫu thử nghiệm, chứng minh hiệu quả của chiến lược giữa các thị trường khác nhau.
Tiến hành các mô-đun phân tích cơ bản, kết hợp với các chính sách vĩ mô, các sự kiện quan trọng để đánh giá xu hướng thị trường và cung cấp cơ sở cho các quyết định chiến lược.
Chiến lược phá vỡ trường lực là một chiến lược trung bình di chuyển rất thực tế. Nó sử dụng nguyên tắc của giá phá vỡ đường trung bình nhanh và chậm để đánh giá xu hướng, đồng thời hỗ trợ các chỉ số RSI để đưa vào chính xác.
/*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)