یہ حکمت عملی موجودہ رجحان کی سمت کا تعین کرنے کے لئے ایک چلتی اوسط نظام کا استعمال کرتی ہے اور رجحان کے مطابق لمبی یا مختصر پوزیشن بناتی ہے۔ جب چلتی اوسط بڑھتی ہے تو ، طویل میں اعتماد زیادہ ہوتا ہے ، لہذا لمبا ہوجاتا ہے۔ جب چلتی اوسط کم ہوتی ہے تو ، مختصر میں اعتماد زیادہ ہوتا ہے ، لہذا مختصر ہوجاتا ہے۔ یہ حکمت عملی بنیادی طور پر چلتی اوسط نظام کا استعمال مارکیٹ کے رجحان کی سمت کا تعین کرنے کے لئے کرتی ہے ، جو رجحان کی پیروی کرنے والی حکمت عملی سے تعلق رکھتی ہے۔
ایک مخصوص مدت کے لئے چلنے والی اوسط اشارے کے طور پر وزن شدہ چلنے والی اوسط vwma کا حساب لگائیں (ڈیفالٹ 400 ادوار) ۔
اس بات کا تعین کریں کہ آیا حرکت پذیر اوسط vwma بڑھ رہا ہے ، اگر بڑھ رہا ہے تو طویل سگنل اپ ٹرینڈ مقرر کریں؛ اگر گر رہا ہے تو مختصر سگنل ڈاؤن ٹرینڈ مقرر کریں۔
جب اپ ٹرینڈ درست ہو تو، طویل عرصے تک جائیں؛ جب ڈاؤن ٹرینڈ درست ہو تو، طویل بند کریں اور مختصر جائیں.
حکمت عملی کا حساب لگانا واپسی bar_pnl اور خریدیں اور ہر بار کے لئے واپسی bar_bh رکھیں.
سہ ماہی اور سالانہ ٹائم اسٹیمپ کے مطابق، سہ ماہی حکمت عملی واپسی سہ ماہی_pnl، سالانہ واپسی سال_pnl اور متعلقہ خریدیں & ہولڈ واپسی سہ ماہی_bh، سال_bh کا حساب لگائیں.
ایک ٹیبل میں سہ ماہی حکمت عملی واپسی بمقابلہ خرید & ہولڈ واپسی دکھائیں.
اس حکمت عملی کے اہم فوائد یہ ہیں:
کام کرنا آسان ہے۔ چلتی اوسط کے ذریعے مارکیٹ کے رجحان کا تعین کرنا، سمجھنے میں آسان ہے۔
واپسی پر قابو پانے میں اچھا ہے۔ رجحان کی پیروی غیر رجحان کی مارکیٹوں میں نقصانات کو کم کرتی ہے۔
چند سایڈست پیرامیٹرز۔ بنیادی طور پر چلتی اوسط مدت کو ایڈجسٹ کریں ، جانچ اور اصلاح کرنا آسان ہے۔
نتائج کو واضح طور پر ظاہر کرنے کے لئے بدیہی واپسی ٹیبل.
موازنہ کے لئے ٹیبل میں خرید & ہولڈ ریٹرن شامل کریں، اضافی ریٹرن دکھاتا ہے۔
لچکدار میز پوزیشن، دیگر حکمت عملی کے ساتھ ضم کرنے کے لئے آسان.
کچھ خطرات بھی ہیں:
خرید و ہولڈ کے مقابلے میں طویل مدتی بیل مارکیٹ میں کم کارکردگی۔ حرکت پذیر اوسط مدت کو بہتر بنا سکتا ہے۔
رینج سے منسلک مارکیٹ میں ہائی وِپسا خطرہ۔ ٹرانزیکشن کو کم کرنے کے لئے پچھلے اعلی کو توڑنے جیسے فلٹر حالات شامل کر سکتے ہیں۔
چلتی اوسط خراب منحنی فٹ ہونے کی صلاحیت رکھتا ہے ، رجحان موڑنے والے مقامات کو یاد کرسکتا ہے۔ مختلف قسم کے چلتے ہوئے اوسط کی جانچ کرسکتا ہے۔
سٹاپ نقصان کا کوئی طریقہ کار، بڑے پیمانے پر کمی کا خطرہ۔ متحرک سٹاپ نقصان یا پوزیشن سائزنگ مقرر کر سکتے ہیں.
ٹیبل کے لیے، خطرہ میٹرکس شامل کر سکتے ہیں جیسے تیز تناسب، زیادہ سے زیادہ کھینچنا.
حکمت عملی کو مندرجہ ذیل پہلوؤں میں بہتر بنایا جاسکتا ہے:
چلتی اوسط پیرامیٹرز کو بہتر بنائیں، مارکیٹ کے نظام کی بنیاد پر مدت کو ایڈجسٹ کریں۔
فلٹرز شامل کریں جیسے پچھلے اعلی کو توڑنے کے لئے whipssaws کو کم کریں.
مختلف قسم کے حرکت پذیر اوسط کی کوشش کریں، جیسے WMA، DEMA وغیرہ.
سٹاپ نقصان کے طریقہ کار شامل کریں، جیسے متحرک اسٹاپ یا پوزیشن سائزنگ.
ٹیبل کے مواد کو افزودہ کریں، تیز تناسب، زیادہ سے زیادہ کھپت جیسے میٹرکس شامل کریں.
رجحانات کا تعین کرنے کے لئے دیگر اشارے جیسے ایم اے سی ڈی، بولنگر بینڈ کے ساتھ مل کر.
پوزیشن سائزنگ کو بہتر بنائیں، مارکیٹ کے حالات کی بنیاد پر پوزیشنوں کو متحرک طور پر ایڈجسٹ کریں۔
مختلف مصنوعات پر ٹیسٹ کریں، بہترین اطلاق کا دائرہ تلاش کریں۔
چلتی اوسط ٹریڈنگ کی حکمت عملی نسبتا simple آسان اور سیدھی ہے۔ یہ چلتی اوسط کا استعمال کرتے ہوئے رجحان کا تعین کرکے رجحان کی پیروی کرتی ہے ، جس میں اچھے ڈراؤڈاؤن کنٹرول ہوتے ہیں ، جو رجحان کے بعد ٹریڈرز کے لئے موزوں ہیں۔ ابھی بھی اصلاح کے لئے بہت زیادہ گنجائش موجود ہے ، جیسے چلتی اوسط نظام ، اسٹاپ نقصان کا طریقہ کار ، پوزیشن سائزنگ وغیرہ تاکہ اسے مارکیٹ کے پیچیدہ ماحول میں موافقت پذیر بنایا جاسکے۔ ٹیبل ڈیزائن حکمت عملی کی واپسی کا موازنہ کرتا ہے خریدنے اور رکھنے کے لئے ، اضافی واپسی کو بدیہی طور پر دکھاتا ہے۔ اس حکمت عملی کا فریم ورک اور ٹیبل ڈیزائن مقداری تاجروں کے لئے کچھ اچھا حوالہ فراہم کرسکتا ہے۔
/*backtest start: 2022-10-23 00:00:00 end: 2023-10-29 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Dannnnnnny //@version=4 strategy(title="Quarterly Returns in Strategies vs Buy & Hold", 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")// /////////////////// // QUARTERLY TABLE // enableQuarterlyTable = input(title="Enable Quarterly Return table", type=input.bool, defval=false) enableCompareWithMarket = input(title="Compare with Market Benchmark", type=input.bool, defval=false) table_position = input(title="Table Position", type=input.string, defval='bottom_right', options=['bottom_right','bottom_left','top_right', 'top_left']) precision = 2 new_quarter = ceil(month(time)/3) != ceil(month(time[1])/3) new_year = year(time) != year(time[1]) eq = strategy.equity bar_pnl = eq / eq[1] - 1 bar_bh = (close-close[1])/close[1] cur_quarter_pnl = 0.0 cur_year_pnl = 0.0 cur_quarter_bh = 0.0 cur_year_bh = 0.0 // Current Quarterly P&L cur_quarter_pnl := new_quarter ? 0.0 : (1 + cur_quarter_pnl[1]) * (1 + bar_pnl) - 1 cur_quarter_bh := new_quarter ? 0.0 : (1 + cur_quarter_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 Quarterly P&Ls var quarter_pnl = array.new_float(0) var quarter_time = array.new_int(0) var quarter_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) end_time = false end_time:= time_close + (time_close - time_close[1]) > timenow or barstate.islastconfirmedhistory if (not na(cur_quarter_pnl[1]) and (new_quarter or end_time)) if (end_time[1]) array.pop(quarter_pnl) array.pop(quarter_time) array.push(quarter_pnl , cur_quarter_pnl[1]) array.push(quarter_time, time[1]) array.push(quarter_bh , cur_quarter_bh[1]) if (not na(cur_year_pnl[1]) and (new_year or end_time)) if (end_time[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]) // Quarterly P&L Table var quarterly_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 or pnl < 2 * bh color.new(color.red, transp = 20) else if pnl < bh color.new(color.red, transp = 50) else color.new(color.red, transp = 80) if (end_time and enableQuarterlyTable) quarterly_table := table.new(table_position, columns = 14, rows = array.size(year_pnl) + 1, border_width = 1) table.cell(quarterly_table, 0, 0, "", bgcolor = #cccccc) table.cell(quarterly_table, 1, 0, "Q1", bgcolor = #cccccc) table.cell(quarterly_table, 2, 0, "Q2", bgcolor = #cccccc) table.cell(quarterly_table, 3, 0, "Q3", bgcolor = #cccccc) table.cell(quarterly_table, 4, 0, "Q4", bgcolor = #cccccc) table.cell(quarterly_table, 5, 0, "Year", bgcolor = #999999) for yi = 0 to array.size(year_pnl) - 1 table.cell(quarterly_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(quarterly_table, 5, yi + 1, enableCompareWithMarket ? tostring(round(array.get(year_pnl, yi) * 100, precision)) + " (" + tostring(round(array.get(year_bh, yi) * 100, precision)) + ")" : tostring(round(array.get(year_pnl, yi) * 100, precision)), bgcolor = y_color, text_color=#bfbfbf) for mi = 0 to array.size(quarter_time) - 1 m_row = year(array.get(quarter_time, mi)) - year(array.get(year_time, 0)) + 1 m_col = ceil(month(array.get(quarter_time, mi)) / 3) m_color = getCellColor(array.get(quarter_pnl, mi), array.get(quarter_bh, mi)) table.cell(quarterly_table, m_col, m_row, enableCompareWithMarket ? tostring(round(array.get(quarter_pnl, mi) * 100, precision)) + " (" + tostring(round(array.get(quarter_bh, mi) * 100,precision)) +")" : tostring(round(array.get(quarter_pnl, mi) * 100, precision)), bgcolor = m_color, text_color=#bfbfbf)