बहु सूचक संयोजन रणनीति

लेखक:चाओझांग, दिनांक: 2023-10-07 15:34:33
टैगः

अवलोकन

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

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

इस रणनीति में मुख्य रूप से निम्नलिखित संकेतकों का उपयोग मूल्य प्रवृत्ति को निर्धारित करने के लिए किया जाता है:

  1. सुपर ट्रेंडः जब कीमत ऊपरी बैंड से ऊपर टूटती है, तब खरीदें, जब निचली बैंड से नीचे टूटती है, तो बेचें।

  2. एसएमएः एसएमए के ऊपर कीमत पार करने पर खरीदें, एसएमए के नीचे पार करने पर बेचें।

  3. गतिः जब गति सकारात्मक हो तो लंबी, नकारात्मक होने पर छोटी।

  4. एमएसीडीः डीआईएफएफ डीईए के ऊपर पार होने पर खरीदें, नीचे पार होने पर बेचें।

  5. बैल और भालूः जब बैल शक्ति > भालू शक्ति, और इसके विपरीत, लंबे समय तक जाएं।

  6. आरएसआईः जब आरएसआई 30 से ऊपर जाता है तो खरीदें, जब 70 से नीचे जाता है तो बेचें।

  7. मोमबत्तियाँः N तेजी से बढ़ने वाली पट्टी के बाद लंबी, N मंदी पट्टी के बाद छोटी।

  8. CCI: CCI > 100 होने पर खरीदें, CCI < -100 होने पर बेचें।

  9. डीएमआईः जब डीएमआई+ > डीएमआई- हो, तो लांग जाएं, अन्यथा शॉर्ट जाएं।

  10. बाजार की लहरें: ऊपर की लहरों में लंबी, नीचे की लहरों में छोटी।

  11. स्टोकैस्टिक्सः जब %K 20 से ऊपर जाता है तो खरीदें, जब 80 से नीचे जाता है तो बेचें।

सूचक संकेतों को ऊपर या नीचे की दिशा के आधार पर 1 या -1 के रूप में मात्रात्मक रूप से मापा जाता है। कुल बिंदुओं का योग किया जाता है। कुल बिंदु 0 से ऊपर पार होने पर खरीदें, 0 से नीचे पार होने पर बेचें।

लाभ विश्लेषण

इस बहु-निर्देशक रणनीति का सबसे बड़ा लाभ झूठे संकेतों को फ़िल्टर करने के लिए विभिन्न संकेतकों के संकेतों को जोड़कर उच्च विश्वसनीयता है। यह एकल-निर्देशक रणनीतियों की तुलना में अधिक मजबूत है।

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

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

ऐसी संयोजन रणनीतियों में ध्यान देने योग्य कुछ जोखिमः

  1. संकेतकों के बीच उच्च सहसंबंध दोहराने वाले संकेत उत्पन्न कर सकता है। संकेतकों को निम्न सहसंबंध के लिए चुना जाना चाहिए।

  2. बहुत अधिक संकेतकों से संकेतों में देरी होती है। संकेतकों की मात्रा और समयबद्धता के बीच एक समझौता होता है।

  3. अनुचित संकेतकों के मापदंडों से रणनीति के प्रदर्शन पर प्रभाव पड़ता है।

  4. संकेतकों की दक्षता बाजार व्यवस्थाओं में भिन्न होती है। रोलिंग बैकटेस्ट से संकेतकों की वैधता की जांच होनी चाहिए।

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

इस रणनीति में कई तरीकों से सुधार किया जा सकता हैः

  1. सर्वोत्तम संयोजन खोजने के लिए सूचक चयन और संख्या को अनुकूलित करें।

  2. प्रत्येक संकेतक के लिए मापदंडों का अनुकूलन करें।

  3. प्रमुख संकेतकों पर जोर देने के लिए संकेतकों के भारों को समायोजित करें।

  4. झूठे ब्रेकआउट से बचने के लिए वॉल्यूम स्पाइक जैसे फ़िल्टर जोड़ें।

  5. स्वचालित रूप से इष्टतम संयोजन खोजने के लिए मशीन लर्निंग मॉडल का उपयोग करें।

निष्कर्ष

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


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

//@version=4
strategy("Super indicator ", overlay=true, precision=2, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)

/////////////// Time Frame ///////////////
_0 = input(false,  "════════ Test Period ═══════")
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


hilow = ((high - low)*100)
openclose = ((close - open)*100)
vol1 = (volume / hilow)
spreadvol = (openclose * vol1)
VPT = spreadvol + cum(spreadvol)
window_len = 28

v_len = 14
price_spread = stdev(high-low, window_len)

vp =  spreadvol + cum(spreadvol)
smooth = sma(vp, v_len)
v_spread = stdev(vp - smooth, window_len)
shadow = (vp - smooth) / v_spread * price_spread

out1 = shadow > 0 ? high + shadow : low + shadow

//plot(out, style=line,linewidth=3, color=color)
len=5
vpt=ema(out1,len)


// INPUTS //
st_mult   =3
st_period = 7

// CALCULATIONS //
up_lev = vpt - (st_mult * atr(st_period))
dn_lev = vpt + (st_mult * atr(st_period))

up_trend   = 0.0
up_trend   := close[1] > up_trend[1]   ? max(up_lev, up_trend[1])   : up_lev

down_trend = 0.0
down_trend := close[1] < down_trend[1] ? min(dn_lev, down_trend[1]) : dn_lev

// Calculate trend var
trend10 = 0
trend10 := close > down_trend[1] ? 1: close < up_trend[1] ? -1 : nz(trend10[1], 1)

// Calculate SuperTrend Line
st_line = trend10 ==1 ? up_trend : down_trend

//
src = input(close, title="Source")
//sma
sma20 = sma(src, 20)
smapoint = 0
smapoint := src > sma20 ? smapoint + 1 : smapoint - 1


//AO
ao = sma(hl2,5) - sma(hl2,34)
aopoint = ao > 0 ? 1 : ao < 0 ? -1 : 0
//momentum
mom = src - src[14]
mompoint = mom > 0 ? 1 : mom < 0 ? -1 : 0
//MACD
fast_ma = ema(src, 12)
slow_ma = ema(src, 26)
macd = fast_ma - slow_ma
signal = ema(macd, 9)
hist = macd - signal
histpoint = hist > hist[1] ? 3 : -3

//Bull bear
Length = 30
r1=iff(close[1]<open,max(open-close[1],high-low),high-low)
r2=iff(close[1]>open,max(close[1]-open,high-low),high-low)
bull=iff(close==open,iff(high-close==close-low,iff(close[1]>open,max(high-open,close-low),r1),iff(high-close>close-low,iff(close[1]<open, max(high-close[1],close-low), high-open),r1)),iff(close<open,iff(close[1]<open,max(high-close[1],close-low), max(high-open,close-low)),r1))
bear=iff(close==open,iff(high-close==close-low,iff(close[1]<open,max(open-low,high-close),r2),iff(high-close>close-low,r2,iff(close[1]>open,max(close[1]-low,high-close), open-low))),iff(close<open,r2,iff(close[1]>open,max(close[1]-low,high-close),max(open-low,high-close))))
colors=iff(sma(bull-bear,Length)>0, color.green, color.red)
// barcolor(colors)
bbpoint = sma(bull-bear,Length)>0 ? 1 : -1
//UO
length7 = 7,
length14 = 14,
length28 = 28
average(bp, tr_, length) => sum(bp, length) / sum(tr_, length)
high_ = max(high, src[1])
low_ = min(low, src[1])
bp = src - low_
tr_ = high_ - low_
avg7 = average(bp, tr_, length7)
avg14 = average(bp, tr_, length14)
avg28 = average(bp, tr_, length28)
uoout = 100 * (4*avg7 + 2*avg14 + avg28)/7
uopoint = uoout > 70 ? 1 : uoout < 30 ? -1 : 0
//IC
conversionPeriods = 9
basePeriods = 26
laggingSpan2Periods = 52
displacement = 26
donchian(len) => avg(lowest(len), highest(len))
baseLine = donchian(basePeriods)
icpoint = src > baseLine ? 1 : -1

//HMA
hullma = wma(2*wma(src, 9/2)-wma(src, 21), round(sqrt(21)))
hmapoint = src > hullma ? 2 : -2
//
//
trendDetectionLength =4
float trend = na
float wave = na
float vol = na
mov = close>close[1] ? 1 : close<close[1] ? -1 : 0
trend := (mov != 0) and (mov != mov[1]) ? mov : nz(trend[1])
isTrending = rising(close, trendDetectionLength) or falling(close, trendDetectionLength)
wave := (trend != nz(wave[1])) and isTrending ? trend : nz(wave[1])
vol := wave == wave[1] ? (nz(vol[1])+volume) : volume
up1 = wave == 1 ? vol : 0
dn1 = wave == 1 ? 0 : vol
Weis= up1 > dn1 ? 2 : -2


//

roclen =20
ccilen =21
dilen = 5
dirmov(len) =>
	up = change(high)
	down = -change(low)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
	minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
	[plus, minus]

f_draw_infopanel(_x, _y, _line, _text, _color)=>
    _rep_text = ""
    for _l = 0 to _line
        _rep_text := _rep_text + "\n"
    _rep_text := _rep_text + _text
    var label _la = na
    label.delete(_la)
    _la := label.new(
         x=_x, y=_y, 
         text=_rep_text, xloc=xloc.bar_time, yloc=yloc.price, 
         color=color.black, style=label.style_labelup, textcolor=_color, size=size.normal)

TD = 0
TS = 0
TD := close > close[4] ? nz(TD[1]) + 1 : 0
TS := close < close[4] ? nz(TS[1]) + 1 : 0
TDUp = TD - valuewhen(TD < TD[1], TD , 1 )
TDDn = TS - valuewhen(TS < TS[1], TS , 1 )
td = TDUp > 0 ? 2 : TDDn > 0 ? -2 : 0
roc = roc(close, roclen)
Roc=roc > 0 ? 1 : -1
cci = cci(close, ccilen)
CCI=cci > 0? 2 : -2
[plus, minus] = dirmov(dilen)
dmi = plus - minus
DMI= dmi >= 0? 2 : -2
//
STT=trend10 == 1 ? 1 : -1
//
periods = 2
smooth1 =  14
price = close
fn(src, length) => 
    MA_s= 0.0
    MA_s:=(src + nz(MA_s[1] * (length-1)))/length
    MA_s
r11 = ema( price, periods ) 
r22 = iff( price > r11, price - r11, 0 ) 
r3 = iff( price < r11, r11 - price, 0 ) 
r4 = fn( r22, smooth1 ) 
r5 = fn( r3, smooth1 ) 
rr = iff( r5 == 0, 100, 100 - ( 100 / ( 1 + ( r4 / r5 ) ) ) ) 

length = 20,fast = 7,slow = 13
//
src10 = rr
er = abs(change(src,length))/sum(abs(change(src10)),length)
dev = er*stdev(src10*2,fast) + (1-er)*stdev(src10*2,slow)
a = 0.
a := bar_index < 9 ? src10 : src10 > a[1] + dev ? src10 : src10 < a[1] - dev ? src10 : a[1]
//

rsi=fixnan(a > a[1] ? 3 : a < a[1] ?-3 : na)
//
totalpoints =rsi+td+STT+Roc+DMI+ CCI+Weis+smapoint  + aopoint + mompoint + histpoint  + bbpoint  + icpoint  + hmapoint
//
piz=input(1)
tt=sma(totalpoints,piz)

//

zero=0
down = crossunder(tt, 0) 
up = crossover(tt, -0) 

//Alerts
/////// Alerts /////
alertcondition(down,title="sell")
alertcondition(up,title="buy")
//
/////////////// Strategy /////////////// 
long = up
short = down

strategy.entry("Long", strategy.long, when = long) 
strategy.entry("Short", strategy.short, when = short) 


अधिक