Ini adalah strategi backtesting berdasarkan penunjuk saluran SSL, bersepadu dengan fungsi seperti ATR stop loss, ATR mengambil keuntungan dan pengurusan wang untuk memudahkan ujian yang lebih komprehensif mengenai strategi saluran SSL.
Indikator saluran SSL terdiri daripada saluran midline dan saluran band. saluran midline mengandungi trek atas dan trek bawah, yang biasanya sederhana bergerak purata harga tinggi dan rendah dalam tempoh melihat kembali. saluran band dibentuk antara trek atas dan bawah.
Apabila harga mendekati band atas, ia menunjukkan keadaan overbought; apabila harga mendekati band bawah, ia menandakan keadaan oversold.
Parameter saluran SSL ditetapkan padassl_period=16
dalam strategi ini.
Julat Benar Purata (ATR) mengukur turun naik pasaran dan boleh digunakan untuk menentukan tahap stop loss dan mengambil keuntungan.
Strategi ini menggunakan ATR 14 tempoh (atr_period=14
) dan pengganda dinamikatr_stop_factor=1.5
danatr_target_factor=1.0
untuk menetapkan stop loss adaptif dan mengambil keuntungan berdasarkan turun naik.
Ia juga memeriksa sama ada instrumen mempunyai ketepatan 2-desimal (two_digit
) untuk menyesuaikan berhenti dan sasaran dengan sewajarnya untuk pasangan seperti emas dan JPY.
Pengurusan wang dicapai melaluiposition_size
(pengukuran kedudukan tetap) danrisk
Modul pengurusan wang akan diaktifkan apabilause_mm=true
.
Tujuan adalah untuk menentukan saiz kedudukan yang optimum untuk setiap perdagangan. Dengan menggunakan risiko tetap per perdagangan, saiz kedudukan yang dibenarkan akan dikira secara dinamik berdasarkan ekuiti akaun untuk mengehadkan kerugian pada setiap perdagangan.
Risiko ini boleh dikurangkan dengan:
Strategi ini boleh ditingkatkan dalam aspek berikut:
Dengan pengoptimuman sistematik, strategi ini boleh menjadi sistem perdagangan algoritma yang kukuh.
Strategi ini menggabungkan saluran SSL untuk trend, ATR untuk kawalan risiko, dan pengurusan wang untuk saiz kedudukan. Ujian balik komprehensif memudahkan menilai dan meningkatkan strategi ke dalam sistem perdagangan automatik. Terdapat juga ruang untuk penambahbaikan seperti menambah penapis, mengoptimumkan parameter dan memperluaskan fungsi. Secara keseluruhan, ini membentuk asas yang kukuh untuk membina strategi perdagangan algoritma.
/*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)