একাধিক সূচক সংমিশ্রণ কৌশল

লেখক:চাওঝাং, তারিখ: ২০২৩-১০-০৭ ১৫ঃ৩৪ঃ৩৩
ট্যাগঃ

সারসংক্ষেপ

এই কৌশলটি মূল্যের প্রবণতা বিচার করতে এবং ক্রয় এবং বিক্রয় সংকেত তৈরি করতে একাধিক প্রযুক্তিগত সূচককে একত্রিত করে।

কৌশল নীতি

কৌশলটি মূলত নিম্নলিখিত সূচকগুলি ব্যবহার করে দামের প্রবণতা নির্ধারণ করেঃ

  1. সুপারট্রেন্ডঃ যখন দাম উপরের ব্যান্ডের উপরে ভেঙে যায় তখন কিনুন, যখন নীচের ব্যান্ডের নিচে ভেঙে যায় তখন বিক্রি করুন।

  2. এসএমএঃ যখন দাম এসএমএ এর উপরে ক্রস করে তখন কিনুন, যখন এসএমএ এর নীচে ক্রস করে তখন বিক্রি করুন।

  3. ইম্পোমেন্টঃ ইম্পোমেন্ট ইতিবাচক হলে লম্বা, নেতিবাচক হলে শর্ট।

  4. এমএসিডিঃ ডিআইএফএফ ডিইএ এর উপরে ক্রস করলে কিনুন, এর নিচে ক্রস করলে বিক্রি করুন।

  5. ষাঁড় এবং ভালুকঃ যখন ষাঁড়ের শক্তি > ভালুকের শক্তি, তখন লম্বা যান।

  6. আরএসআইঃ আরএসআই ৩০ এর উপরে গেলে কিনুন, ৭০ এর নিচে গেলে বিক্রি করুন।

  7. মোমবাতিঃ N bullish bars এর পরে লম্বা যান, N bearish bars এর পরে শর্ট যান।

  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) 


আরো