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

स्टॉप लॉस ट्रैकिंग रणनीति के साथ गतिशील मूल्य चैनल

लेखक:चाओझांग, दिनांकः 2024-02-01 10:52:33
टैगः

img

अवलोकन

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

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

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

व्यापार का विशिष्ट तर्क हैः

लॉन्ग एंट्री सिग्नलः ओपन लॉन्ग जब कीमत चैनल की ऊपरी सीमा h से अधिक हो और चैनल में वापस गिर जाए

लॉन्ग एक्जिट सिग्नलः जब कीमत चैनल के मध्य रेखा केंद्र से कम हो (स्टॉप लॉस) या लाभ लेने की कीमत से अधिक हो (लाभ लें) तो लॉन्ग बंद करें

शॉर्ट एंट्री सिग्नलः जब कीमत चैनल की निचली सीमा l से कम हो और चैनल में वापस गिर जाए तो शॉर्ट खोलें

शॉर्ट एक्जिट सिग्नलः शॉर्ट बंद करें जब कीमत चैनल के मध्य रेखा केंद्र से अधिक हो (स्टॉप लॉस) या लाभ लेने की कीमत से कम हो (लाभ लें)

लाभ विश्लेषण

इस रणनीति के लाभ इस प्रकार हैंः

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

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

इस रणनीति में कुछ जोखिम भी हैंः

  1. मूल्य चैनल के अनुचित पैरामीटर सेटिंग्स से बहुत अधिक व्यापारिक आवृत्ति या खोए हुए व्यापारिक अवसर हो सकते हैं
  2. स्टॉप लॉस की कीमत बहुत व्यापक सेट करने से जोखिम जोखिम बढ़ सकता है
  3. उच्च अस्थिरता के समय में लाभ लेने की निगरानी समय से पहले शुरू हो सकती है

इन जोखिमों को मापदंडों के समायोजन और मैन्युअल निगरानी से कम और नियंत्रित किया जा सकता है।

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

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

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

निष्कर्ष

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


/*backtest
start: 2023-01-31 00:00:00
end: 2024-01-31 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2020

//@version=4
strategy(title = "Noro's RiskDonchian Strategy", shorttitle = "RiskDonchian str", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
tp = input(defval = 20.0, minval = 1, title = "Take-profit, %")
tptype = input(defval = "2. Fix", options = ["1. None", "2. Fix", "3. Trailing"], title = "Take-profit type")
sltype = input(defval = "2. Center", options = ["1. None", "2. Center"], title = "Take-profit type")
risklong  = input(5.0, minval = 0.0, maxval = 99.9, title = "Risk size for long, %")
riskshort = input(5.0, minval = 0.0, maxval = 99.9, title = "Risk size for short, %")
pclen = input(50, minval = 1, title = "Price Channel Length")
showll = input(true, defval = true, title = "Show lines")
showbg = input(false, defval = false, title = "Show Background")
showof = input(true, defval = true, title = "Show Offset")
showlabel = input(true, defval = true, title = "Show label")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Price Channel
h = highest(high, pclen)
l = lowest(low, pclen)
center = (h + l) / 2

//Take-profit
tpl = 0.0
tpl := tptype == "2. Fix" and strategy.position_size > 0 ? tpl[1] : h * (100 + tp) / 100

//Stop-loss
tps = 0.0
tps := tptype == "2. Fix" and strategy.position_size < 0 ? tps[1] : l * (100 - tp) / 100

//Lines
tplcol = showll and needlong and tptype != "1. None" ? color.lime : na
pclcol = showll and needlong ? color.blue : na
sllcol = showll and needlong and sltype != "1. None" ? color.red : na
tpscol = showll and needshort and tptype != "1. None" ? color.lime : na
pcscol = showll and needshort ? color.blue : na
slscol = showll and needshort and sltype != "1. None" ? color.red : na
offset = showof ? 1 : 0
plot(tpl, offset = offset, color = tplcol, title = "TP Long")
plot(h, offset = offset, color = pclcol, title = "Channel High")
plot(center, offset = offset, color = sllcol, title = "SL Long")
plot(center, offset = offset, color = slscol, title = "SL Short")
plot(l, offset = offset, color = pcscol, title = "Channel Low")
plot(tps, offset = offset, color = tpscol, title = "TP Short")

//Background
size = strategy.position_size
bgcol = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na
bgcolor(bgcol, transp = 70)

//Lot size
risksizelong = -1 * risklong
risklonga = ((center / h) - 1) * 100
coeflong = abs(risksizelong / risklonga)
lotlong = (strategy.equity / close) * coeflong
risksizeshort = -1 * riskshort
riskshorta = ((center / l) - 1) * 100
coefshort = abs(risksizeshort / riskshorta)
lotshort = (strategy.equity / close) * coefshort

//Trading
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
mo = 0
mo := strategy.position_size != 0 ? 0 : high >= center[1] and low <= center[1] ? 1 : mo[1]

if h > 0
    longlimit = tptype == "1. None" ? na : tpl
    longstop = sltype == "1. None" ? na : center
    strategy.entry("Long", strategy.long, lotlong, stop = h, when = strategy.position_size <= 0 and needlong and truetime and mo)
    strategy.exit("TP Long", "Long", limit = longlimit, stop = longstop)
    shortlimit = tptype == "1. None" ? na : tps
    shortstop = sltype == "1. None" ? na : center
    strategy.entry("Short", strategy.short, lotshort, stop = l, when = strategy.position_size >= 0 and needshort and truetime and mo)
    strategy.exit("Exit Short", "Short", limit = shortlimit, stop = shortstop)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")
    
if showlabel

    //Drawdown
    max = 0.0
    max := max(strategy.equity, nz(max[1]))
    dd = (strategy.equity / max - 1) * 100
    min = 100.0
    min := min(dd, nz(min[1]))
    
    //Label
    min := round(min * 100) / 100
    labeltext = "Drawdown: " + tostring(min) + "%"
    var label la = na
    label.delete(la)
    tc = min > -100 ? color.white : color.red
    osx = timenow + round(change(time)*10)
    osy = highest(100)

अधिक