इस रणनीति में कई तकनीकी संकेतकों को शामिल किया गया है, जो मूल्य के रुझानों को समझने के लिए खरीदारी और बिक्री के संकेत देते हैं।
यह रणनीति मुख्य रूप से निम्नलिखित तकनीकी संकेतकों के आधार पर कीमतों के रुझानों का आकलन करती हैः
सुपरट्रेंड संकेतक ((SuperTrend): एटीआर के आधार पर ऊपरी और निचले ट्रैक की गणना करें, कीमतें ऊपरी ट्रैक को तोड़ने के लिए अधिक हैं, नीचे की ट्रैक को तोड़ने के लिए शून्य हैं;
सरल चलती औसत (एसएमए): कीमत एसएमए के ऊपर अधिक है, एसएमए के नीचे खाली है;
गति सूचक (Momentum): मूल्य गति सकारात्मक के लिए अधिक है, नकारात्मक के लिए कम है;
MACD: डीआईएफएफ ने डीईए लाइन को पार किया, और डीईए लाइन को पार करने के लिए शून्य किया;
और यह भी कहा गया है कि “बैल और भालू” के लिए, “बैल और भालू” की तुलना में “बैल और भालू” की शक्ति अधिक है, और “खाली” की तुलना में “खाली” है।
आरएसआईः आरएसआई के ऊपर 30 लाइन से अधिक है, और नीचे 70 लाइन से कम है;
सूर्य-नक्षत्र: लगातार एन-नक्षत्रों को खाली करना, लगातार एन-नक्षत्रों को अधिक करना;
CCI: CCI 100 से अधिक और 100 से कम है;
डीएमआईः डीएमआई बहु-हेड तारों को खाली करने के लिए, खाली तारों की तुलना में अधिक है।
बाजार की लहरेंः यह समझना कि कीमतें ऊपर की ओर बढ़ रही हैं और नीचे की ओर जा रही हैं;
यादृच्छिक संकेतक: यादृच्छिक संकेतक पर 20 लाइनों को अधिक करें, नीचे 80 लाइनों को खाली करें।
इन इंडिकेटरों की गणना के परिणाम के आधार पर, 1 या -1 अंक दिए जाते हैं। सभी इंडिकेटरों के अंक को जोड़कर, कुल अंक प्राप्त होते हैं। जब कुल अंक संख्या 0 लाइन से गुजरती है तो एक खरीद संकेत उत्पन्न होता है; जब कुल अंक संख्या 0 लाइन से गुजरती है तो एक बिक्री संकेत उत्पन्न होता है।
इस तरह के मल्टी इंडिकेटर संयोजन रणनीति का सबसे बड़ा लाभ उच्च विश्वसनीयता में है, क्योंकि कई इंडिकेटरों के व्यापक उपयोग से प्रवृत्ति की दिशा का निर्धारण किया जा सकता है, झूठे संकेतों को प्रभावी ढंग से कम किया जा सकता है और संकेतों को अधिक विश्वसनीय बनाया जा सकता है। एकल इंडिकेटर की तुलना में, इस तरह की संयोजन रणनीति की विश्वसनीयता और स्थिरता बेहतर होगी।
एक और लाभ यह है कि रणनीति की लचीलापन और अनुकूलन क्षमता है। सूचक की प्रकार और पैरामीटर सेटिंग्स को विभिन्न बाजारों के अनुसार समायोजित किया जा सकता है, जिससे रणनीति को विभिन्न परिस्थितियों के अनुकूल बनाया जा सकता है। यह भी संभव है कि सूचक का वजन फीडबैक परिणामों के अनुसार समायोजित किया जा सके।
इस तरह के संयोजन रणनीतियों के कुछ जोखिम भी हैं, जिनके बारे में ध्यान देने की आवश्यकता हैः
यदि चयनित संकेतक के बीच सहसंबंध बहुत अधिक है, तो दोहराए जाने वाले संकेतों का जोखिम है। विभिन्न बाजार स्थितियों के आधार पर, कम सहसंबंध वाले संकेतक का चयन करने के लिए संयोजन की आवश्यकता होती है।
यदि इंडिकेटर की संख्या बहुत अधिक है, तो गणना समय बहुत लंबा है, जिससे सिग्नल के समय पर प्रभाव पड़ सकता है। इंडिकेटर की संख्या और समय पर होने के बीच संबंधों को संतुलित करने की आवश्यकता है।
गलत तरीके से इंडिकेटर पैरामीटर सेट करने से रणनीति पर प्रभाव पड़ सकता है, और सबसे अच्छा पैरामीटर खोजने के लिए पर्याप्त अनुवर्ती जांच की आवश्यकता होती है।
विभिन्न बाजार चरणों में, इंडिकेटर का प्रभाव अलग-अलग हो सकता है। रोलिंग फीडबैक के माध्यम से इसकी प्रभावशीलता की लगातार जांच की आवश्यकता होती है।
इस रणनीति को निम्नलिखित तरीकों से अनुकूलित किया जा सकता हैः
इंडिकेटर के प्रकार और मात्रा को अनुकूलित करें और इष्टतम संयोजन चुनें;
प्रत्येक इंडिकेटर के लिए पैरामीटर सेटिंग को अनुकूलित करें;
सूचकांक के भार अनुपात को समायोजित करें और महत्वपूर्ण सूचकांक के भार को बढ़ाएं;
यह भी कहा गया है कि यह एक “असमानता” है, और यह एक “असमानता” है।
मॉडल पोर्टफोलियो के तरीकों का उपयोग करके, मशीन सीखने के एल्गोरिदम के माध्यम से स्वचालित रूप से इष्टतम रणनीति पोर्टफोलियो ढूंढें।
संक्षेप में, यह बहु-सूचक संयोजन रणनीति विभिन्न प्रकार के संकेतक के लाभ का उपयोग करती है, जो कि झुकाव की दिशा को निर्धारित करती है, झूठे संकेतों को कम कर सकती है, संकेतों की विश्वसनीयता में सुधार कर सकती है। संकेतक चयन, पैरामीटर सेटिंग, भार वितरण आदि का अनुकूलन करके रणनीति की स्थिरता को बढ़ाया जा सकता है। इस तरह की संयोजन रणनीति उन रणनीतिक व्यापारियों के लिए उपयुक्त है जो संकेतक संकेत स्थिरता की उच्च आवश्यकताओं को पूरा करते हैं।
/*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)