اس حکمت عملی میں متعدد تکنیکی اشارے استعمال کیے گئے ہیں تاکہ قیمتوں کے رجحانات کا اندازہ لگایا جاسکے اور خرید و فروخت کے سگنل دیئے جائیں۔
اس حکمت عملی میں قیمتوں کے رجحانات کا فیصلہ بنیادی طور پر درج ذیل تکنیکی اشارے کی بنیاد پر کیا جاتا ہے:
سپر ٹرینڈ انڈیکیٹر ((SuperTrend): اوپر اور نیچے کی طرف سے حساب کردہ اے ٹی آر کے مطابق ، قیمت اوپر کی طرف بڑھتی ہے اور نیچے کی طرف بڑھتی ہے۔
سادہ منتقل اوسط ((ایس ایم اے): قیمت اوپر ایس ایم اے کے ذریعے زیادہ ہے، نیچے ایس ایم اے کے ذریعے خالی؛
رفتار اشارے: قیمت کی رفتار مثبت کے لئے زیادہ ہے، منفی کے لئے کم ہے؛
MACD: DIFF اوپر کی طرف DEA لائن کو توڑنے کے لئے زیادہ ہے، نیچے کی طرف DEA لائن کو توڑنے کے لئے کم ہے؛
بیل اور ریچھ: بیل اور ریچھ کے مقابلے میں زیادہ طاقت ہے، اور اس کے برعکس، زیادہ طاقت ہے.
آر ایس آئی: آر ایس آئی کے اوپر 30 لائنیں زیادہ ہیں ، نیچے 70 لائنیں خالی ہیں۔
یَنْیَنْیَنْیَنْیَنْیَنْیَنْیَنْیَنْیَنْیَنْیَنْیَنْیَ:
سی سی آئی: سی سی آئی 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)