Strategi Backtester Saluran SSL Dengan ATR dan Manajemen Uang

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

img

Gambaran umum

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.

Logika Strategi

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

ATR Stop Loss/Take Profit

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

Pengelolaan uang dicapai melaluiposition_size(ukuran posisi tetap) danriskModul 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.

Analisis Keuntungan

  • Saluran SSL efektif dalam menangkap sinyal pembalikan tren
  • Stop berbasis ATR disesuaikan secara otomatis berdasarkan volatilitas
  • Pengelolaan uang membantu mengendalikan risiko di semua perdagangan

Analisis Risiko

  • Sinyal saluran SSL mungkin tidak sepenuhnya dapat diandalkan, sinyal palsu dapat terjadi
  • Stop ATR mungkin berakhir terlalu lebar atau terlalu ketat
  • Pengelolaan uang yang tidak tepat dapat menyebabkan posisi yang terlalu besar atau efisiensi rendah

Risiko ini dapat dikurangi dengan:

  1. Menambahkan filter untuk mengkonfirmasi sinyal dan menghindari entri palsu
  2. Pengaturan parameter periode ATR untuk tingkat stop loss/take profit yang optimal
  3. Pengujian parameter manajemen uang yang berbeda untuk ukuran posisi yang ideal

Arahan Optimasi

Strategi ini dapat ditingkatkan dalam hal berikut:

  1. Mengoptimalkan parameter saluran SSL untuk kinerja terbaik
  2. Meningkatkan atau mengganti mekanisme menghentikan ATR
  3. Tambahkan indikator penyaringan untuk menghindari perdagangan yang tidak perlu
  4. Menggabungkan ukuran posisi untuk memaksimalkan pengembalian yang disesuaikan dengan risiko
  5. Parameter fine tuning untuk instrumen yang berbeda
  6. Menambahkan alat kuantitatif untuk pengujian yang lebih komprehensif

Dengan optimasi sistematis, strategi ini dapat menjadi sistem perdagangan algoritmik yang kuat.

Kesimpulan

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)


Lebih banyak