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

लेखक:चाओझांग, दिनांक: 2023-11-02 16:28:55
टैगः

img

अवलोकन

यह रणनीति स्टोकेस्टिक आरएसआई और मूल्य परिवर्तन दर सूचक का उपयोग प्रवेश के लिए प्रवृत्ति दिशा की पहचान करने और जोखिम प्रबंधन के लिए स्लाइडिंग स्टॉप लॉस को समन्वयित करने के लिए करती है।

रणनीति तर्क

सबसे पहले, रणनीति लंबाई 5 के साथ आरएसआई संकेतक और लंबाई 7 के साथ स्टोकैस्टिक संकेतक का उपयोग करके स्टोकैस्टिक आरएसआई की गणना करती है। जब स्टोकैस्टिक आरएसआई के मूल्य डी मूल्य से ऊपर होता है, तो यह तेजी का संकेत होता है। जब के डी से नीचे होता है, तो यह मंदी का संकेत होता है।

दूसरा, रणनीति मूल्य परिवर्तन दर सूचक ईएमए आरओसी की गणना करती है। जब ईएमए आरओसी सीमा के आधे से ऊपर या सीमा के ऋणात्मक आधे से नीचे होता है, तो यह सक्रिय मूल्य आंदोलन की पहचान करता है।

फिर स्टोकैस्टिक आरएसआई संकेतों और मूल्य परिवर्तन की दर को मिलाकर, यह प्रवृत्ति की दिशा की पहचान करता है। जब स्टोकैस्टिक आरएसआई तेजी से बढ़ रहा है और कीमत सक्रिय रूप से चल रही है, तो लंबा हो। जब स्टोकैस्टिक आरएसआई मंदी और कीमत सक्रिय रूप से चल रही है, तो छोटा हो।

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

लाभ विश्लेषण

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

  1. स्टोकैस्टिक आरएसआई सूचक प्रभावी रूप से रुझानों और ओवरबॉट/ओवरसोल्ड स्थितियों की पहचान करता है।

  2. मूल्य परिवर्तन दर झूठे संकेतों से बचने के लिए बाजार की सीमा से बाहर फ़िल्टर करती है।

  3. समन्वित स्लाइडिंग स्टॉप लॉस जोखिम को नियंत्रित करते हुए अधिकतम लाभ में लॉक कर सकता है।

  4. रणनीति में विभिन्न उत्पादों के आधार पर पैरामीटर ट्यूनिंग के लिए बड़े अनुकूलन स्थान हैं।

  5. रणनीति का तर्क सरल और स्पष्ट है, इसे समझना और लागू करना आसान है।

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

इस रणनीति के जोखिमः

  1. स्टोकैस्टिक आरएसआई गलत संकेत उत्पन्न कर सकता है, अन्य कारकों के साथ पुष्टि की आवश्यकता है।

  2. निर्देशांक स्लाइडिंग स्टॉप हानि बहुत आक्रामक हो सकती है, रात भर में अंतराल द्वारा रोक दी जा सकती है।

  3. अल्पकालिक उलट-फेर स्टॉप लॉस को ट्रिगर कर सकता है।

  4. मापदंडों को विभिन्न उत्पादों के लिए अनुकूलन की आवश्यकता होती है, अन्यथा प्रदर्शन खराब हो सकता है।

  5. ट्रेडिंग लागत रणनीति लाभप्रदता को प्रभावित करती है, उचित ट्रेडिंग आवृत्ति की आवश्यकता होती है।

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

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

  1. झूठे संकेतों को कम करने के लिए स्टोकैस्टिक आरएसआई मापदंडों का अनुकूलन करें। विभिन्न के और डी मानों का परीक्षण कर सकते हैं।

  2. फ़िल्टरिंग प्रभाव में सुधार के लिए परिवर्तन मापदंडों की मूल्य दर का अनुकूलन करें। विभिन्न लंबाई और सीमा मानों का परीक्षण कर सकते हैं।

  3. रुझान संकेतक जोड़ें ताकि आप उलटफेर से रोके न जा सकें। जैसे चलती औसत।

  4. फंसने के जोखिम को कम करने के लिए स्टॉप लॉस प्रतिशत को अनुकूलित करें। विभिन्न स्टॉप लॉस चौड़ाई का परीक्षण कर सकते हैं।

  5. एकल व्यापार जोखिम को नियंत्रित करने के लिए स्थिति आकार प्रबंधन जोड़ें। जैसे कि निश्चित स्टॉप लॉस राशि, या खाता इक्विटी के आधार पर गतिशील रूप से स्थिति आकार समायोजित करें।

  6. अनुकूलन क्षमता में सुधार के लिए विभिन्न उत्पादों पर मापदंडों का परीक्षण करें। कई बाजारों और समय सीमा पर सत्यापित करें।

सारांश

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


/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Sto2", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true
    
///////////// Stochastic calc /////////////
smoothK = input(1, minval=1)
smoothD = input(7, minval=1)
lengthRSI = input(5, minval=1)
lengthStoch = input(7, minval=1)
src = input(close, title="RSI Source")

up = sma(max(change(src), 0), lengthRSI) 
down = sma(-min(change(src), 0), lengthRSI)
rsi1 = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))

k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)

///////////// Rate Of Change ///////////// 
source = close, roclength = input(14, minval=1), pcntChange = input(2, minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))

/////////////// STRATEGY ///////////////
long = k > d and isMoving()
short = k < d and isMoving()

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])
sl_inp = input(2.0, title='Stop Loss %') / 100
tp_inp = input(9.0, title='Take Profit %') / 100 
 
take_level_l = strategy.position_avg_price * (1 + tp_inp)
take_level_s = strategy.position_avg_price * (1 - tp_inp) 

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) // LONG SL
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) // SHORT SL

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

// Strategy
if testPeriod()
    strategy.entry("Long Entry",  strategy.long, when=long)
    strategy.entry("Short Entry", strategy.short, when=short)
    strategy.exit("Long Ex", "Long Entry", stop=long_sl, limit=take_level_l, when=since_longEntry > 0)
    strategy.exit("Short Ex", "Short Entry", stop=short_sl, limit=take_level_s, when=since_shortEntry > 0)
    
///////////// Plotting /////////////
bgcolor(isMoving() ? long ? color.green : short ? color.red : na : color.white, transp=80)
p1 = plot(k, color=color.gray, linewidth=0)
p2 = plot(d, color=color.gray, linewidth=0)
h0 = hline(100)
h1 = hline(50)
h3 = hline(0)
fill(p1, p2, color = k > d ? color.lime : color.red, transp=70)

अधिक