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

लेखक:चाओझांग, दिनांकः 2023-12-13 16:03:37
टैगः

img

अवलोकन

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

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

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

सूचक गणना

मूल्य चैनल की गणना निम्नलिखित सूत्रों द्वारा की जाती है:

ऊपरी रेखा = पिछले N अवधियों में उच्चतम उच्चतम

निचली रेखा = पिछले एन अवधियों में सबसे कम

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

जहां N चैनल चक्र की लंबाई का प्रतिनिधित्व करता है। इस रणनीति के लिए डिफ़ॉल्ट 50 है।

प्रवेश नियम

जब नवीनतम के-लाइन की उच्चतम कीमत चैनल की ऊपरी सीमा को पार कर जाती है, तो लंबी स्थिति स्थापित की जाती है।

जब नवीनतम के-लाइन की सबसे कम कीमत चैनल की निचली सीमा को तोड़ती है, तो एक छोटी स्थिति स्थापित करें।

उदाहरण:

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

बाहर निकलने के नियम

बाहर निकलने के दो वैकल्पिक नियम हैंः

  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)

अधिक