
اس حکمت عملی میں سادہ منتقل اوسط کا استعمال کیا گیا ہے تاکہ رجحان کی سمت کا تعین کیا جاسکے۔ اس حکمت عملی میں مسلسل بڑھتی ہوئی قیمتوں پر زیادہ تجارت کی جاتی ہے اور مسلسل گرتی ہوئی قیمتوں پر کم قیمت کی جاتی ہے ، جس سے دو طرفہ تجارت ممکن ہوتی ہے۔
اس حکمت عملی میں مارکیٹ کے رجحانات کی سمت کا تعین کرنے کے لئے وی وی ایم اے کا استعمال کیا گیا ہے۔ جب وی ڈبلیو ایم اے بڑھتا ہے تو ، زیادہ کام کریں۔ جب وی ڈبلیو ایم اے گرتا ہے تو ، کم کام کریں۔
خاص طور پر ، حکمت عملی سب سے پہلے ایک خاص دورانیے کے لئے وی ڈبلیو ایم اے کا حساب لگاتی ہے ، اور پھر فیصلہ کرتی ہے کہ آیا وی ڈبلیو ایم اے 5 دن سے زیادہ بڑھ گیا ہے ، اگر ایسا ہے تو ، زیادہ پوزیشن کھولی جائے۔ اگر وی ڈبلیو ایم اے 5 دن سے زیادہ گر گیا ہے تو ، پوزیشن خالی کردی جائے۔ پوزیشن کی شرط یہ ہے کہ وی ڈبلیو ایم اے کا رخ 5 دن سے زیادہ کے بعد پلٹ جائے۔
ماہانہ اور سالانہ آمدنی کی کارکردگی کا حساب لگانے کے لئے ، حکمت عملی ماہانہ اور سالانہ آمدنی کو ریکارڈ کرتی ہے۔ حکمت عملی کو مارکیٹ کی بنیاد پر آمدنی کے ساتھ موازنہ کرکے حکمت عملی کے مقابلے میں مارکیٹ کی کارکردگی کو دیکھنے کے لئے حکمت عملی کو دیکھا جاسکتا ہے۔
اس حکمت عملی کے درج ذیل فوائد ہیں:
رجحانات کا تعین کرنے کے لئے VWMA کا استعمال کرتے ہوئے ، مارکیٹ کے شور کو مؤثر طریقے سے فلٹر کیا جاسکتا ہے ، جس سے اہم رجحانات کو پکڑ لیا جاسکتا ہے۔
رجحان کی تصدیق کے بعد ہی پوزیشن کھولنے سے رجحان کی تبدیلی کے خطرے سے بچا جاسکتا ہے۔
دو طرفہ تجارت کے ساتھ ، آپ کو منافع بخش ہوسکتا ہے ، چاہے قیمت بڑھتی ہو یا کم ہوتی ہو۔
ماہانہ اور سالانہ آمدنی کو ریکارڈ کریں تاکہ حکمت عملی کی تاثیر کا اندازہ لگایا جا سکے۔
انکم ٹیبل میں مارکیٹ بیس کی آمدنی شامل کریں تاکہ حکمت عملی اور مارکیٹ کی نسبتا کارکردگی کا موازنہ کیا جاسکے۔
اس حکمت عملی کے کچھ خطرات بھی ہیں:
وی ڈبلیو ایم اے کا استعمال کرتے ہوئے رجحانات کا تعین کریں کہ رجحانات میں تاخیر ہوسکتی ہے اور رجحانات کے ابتدائی مرحلے میں کھوئے ہوئے مواقع ہوسکتے ہیں۔
رجحان کی تصدیق کے بعد ہی پوزیشن کھولیں ، اور کچھ حرکت سے محروم رہ سکتے ہیں۔
دو طرفہ تجارت میں سٹاپ نقصان کا تعین کرنا ضروری ہے ورنہ نقصان میں اضافہ ہوسکتا ہے۔
بڑے مارکیٹ میں اتار چڑھاؤ کی وجہ سے اسٹاپ نقصان کا سبب بن سکتا ہے ، جس سے مکمل رجحان برقرار نہیں رہ سکتا ہے۔
رجحان کی تبدیلی کے فیصلے غلط ہوسکتے ہیں ، جس سے نقصان میں اضافہ ہوتا ہے۔
یہ حکمت عملی مندرجہ ذیل پہلوؤں سے بہتر ہو سکتی ہے:
VWMA سائیکل پیرامیٹرز کو بہتر بنانے اور رجحانات کو بہتر بنانے کے لئے.
رجحانات کی توثیق کے لئے دن کی تعداد کو ایڈجسٹ کریں ، اور وقت کو بہتر بنائیں۔
اسٹاپ نقصان کی حکمت عملی کو شامل کریں اور انفرادی نقصان کو کنٹرول کریں۔
اس کے علاوہ ، اس میں دیگر اشارے بھی شامل ہیں جو اس بات کا تعین کرتے ہیں کہ کیا رجحان بدل گیا ہے ، جس سے اس بات کا یقین بڑھتا ہے۔
پوزیشن مینجمنٹ کو بہتر بنانا ، مارکیٹ کے حالات کے مطابق پوزیشن کو ایڈجسٹ کرنا۔
کم سے کم منافع مقرر کریں، اور آپ کے کاروبار کی لاگت کو مدنظر رکھیں۔
اس حکمت عملی کا مجموعی نظریہ واضح اور آسان ہے ، VWMA کا استعمال رجحان کی سمت کا تعین کرنے کے لئے ، رجحان کی تصدیق کے بعد دو طرفہ تجارت ، مارکیٹ کی نقل و حرکت کو مؤثر طریقے سے ٹریک کرسکتی ہے۔ تاہم ، اس میں کچھ خطرہ بھی موجود ہے ، جس میں پیرامیٹرز کی مزید جانچ اور اصلاح کی ضرورت ہے ، باہر نکلنے کے منطق کو ایڈجسٹ کیا جائے ، اور پوزیشن کے سائز کو مناسب طریقے سے کنٹرول کیا جائے۔ یہ حکمت عملی دو طرفہ تجارت کی حکمت عملی پر مبنی ہے ، جس نے مقداری تجارت کی بنیاد رکھی ہے ، جو مزید تحقیق اور بہتری کے قابل ہے۔
/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="Monthly Returns in Strategies with Market Benchmark", shorttitle="Monthly P&L With Market", initial_capital= 1000, overlay=true,default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.1)
maLength= input(400)
wma= vwma(hl2,maLength)
uptrend= rising(wma, 5)
downtrend= falling(wma,5)
plot(wma)
if uptrend
strategy.entry("Buy", strategy.long)
else
strategy.close("Buy")//
///////////////////
// MONTHLY TABLE //
new_month = month(time) != month(time[1])
new_year = year(time) != year(time[1])
eq = strategy.equity
bar_pnl = eq / eq[1] - 1
bar_bh = (close-close[1])/close[1]
cur_month_pnl = 0.0
cur_year_pnl = 0.0
cur_month_bh = 0.0
cur_year_bh = 0.0
// Current Monthly P&L
cur_month_pnl := new_month ? 0.0 :
(1 + cur_month_pnl[1]) * (1 + bar_pnl) - 1
cur_month_bh := new_month ? 0.0 :
(1 + cur_month_bh[1]) * (1 + bar_bh) - 1
// Current Yearly P&L
cur_year_pnl := new_year ? 0.0 :
(1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1
cur_year_bh := new_year ? 0.0 :
(1 + cur_year_bh[1]) * (1 + bar_bh) - 1
// Arrays to store Yearly and Monthly P&Ls
var month_pnl = array.new_float(0)
var month_time = array.new_int(0)
var month_bh = array.new_float(0)
var year_pnl = array.new_float(0)
var year_time = array.new_int(0)
var year_bh = array.new_float(0)
last_computed = false
if (not na(cur_month_pnl[1]) and (new_month or time_close + (time_close - time_close[1]) > timenow or barstate.islastconfirmedhistory))
if (last_computed[1])
array.pop(month_pnl)
array.pop(month_time)
array.push(month_pnl , cur_month_pnl[1])
array.push(month_time, time[1])
array.push(month_bh , cur_month_bh[1])
if (not na(cur_year_pnl[1]) and (new_year or time_close + (time_close - time_close[1]) > timenow or barstate.islastconfirmedhistory))
if (last_computed[1])
array.pop(year_pnl)
array.pop(year_time)
array.push(year_pnl , cur_year_pnl[1])
array.push(year_time, time[1])
array.push(year_bh , cur_year_bh[1])
last_computed := (time_close + (time_close - time_close[1]) > timenow or barstate.islastconfirmedhistory) ? true : nz(last_computed[1])
// Monthly P&L Table
var monthly_table = table(na)
getCellColor(pnl, bh) =>
if pnl > 0
if bh < 0 or pnl > 2 * bh
color.new(color.green, transp = 20)
else if pnl > bh
color.new(color.green, transp = 50)
else
color.new(color.green, transp = 80)
else
if bh > 0
color.new(color.red, transp = 20)
else if pnl < bh
color.new(color.red, transp = 50)
else
color.new(color.red, transp = 80)
if last_computed
monthly_table := table.new(position.bottom_right, columns = 14, rows = array.size(year_pnl) + 1, border_width = 1)
table.cell(monthly_table, 0, 0, "", bgcolor = #cccccc)
table.cell(monthly_table, 1, 0, "Jan", bgcolor = #cccccc)
table.cell(monthly_table, 2, 0, "Feb", bgcolor = #cccccc)
table.cell(monthly_table, 3, 0, "Mar", bgcolor = #cccccc)
table.cell(monthly_table, 4, 0, "Apr", bgcolor = #cccccc)
table.cell(monthly_table, 5, 0, "May", bgcolor = #cccccc)
table.cell(monthly_table, 6, 0, "Jun", bgcolor = #cccccc)
table.cell(monthly_table, 7, 0, "Jul", bgcolor = #cccccc)
table.cell(monthly_table, 8, 0, "Aug", bgcolor = #cccccc)
table.cell(monthly_table, 9, 0, "Sep", bgcolor = #cccccc)
table.cell(monthly_table, 10, 0, "Oct", bgcolor = #cccccc)
table.cell(monthly_table, 11, 0, "Nov", bgcolor = #cccccc)
table.cell(monthly_table, 12, 0, "Dec", bgcolor = #cccccc)
table.cell(monthly_table, 13, 0, "Year", bgcolor = #999999)
for yi = 0 to array.size(year_pnl) - 1
table.cell(monthly_table, 0, yi + 1, tostring(year(array.get(year_time, yi))), bgcolor = #cccccc)
y_color = getCellColor(array.get(year_pnl, yi), array.get(year_bh, yi))
table.cell(monthly_table, 13, yi + 1, tostring(round(array.get(year_pnl, yi) * 100)) + " (" + tostring(round(array.get(year_bh, yi) * 100)) + ")", bgcolor = y_color)
for mi = 0 to array.size(month_time) - 1
m_row = year(array.get(month_time, mi)) - year(array.get(year_time, 0)) + 1
m_col = month(array.get(month_time, mi))
m_color = getCellColor(array.get(month_pnl, mi), array.get(month_bh, mi))
table.cell(monthly_table, m_col, m_row, tostring(round(array.get(month_pnl, mi) * 100)) + " (" + tostring(round(array.get(month_bh, mi) * 100)) +")", bgcolor = m_color)