SSL Saluran Backtester Strategi Dengan ATR dan Pengurusan Wang

Penulis:ChaoZhang, Tarikh: 2023-11-23 10:26:58
Tag:

img

Ringkasan

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.

Logika Strategi

Penunjuk 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=16dalam strategi ini.

ATR Stop Loss/Take Profit

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.5danatr_target_factor=1.0untuk 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

Pengurusan wang dicapai melaluiposition_size(pengukuran kedudukan tetap) danriskModul 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.

Analisis Kelebihan

  • Saluran SSL berkesan dalam menangkap isyarat pembalikan trend
  • Perhentian berasaskan ATR disesuaikan secara automatik berdasarkan turun naik
  • Pengurusan wang membantu mengawal risiko di semua perdagangan

Analisis Risiko

  • Isyarat saluran SSL mungkin tidak boleh dipercayai sepenuhnya, isyarat palsu boleh berlaku
  • Hentian ATR mungkin berakhir terlalu lebar atau terlalu ketat
  • Tetapan pengurusan wang yang tidak betul boleh membawa kepada kedudukan yang terlalu besar atau kecekapan yang rendah

Risiko ini boleh dikurangkan dengan:

  1. Menambah penapis untuk mengesahkan isyarat dan mengelakkan entri palsu
  2. Penyesuaian parameter tempoh ATR untuk paras stop loss/take profit yang optimum
  3. Ujian parameter pengurusan wang yang berbeza untuk saiz kedudukan yang ideal

Arahan pengoptimuman

Strategi ini boleh ditingkatkan dalam aspek berikut:

  1. Mengoptimumkan parameter saluran SSL untuk prestasi terbaik
  2. Mempertingkatkan atau menggantikan mekanisme menghentikan ATR
  3. Tambah penapis penunjuk untuk mengelakkan perdagangan yang tidak perlu
  4. Menggabungkan saiz kedudukan untuk memaksimumkan pulangan yang disesuaikan dengan risiko
  5. Parameter penyesuaian halus untuk instrumen yang berbeza
  6. Tambah alat kuantitatif untuk ujian yang lebih komprehensif

Dengan pengoptimuman sistematik, strategi ini boleh menjadi sistem perdagangan algoritma yang kukuh.

Kesimpulan

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)


Lebih lanjut