
Strategi force field breakout adalah strategi perdagangan kuantitatif yang didasarkan pada rata-rata bergerak dan indeks yang relatif kuat. Strategi ini menilai arah tren pasar dengan mendeteksi harga yang menembus rata-rata bergerak yang penting, dan digabungkan dengan indikator RSI untuk menentukan waktu masuk.
Strategi force field breakout menggunakan dua rata-rata bergerak, yang pertama adalah EMA 10 periode sebagai rata-rata bergerak cepat, dan yang kedua adalah EMA 200 periode sebagai rata-rata bergerak lambat. Garis cepat mewakili tren harga saat ini, garis lambat mewakili tren harga jangka panjang.
Strategi ini juga menggabungkan indikator RSI untuk menentukan waktu masuk yang spesifik. Jika harga berada dalam tren naik, maka akan ada beberapa sinyal yang dikeluarkan ketika RSI berada di bawah rata-rata bergerak cepat (RSI kurang dari 5), dan jika harga berada dalam tren turun, maka akan ada sinyal yang dikeluarkan ketika RSI berada di atas rata-rata bergerak cepat (RSI lebih dari 95).
Prinsip stop loss setelah melakukan shorting adalah jika harga kembali turun atau menembus garis 10 hari, stop loss akan dilakukan.
Keuntungan terbesar dari strategi ini adalah kemampuan untuk melacak tren yang kuat. Rata-rata bergerak sendiri memiliki fungsi penilaian tren yang sangat baik. Strategi ini memanfaatkan sepenuhnya keuntungan dari garis rata-rata cepat dan lambat, garis cepat menentukan arah tren jangka pendek, garis lambat menentukan arah tren jangka panjang.
Penambahan indikator RSI juga menambah keunggulan strategi. Kombinasi RSI tinggi dan rendah dapat secara efektif mengirimkan sinyal perdagangan ketika terjadi overbought dan oversold, sehingga masuk ke dalam kemungkinan titik balik, meningkatkan efektivitas strategi di lapangan.
Meskipun strategi ini memiliki kemampuan untuk melacak tren yang kuat, tidak ada strategi indikator teknis yang dapat benar-benar menghindari kerugian, tetap ada risiko tertentu. Secara khusus, risiko mungkin sebagai berikut:
Untuk mengurangi risiko, parameter moving average dapat disesuaikan, kombinasi parameter RSI dapat dioptimalkan, jarak stop loss dapat dilepas dengan tepat, dan ukuran posisi dapat dikontrol secara wajar. Kombinasi parameter yang dioptimalkan harus diverifikasi dengan baik dalam pengujian ulang.
Strategi ini masih memiliki ruang untuk pengoptimalan lebih lanjut, terutama berfokus pada beberapa aspek berikut:
Menambahkan Adaptive Moving Average, yang secara otomatis menyesuaikan parameter moving average sesuai dengan fluktuasi pasar, sehingga lebih fleksibel.
Menambahkan indikator volatilitas, seperti BRI, dapat secara efektif menanggapi kondisi pasar dengan harga yang sangat berfluktuasi.
Menambahkan algoritma pembelajaran mesin, mendapatkan kombinasi parameter yang lebih baik dan aturan perdagangan melalui pelatihan AI, membuat strategi lebih cerdas.
Portfolio multi-pasar, perluasan jumlah sampel uji, dan validasi strategi di antara pasar yang berbeda.
Memperkenalkan modul analisis fundamental, yang digabungkan dengan kebijakan makro, peristiwa besar, dan lain-lain untuk menilai tren pasar, dan memberikan dasar untuk keputusan strategis.
Strategi force field breakout adalah strategi moving average yang sangat praktis. Ini menggunakan prinsip harga untuk menerobos garis rata-rata yang cepat dan lambat untuk menilai tren, sambil didukung dengan indikator RSI untuk masuk dengan tepat. Kombinasi ini memanfaatkan sepenuhnya keunggulan garis rata dan indikator overbought 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)