Strategi Force Breakthrough adalah strategi perdagangan kuantitatif yang didasarkan pada moving average dan Relative Strength Index (RSI). Strategi ini mendeteksi arah tren pasar dengan memantau terobosan harga dari moving average utama dan menggunakan indikator RSI untuk menentukan sinyal masuk.
Strategi Force Breakthrough menggunakan dua rata-rata bergerak. Yang pertama adalah EMA 10 periode sebagai rata-rata bergerak cepat. Yang kedua adalah EMA 200 periode sebagai rata-rata bergerak lambat. Garis cepat mewakili tren harga saat ini dan garis lambat mewakili tren harga jangka panjang. Ketika harga naik dan menembus di atas garis 10 hari, itu adalah sinyal bullish. Ketika harga turun dan menembus di bawah garis 10 hari, itu adalah sinyal bearish.
Strategi ini juga menggabungkan indikator RSI untuk menentukan momen masuk tertentu. Jika harga berada dalam tren naik dan titik rendah RSI muncul di bawah rata-rata bergerak cepat (RSI turun di bawah 5), sinyal panjang dipicu. Jika harga berada dalam tren menurun dan titik tinggi RSI muncul di atas rata-rata bergerak cepat (RSI melebihi 95), sinyal pendek dipicu.
Prinsip stop loss setelah mengambil posisi panjang/pendek adalah untuk keluar dari posisi jika harga kembali melanggar rata-rata bergerak 10 hari.
Keuntungan terbesar dari strategi ini adalah kemampuan mengikuti tren yang kuat. Rata-rata bergerak sendiri memiliki fungsionalitas menilai tren yang sangat baik. Strategi ini memanfaatkan sepenuhnya kekuatan garis cepat dan lambat di mana garis cepat menilai tren jangka pendek dan garis lambat menilai tren jangka panjang. Ketika garis cepat memiliki penetrasi ke atas dari garis lambat, itu menunjukkan baik tren naik jangka pendek dan jangka panjang, yang merupakan sinyal beli yang kuat.
Penambahan indikator RSI juga meningkatkan keuntungan strategi. Menggabungkan titik tinggi dan rendah RSI dapat secara efektif mengeluarkan sinyal perdagangan ketika kondisi overbought atau oversold terjadi, memungkinkan partisipasi pada titik pembalikan potensial untuk meningkatkan kinerja aktual.
Meskipun strategi memiliki kemampuan pelacakan tren yang relatif kuat, tidak ada strategi indikator teknis yang dapat sepenuhnya menghindari kerugian.
Ketika harga berfluktuasi dengan keras, sinyal perdagangan yang dihasilkan oleh rata-rata bergerak mungkin tertinggal.
Indikator RSI rentan terhadap divergensi yang dapat menyebabkan penilaian sinyal perdagangan yang salah.
Parameter yang tidak tepat dalam operasi jangka panjang dapat menyebabkan perdagangan berlebihan.
Untuk mengurangi risiko, parameter seperti moving average dan RSI dapat disesuaikan dan dioptimalkan, rentang stop-loss dapat cukup longgar, ukuran posisi dapat dikontrol dengan tepat.
Ada ruang untuk optimalisasi strategi lebih lanjut, terutama berfokus pada:
Tambahkan rata-rata bergerak adaptif untuk menyesuaikan parameter secara otomatis berdasarkan volatilitas pasar untuk meningkatkan fleksibilitas.
Masukkan indikator volatilitas seperti Bollinger Bands untuk mengatasi perubahan harga pasar yang keras.
Meningkatkan algoritma pembelajaran mesin melalui pelatihan AI untuk kombinasi parameter yang lebih baik dan aturan perdagangan untuk meningkatkan otomatisasi.
Memperluas sampel pengujian melalui portofolio multi-pasar untuk memvalidasi efektivitas lintas pasar.
Memperkenalkan modul analisis fundamental berdasarkan kebijakan makro, peristiwa utama, dll untuk memberikan dukungan keputusan strategi.
Strategi Force Breakthrough adalah strategi praktis yang didasarkan pada moving average. Strategi ini menilai tren melalui penetrasi harga rata-rata bergerak cepat dan lambat dan dengan tepat memasuki pasar dengan bantuan indikator RSI. Kombinasi ini sepenuhnya memanfaatkan kekuatan rata-rata bergerak dan indikator overbought / oversold. Strategi ini divalidasi di berbagai pasar dengan pengembalian yang stabil dan risiko yang dapat dikendalikan. Ini adalah strategi perdagangan kuantitatif yang disarankan. Optimasi lebih lanjut berpotensi meningkatkan kinerja strategi.
/*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)