संसाधन लोड हो रहा है... लोड करना...

बहु-अवधि सुपरट्रेंड डायनेमिक पिरामिडिंग ट्रेडिंग रणनीति

लेखक:चाओझांग, दिनांकः 2025-01-06 17:02:35
टैगःएटीआरएसटीSL

img

अवलोकन

यह एक पिरामिड ट्रेडिंग रणनीति है जो कई सुपरट्रेंड संकेतकों पर आधारित है। यह विभिन्न अवधियों और गुणकों के साथ तीन सुपरट्रेंड संकेतकों का उपयोग करके उच्च-संभाव्यता वाले व्यापारिक अवसरों की पहचान करता है। यह रणनीति जोखिमों को नियंत्रित करते हुए लाभ को अधिकतम करने के लिए गतिशील स्टॉप-लॉस और लचीली निकास शर्तों के साथ संयुक्त तीन पदों तक की अनुमति देने वाली गतिशील पिरामिड प्रविष्टियों का उपयोग करती है।

रणनीतिक सिद्धांत

यह रणनीति तीन सुपरट्रेंड संकेतकों का उपयोग करती है जिनकी अलग-अलग पैरामीटर सेटिंग्स होती हैंः तेज, मध्यम और धीमा। प्रवेश संकेत इन संकेतकों के क्रॉसओवर और प्रवृत्ति दिशाओं पर आधारित होते हैं, तीन-स्तर वाले पिरामिड दृष्टिकोण को लागू करते हैंः पहला प्रवेश जब तेज संकेतक नीचे की ओर इशारा करता है जबकि मध्यम ऊपर की ओर इशारा करता है और धीमा अंक नीचे की ओर इशारा करता है; दूसरा प्रवेश ब्रेकआउट के माध्यम से जब तेज और मध्यम दोनों संकेतक नीचे की ओर इशारा करते हैं; तीसरा प्रवेश ब्रेकआउट के माध्यम से जब कीमत नई ऊंचाइयों को बनाती है। एक्जिट्स को गतिशील स्टॉप-लॉस, औसत मूल्य स्टॉप और समग्र प्रवृत्ति उलट सहित कई तंत्रों के माध्यम से प्रबंधित किया जाता है।

रणनीतिक लाभ

  1. एकाधिक पुष्टिकरण तंत्र व्यापार की सटीकता में सुधार करता है
  2. पिरामिड पद्धति से प्रचलित बाजारों में मुनाफे में काफी वृद्धि होती है
  3. गतिशील स्टॉप-लॉस तंत्र लाभ की रक्षा करता है जबकि रुझानों को विकसित करने की अनुमति देता है
  4. लचीले बाहर निकलने के तंत्र विभिन्न बाजार स्थितियों के अनुकूल हैं
  5. प्रतिशत आधारित स्थिति आकार विभिन्न पूंजी आकारों के अनुकूल होता है

रणनीतिक जोखिम

  1. विभिन्न बाजारों में अक्सर झूठे संकेत उत्पन्न कर सकता है
  2. पिरामिडिंग अचानक रुझान उलटने के दौरान बड़े ड्रॉडाउन का कारण बन सकती है
  3. कई संकेतकों के परिणामस्वरूप संकेतों में देरी हो सकती है
  4. पैरामीटर अनुकूलन को ओवरफिटिंग जोखिम का सामना करना पड़ता है इन जोखिमों को नियंत्रित करने के लिए सख्त धन प्रबंधन और बैकटेस्टिंग लागू करने की सिफारिश की जाती है।

अनुकूलन दिशाएँ

  1. अस्थिरता के आधार पर पैरामीटर को गतिशील रूप से समायोजित करने के लिए बाजार वातावरण फ़िल्टर जोड़ें
  2. प्रवेश दूरी और स्थिति आकार आवंटन का अनुकूलन करें
  3. झूठे संकेतों को फ़िल्टर करने के लिए अतिरिक्त तकनीकी संकेतक पेश करें
  4. बाजार परिवर्तनों के अनुकूल अनुकूलन पैरामीटर तंत्र विकसित करना
  5. लाभ लक्ष्यों और समय आधारित स्टॉप को जोड़कर बाहर निकलने के तंत्र को बेहतर बनाना

सारांश

रणनीति कई सुपरट्रेंड संकेतकों और पिरामिडिंग प्रविष्टियों के माध्यम से रुझान के अवसरों को पकड़ती है, जबकि गतिशील स्टॉप-लॉस और लचीले निकास तंत्र के साथ जोखिमों को नियंत्रित करती है। कुछ सीमाओं के बावजूद, निरंतर अनुकूलन और सख्त जोखिम नियंत्रण के साथ, रणनीति अच्छा व्यावहारिक अनुप्रयोग मूल्य दिखाती है।


/*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)


संबंधित

अधिक