Ini adalah strategi backtesting berdasarkan indikator saluran SSL, terintegrasi dengan fungsi seperti ATR stop loss, ATR take profit dan manajemen uang untuk memfasilitasi pengujian yang lebih komprehensif pada strategi saluran SSL.
Indikator saluran SSL terdiri dari saluran midline dan saluran band. saluran midline berisi jalur atas dan jalur bawah, yang biasanya sederhana bergerak rata-rata harga tinggi dan rendah selama periode lookback. saluran band dibentuk antara jalur atas dan bawah.
Ketika harga mendekati band atas, itu menunjukkan kondisi overbought; ketika harga mendekati band bawah, itu menandakan kondisi oversold.
Parameter saluran SSL diatur kessl_period=16
dalam strategi ini.
Rata-rata True Range (ATR) mengukur volatilitas pasar dan dapat digunakan untuk menentukan tingkat stop loss dan take profit.
Strategi ini menggunakan ATR 14 periode (atr_period=14
) dan pengganda dinamisatr_stop_factor=1.5
danatr_target_factor=1.0
untuk mengatur stop loss adaptif dan mengambil keuntungan berdasarkan volatilitas.
Hal ini juga memeriksa apakah instrumen memiliki presisi 2-desimal (two_digit
) untuk menyesuaikan stop dan target sesuai untuk pasangan seperti emas dan JPY.
Pengelolaan uang dicapai melaluiposition_size
(ukuran posisi tetap) danrisk
Modul manajemen uang akan diaktifkan ketikause_mm=true
.
Dengan menggunakan persentase risiko tetap per perdagangan, ukuran posisi yang diizinkan akan dihitung secara dinamis berdasarkan ekuitas akun untuk membatasi kerugian pada setiap perdagangan.
Risiko ini dapat dikurangi dengan:
Strategi ini dapat ditingkatkan dalam hal berikut:
Dengan optimasi sistematis, strategi ini dapat menjadi sistem perdagangan algoritmik yang kuat.
Strategi ini menggabungkan saluran SSL untuk tren, ATR untuk pengendalian risiko, dan manajemen uang untuk ukuran posisi. backtesting komprehensif memfasilitasi evaluasi dan peningkatan strategi menjadi sistem perdagangan otomatis. Ada juga ruang untuk perbaikan seperti menambahkan filter, mengoptimalkan parameter dan memperluas fungsionalitas. Secara keseluruhan, ini membentuk dasar yang kuat untuk membangun strategi perdagangan algoritmik.
/*backtest start: 2023-10-23 00:00:00 end: 2023-11-22 00:00:00 period: 2h 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/ // © comiclysm //@version=4 strategy("SSL Backtester", overlay=false) //--This strategy will simply test the effectiveness of the SSL using //--money management and an ATR-derived stop loss //--USER INPUTS two_digit = input(false, "Check this for 2-digit pairs (JPY, Gold, Etc)") ssl_period = input(16, "SSL Period") atr_period = input(14, "ATR Period") atr_stop_factor = input(1.5, "ATR Stop Loss Factor") atr_target_factor = input(1.0, "ATR Target Factor") use_mm = input(true, "Check this to use Money Management") position_size = input(1000, "Position size (for Fixed Risk)") risk = input(0.01, "Risk % in Decimal Form") //--INDICATORS------------------------------------------------------------ //--SSL sma_high = sma(high, ssl_period) sma_low = sma(low, ssl_period) ssl_value = 0 ssl_value := close > sma_high ? 1 : close < sma_low ? -1 : ssl_value[1] ssl_low = ssl_value < 0 ? sma_high : sma_low ssl_high = ssl_value < 0 ? sma_low : sma_high //--Average True Range atr = atr(atr_period) //--TRADE LOGIC---------------------------------------------------------- signal_long = ssl_value > 0 and ssl_value[1] < 0 signal_short = ssl_value < 0 and ssl_value[1] > 0 //--RISK MANAGMENT------------------------------------------------------- strategy.initial_capital = 50000 balance = strategy.netprofit + strategy.initial_capital risk_pips = atr*10000*atr_stop_factor if(two_digit) risk_pips := risk_pips / 100 risk_in_value = balance * risk point_value = syminfo.pointvalue risk_lots = risk_in_value / point_value / risk_pips final_risk = use_mm ? risk_lots * 10000 : position_size //--TRADE EXECUTION----------------------------------------------------- if (signal_long) stop_loss = close - atr * atr_stop_factor target = close + atr * atr_target_factor strategy.entry("Long", strategy.long, final_risk) strategy.exit("X", "Long", stop=stop_loss, limit=target) if (signal_short) stop_loss = close + atr * atr_stop_factor target = close - atr * atr_target_factor strategy.entry("Short", strategy.short, final_risk) strategy.exit("X", "Short", stop=stop_loss, limit=target) //--PLOTTING----------------------------------------------------------- plot(ssl_low, "SSL", color.red, linewidth=1) plot(ssl_high, "SSL", color.lime, linewidth=1)