
یہ حکمت عملی ایک جامع تجزیاتی نظام ہے جس میں متعدد اشارے شامل ہیں ، بنیادی طور پر مارکیٹ کے رجحانات اور ممکنہ الٹ پوائنٹس کا اندازہ لگانے کے لئے VAWSI ((حجم اور اے ٹی آر وزنی طاقت انڈیکس) ، رجحان تسلسل اشارے اور ترمیم شدہ اے ٹی آر پر مبنی ہے۔ اس حکمت عملی میں مختلف مارکیٹ کے حالات کے مطابق ڈائنامک لمبائی کا حساب کتاب بھی متعارف کرایا گیا ہے۔ یہ متحرک طور پر اسٹاپ نقصان اور فائدہ اٹھانے کا انتظام کرتا ہے ، اور ممکنہ الٹ سگنل کی نشاندہی کرتے وقت تجارت کرتا ہے۔
اس حکمت عملی کا بنیادی مقصد مارکیٹ کے رجحانات کی طاقت ، مدت اور اتار چڑھاؤ کو متعدد کسٹم اشارے کے ذریعہ ماپنا ہے تاکہ بہترین تجارت کا وقت معلوم کیا جاسکے۔ یہ خاص طور پر واضح رجحانات والی مارکیٹوں کے لئے موزوں ہے ، لیکن اس میں مارکیٹ کی مختلف حالتوں سے نمٹنے کے لئے موافقت پذیر میکانزم بھی شامل ہیں۔
VAWSI اشارے: یہ ایک اصل اشارے ہے جو RSI کی طرح ہے لیکن RMA کی بجائے VAWMA ((حجم اور اے ٹی آر ویٹڈ موونگ اوسط) کا استعمال کرتا ہے۔ یہ ایک نئے رجحان کی طاقت کی پیمائش کرتا ہے۔
ٹرینڈ تسلسل اشارے: ایک اور اصل اشارے جو ٹرینڈ کے تسلسل کی مدت کی پیمائش کرتا ہے۔ یہ ماخذ کے اعداد و شمار کو ایک مخصوص لمبائی کے اندر سب سے زیادہ / سب سے کم پوائنٹس سے زیادہ سے زیادہ انحراف کا حساب کرتا ہے ، پھر اس انحراف کو جمع کرتا ہے اور طاقت کا اشاریہ بناتا ہے۔
نظر ثانی شدہ اے ٹی آر: اعلی - کم اور ماخذ - ماخذ کے پچھلے ماخذ کی زیادہ سے زیادہ قیمت لیں ، پھر اس کی تبدیلی کی مطلق قیمت لیں اور ماخذ کے اعداد و شمار کو یکساں کریں۔
متحرک لمبائی کا حساب: BlackCat1402 کا استعمال کرتے ہوئے متحرک لمبائی کا حساب لگانے کا طریقہ ، مارکیٹ کے حالات کے مطابق اشارے کی لمبائی کے پیرامیٹرز کو ایڈجسٹ کریں۔
جامع تجزیہ: VAWSI ، رجحان کی مستقل مزاجی اور اے ٹی آر کی پڑھائی کو ایک جامع اشارے کے لئے جوڑیں۔ کم اختتامی نمبر کا مطلب ہے کہ الٹ ہونے والا ہے ، اور زیادہ تعداد کا مطلب ہے کہ مارکیٹ میں عدم استحکام یا ہلچل ہے۔
متحرک سٹاپ نقصان / منافع: متحرک سٹاپ نقصان اور منافع کی سطح جو جامع اشارے اور موجودہ رجحان کی سمت پر مبنی ہے۔
ٹرانزیکشن سگنل: جب قیمت مکمل طور پر حساب سے طے شدہ حد سے گزر جاتی ہے تو ، نظام کراس کی تصدیق کرتا ہے اور ایک ٹرانزیکشن سگنل پیدا کرتا ہے۔
کثیر جہتی تجزیہ: متعدد اشارے کے ساتھ مل کر ، حکمت عملی مارکیٹ کو مختلف زاویوں سے تجزیہ کرنے کے قابل بناتی ہے ، جس سے فیصلے کی درستگی میں اضافہ ہوتا ہے۔
انکولی: متحرک لمبائی کا حساب کتاب حکمت عملی کو مختلف مارکیٹ کے حالات کے مطابق ڈھالنے کی اجازت دیتا ہے ، جس سے حکمت عملی کی لچک میں اضافہ ہوتا ہے۔
رسک مینجمنٹ: متحرک اسٹاپ نقصان اور فائدہ اٹھانے کی ترتیبات خطرے کو بہتر طور پر کنٹرول کرنے اور مارکیٹ میں تبدیلیوں کے مطابق ڈھالنے میں مدد کرتی ہیں۔
اصل اشارے: وی اے ڈبلیو ایس آئی اور ٹرینڈ تسلسل اشارے مارکیٹ میں انوکھا بصیرت فراہم کرتے ہیں ، اور ممکنہ طور پر ان اشاروں کو پکڑتے ہیں جن کو روایتی اشارے نظرانداز کرتے ہیں۔
بار اسٹیٹ.isconfirmed کا استعمال کرتے ہوئے اس بات کو یقینی بناتا ہے کہ سگنل کو دوبارہ نہیں بنایا جائے ، جس سے پیمائش کی درستگی میں اضافہ ہوتا ہے۔
حسب ضرورت: متعدد پیرامیٹرز کو ایڈجسٹ کیا جاسکتا ہے تاکہ حکمت عملی کو مختلف قسم کے تجارت اور وقت کے فریموں کے مطابق بنایا جاسکے۔
ضرورت سے زیادہ اصلاح: بہت سارے پیرامیٹرز کی وجہ سے ضرورت سے زیادہ اصلاح ہوسکتی ہے ، جس کی وجہ سے وہ اصل میں تجارت میں خراب کارکردگی کا مظاہرہ کرسکتے ہیں۔
مارکیٹ کی موافقت: اگرچہ کچھ مارکیٹوں میں اچھی کارکردگی کا مظاہرہ کیا جاتا ہے ، لیکن یہ مارکیٹ کے تمام حالات پر لاگو نہیں ہوسکتا ہے ، خاص طور پر کم اتار چڑھاؤ والے بازاروں میں۔
پیچیدگی: حکمت عملی کی پیچیدگی اس کو سمجھنے اور برقرار رکھنے کے لئے مشکل بنا سکتی ہے ، جس سے آپریشنل غلطیوں کا خطرہ بڑھ جاتا ہے۔
کمپیوٹنگ کی گہرائی: متعدد اپنی مرضی کے مطابق اشارے اور متحرک حساب کتاب کے نتیجے میں اعلی کمپیوٹنگ کا بوجھ ہوسکتا ہے ، جس سے اس پر عملدرآمد کی رفتار متاثر ہوتی ہے۔
تاریخی اعداد و شمار پر انحصار: حکمت عملی میں بڑی تعداد میں تاریخی اعداد و شمار کا استعمال کیا جاتا ہے ، جو کچھ معاملات میں تاخیر کا سبب بن سکتا ہے۔
پیرامیٹرز کی اصلاح: مختلف مارکیٹ کے حالات میں حکمت عملی کی کارکردگی کو بہتر بنانے کے لئے مختلف وزن اور لمبائی کے پیرامیٹرز کو بہتر بنانے کے لئے مشین لرننگ الگورتھم کا استعمال کریں۔
مارکیٹ کی حالت کی شناخت: مارکیٹ کی حالت کی شناخت کا ایک ماڈیول شامل کیا گیا ہے تاکہ مختلف مارکیٹ کے ماحول میں حکمت عملی کے پیرامیٹرز کو خود بخود ایڈجسٹ کیا جاسکے۔
سگنل فلٹرنگ: جعلی سگنل کو کم کرنے کے لئے رجحان کی طاقت کی حد جیسے اضافی فلٹرنگ میکانزم متعارف کرایا گیا ہے۔
ٹرانزیکشن حجم تجزیہ: ٹرانزیکشن حجم کا گہرا تجزیہ ، ٹرانزیکشن حجم کی شکل کی شناخت متعارف کرانے کے لئے ، سگنل کی وشوسنییتا کو بڑھانے کے لئے۔
کثیر ٹائم فریم تجزیہ: تجارتی فیصلوں کی استحکام کو بہتر بنانے کے لئے متعدد ٹائم فریموں کے اشارے کو مربوط کرنا۔
خطرے کے انتظام کو بہتر بنانا: زیادہ پیچیدہ خطرے کے انتظام کی حکمت عملی جیسے متحرک پوزیشن سائزنگ اور کثیر سطح کے نقصانات کو روکنا۔
کمپیوٹنگ کی کارکردگی: کوڈ کو بہتر بنانے کے لئے کمپیوٹنگ کی کارکردگی کو بہتر بنانے کے لئے، خاص طور پر جب بڑے پیمانے پر تاریخی اعداد و شمار کو سنبھالنے کے لئے.
VAWSI اور ٹرینڈ تسلسل الٹ حکمت عملی ایک پیچیدہ اور جامع تجارتی نظام ہے جس میں متعدد اختراعی اشارے اور متحرک پیرامیٹرز کی ایڈجسٹمنٹ شامل ہیں۔ اس کا فائدہ مارکیٹ کے کثیر جہتی تجزیہ اور خود کو اپنانے میں ہے ، جس سے یہ مارکیٹ کے مختلف حالات میں ممکنہ الٹ مواقع تلاش کرنے کے قابل ہے۔ تاہم ، حکمت عملی کی پیچیدگی بھی زیادہ اصلاح اور موافقت کے چیلنجوں کا باعث بنتی ہے۔
مزید اصلاحات کے ذریعہ ، خاص طور پر پیرامیٹرز کی ایڈجسٹمنٹ ، مارکیٹ کی حالت کی شناخت اور رسک مینجمنٹ کے لحاظ سے ، اس حکمت عملی میں ایک طاقتور تجارتی آلہ بننے کی صلاحیت ہے۔ تاہم ، صارفین کو یہ نوٹ کرنا چاہئے کہ کوئی بھی حکمت عملی کامل نہیں ہے ، اور مسلسل نگرانی اور ایڈجسٹمنٹ ضروری ہے۔ عملی استعمال میں ، یہ تجویز کیا جاتا ہے کہ سملیٹ اکاؤنٹس پر اس کی بھرپور جانچ کی جائے ، اور دیگر تجزیاتی ٹولز اور مارکیٹ کے علم کے ساتھ مل کر تجارتی فیصلے کیے جائیں۔
/*backtest
start: 2024-05-21 00:00:00
end: 2024-06-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("VAWSI and Trend Persistance Reversal", overlay=true, max_bars_back = 4999, process_orders_on_close = true)
//INPUTS
sltp = input.float(title = "Minimum SL/TP", defval = 5.0)
rsi_weight = input.float(title = "Wawsi weight", defval = 100.0)
half_weight= input.float(title = "Trend Persistence Weight", defval = 79.0)
atr_weight = input.float(title = "ATR Weight", defval = 20.0)
com_mult = input.float(title = "Combination Mult", defval = 1, step = .001)
smoothing = input.int(title = "Trend Persistence smooth length", defval = 3)
CycPart = input.float(1.1, step = .001, title = "Length Cycle Decimal")
src = close
hclose = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, src)
//BlackCat1402's Dynamic Length Calculation
EhlersHoDyDC(Price, CycPart) =>
// Vars:
Smooth = 0.00
Detrender = 0.00
I1 = 0.00
Q1 = 0.00
jI = 0.00
jQ = 0.00
I2 = 0.00
Q2 = 0.00
Re = 0.00
Im = 0.00
Period = 0.00
SmoothPeriod = 0.00
pi = 2 * math.asin(1)
DomCycle = 0.0
//Hilbert Transform
Smooth := bar_index > 5 ? (4 * Price + 3 * nz(Price[1]) + 2 * nz(Price[2]) + nz(Price[3])) / 10 : Smooth
Detrender := bar_index > 5 ? (.0962 * Smooth + .5769 * nz(Smooth[2]) - .5769 * nz(Smooth[4]) - .0962 * nz(Smooth[6])) * (.075 * nz(Period[1]) + .54) : Detrender
//Compute InPhase and Quadrature components
Q1 := bar_index > 5 ? (.0962 * Detrender + .5769 * nz(Detrender[2]) - .5769 * nz(Detrender[4]) - .0962 * nz(Detrender[6])) * (.075 * nz(Period[1]) + .54) : Q1
I1 := bar_index > 5 ? nz(Detrender[3]) : I1
//Advance the phase of I1 and Q1 by 90 degrees
jI := (.0962 * I1 + .5769 * nz(I1[2]) - .5769 * nz(I1[4]) - .0962 * nz(I1[6])) * (.075 * nz(Period[1]) + .54)
jQ := (.0962 * Q1 + .5769 * nz(Q1[2]) - .5769 * nz(Q1[4]) - .0962 * nz(Q1[6])) * (.075 * nz(Period[1]) + .54)
//Phasor addition for 3 bar averaging
I2 := I1 - jQ
Q2 := Q1 + jI
//Smooth the I and Q components before applying the discriminator
I2 := .2 * I2 + .8 * nz(I2[1])
Q2 := .2 * Q2 + .8 * nz(Q2[1])
//Homodyne Discriminator
Re := I2 * nz(I2[1]) + Q2 * nz(Q2[1])
Im := I2 * nz(Q2[1]) - Q2 * nz(I2[1])
Re := .2 * Re + .8 * nz(Re[1])
Im := .2 * Im + .8 * nz(Im[1])
Period := Im != 0 and Re != 0 ? 2 * pi / math.atan(Im / Re) : Period
Period := Period > 1.5 * nz(Period[1]) ? 1.5 * nz(Period[1]) : Period
Period := Period < .67 * nz(Period[1]) ? .67 * nz(Period[1]) : Period
//Limit Period to be within the bounds of 6 bar and 50 bar cycles
Period := Period < 6 ? 6 : Period
Period := Period > 50 ? 50 : Period
Period := .2 * Period + .8 * nz(Period[1])
SmoothPeriod := .33 * Period + .67 * nz(SmoothPeriod[1])
//it can add filter to Period here
DomCycle := math.ceil(CycPart * SmoothPeriod) > 34 ? 34 : math.ceil(CycPart * SmoothPeriod) < 1 ? 1 : math.ceil(CycPart * SmoothPeriod)
DomCycle
wma(src, length) =>
wma = 0.0
sum = 0.0
norm = length * (length + 1) / 2
for i = 0 to length - 1
sum := sum + src[i] * (length - i)
wma := sum / norm
length = math.round(math.ceil(EhlersHoDyDC(hclose,CycPart)))
// Traditional Function initialization
highest_custom(src, length) =>
x = src
for i = 0 to math.min(length, 4999)
if src[i] > x
x := src[i]
x
lowest_custom(src, length) =>
x = src
for i = 0 to math.min(length, 4999)
if src[i] < x
x := src[i]
x
rma(src, len) =>
sum = 0.0
for i = 0 to len - 1
math.min(1, len)
sum += src[i]
rma = sum / len
rma := nz(rma[1]) * (len - 1) / len + src / len
sma(src, length) =>
math.sum(src, length) / length
hln(src, length) =>
TR = math.max(math.abs(src - src[1]), high - low)
TR := src / math.abs(ta.change(rma(TR, length)))
TR := (1 / TR) * 100
vawma(src, length) =>
atr = ta.atr(1)
aavg = sma(atr, length)
vavg = sma(volume, length)
weighted_sum = 0.0
sum_weights = 0.0
weighted = 0.0
for i = 0 to length
weight = ((volume[i] / vavg + (atr[i]) / aavg) / 2)
weighted_sum += src[i] * weight
sum_weights += weight
a = (weighted_sum / sum_weights)
vawsi(src, len) =>
rmaUp = vawma(math.max(ta.change(src), 0), len)
rmaDown = vawma(-math.min(ta.change(src), 0), len)
rsi = 100 - (100 / (1 + rmaUp / rmaDown))
trendPersistence(src, length, smoothing) =>
trendu = math.abs(src - highest_custom(src, length))
trendd = math.abs(src - lowest_custom(src, length))
trendu := wma(trendu, smoothing)
trendd := wma(trendd, smoothing)
trendu := ta.change(ta.cum(trendu))
trendd := ta.change(ta.cum(trendd))
trend = wma(math.max(trendu, trendd), smoothing)
rmaUp = rma(math.max(ta.change(trend), 0), length)
rmaDown = rma(-math.min(ta.change(trend), 0), length)
rsi = 100 - (100 / (1 + rmaUp / rmaDown))
//Strategy Calculations
sl = ((100 - sltp) / 100) * close
tp = ((100 + sltp) / 100) * close
var bool crossup = na
var bool crossdown = na
var float dir = na
var float BearGuy = 0
BullGuy = ta.barssince(crossup or crossdown)
if na(BullGuy)
BearGuy += 1
else
BearGuy := math.min(BullGuy, 4999)
rsiw = rsi_weight / 100
cew = half_weight / 100
atrw = atr_weight / 100
atr = hln(hclose, length) * atrw
ce = 1 / trendPersistence(hclose, length, smoothing)
com = 1 / math.max(math.abs(vawsi(hclose, length) - 50) * 2, 20)
comfin = (((com * rsiw) + (ce * cew) - atr)) * com_mult
lower = highest_custom(math.min((math.max(highest_custom(src, BearGuy) * (1 - comfin), sl)), src[1]), BearGuy)
upper = lowest_custom(math.max((math.min(lowest_custom(src, BearGuy) * (1 + comfin), tp)), src[1]), BearGuy)
var float thresh = na
if na(thresh)
thresh := lower
if na(dir)
dir := 1
if crossdown
dir := -1
if crossup
dir := 1
if dir == 1
thresh := lower
if dir == -1
thresh := upper
crossup := ta.crossover(hclose, thresh) and barstate.isconfirmed
crossdown := ta.crossunder(hclose, thresh) and barstate.isconfirmed
//STRATEGY
if crossup
strategy.entry("long", strategy.long)
if crossdown
strategy.entry("Short", strategy.short)
//PLOTTING
col = hclose > thresh ? color.lime : color.red
plot(thresh, linewidth = 2, color = color.new(col[1], 0))