गतिशील मूल्य चैनल ब्रेकआउट रणनीति


निर्माण तिथि: 2023-12-13 16:03:37 अंत में संशोधित करें: 2023-12-13 16:03:37
कॉपी: 3 क्लिक्स: 674
1
ध्यान केंद्रित करना
1621
समर्थक

गतिशील मूल्य चैनल ब्रेकआउट रणनीति

अवलोकन

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

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

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

संकेतक गणना

मूल्य चैनल की गणना निम्न सूत्र से की जाती हैः

ऊपरी रेखा = उच्चतम मूल्य के एन चक्र के उच्चतम मूल्य

निचली रेखा = सबसे कम मूल्य के एन चक्र न्यूनतम

मध्य रेखा = (ऊपरी सीमा रेखा + निचली सीमा रेखा) / 2

जहां N चैनल चक्र की लंबाई को दर्शाता है, इस रणनीति में 50 को डिफ़ॉल्ट रूप से माना जाता है।

प्रवेश नियम

जब नवीनतम K लाइन की अधिकतम कीमत चैनल की ऊपरी सीमा को तोड़ती है, तो एक बहु-स्थिति स्थापित करें;

जब नवीनतम K लाइन का न्यूनतम मूल्य चैनल की निचली सीमा से नीचे गिर जाता है, तो एक शून्य स्थिति स्थापित करें।

उदाहरण:

पिछले K लाइन की ऊंचाई चैनल की ऊपरी सीमा से अधिक नहीं है; वर्तमान K लाइन के उच्च बिंदु ने चैनल की ऊपरी सीमा को पार कर लिया है; ==> बहु पदों की स्थापना

खेल के नियम

खेल के दो नियम हैं:

  1. चैनल का प्रदर्शन

पिंटोः स्टॉप लॉस कीमत चैनल की निचली सीमा है;

फ्लैटः स्टॉप लॉस मूल्य चैनल की ऊपरी सीमा है;

  1. मध्यपंक्ति

जब कीमत चैनल की मध्य रेखा से नीचे गिरती है, तो सभी पदों को बंद कर दिया जाता है, चाहे वे बहु-पोजीशन हों या रिक्त-पोजीशन।

जोखिम नियंत्रण

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

अधिक स्टॉप लॉस दूरी = प्रवेश मूल्य * (1 - जोखिम का प्रतिशत)

स्टॉप लॉस दूरी = प्रवेश मूल्य * (1 + जोखिम का प्रतिशत)

उदाहरण के लिए, यदि आप 2 प्रतिशत का जोखिम लेते हैं, तो प्रवेश मूल्य \( 10,000 है, और यदि आप 10,000 * (1 - 2%) = \) 9,800 का एकल स्टॉप लॉस करते हैं।

श्रेष्ठता विश्लेषण

प्रवृत्ति को पकड़ना

जब कीमतें चैनल के ऊपरी-निचले सीमा को तोड़ती हैं, तो एक नई दिशात्मक प्रवृत्ति शुरू होने की संभावना होती है। इस समय प्रवेश से कीमतों में बड़े पैमाने पर बदलाव हो सकता है।

जोखिम को नियंत्रित करें

अनुपातिक स्टॉप लॉस को अपनाने से एकमुश्त नुकसान को सहन करने योग्य सीमा के भीतर नियंत्रित किया जा सकता है।

पैरामीटर अनुकूलित करने के लिए जगह बड़ा

चैनल चक्र की लंबाई, जोखिम अनुपात, और स्टॉप लॉस जैसे पैरामीटर को अनुकूलित किया जा सकता है ताकि यह अधिक बाजार स्थितियों के अनुकूल हो सके।

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

सफलता की विफलता

एक चैनल को तोड़ने के लिए एक ऊपरी-निचली सीमा का मतलब यह नहीं है कि एक प्रवृत्ति का गठन होना चाहिए, एक असफल ब्रेक की संभावना है, जो कि नुकसान के लिए आसान है।

भूकंप

जब बाजार चौड़ी-चौड़ी उतार-चढ़ाव में होता है, तो कीमतें अक्सर चैनल के ऊपर और नीचे की सीमा को ट्रिगर कर सकती हैं, जिससे लेनदेन की लागत और स्लाइड-पॉइंट हानि बढ़ जाती है।

अनुकूलन दिशा

गतिशील मार्ग

मूल्य चैनल की लंबाई को एक चर के रूप में माना जा सकता है, जो बाजार में उतार-चढ़ाव के आधार पर स्वचालित रूप से समायोजित होता है। बाजार में उतार-चढ़ाव होने पर चैनल की लंबाई बढ़ जाती है, और जब रुझान स्पष्ट होता है तो चैनल की लंबाई कम हो जाती है।

प्रवेश के अवसरों को अनुकूलित करना

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

पैरामीटर्स को ठीक करें

अधिक ऐतिहासिक डेटा का उपयोग करके पैरामीटर के संयोजन का परीक्षण करने के लिए अनुकूलित करें और व्यापक बाजार स्थितियों के लिए इष्टतम पैरामीटर निर्धारित करें।

संक्षेप

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

रणनीति स्रोत कोड
/*backtest
start: 2022-12-06 00:00:00
end: 2023-12-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro

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

//Settings
needlong  = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
risklong  = input(2.0, minval = 0.0, maxval = 99.9, title = "Risk size for long, %")
riskshort = input(2.0, minval = 0.0, maxval = 99.9, title = "Risk size for short, %")
stoptype  = input(defval = "Center", options = ["Channel", "Center"], title = "Stop-loss type")
lotsize   = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
pclen     = input(50, minval = 1, title = "Price Channel Length")
showll    = input(true, defval = true, title = "Show lines")
showof    = input(true, defval = true, title = "Show offset")
showdd    = input(true, defval = true, title = "Show label (drawdown)")
showbg    = input(false, defval = false, title = "Show background")
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

//Stop-loss
needstop = stoptype == "Center" or needlong == false or needshort == false
sl = center

//Lines
pccol = showll ? color.black : na
slcol = showll and stoptype == "Center" ? color.red : na
offset = showof ? 1 : 0
plot(h, offset = offset, color = pccol, title = "Channel High")
plot(center, offset = offset, color = slcol, title = "Cannel Center")
plot(l, offset = offset, color = pccol, title = "Channel Low")

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

//Var
loss = 0.0
maxloss = 0.0
equity = 0.0
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)

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

//Trading
if h > 0
    strategy.entry("Long", strategy.long, lotlong, stop = h, when = strategy.position_size <= 0 and needlong and truetime)
    strategy.entry("Short", strategy.short, lotshort, stop = l, when = strategy.position_size >= 0 and needshort and truetime)
sl := sl != 0 ? sl : size > 0 ? l : size < 0 ? h : na
if size > 0 and needstop
    strategy.exit("Stop Long", "Long", stop = sl)
if size < 0 and needstop
    strategy.exit("Stop Short", "Short", stop = sl)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")
    
if showdd

    //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]))
    
    //Max loss size
    equity := strategy.position_size == 0 ? strategy.equity : equity[1]
    loss := equity < equity[1] ? ((equity / equity[1]) - 1) * 100 : 0
    maxloss := min(nz(maxloss[1]), loss)
    
    //Label
    min := round(min * 100) / 100
    maxloss := round(maxloss * 100) / 100
    labeltext = "Drawdown: " + tostring(min) + "%" + "\nMax.loss " + tostring(maxloss) + "%"
    var label la = na
    label.delete(la)
    tc = min > -100 ? color.white : color.red
    osx = timenow + round(change(time)*10)
    osy = highest(100)
    // la := label.new(x = osx, y = osy, text = labeltext, xloc = xloc.bar_time, yloc = yloc.price, color = color.black, style = label.style_labelup, textcolor = tc)