مومنٹم بریک آؤٹ دو جہتی تجارتی حکمت عملی


تخلیق کی تاریخ: 2023-10-27 17:04:48 آخر میں ترمیم کریں: 2023-10-27 17:04:48
کاپی: 0 کلکس کی تعداد: 655
1
پر توجہ دیں
1617
پیروکار

مومنٹم بریک آؤٹ دو جہتی تجارتی حکمت عملی

جائزہ

اس حکمت عملی میں سادہ منتقل اوسط کا استعمال کیا گیا ہے تاکہ رجحان کی سمت کا تعین کیا جاسکے۔ اس حکمت عملی میں مسلسل بڑھتی ہوئی قیمتوں پر زیادہ تجارت کی جاتی ہے اور مسلسل گرتی ہوئی قیمتوں پر کم قیمت کی جاتی ہے ، جس سے دو طرفہ تجارت ممکن ہوتی ہے۔

حکمت عملی کا اصول

اس حکمت عملی میں مارکیٹ کے رجحانات کی سمت کا تعین کرنے کے لئے وی وی ایم اے کا استعمال کیا گیا ہے۔ جب وی ڈبلیو ایم اے بڑھتا ہے تو ، زیادہ کام کریں۔ جب وی ڈبلیو ایم اے گرتا ہے تو ، کم کام کریں۔

خاص طور پر ، حکمت عملی سب سے پہلے ایک خاص دورانیے کے لئے وی ڈبلیو ایم اے کا حساب لگاتی ہے ، اور پھر فیصلہ کرتی ہے کہ آیا وی ڈبلیو ایم اے 5 دن سے زیادہ بڑھ گیا ہے ، اگر ایسا ہے تو ، زیادہ پوزیشن کھولی جائے۔ اگر وی ڈبلیو ایم اے 5 دن سے زیادہ گر گیا ہے تو ، پوزیشن خالی کردی جائے۔ پوزیشن کی شرط یہ ہے کہ وی ڈبلیو ایم اے کا رخ 5 دن سے زیادہ کے بعد پلٹ جائے۔

ماہانہ اور سالانہ آمدنی کی کارکردگی کا حساب لگانے کے لئے ، حکمت عملی ماہانہ اور سالانہ آمدنی کو ریکارڈ کرتی ہے۔ حکمت عملی کو مارکیٹ کی بنیاد پر آمدنی کے ساتھ موازنہ کرکے حکمت عملی کے مقابلے میں مارکیٹ کی کارکردگی کو دیکھنے کے لئے حکمت عملی کو دیکھا جاسکتا ہے۔

طاقت کا تجزیہ

اس حکمت عملی کے درج ذیل فوائد ہیں:

  1. رجحانات کا تعین کرنے کے لئے VWMA کا استعمال کرتے ہوئے ، مارکیٹ کے شور کو مؤثر طریقے سے فلٹر کیا جاسکتا ہے ، جس سے اہم رجحانات کو پکڑ لیا جاسکتا ہے۔

  2. رجحان کی تصدیق کے بعد ہی پوزیشن کھولنے سے رجحان کی تبدیلی کے خطرے سے بچا جاسکتا ہے۔

  3. دو طرفہ تجارت کے ساتھ ، آپ کو منافع بخش ہوسکتا ہے ، چاہے قیمت بڑھتی ہو یا کم ہوتی ہو۔

  4. ماہانہ اور سالانہ آمدنی کو ریکارڈ کریں تاکہ حکمت عملی کی تاثیر کا اندازہ لگایا جا سکے۔

  5. انکم ٹیبل میں مارکیٹ بیس کی آمدنی شامل کریں تاکہ حکمت عملی اور مارکیٹ کی نسبتا کارکردگی کا موازنہ کیا جاسکے۔

خطرے کا تجزیہ

اس حکمت عملی کے کچھ خطرات بھی ہیں:

  1. وی ڈبلیو ایم اے کا استعمال کرتے ہوئے رجحانات کا تعین کریں کہ رجحانات میں تاخیر ہوسکتی ہے اور رجحانات کے ابتدائی مرحلے میں کھوئے ہوئے مواقع ہوسکتے ہیں۔

  2. رجحان کی تصدیق کے بعد ہی پوزیشن کھولیں ، اور کچھ حرکت سے محروم رہ سکتے ہیں۔

  3. دو طرفہ تجارت میں سٹاپ نقصان کا تعین کرنا ضروری ہے ورنہ نقصان میں اضافہ ہوسکتا ہے۔

  4. بڑے مارکیٹ میں اتار چڑھاؤ کی وجہ سے اسٹاپ نقصان کا سبب بن سکتا ہے ، جس سے مکمل رجحان برقرار نہیں رہ سکتا ہے۔

  5. رجحان کی تبدیلی کے فیصلے غلط ہوسکتے ہیں ، جس سے نقصان میں اضافہ ہوتا ہے۔

اصلاح کی سمت

یہ حکمت عملی مندرجہ ذیل پہلوؤں سے بہتر ہو سکتی ہے:

  1. VWMA سائیکل پیرامیٹرز کو بہتر بنانے اور رجحانات کو بہتر بنانے کے لئے.

  2. رجحانات کی توثیق کے لئے دن کی تعداد کو ایڈجسٹ کریں ، اور وقت کو بہتر بنائیں۔

  3. اسٹاپ نقصان کی حکمت عملی کو شامل کریں اور انفرادی نقصان کو کنٹرول کریں۔

  4. اس کے علاوہ ، اس میں دیگر اشارے بھی شامل ہیں جو اس بات کا تعین کرتے ہیں کہ کیا رجحان بدل گیا ہے ، جس سے اس بات کا یقین بڑھتا ہے۔

  5. پوزیشن مینجمنٹ کو بہتر بنانا ، مارکیٹ کے حالات کے مطابق پوزیشن کو ایڈجسٹ کرنا۔

  6. کم سے کم منافع مقرر کریں، اور آپ کے کاروبار کی لاگت کو مدنظر رکھیں۔

خلاصہ کریں۔

اس حکمت عملی کا مجموعی نظریہ واضح اور آسان ہے ، 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)