
Strategi penembusan medan kekuatan adalah strategi perdagangan kuantitatif berdasarkan purata bergerak dan indeks yang agak kuat. Strategi ini menilai arah trend pasaran dengan mengesan harga yang menembusi purata bergerak yang kritikal, digabungkan dengan indikator RSI untuk menentukan masa masuk.
Strategi penembusan medan kuasa menggunakan dua rata-rata bergerak, yang pertama adalah EMA 10 kitaran sebagai rata-rata bergerak cepat, dan yang kedua adalah EMA 200 kitaran sebagai rata-rata bergerak perlahan. Garis cepat mewakili trend harga semasa, dan garis perlahan mewakili trend harga jangka panjang.
Strategi ini juga menggabungkan RSI untuk menentukan masa masuk tertentu. Jika harga berada dalam trend menaik, isyarat henti dikeluarkan apabila RSI rendah di bawah rata-rata bergerak cepat (RSI kurang dari 5), dan isyarat henti dikeluarkan apabila RSI tinggi di atas rata-rata bergerak cepat (RSI lebih besar daripada 95) dalam trend menurun.
Prinsip penangguhan kerugian selepas melakukan penarikan lebih banyak adalah, jika harga jatuh atau menembusi garis 10 hari lagi, berhentilah.
Kelebihan terbesar strategi ini adalah keupayaan untuk mengesan trend yang kuat. Rata-rata bergerak sendiri mempunyai fungsi penilaian trend yang baik. Strategi ini memanfaatkan sepenuhnya kelebihan garis rata-rata yang cepat dan perlahan, garis cepat menentukan arah trend jangka pendek, garis perlahan menentukan arah trend jangka panjang. Apabila garis cepat menembusi garis perlahan, menunjukkan bahawa harga saham berada dalam trend naik dalam jangka pendek dan jangka panjang, ini adalah isyarat pembelian yang lebih kuat.
Penyertaan RSI juga menambah kelebihan strategi. Gabungan RSI tinggi dan rendah dapat secara berkesan menghantar isyarat perdagangan ketika fenomena overbought dan oversold berlaku, dengan itu masuk ke dalam kemungkinan titik balik, meningkatkan keberkesanan strategi secara langsung.
Walaupun strategi ini mempunyai keupayaan trend yang kuat, tidak ada strategi penunjuk teknikal yang dapat mengelakkan kerugian sepenuhnya, dan masih ada risiko tertentu. Secara khusus, mungkin terdapat risiko seperti berikut:
Untuk mengurangkan risiko, parameter purata bergerak boleh disesuaikan, kombinasi parameter RSI dioptimumkan, jarak garis berhenti yang dibenarkan, saiz kedudukan yang dikawal dengan munasabah. Kombinasi parameter yang dioptimumkan harus disahkan dengan baik dalam pengukuran semula.
Strategi ini masih mempunyai ruang untuk pengoptimuman yang lebih lanjut, dengan tumpuan kepada aspek berikut:
Menambah purata bergerak yang menyesuaikan diri, menyesuaikan parameter purata bergerak secara automatik mengikut turun naik pasaran, menjadikannya lebih fleksibel.
Penambahan indikator kadar turun naik, seperti Brin Belt, dapat menangani keadaan pasaran dengan harga yang berfluktuasi.
Menambah algoritma pembelajaran mesin untuk mendapatkan kombinasi parameter yang lebih baik dan peraturan perdagangan melalui latihan AI, menjadikan strategi lebih bijak.
Menggabungkan pelbagai pasaran, meningkatkan jumlah sampel ujian, dan mengesahkan keberkesanan strategi antara pasaran yang berbeza.
Memperkenalkan modul analisis asas, yang dikombinasikan dengan dasar makro, peristiwa utama dan lain-lain untuk menilai pergerakan pasaran dan memberi asas kepada keputusan strategik.
Strategi terobosan medan kuasa adalah strategi rata-rata bergerak yang sangat praktikal. Ia menggunakan prinsip harga untuk menembusi garis rata-rata yang cepat dan perlahan untuk menilai trend, sambil membantu dengan indikator RSI untuk masuk dengan tepat. Kombinasi ini memanfaatkan sepenuhnya kelebihan garis rata dan indikator overbought dan oversold.
/*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)