Strategi Perdagangan Piramida Dinamis Super Tren Multi-periode

ATR ST SL
Tanggal Pembuatan: 2025-01-06 17:02:35 Akhirnya memodifikasi: 2025-01-06 17:02:35
menyalin: 0 Jumlah klik: 460
1
fokus pada
1617
Pengikut

Strategi Perdagangan Piramida Dinamis Super Tren Multi-periode

Ringkasan

Ini adalah strategi perdagangan piramida berdasarkan beberapa indikator Supertrend. Ia mengidentifikasi peluang perdagangan probabilitas tinggi dengan menetapkan indikator Supertrend dengan tiga periode dan pengali yang berbeda. Strategi ini mengadopsi metode penambahan posisi piramida dinamis, memungkinkan hingga tiga entri, dan menggabungkan stop loss dinamis dan kondisi keluar yang fleksibel untuk mencapai maksimalisasi keuntungan dan pengendalian risiko.

Prinsip Strategi

Strategi ini menggunakan indikator Supertrend dengan tiga pengaturan parameter yang berbeda: cepat, sedang, dan lambat. Sinyal masuk didasarkan pada persimpangan ketiga indikator ini dan arah tren, menggunakan gaya piramida tiga lapis untuk menambahkan posisi: lapisan pertama memasuki pasar ketika indikator cepat turun, indikator sedang naik, dan indikator lambat turun. indikator bergerak ke bawah; lapisan kedua memasuki pasar ketika indikator cepat bergerak ke atas. Memasuki pasar melalui terobosan ketika indikator kecepatan sedang dan indikator kecepatan sedang bergerak ke bawah bersama-sama; level ketiga adalah memasuki pasar melalui terobosan terobosan saat pasar mencapai titik tertinggi baru. Keluar menggunakan beberapa mekanisme seperti stop loss dinamis, stop loss harga rata-rata, dan pembalikan tren keseluruhan.

Keunggulan Strategis

  1. Mekanisme konfirmasi ganda meningkatkan akurasi transaksi
  2. Piramida dapat meningkatkan keuntungan secara signifikan di pasar yang sedang tren
  3. Mekanisme stop loss dinamis melindungi keuntungan sambil memberikan tren ruang yang cukup untuk berkembang
  4. Mekanisme keluar yang fleksibel dapat mengatasi berbagai lingkungan pasar dengan lebih baik
  5. Gunakan kontrol posisi persentase untuk beradaptasi dengan ukuran dana yang berbeda

Risiko Strategis

  1. Sinyal palsu sering terjadi di pasar yang bergejolak
  2. Piramida dapat menyebabkan penurunan yang lebih besar ketika tren tiba-tiba berbalik
  3. Beberapa indikator dapat menyebabkan kelambatan sinyal
  4. Optimasi parameter memiliki risiko overfitting Disarankan untuk menggunakan manajemen keuangan yang ketat dan pengujian ulang untuk mengendalikan risiko ini.

Arah optimasi strategi

  1. Tambahkan mekanisme penyaringan lingkungan pasar untuk menyesuaikan parameter secara dinamis di bawah lingkungan volatilitas yang berbeda
  2. Optimalkan interval antara penambahan posisi dan proporsi alokasi posisi
  3. Perkenalkan lebih banyak indikator teknis untuk menyaring sinyal palsu
  4. Mengembangkan mekanisme parameter adaptif untuk beradaptasi dengan perubahan pasar
  5. Tingkatkan mekanisme keluar, Anda dapat mempertimbangkan untuk menambahkan target keuntungan dan penghentian waktu kerugian

Meringkaskan

Strategi ini menangkap peluang tren melalui berbagai indikator Supertrend dan metode penambahan piramida, dan mengendalikan risiko dengan stop-loss yang dinamis dan mekanisme keluar yang fleksibel. Meskipun ada keterbatasan tertentu, melalui pengoptimalan berkelanjutan dan pengendalian risiko yang ketat, strategi ini memiliki nilai aplikasi praktis yang baik.

Kode Sumber Strategi
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy('4Vietnamese 3x Supertrend', overlay=true, max_bars_back=1000, initial_capital = 10000000000, slippage = 2, commission_type = strategy.commission.percent, commission_value = 0.013, default_qty_type=strategy.percent_of_equity, default_qty_value = 33.33, pyramiding = 3, margin_long = 0, margin_short = 0)

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Inputs

// Supertrend Settings
STATRLENGTH1 = input.int(10, title='Fast Supertrend ATR Length', group='SUPERTREND SETTINGS')
STATRMULT1 = input.float(1, title='Fast Supertrend ATR Multiplier', group='SUPERTREND SETTINGS')
STATRLENGTH2 = input.int(11, title='Medium Supertrend ATR Length', group='SUPERTREND SETTINGS')
STATRMULT2 = input.float(2, title='Medium Supertrend ATR Multiplier', group='SUPERTREND SETTINGS')
STATRLENGTH3 = input.int(12, title='Slow Supertrend ATR Length', group='SUPERTREND SETTINGS')
STATRMULT3 = input.float(3, title='Slow Supertrend ATR Multiplier', group='SUPERTREND SETTINGS')

isUseHighestOf2RedCandleSetup = input.bool(false, group = "Setup Filters")


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Calculations 
[superTrend1, dir1] = ta.supertrend(STATRMULT1, STATRLENGTH1)
[superTrend2, dir2] = ta.supertrend(STATRMULT2, STATRLENGTH2)
[superTrend3, dir3] = ta.supertrend(STATRMULT3, STATRLENGTH3)

// directionST1 = dir1 == 1 and dir1[1] == 1 ? false : dir1 == -1 and dir1[1] == -1 ? true : false
// directionST2 = dir2 == 1 and dir2[1] == 1 ? false : dir2 == -1 and dir2[1] == -1 ? true : false
// directionST3 = dir3 == 1 and dir3[1] == 1 ? false : dir3 == -1 and dir3[1] == -1 ? true : false


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Calculate highest from supertrend1 uptrend
var float highestGreen = 0
if dir1 < 0 and highestGreen == 0 and (isUseHighestOf2RedCandleSetup ? close < open : true)
    highestGreen := high
if highestGreen > 0 and (isUseHighestOf2RedCandleSetup ? close < open : true)
    if high > highestGreen
        highestGreen := high
if dir1 >= 0
    highestGreen := 0


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Entry SL
var entrySL4Long1 = false
var entrySL4Long2 = false
var entrySL4Long3 = false

isUseEntrySL = input.bool(true, group = "Entry SL Option")
dataToCalculate = input.source(low, group = "Entry SL Option")

if isUseEntrySL and (dir1 > 0 and dir2 < 0 and dir3 < 0)
    if strategy.opentrades >= 1
        if dataToCalculate > strategy.opentrades.entry_price(0)
            entrySL4Long1 := true
        else 
            entrySL4Long1 := false

        if entrySL4Long1 and close > strategy.opentrades.entry_price(0)
            strategy.exit('exit1', from_entry = 'long1', stop = strategy.opentrades.entry_price(0))

    if strategy.opentrades >= 2 
        if dataToCalculate > strategy.opentrades.entry_price(1)
            entrySL4Long2 := true
        else 
            entrySL4Long2 := false
    
        if entrySL4Long2 and close > strategy.opentrades.entry_price(1)
            strategy.exit('exit2', from_entry = 'long2', stop = strategy.opentrades.entry_price(1))   

    if strategy.opentrades >= 3 
        if dataToCalculate > strategy.opentrades.entry_price(2) 
            entrySL4Long3 := true
        else 
            entrySL4Long3 := false
    
        if entrySL4Long3 and close >  strategy.opentrades.entry_price(2)
            strategy.exit('exit3', from_entry = 'long3', stop = strategy.opentrades.entry_price(2))

if strategy.closedtrades > strategy.closedtrades[1]
    if strategy.closedtrades.exit_id(strategy.closedtrades-1) == 'exit3'
        entrySL4Long3 := false
    if strategy.closedtrades.exit_id(strategy.closedtrades-1) == 'exit2'
        entrySL4Long2 := false
    if strategy.closedtrades.exit_id(strategy.closedtrades-1) == 'exit1'
        entrySL4Long1 := false

    
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Entry
if dir3 < 0
    if dir2 > 0 and dir1 < 0
        strategy.entry('long1', strategy.long)
    else if dir2 < 0
        strategy.entry('long2', strategy.long, stop=superTrend1)
else
    if dir1 < 0 and highestGreen > 0
        strategy.entry('long3', strategy.long, stop=highestGreen)


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Exit
isUseAllDowntrendExit = input.bool(true, group = "Exit Type")
if isUseAllDowntrendExit and dir3 > 0 and dir2 > 0 and dir1 > 0 and close < open
    strategy.close_all()

isUseAvgPriceInLoss = input.bool(true, group = "Exit Type")
if isUseAvgPriceInLoss and strategy.position_avg_price > close //and strategy.position_avg_price <= close[1]
    //  and (dir1 > 0 or dir2 > 0 or dir3 > 0)
    //  and strategy.opentrades >= 1  
    //  and strategy.opentrades >= 3  
    strategy.close_all()

isUseAllPositionsInLoss = input.bool(false, group = "Exit Type")
if isUseAllPositionsInLoss
      and (
       false
         or (strategy.opentrades == 1 and ((not na(strategy.opentrades.entry_price(0))) and strategy.opentrades.entry_price(0) > close))

         or (strategy.opentrades == 1 and ((not na(strategy.opentrades.entry_price(0))) and strategy.opentrades.entry_price(0) > close)
             and ((not na(strategy.opentrades.entry_price(1))) and strategy.opentrades.entry_price(1) > close))

         or (strategy.opentrades == 1 and ((not na(strategy.opentrades.entry_price(0))) and strategy.opentrades.entry_price(0) > close)
             and ((not na(strategy.opentrades.entry_price(1))) and strategy.opentrades.entry_price(1) > close)
             and ((not na(strategy.opentrades.entry_price(2))) and strategy.opentrades.entry_price(2) > close))
         )
    strategy.close_all()


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Plot
plot(superTrend1, title='Fast Supertrend',      color=dir1 == 1 and dir1[1] == 1 ? color.red : dir1 == -1 and dir1[1] == -1 ? color.green : na)
plot(superTrend2, title='Medium Supertrend',    color=dir2 == 1 and dir2[1] == 1 ? color.red : dir2 == -1 and dir2[1] == -1 ? color.green : na)
plot(superTrend3, title='Slow Supertrend',      color=dir3 == 1 and dir3[1] == 1 ? color.red : dir3 == -1 and dir3[1] == -1 ? color.green : na)