دو طرفہ جھٹکا پیش رفت کی حکمت عملی


تخلیق کی تاریخ: 2024-01-30 17:40:05 آخر میں ترمیم کریں: 2024-01-30 17:40:05
کاپی: 2 کلکس کی تعداد: 354
1
پر توجہ دیں
1229
پیروکار

دو طرفہ جھٹکا پیش رفت کی حکمت عملی

جائزہ

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

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

اس حکمت عملی کا بنیادی منطق دو طرفہ قیمتوں میں اہم نقطہ نظر پر مبنی ہے۔ خاص طور پر ، اس میں درج ذیل اقدامات ہیں:

  1. ایک مخصوص دورانیے کے لئے Pivot High اور Low کا حساب لگائیں۔ یہاں ta.pivothigh () اور ta.pivotlow () فنکشنز کا استعمال کرتے ہوئے حالیہ 2 دن کی اعلی ترین قیمت کو اعلی ترین قیمت کے طور پر اور حالیہ 1 دن کی کم ترین قیمت کو کم ترین قیمت کے طور پر شمار کیا گیا ہے۔

  2. جب قیمت اوپر حساب لگائی گئی اہم اونچائیوں کو توڑتی ہے تو ، زیادہ داخلہ کریں۔ جب قیمت اہم کم سے تجاوز کرتی ہے تو ، کم سے کم داخلہ۔

  3. اسٹاپ نقصان کا استعمال کریں۔ جب زیادہ کام کیا جاتا ہے تو ، اسٹاپ نقصان کی قیمت اونچائی + کم سے کم قیمت میں تبدیلی کی اکائی ہوتی ہے۔ جب خالی ہوتا ہے تو ، اسٹاپ نقصان کی قیمت کم - کم سے کم قیمت میں تبدیلی کی اکائی ہوتی ہے۔

  4. اس کے علاوہ، یہ آپ کو آپ کے کاروبار کے بارے میں معلومات فراہم کرتا ہے، اور آپ کو آپ کے کاروبار کے بارے میں معلومات فراہم کرتا ہے.

اس طرح ، جب قیمت میں ہلچل ہوتی ہے تو ، اہم نقطہ نظر کے وقت بروقت داخل ہونے اور تیزی سے روکنے کے قابل ہوجاتا ہے ، اس طرح منافع ہوتا ہے۔ جب قیمت نئی اونچائی یا نئی کم سے تجاوز کرتی ہے تو ، حکمت عملی متعدد بار جمع منافع حاصل کرسکتی ہے۔

طاقت کا تجزیہ

اس طرح کی دو طرفہ حکمت عملی کے کچھ اہم فوائد ہیں:

  1. آسان سمجھنے اور لاگو کرنے کے لئے آسان ہے ۔ اس حکمت عملی کو صرف Pivot اعلی اور کم نقطہ نظر کو توڑنے کی طرف سے داخل ہونے کے لئے، بہت آسان ہے ۔

  2. اسٹاپ نقصان کو آسانی سے ترتیب دیں۔ زیادہ سے زیادہ کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم سے کم کم از کم کم از کم از کم از کم سے کم کم از کم سے کم کم از کم کم سے کم کم از کم کم سے کم کم سے کم کم سے کم کم سے کم کم سے کم کم سے کم کم سے کم کم سے کم کم سے کم کم سے کم کم سے کم کم کم سے کم کم سے کم کم سے کم کم سے کم کم سے کم کم سے کم کم سے کم کم

  3. اس حکمت عملی کو دو طرفہ طور پر استعمال کیا جاسکتا ہے۔ اس حکمت عملی کو تجارت کے دوران یا اس کے بعد بھی استعمال کیا جاسکتا ہے ، اور اس سے فائدہ اٹھایا جاسکتا ہے۔

  4. اسٹریٹجی کے لئے موزوں ہے۔ جب قیمت میں بار بار اضافہ اور کمی ہوتی ہے تو ، حکمت عملی اکثر میدان میں داخل ہوسکتی ہے اور منافع کما سکتی ہے۔

خطرے کا تجزیہ

اس حکمت عملی کے فوائد کے باوجود ، کچھ خطرات ہیں جن کے بارے میں آگاہ رہنا ضروری ہے:

  1. اہم نقطہ کی غلط شناخت نقصانات میں اضافہ کر سکتی ہے۔ اگر اہم اعلی اور کم نقطہ کی غلط ترتیب ہو تو ، انتہائی صورتوں میں ، اس کا پیچھا کیا جاسکتا ہے۔

  2. یہ حکمت عملی اس وقت منافع کمانے کے لئے بہت مشکل ہے جب قیمتوں میں ہلچل کی بجائے یکطرفہ توڑ شروع ہوجائے۔

  3. بریک اپ ایک مختصر مدت کا جھوٹا بریک اپ ہوسکتا ہے۔ مختصر مدت میں بھی جھوٹا بریک اپ ہوسکتا ہے ، جس سے حکمت عملی غلط تجارت پیدا کرتی ہے۔

مجموعی طور پر ، یہ حکمت عملی زلزلے کے حالات میں استعمال کرنے کے لئے موزوں ہے۔ سرمایہ کاروں کو محتاط رہنے کی ضرورت ہے کہ وہ رجحان کے حالات میں اس حکمت عملی کو استعمال کرنے سے گریز کریں۔

اصلاح کی سمت

مذکورہ بالا خطرات کو مدنظر رکھتے ہوئے ، اس حکمت عملی میں اصلاحات کے لئے بنیادی طور پر درج ذیل پہلوؤں پر گنجائش ہے۔

  1. ذہین انتخاب کلیدی اعلی اور کم پوائنٹ پیرامیٹرز۔ مشین لرننگ جیسے ذرائع کے ذریعہ ، نظام کو خود بخود مناسب کلیدی پوائنٹ پیرامیٹرز کا انتخاب کرنے کے لئے بہتر بنانے کی اجازت دی جاسکتی ہے۔

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

  3. اضافی اسٹاپ اسٹریٹجی۔ آپ کو مزید خطرہ پر قابو پانے کے ل more زیادہ نفیس اسٹاپ اسٹریٹجی جیسے چلنے والی اسٹاپ ، وقفے وقفے سے توڑنے والی اسٹاپ وغیرہ ڈیزائن کرنے کی اجازت ہے۔

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Monthly Returns with Benchmark', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=25, commission_type=strategy.commission.percent, commission_value=0.1)

////////////
// Inputs //

// Pivot points inputs
leftBars   = input(2, group = "Pivot Points")
rightBars  = input(1, group = "Pivot Points")

// Styling inputs
prec       = input(2, title='Return Precision',                            group = "Monthly Table")
from_date  = input(timestamp("01 Jan 2000 00:00 +0000"), "From Date", group = "Monthly Table")
prof_color = input.color(color.green, title = "Gradient Colors", group = "Monthly Table", inline = "colors")
loss_color = input.color(color.red,   title = "",                group = "Monthly Table", inline = "colors")

// Benchmark inputs
use_cur    = input.bool(true,        title = "Use current Symbol for Benchmark", group = "Benchmark")
symb_bench = input('BTC_USDT:swap', title = "Benchmark",                        group = "Benchmark")
disp_bench = input.bool(true,        title = "Display Benchmark?",               group = "Benchmark")
disp_alpha = input.bool(true,        title = "Display Alpha?",                   group = "Benchmark")

// Pivot Points Strategy
swh = ta.pivothigh(leftBars, rightBars)
swl = ta.pivotlow(leftBars, rightBars)

hprice = 0.0
hprice := not na(swh) ? swh : hprice[1]

lprice = 0.0
lprice := not na(swl) ? swl : lprice[1]

le = false
le := not na(swh) ? true : le[1] and high > hprice ? false : le[1]

se = false
se := not na(swl) ? true : se[1] and low < lprice ? false : se[1]

if le
    strategy.entry('PivRevLE', strategy.long, comment='PivRevLE', stop=hprice + syminfo.mintick)

if se
    strategy.entry('PivRevSE', strategy.short, comment='PivRevSE', stop=lprice - syminfo.mintick)

plot(hprice, color=color.new(color.green, 0), linewidth=2)
plot(lprice, color=color.new(color.red, 0), linewidth=2)

///////////////////
// MONTHLY TABLE //

new_month = month(time) != month(time[1])
new_year  = year(time)  != year(time[1])

eq       = strategy.equity
bench_eq = close

// benchmark eq
bench_eq_htf = request.security(symb_bench, timeframe.period, close)

if (not use_cur)
    bench_eq := bench_eq_htf

bar_pnl   = eq / eq[1] - 1
bench_pnl = bench_eq / bench_eq[1] - 1

cur_month_pnl = 0.0
cur_year_pnl  = 0.0

// Current Monthly P&L
cur_month_pnl := bar_index == 0 ? 0 : 
                 time >= from_date and (time[1] < from_date or new_month) ? bar_pnl : 
                 (1 + cur_month_pnl[1]) * (1 + bar_pnl) - 1

// Current Yearly P&L
cur_year_pnl  := bar_index == 0 ? 0 : 
                 time >= from_date and (time[1] < from_date or new_year) ? bar_pnl : 
                 (1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1

bench_cur_month_pnl = 0.0
bench_cur_year_pnl  = 0.0

// Current Monthly P&L - Bench
bench_cur_month_pnl := bar_index == 0 or (time[1] < from_date and time >= from_date) ? 0 : 
                       time >= from_date and new_month ? bench_pnl : 
                       (1 + bench_cur_month_pnl[1]) * (1 + bench_pnl) - 1 

// Current Yearly P&L - Bench
bench_cur_year_pnl :=  bar_index == 0 ? 0 : 
                       time >= from_date and (time[1] < from_date  or new_year) ? bench_pnl : 
                       (1 + bench_cur_year_pnl[1]) * (1 + bench_pnl) - 1

var month_time = array.new_int(0)
var year_time  = array.new_int(0)

var month_pnl = array.new_float(0)
var year_pnl  = array.new_float(0)

var bench_month_pnl = array.new_float(0)
var bench_year_pnl  = array.new_float(0)

// Filling monthly / yearly pnl arrays
if array.size(month_time) > 0
    if month(time) == month(array.get(month_time, array.size(month_time) - 1))
        array.pop(month_pnl)
        array.pop(bench_month_pnl)
        array.pop(month_time)

if array.size(year_time) > 0
    if year(time) == year(array.get(year_time, array.size(year_time) - 1))
        array.pop(year_pnl)
        array.pop(bench_year_pnl)
        array.pop(year_time)

if (time >= from_date)
    array.push(month_time, time)
    array.push(year_time,  time)
    
    array.push(month_pnl, cur_month_pnl)
    array.push(year_pnl,  cur_year_pnl)
    
    array.push(bench_year_pnl,  bench_cur_year_pnl)
    array.push(bench_month_pnl, bench_cur_month_pnl)

// Monthly P&L Table    
var monthly_table = table(na)

if array.size(year_pnl) > 0 and barstate.islastconfirmedhistory

    monthly_table := table.new(position.bottom_right, columns=15, rows=array.size(year_pnl) * 3 + 5, border_width=1)

    // Fill monthly performance

    table.cell(monthly_table, 0, 0,  'Perf', bgcolor = #999999)
    table.cell(monthly_table, 1, 0,  'Jan',  bgcolor = #999999)
    table.cell(monthly_table, 2, 0,  'Feb',  bgcolor = #999999)
    table.cell(monthly_table, 3, 0,  'Mar',  bgcolor = #999999)
    table.cell(monthly_table, 4, 0,  'Apr',  bgcolor = #999999)
    table.cell(monthly_table, 5, 0,  'May',  bgcolor = #999999)
    table.cell(monthly_table, 6, 0,  'Jun',  bgcolor = #999999)
    table.cell(monthly_table, 7, 0,  'Jul',  bgcolor = #999999)
    table.cell(monthly_table, 8, 0,  'Aug',  bgcolor = #999999)
    table.cell(monthly_table, 9, 0,  'Sep',  bgcolor = #999999)
    table.cell(monthly_table, 10, 0, 'Oct',  bgcolor = #999999)
    table.cell(monthly_table, 11, 0, 'Nov',  bgcolor = #999999)
    table.cell(monthly_table, 12, 0, 'Dec',  bgcolor = #999999)
    table.cell(monthly_table, 13, 0, ' ', bgcolor = #999999)
    table.cell(monthly_table, 14, 0, 'Year', bgcolor = #999999)

    max_abs_y = math.max(math.abs(array.max(year_pnl)),  math.abs(array.min(year_pnl)))
    max_abs_m = math.max(math.abs(array.max(month_pnl)), math.abs(array.min(month_pnl)))

    for yi = 0 to array.size(year_pnl) - 1 by 1
        table.cell(monthly_table, 0,  yi + 1, str.tostring(year(array.get(year_time, yi))), bgcolor=#cccccc)
        table.cell(monthly_table, 13, yi + 1, ' ',   bgcolor=#999999)
        y_color = color.from_gradient(array.get(year_pnl, yi), -max_abs_y, max_abs_y, loss_color, prof_color) 
        table.cell(monthly_table, 14, yi + 1, str.tostring(math.round(array.get(year_pnl, yi) * 100, prec)), bgcolor=y_color)

    for mi = 0 to array.size(month_time) - 1 by 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 = color.from_gradient(array.get(month_pnl, mi), -max_abs_m, max_abs_m, loss_color, prof_color)

        table.cell(monthly_table, m_col, m_row, str.tostring(math.round(array.get(month_pnl, mi) * 100, prec)), bgcolor=m_color)
    
    // Fill benchmark performance
    next_row =  array.size(year_pnl) + 1  
    
    if (disp_bench)
    
        table.cell(monthly_table, 0,  next_row, 'Bench', bgcolor=#999999)
        table.cell(monthly_table, 1,  next_row, 'Jan',   bgcolor=#999999)
        table.cell(monthly_table, 2,  next_row, 'Feb',   bgcolor=#999999)
        table.cell(monthly_table, 3,  next_row, 'Mar',   bgcolor=#999999)
        table.cell(monthly_table, 4,  next_row, 'Apr',   bgcolor=#999999)
        table.cell(monthly_table, 5,  next_row, 'May',   bgcolor=#999999)
        table.cell(monthly_table, 6,  next_row, 'Jun',   bgcolor=#999999)
        table.cell(monthly_table, 7,  next_row, 'Jul',   bgcolor=#999999)
        table.cell(monthly_table, 8,  next_row, 'Aug',   bgcolor=#999999)
        table.cell(monthly_table, 9,  next_row, 'Sep',   bgcolor=#999999)
        table.cell(monthly_table, 10, next_row, 'Oct',   bgcolor=#999999)
        table.cell(monthly_table, 11, next_row, 'Nov',   bgcolor=#999999)
        table.cell(monthly_table, 12, next_row, 'Dec',   bgcolor=#999999)
        table.cell(monthly_table, 13, next_row, ' ',     bgcolor = #999999)
        table.cell(monthly_table, 14, next_row, 'Year',  bgcolor=#999999)
    
        max_bench_abs_y = math.max(math.abs(array.max(bench_year_pnl)),  math.abs(array.min(bench_year_pnl)))
        max_bench_abs_m = math.max(math.abs(array.max(bench_month_pnl)), math.abs(array.min(bench_month_pnl)))
    
        for yi = 0 to array.size(year_time) - 1 by 1
            table.cell(monthly_table, 0,  yi + 1 + next_row + 1, str.tostring(year(array.get(year_time, yi))), bgcolor=#cccccc)
            table.cell(monthly_table, 13, yi + 1 + next_row + 1, ' ',   bgcolor=#999999)
            y_color = color.from_gradient(array.get(bench_year_pnl, yi), -max_bench_abs_y, max_bench_abs_y, loss_color, prof_color)
            table.cell(monthly_table, 14, yi + 1 + next_row + 1, str.tostring(math.round(array.get(bench_year_pnl, yi) * 100, prec)), bgcolor=y_color)
     
        for mi = 0 to array.size(month_time) - 1 by 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 = color.from_gradient(array.get(bench_month_pnl, mi), -max_bench_abs_m, max_bench_abs_m, loss_color, prof_color)
    
            table.cell(monthly_table, m_col, m_row  + next_row + 1, str.tostring(math.round(array.get(bench_month_pnl, mi) * 100, prec)), bgcolor=m_color)
    
    // Fill Alpha
    if (disp_alpha)
    
        next_row :=  array.size(year_pnl) * 2 + 3   
        table.cell(monthly_table, 0,  next_row, 'Alpha', bgcolor=#999999)
        table.cell(monthly_table, 1,  next_row, 'Jan',   bgcolor=#999999)
        table.cell(monthly_table, 2,  next_row, 'Feb',   bgcolor=#999999)
        table.cell(monthly_table, 3,  next_row, 'Mar',   bgcolor=#999999)
        table.cell(monthly_table, 4,  next_row, 'Apr',   bgcolor=#999999)
        table.cell(monthly_table, 5,  next_row, 'May',   bgcolor=#999999)
        table.cell(monthly_table, 6,  next_row, 'Jun',   bgcolor=#999999)
        table.cell(monthly_table, 7,  next_row, 'Jul',   bgcolor=#999999)
        table.cell(monthly_table, 8,  next_row, 'Aug',   bgcolor=#999999)
        table.cell(monthly_table, 9,  next_row, 'Sep',   bgcolor=#999999)
        table.cell(monthly_table, 10, next_row, 'Oct',   bgcolor=#999999)
        table.cell(monthly_table, 11, next_row, 'Nov',   bgcolor=#999999)
        table.cell(monthly_table, 12, next_row, 'Dec',   bgcolor=#999999)
        table.cell(monthly_table, 13, next_row, '',      bgcolor=#999999)
        table.cell(monthly_table, 14, next_row, 'Year',  bgcolor=#999999)
        
        max_alpha_abs_y = 0.0
        for yi = 0 to array.size(year_time) - 1 by 1
            if (math.abs(array.get(year_pnl, yi)  - array.get(bench_year_pnl, yi)) > max_alpha_abs_y)
                max_alpha_abs_y := math.abs(array.get(year_pnl, yi)  - array.get(bench_year_pnl, yi))
    
        max_alpha_abs_m = 0.0
        for mi = 0 to array.size(month_pnl) - 1 by 1
            if (math.abs(array.get(month_pnl, mi) - array.get(bench_month_pnl, mi)) > max_alpha_abs_m)
                max_alpha_abs_m := math.abs(array.get(month_pnl, mi) - array.get(bench_month_pnl, mi))
                
        for yi = 0 to array.size(year_time) - 1 by 1
            table.cell(monthly_table, 0,  yi + 1 + next_row + 1, str.tostring(year(array.get(year_time, yi))), bgcolor=#cccccc)
            table.cell(monthly_table, 13, yi + 1 + next_row + 1, ' ',   bgcolor=#999999)
            y_color = color.from_gradient(array.get(year_pnl, yi)  - array.get(bench_year_pnl, yi), -max_alpha_abs_y, max_alpha_abs_y, loss_color, prof_color)
            table.cell(monthly_table, 14, yi + 1 + next_row + 1, str.tostring(math.round((array.get(year_pnl, yi)  - array.get(bench_year_pnl, yi)) * 100, prec)), bgcolor=y_color)
     
        for mi = 0 to array.size(month_time) - 1 by 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 = color.from_gradient(array.get(month_pnl, mi) - array.get(bench_month_pnl, mi), -max_alpha_abs_m, max_alpha_abs_m, loss_color, prof_color)
    
            table.cell(monthly_table, m_col, m_row  + next_row + 1, str.tostring(math.round((array.get(month_pnl, mi) - array.get(bench_month_pnl, mi)) * 100, prec)), bgcolor=m_color)