Strategi Perdagangan Piramid Dinamik Trend Super pelbagai tempoh

ATR ST SL
Tarikh penciptaan: 2025-01-06 17:02:35 Akhirnya diubah suai: 2025-01-06 17:02:35
Salin: 0 Bilangan klik: 460
1
fokus pada
1617
Pengikut

Strategi Perdagangan Piramid Dinamik Trend Super pelbagai tempoh

Gambaran keseluruhan

Ini adalah strategi perdagangan piramid berdasarkan pelbagai petunjuk Supertrend. Ia mengenal pasti peluang dagangan berkemungkinan tinggi dengan menetapkan penunjuk Supertrend dengan tiga tempoh dan pengganda yang berbeza. Strategi ini menggunakan kaedah penambahan kedudukan piramid dinamik, membenarkan sehingga tiga penyertaan, dan menggabungkan henti rugi dinamik dan syarat keluar yang fleksibel untuk mencapai pemaksimuman keuntungan dan kawalan risiko.

Prinsip Strategi

Strategi ini menggunakan penunjuk Supertrend dengan tiga tetapan parameter berbeza: cepat, sederhana dan perlahan. Isyarat kemasukan adalah berdasarkan persimpangan ketiga-tiga penunjuk ini dan arah aliran, menggunakan gaya piramid tiga lapisan untuk menambah kedudukan: lapisan pertama memasuki pasaran apabila penunjuk pantas ke bawah, penunjuk sederhana menaik, dan perlahan penunjuk ke bawah; lapisan kedua memasuki pasaran apabila penunjuk pantas ke atas Masuk ke pasaran melalui penembusan apabila penunjuk kelajuan sederhana dan penunjuk kelajuan sederhana bergerak ke bawah bersama-sama; penembusan apabila pasaran mencapai tahap tinggi baru. Keluar menggunakan pelbagai mekanisme seperti henti rugi dinamik, henti rugi harga purata dan pembalikan arah aliran keseluruhan.

Kelebihan Strategik

  1. Mekanisme pengesahan berbilang meningkatkan ketepatan transaksi
  2. Pyramiding boleh meningkatkan keuntungan dengan ketara dalam pasaran trend
  3. Mekanisme henti rugi dinamik melindungi keuntungan sambil memberi trend ruang yang cukup untuk berkembang
  4. Mekanisme keluar yang fleksibel boleh mengatasi persekitaran pasaran yang berbeza dengan lebih baik
  5. Gunakan kawalan kedudukan peratusan untuk menyesuaikan diri dengan saiz dana yang berbeza

Risiko Strategik

  1. Isyarat palsu yang kerap mungkin berlaku dalam pasaran yang tidak menentu
  2. Pyramiding boleh membawa kepada pengeluaran yang lebih besar apabila trend tiba-tiba berbalik
  3. Penunjuk berbilang boleh menyebabkan ketinggalan isyarat
  4. Pengoptimuman parameter mempunyai risiko overfitting Adalah disyorkan untuk menggunakan pengurusan wang yang ketat dan ujian belakang untuk mengawal risiko ini.

Arah pengoptimuman strategi

  1. Tambah mekanisme penapisan persekitaran pasaran untuk melaraskan parameter secara dinamik di bawah persekitaran turun naik yang berbeza
  2. Optimumkan selang antara menambah kedudukan dan perkadaran peruntukan kedudukan
  3. Memperkenalkan lebih banyak penunjuk teknikal untuk menapis isyarat palsu
  4. Membangunkan mekanisme parameter penyesuaian untuk menyesuaikan diri dengan perubahan pasaran
  5. Memperbaiki mekanisme keluar, anda boleh mempertimbangkan untuk menambah sasaran keuntungan dan kerugian masa berhenti

ringkaskan

Strategi ini menangkap peluang aliran melalui pelbagai penunjuk Supertrend dan kaedah penambahan piramid, dan mengawal risiko dengan mekanisme henti rugi dinamik dan keluar yang fleksibel. Walaupun terdapat batasan tertentu, melalui pengoptimuman berterusan dan kawalan risiko yang ketat, strategi ini mempunyai nilai aplikasi praktikal yang baik.

Kod 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)