स्लाइडिंग स्टॉप रणनीति


निर्माण तिथि: 2023-10-07 16:11:45 अंत में संशोधित करें: 2023-10-07 16:11:45
कॉपी: 0 क्लिक्स: 410
1
ध्यान केंद्रित करना
1166
समर्थक

अवलोकन

इस रणनीति का उपयोग कर केलमैन फिल्टर के साथ कीमतों को ट्रैक करने के लिए किया जाता है और स्टॉप लाइन का उपयोग करके स्टॉप पॉइंट को गतिशील रूप से समायोजित किया जाता है, जिससे स्लाइडिंग स्टॉप की अनुमति मिलती है।

सिद्धांत

इस रणनीति का उपयोग कर केलमैन फ़िल्टर वास्तविक समय में कीमतों को ट्रैक करने के लिए. केलमैन फ़िल्टर में दो समीकरण शामिल हैंः

भविष्यवाणी समीकरण:

smooth = kf[1] + dk * sqrt(gain / 10000 * 2)

अद्यतन समीकरण:

kf = smooth + velo

इनमें, dk पूर्वानुमान त्रुटि है, gain कार्मन लाभ है, और निर्णय अनुवर्ती संवेदनशीलता है।

इसके अलावा, रणनीति लाभ को लॉक करने के लिए स्लाइडिंग स्टॉप-लॉस लाइन का उपयोग करती है। प्रारंभिक स्टॉप-लॉस दूरी को स्टॉप-लॉस प्रतिशत के रूप में सेट करें, जैसे 2%।

यदि कीमत बढ़ जाती है, तो स्टॉप लाइन भी धीरे-धीरे कार्लमैन लाइन के करीब बढ़ जाती है, जैसे कि 0.5%। यदि कीमत गिरती है, तो स्टॉप खोलें और प्रारंभिक स्टॉप दूरी सेट करें।

यह भी पढ़ेंः

इस प्रकार, रणनीति में एक बेहतर जोखिम प्रबंधन के साथ, प्रवृत्ति के आधार पर धीरे-धीरे मुनाफे को लॉक करने की अनुमति मिलती है।

लाभ

  1. कार्लमैन फ़िल्टर का उपयोग करके कीमतों को वास्तविक समय में ट्रैक करें और तेजी से प्रतिक्रिया दें।

  2. स्लाइडिंग स्टॉप लॉस लाइन का उपयोग करके लाभ को लॉक करना, जोखिम प्रबंधन के लिए अच्छा है। स्टॉप लॉस दूरी को अनुकूलित किया जा सकता है।

  3. आप अधिक या केवल अधिक / खाली समय का चयन करने के लिए लचीला हैं।

  4. प्रवृत्ति के आधार पर सक्रिय रोक या संरक्षित रोक।

  5. स्टॉप लॉस को लचीले ढंग से सेट किया जा सकता है

जोखिम

  1. गलत तरीके से सेट किए गए कार्मन फ़िल्टर पैरामीटर के कारण ट्रैकिंग अस्थिर हो सकती है।

  2. स्लाइड बिंदु से पहले स्टॉप पॉइंट ट्रिगर हो सकता है। स्टॉप दूरी को उचित रूप से आराम दिया जा सकता है।

  3. मजबूत प्रवृत्ति बाजार में स्लाइडिंग स्टॉप-लॉस रणनीति को अपनाना उचित नहीं है, प्रवृत्ति का पालन करना चाहिए।

  4. अस्थिर बाजार के स्टॉप पॉइंट्स को अक्सर ट्रिगर किया जा सकता है। स्टॉप दूरी को उचित रूप से आराम दिया जा सकता है, या स्लाइडिंग स्टॉप का उपयोग नहीं किया जा सकता है।

अनुकूलन

  1. ट्रेडों को ट्रेंड करने के लिए और अधिक सूचकांक पेश किए जा सकते हैं, जिससे स्थिति को खोलने का समय अनुकूलित किया जा सके।

  2. स्टॉप-लॉस लाइन के लिए कदम की लंबाई को बाजार में उतार-चढ़ाव के आधार पर समायोजित किया जा सकता है।

  3. मशीन लर्निंग तकनीक प्रशिक्षण के साथ इष्टतम स्टॉप लॉस पैरामीटर।

  4. अधिक जोखिम संकेतकों के साथ, गतिशील रूप से स्थिति प्रबंधन को समायोजित किया जा सकता है।

संक्षेप

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

रणनीति स्रोत कोड
/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 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/
// © BigCoinHunter

//@version=5
// strategy(title='Loft Strategy V1', overlay=true, 
//      pyramiding=0, default_qty_type=strategy.fixed, 
//      default_qty_value=100, initial_capital=100000, 
//      currency=currency.USD, commission_value=0.05, 
//      commission_type=strategy.commission.percent, 
//      process_orders_on_close=true)

//-------------- fetch user inputs ------------------
gain = input.float(title="Kalman Gain:", defval=1.0, minval=1.0, maxval=5000.0, step=100.0)
src = input(defval=close, title='Source:')

stopPercentMax = input.float(title='Beginning Approach(%):', defval=2.0, minval=0.1, maxval=30.0, step=0.1)
stopPercentMin = input.float(title='Final Approach(%):    ', defval=0.5, minval=0.1, maxval=30.0, step=0.1)
downStep = input.float(title='Approach Decrease Step:', defval=0.005, minval=0.0, maxval = 5, step=0.005)

tp = input.float(title="Take Profit:", defval=1.5, minval=0.0, maxval=100.0, step=0.1) * 0.01
sl = input.float(title="Stop Loss:  ", defval=0.0, minval=0.0, maxval=100.0, step=0.1) * 0.01

longEntry = input.bool(defval=true, title= 'Long Entry', inline="11")
shortEntry = input.bool(defval=true, title='Short Entry', inline="11")

//---------- backtest range setup ------------
fromDay   = input.int(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input.int(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear  = input.int(defval = 2021, title = "From Year", minval = 2010)
toDay     = input.int(defval = 30, title = "To Day", minval = 1, maxval = 31)
toMonth   = input.int(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear    = input.int(defval = 2022, title = "To Year", minval = 2010)


//------------ time interval setup -----------
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)  // backtest start window
finish    = timestamp(toYear, toMonth, toDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

//------- define the global variables ------
enterLongComment = "ENTER LONG"
exitLongComment = "EXIT LONG"

enterShortComment = "ENTER SHORT"
exitShortComment = "EXIT SHORT"

longTPSL = "Long TP/SL"
longTP = "Long TP"
longSL = "Long SL"
shortTPSL = "Short TP/SL"
shortTP = "Short TP"
shortSL = "Short SL"

var bool long = true
var bool stoppedOutLong = false
var bool stoppedOutShort = false
var float kf = 0.0
var float velo = 0.0

//------ kalman filter calculation --------
dk = src - nz(kf[1], src)
smooth = nz(kf[1], src) + dk * math.sqrt(gain / 10000 * 2)
velo := nz(velo[1], 0) + gain / 10000 * dk
kf := smooth + velo

//--------- calculate the loft stopLoss line ---------
var stopPercent = stopPercentMax
var stopLoss = kf - kf * (stopPercent /100)

if long == true
    stopLoss := kf - (kf * (stopPercent / 100))
    
    if long[1] == true and stopLoss <= stopLoss[1]
        stopLoss := stopLoss[1]
    else if (long[1] == true)
        stopPercent := stopPercent - downStep
        if(stopPercent < stopPercentMin)
            stopPercent := stopPercentMin
    
    if(kf < stopLoss)
        long := false
        stopPercent := stopPercentMax
        stopLoss := kf + (kf * (stopPercent / 100))
        
else
    stopLoss := kf + (kf * (stopPercent / 100))
    
    if long[1] == false and stopLoss >= stopLoss[1]
        stopLoss := stopLoss[1]
    else if(long[1] == false)
        stopPercent := stopPercent - downStep
        if(stopPercent < stopPercentMin)
            stopPercent := stopPercentMin
            
    if(kf > stopLoss)
        long := true
        stopPercent := stopPercentMax
        stopLoss := kf - (kf * (stopPercent / 100))
        
//--------- calculate the input/output points -----------
longProfitPrice  = strategy.position_avg_price * (1 + tp)     // tp -> take profit percentage
longStopPrice = strategy.position_avg_price * (1 - sl)        // sl -> stop loss percentage

shortProfitPrice  = strategy.position_avg_price * (1 - tp)
shortStopPrice = strategy.position_avg_price * (1 + sl)

//------------------- determine buy and sell points ---------------------
buySignall = window() and long  and (not stoppedOutLong)
sellSignall = window() and (not long)  and (not stoppedOutShort)

//---------- execute the strategy -----------------
if(longEntry and shortEntry)
    if long 
        strategy.entry("LONG", strategy.long, when = buySignall, comment = enterLongComment)
        stoppedOutLong := true
        stoppedOutShort := false
    else 
        strategy.entry("SHORT", strategy.short, when = sellSignall, comment = enterShortComment)
        stoppedOutLong  := false
        stoppedOutShort := true

else if(longEntry)
    strategy.entry("LONG", strategy.long,  when = buySignall, comment = enterLongComment)
    strategy.close("LONG", when = sellSignall, comment = exitLongComment)
    if long 
        stoppedOutLong := true
    else
        stoppedOutLong  := false

else if(shortEntry)
    strategy.entry("SHORT", strategy.short, when = sellSignall, comment = enterShortComment)
    strategy.close("SHORT", when = buySignall, comment = exitShortComment)
    if not long
        stoppedOutShort := true
    else
        stoppedOutShort := false
    

//----------------- take profit and stop loss -----------------
if(tp>0.0 and sl>0.0)
    if ( strategy.position_size > 0 )
        strategy.exit(id="LONG", limit=longProfitPrice, stop=longStopPrice, comment = longTPSL)

    else if ( strategy.position_size < 0 )
        strategy.exit(id="SHORT", limit=shortProfitPrice, stop=shortStopPrice, comment = shortTPSL)

else if(tp>0.0)
    if ( strategy.position_size > 0 )
        strategy.exit(id="LONG", limit=longProfitPrice, comment = longTP)

    else if ( strategy.position_size < 0 )
        strategy.exit(id="SHORT", limit=shortProfitPrice, comment = shortTP)
        
else if(sl>0.0)
    if ( strategy.position_size > 0 )
        strategy.exit(id="LONG",  stop=longStopPrice, comment = longSL)

    else if ( strategy.position_size < 0 )
        strategy.exit(id="SHORT",  stop=shortStopPrice, comment = shortSL)
        
//------------- plot charts ---------------------
lineColor1 = long ? color.green : color.red
lineColor2 = long ? color.aqua : color.fuchsia

kalmanLine = plot(kf, color=lineColor1, linewidth=3, title = "Kalman Filter")
stopLine = plot(stopLoss, color=lineColor2, linewidth=2, title = "Stop Loss Line")