कनेक्टिकट कछुआ प्रणाली

लेखक:चाओझांग, दिनांक: 2023-11-06 10:23:12
टैगः

img

अवलोकन

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

व्यापारिक तर्क

  • डबल चलती औसत के निर्माण के लिए N1-दिवसीय उच्च (डिफ़ॉल्ट 20 दिन) और N2-दिवसीय उच्च (डिफ़ॉल्ट 55 दिन) का प्रयोग किया जाता है।
  • दोहरी चलती औसत बनाने के लिए N3-दिवसीय निम्न (डिफ़ॉल्ट 10 दिन) और N4-दिवसीय निम्न (डिफ़ॉल्ट 20 दिन) का प्रयोग किया जाता है।
  • बंद मूल्य N2-दिवसीय उच्च से अधिक होने पर लंबी स्थिति में जाएं। बंद मूल्य N4-दिवसीय निम्न से नीचे गिरने पर स्थिति बंद करें।
  • पिरामिड 5 अतिरिक्त लंबी पोजीशन तक, प्रत्येक पिछली प्रविष्टि मूल्य से 1 x एटीआर (डिफ़ॉल्ट 1) ऊपर।
  • प्रवेश मूल्य से नीचे N x ATR (डिफ़ॉल्ट 2) पर एक निश्चित स्टॉप लॉस सेट करें।
  • केवल पिछले व्यापार के बाद नई प्रविष्टि की अनुमति एक विजेता है।

लाभ विश्लेषण

इस रणनीति के फायदे:

  • ट्रेंड ट्रेडिंग सिद्धांत का पालन करता है और मध्यम से दीर्घकालिक रुझानों को पकड़ता है।
  • दोहरे एमए फिल्टर बनाते हैं, जिससे समेकन के दौरान अत्यधिक व्यापार से बचा जा सकता है।
  • स्टॉप लॉस सेटिंग उचित है, बहुत चौड़ी या बहुत संकीर्ण होने से बचें।
  • जोखिम-लाभ प्रोफ़ाइल को समायोजित करने के लिए पैरामीटर कॉन्फ़िगर करने योग्य हैं।
  • मजबूत रुझानों के दौरान अधिक लाभ के लिए पिरामिडिंग की अनुमति दें।

जोखिम विश्लेषण

कुछ जोखिम भी हैं:

  • जब रुझान उलट जाता है, तो समय पर बाहर निकलने में असमर्थ, जिससे बड़े नुकसान होते हैं।
  • बहुत अधिक पिरामिडिंग से व्यापार की आवृत्ति बढ़ जाती है।
  • गलत पैरामीटर ट्यूनिंग सिस्टम को बहुत आक्रामक या बहुत रूढ़िवादी बनाती है।
  • बैकटेस्ट पूर्वाग्रह, वास्तविक प्रदर्शन कम हो सकता है।

जोखिमों को निम्न द्वारा कम किया जा सकता हैः

  • नुकसान को कम करने के लिए MACD विचलन जैसे उलट संकेत जोड़ना।
  • मजबूत पैरामीटर अनुकूलन।
  • बड़ी हानि के बाद स्थिति के आकार को कम करने के लिए स्थिति आकार जोड़ना।

सुधार के क्षेत्र

इस रणनीति में निम्नलिखित तरीकों से सुधार किया जा सकता हैः

  • गिरती कीमतों से लाभ उठाने के लिए शॉर्ट ट्रेड लॉजिक जोड़ें।
  • मूल्य क्रिया के आधार पर स्टॉप को समायोजित करने के लिए स्टॉप लॉस अनुकूलन जोड़ें।
  • पिरामिड आकार को अनुकूलित करने के लिए स्थिति आकार मॉड्यूल जोड़ें.
  • झूठे संकेतों से बचने के लिए ADX जैसे प्रवृत्ति शक्ति सूचकांक को शामिल करें।
  • सुचारू वापसी के लिए मापदंडों का अनुकूलन करें।
  • स्लिप और कमीशन जैसी वास्तविक ट्रेडिंग लागतों पर विचार करें।

निष्कर्ष

रणनीति प्रवृत्ति का पालन करके लाभ प्राप्त करती है और इसके अच्छे बैकटेस्ट परिणाम होते हैं। लेकिन वास्तविक प्रदर्शन को मान्य करने की आवश्यकता है। लाइव ट्रेडिंग में इसे लागू करने से पहले पैरामीटर मजबूती, स्टॉप लॉस और स्थिति आकार पर आगे अनुकूलन की आवश्यकता होती है। कुल मिलाकर इसमें ध्वनि तर्क और सुधार की बहुत संभावना है।


/*backtest
start: 2022-10-30 00:00:00
end: 2023-11-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Turtle", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.1, pyramiding=5)

stopInput = input(2.0, "Stop N", step=.5)
pyramidInput = input(1, "Pyramid N", step=.5)
l1LongInput = input(20, "L1 Long", minval=5)
l2LongInput = input(55, "L2 Long", minval=5)
l1LongExitInput = input (10, "L1 Long Exit", minval=5)
l2LongExitInput = input (20, "L2 Long Exit", minval=5)

FromYear = input(2000, "From Year", minval=1900),   FromMonth = input(1, "From Month", minval=1, maxval=12),    FromDay = input(1, "From Day", minval=1, maxval=31)
ToYear = input(9999, "To Year", minval=1900),       ToMonth = input(1, "To Month", minval=1, maxval=12),        ToDay = input(1, "To Day", minval=1, maxval=31)
FromDate = timestamp(FromYear, FromMonth, FromDay, 00, 00),     ToDate = timestamp(ToYear, ToMonth, ToDay, 23, 59)
TradeDateIsAllowed() => time >= FromDate and time <= ToDate
l1Long = highest(l1LongInput)
l1LongExit = lowest(l1LongExitInput)
l2Long = highest(l2LongInput)
l2LongExit = lowest(l2LongExitInput)

// 
// ADX, +-DI
// https://www.tradingview.com/script/rlMJ05yl-ADX-and-DI-pine-script-3-0/
//
len = 14
th = 20
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
SmoothedTrueRange = 0.0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange
SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus = 0.0
SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus

DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = sma(DX, len)

// Back to Turtle

filter = true // not (DIPlus < ADX and DIMinus < ADX) and DIPlus > DIMinus
var win = false
var totalPrice = 0.0
var buyPrice = 0.0
var avgPrice = 0.0
var nextBuyPrice = 0.0
var stopPrice = 0.0
var totalBuys = 0

var bool inBuy = false
var float l1LongPlot = highest(l1LongInput)
var float l2LongPlot = highest(l2LongInput)

n = atr(14)

var mode = 'L1'
string longLevel = na

if not inBuy 
    l1LongPlot := highest(l1LongInput)[1]
    l2LongPlot := highest(l2LongInput)[1]
    
    if (close > l2Long[1] and filter)
        mode := 'L2'
        if TradeDateIsAllowed() 
            strategy.close_all()
            strategy.entry("long", strategy.long, comment="L2")
            longLevel := 'L2'

        win := false
        buyPrice := close
        totalBuys := 1
        totalPrice := buyPrice
        avgPrice := buyPrice
        stopPrice := close-(stopInput*n)
        nextBuyPrice := high+(pyramidInput*n)
        inBuy := true
    else 
        if (close > l1Long[1] and filter)
            mode := 'L1'
            if not win
                if TradeDateIsAllowed()
                    strategy.close_all()
                    strategy.entry("long", strategy.long, comment="L1")
                    longLevel := 'L1'
            win := false
            buyPrice := close
            totalBuys := 1
            totalPrice := buyPrice
            avgPrice := buyPrice
            stopPrice := close-(stopInput*n)
            nextBuyPrice := high+(pyramidInput*n)
            inBuy := true
        else 
            inBuy := false

else
    l1LongPlot := l1LongPlot[1]
    l2LongPlot := l2LongPlot[1]
    
    if close > nextBuyPrice and TradeDateIsAllowed() and totalBuys < 6
        strategy.entry("long", strategy.long, comment="LP")
        longLevel := 'P'
        stopPrice := close-(stopInput*n)
        nextBuyPrice := high+(pyramidInput*n)
        totalBuys := totalBuys + 1
        totalPrice := totalPrice + buyPrice
        avgPrice := totalPrice / totalBuys

    if (close < stopPrice) 
        inBuy := false
        if TradeDateIsAllowed()
            if (close >= avgPrice)
                longLevel := 'SG'
            else 
                longLevel := 'SR'
            strategy.close("long", strategy.long)
        win := false
        buyPrice := 0
        avgPrice := 0
    else
        if (mode == 'L1' and close > l2Long[1] and filter)
            if win
                inBuy := true
                win := false
                mode := 'L2'
                if TradeDateIsAllowed()
                    strategy.close_all()
                    longLevel := 'L2'
                    strategy.entry("long", strategy.long, comment="L2")
                buyPrice := close
                totalBuys := 1
                totalPrice := buyPrice
                avgPrice := buyPrice
                stopPrice := close-(stopInput*n)
                nextBuyPrice := close+(pyramidInput*n)
        else
            if (close < l1LongExit[1] or close < l2LongExit[1])
                inBuy := false
                if TradeDateIsAllowed()
                    strategy.close("long", strategy.long)
                if close < avgPrice
                    longLevel := 'SR'
                    win := false
                else
                    longLevel := 'SG'
                    win := true
                buyPrice := 0

plot(l1LongPlot, title="l1 long", linewidth=3, style=plot.style_stepline, color=color.green)
plot(l1LongExit[1], title="l1 exit", linewidth=3, style=plot.style_stepline, color=color.red)

plot(l2LongPlot, title="l2 long", linewidth=2, style=plot.style_stepline, color=color.green)
plot(l2LongExit[1], title="l2 exit", linewidth=2, style=plot.style_stepline, color=color.red)

plot(stopPrice, title="stop", linewidth=2, style=plot.style_stepline, color=color.purple)

plotarrow(longLevel == 'L1' ? 1 : 0, colordown=color.black, colorup=color.green, transp=40)
plotarrow(longLevel == 'L2' ? 1 : 0, colordown=color.black, colorup=color.purple, transp=40)
plotarrow(longLevel == 'SR' ? -1 : 0, colordown=color.red, colorup=color.purple, transp=40)
plotarrow(longLevel == 'SG' ? -1 : 0, colordown=color.green, colorup=color.purple, transp=40)




अधिक