بی اے ایم بینڈ پر مبنی بٹ کوائن ڈالر لاگت اوسط

مصنف:چاؤ ژانگ، تاریخ: 2024-02-18 15:40:42
ٹیگز:

img

جائزہ

یہ حکمت عملی بین کوون کی رسک لیول تھیوری پر مبنی ہے اور اس کا مقصد بی ای ایم بینڈ کی سطحوں کا استعمال کرتے ہوئے اسی طرح کے نقطہ نظر کو نافذ کرنا ہے۔ بی ای ایم کی اوپری سطح لوگرتھم لینے کے بعد 200 ہفتوں کا چلتا ہوا اوسط ہے ، اور نچلی سطح 200 ہفتوں کا چلتا ہوا اوسط خود ہے۔ اس سے ہمیں 0 سے 1 تک کی حد ملتی ہے۔ خریدنے کے آرڈر جاری کیے جاتے ہیں جب قیمت 0.5 سطح کے بینڈ سے نیچے ہوتی ہے ، اور فروخت کے آرڈر جاری کیے جاتے ہیں جب اس سے اوپر ہوتا ہے۔

حکمت عملی منطق

یہ حکمت عملی بنیادی طور پر بین کوون کے ذریعہ تجویز کردہ بی ای ایم بینڈ تھیوری پر مبنی ہے۔ بی ٹی سی کی قیمت میں ہونے والی تبدیلیوں کے مطابق ، قیمت کو 0 اور 1 کے درمیان 10 علاقوں میں تقسیم کیا جاسکتا ہے ، جو خطرے کی 10 مختلف سطحوں کی نمائندگی کرتا ہے۔ سطح 0 200 ہفتوں کی حرکت پذیر اوسط کے قریب قیمت کے ساتھ سب سے کم خطرہ کی نمائندگی کرتی ہے۔ سطح 5 درمیانے درجے کے خطرے کے قدر کے علاقے کی نمائندگی کرتی ہے۔ سطح 10 سب سے زیادہ خطرہ کی نمائندگی کرتی ہے جس کی قیمت اوپری ریل کے قریب ہے۔

جب قیمت کم ہوتی ہے تو ، حکمت عملی آہستہ آہستہ طویل پوزیشن میں اضافہ کرے گی۔ خاص طور پر ، اگر قیمت 0 اور 0.5 بینڈ کے درمیان ہے تو ، ہر ماہ ایک مقررہ دن خرید آرڈرز جاری کیے جائیں گے۔ بینڈ کی تعداد کم ہونے کے ساتھ ہی خرید کی رقم آہستہ آہستہ بڑھ جائے گی۔ مثال کے طور پر ، بینڈ 5 کے ساتھ خرید کی رقم ماہانہ ڈی سی اے کل کا 20٪ ہے۔ بینڈ 1 کے ساتھ ، خرید کی رقم ماہانہ ڈی سی اے کل کا 100٪ تک بڑھ جاتی ہے۔

جب قیمتیں بلند ہوجاتی ہیں تو ، حکمت عملی آہستہ آہستہ اپنی پوزیشن کو کم کرے گی۔ خاص طور پر ، اگر قیمت بینڈ 0.5 سے تجاوز کرتی ہے تو ، فروخت کے احکامات متناسب طور پر جاری کیے جائیں گے۔ بینڈ کی تعداد میں اضافے کے ساتھ ہی فروخت کی پوزیشن آہستہ آہستہ بڑھ جائے گی۔ مثال کے طور پر ، بینڈ 6 کے ساتھ ، 6.67٪ فروخت ہوگی۔ بینڈ 10 کے ساتھ ، تمام پوزیشنیں فروخت ہوں گی۔

فوائد کا تجزیہ

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

  1. اثاثوں کی کم قیمت کا اندازہ لگانے اور سائنسی طور پر خطرات سے بچنے کے لئے بی ای ایم تھیوری کا استعمال کریں۔
  2. بی ٹی سی کی اتار چڑھاؤ کی خصوصیات کا بھرپور استعمال کریں تاکہ بہترین خرید و فروخت کے مواقع کو حاصل کیا جا سکے۔
  3. سرمایہ کاری کے اخراجات کو مؤثر طریقے سے کنٹرول کرنے اور طویل مدتی مستحکم منافع حاصل کرنے کے لئے لاگت کا اوسط طریقہ اپنائیں۔
  4. آپریشنل خطرات کو کم کرنے کے لئے دستی مداخلت کے بغیر خریداری اور فروخت کے لین دین کو خود کار طریقے سے انجام دیں؛
  5. اپنی مرضی کے مطابق پیرامیٹرز مارکیٹ کی تبدیلیوں کے مطابق اپنی حکمت عملیوں کو لچکدار ایڈجسٹ کرنے کی اجازت دیتے ہیں۔

خلاصہ یہ ہے کہ یہ ایک پیچیدہ پیرامیٹر ٹیوننگ حکمت عملی ہے جو بی ٹی سی مارکیٹ کے اتار چڑھاؤ کے حالات میں طویل مدتی مستحکم منافع پیدا کرسکتی ہے۔

خطرے کا تجزیہ

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

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

خطرے کو کم کرنے کے لیے درج ذیل اقدامات کئے جا سکتے ہیں:

  1. بی ای ایم تھیوری کے فیصلے کی درستگی کو بہتر بنانے کے لئے پیرامیٹر کی ترتیبات کو بہتر بنائیں۔
  2. ایک ہی نقصان کی رقم کو کم کرنے کے لئے پوزیشن کا سائز مناسب طریقے سے کم کریں؛
  3. خودکار تجارت کے لئے آپریشنل خطرات کو کم کرنے کے لئے ریڈانسی اور غلطی برداشت کرنے کی صلاحیتوں کو بڑھانا۔
  4. بہت زیادہ نقصانات سے بچنے کے لئے سٹاپ نقصان کے مقامات مقرر کریں.

اصلاح

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

  1. بی ای ایم تھیوری پیرامیٹرز کو بہتر بنائیں: ماڈل کی درستگی کو بہتر بنانے کے لئے لاگ پیرامیٹرز ، بیک ٹسٹ سائیکل وغیرہ کو ایڈجسٹ کریں۔
  2. پوزیشن کنٹرول کو بہتر بنائیں: ماہانہ ڈی سی اے کی رقم، خرید/فروخت کے تناسب کو ایڈجسٹ کریں تاکہ واحد نقصان کی رقم کو کنٹرول کیا جاسکے۔
  3. خودکار تجارتی سیکیورٹی میں اضافہ کریں: غلطی برداشت کو بہتر بنانے کے لئے بے کار سرورز ، مقامی پروسیسنگ وغیرہ مرتب کریں۔
  4. سٹاپ نقصان ماڈیول شامل کریں: نقصانات کو مؤثر طریقے سے کنٹرول کرنے کے لئے تاریخی اتار چڑھاؤ کی بنیاد پر معقول سٹاپ نقصان کے مقامات مقرر کریں.

ان اقدامات کے ذریعے حکمت عملی کے استحکام اور سلامتی میں بہتری آسکتی ہے۔

نتیجہ

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


/*backtest
start: 2023-02-11 00:00:00
end: 2024-02-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © gjfsdrtytru - BEAM DCA Strategy {
// Based on Ben Cowen's risk level strategy, this aims to copy that method but with BEAM band levels.
// Upper BEAM level is derived from ln(price/200W MA)/2.5, while the 200W MA is the floor price. This is our 0-1 range. 
// Buy limit orders are set at the < 0.5 levels and sell orders are set at the > 0.5 level.
//@version=5
strategy(
  title                 = "BEAM DCA Strategy Monthly", 
  shorttitle            = "BEAM DCA M",
  overlay               = true,
  pyramiding            = 500,
  default_qty_type      = strategy.percent_of_equity,
  default_qty_value     = 0,
  initial_capital       = 0) //}

// Inputs { ————————————————————————————————————————————————————————————————————
T_ceiling   = input.string("Off", "Diminishing Returns", ["Off","Linear","Parabolic"], "Account for diminishing returns as time increases")
day         = input.int(1, "DCA Day of Month",1,28,1,"Select day of month for buy orders.")
DCAamount   = input.int(1000,"DCA Amount",400,tooltip="Enter the maximum amount you'd be willing to DCA for any given month.")
T_buy       = input(true,"Buy Orders","Toggle buy orders.")
T_sell      = input(true,"Sell Orders","Toggle sell orders.")

// Time period
testStartYear   = input.int(2018,   title="Backtest Start Year",    minval=2010,maxval=2100,group="Backtest Period")
testStartMonth  = input.int(1,      title="Backtest Start Month",   minval=1,   maxval=12,  group="Backtest Period")
testStartDay    = input.int(1,      title="Backtest Start Day",     minval=1,   maxval=31,  group="Backtest Period")
testPeriodLen   = input.int(9999,   title="Backtest Period (days)", minval=1,               group="Backtest Period",tooltip="Days until strategy ends") * 86400000 // convert days into UNIX time
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testPeriodStop  = testPeriodStart + testPeriodLen
testPeriod() => true
// ——————————————————————————————————————————————————————————————————————————— }
// Diminishing Returns { ———————————————————————————————————————————————————————
x = bar_index + 1
assetDivisor= 2.5
switch
    T_ceiling == "Linear"   => assetDivisor:= 3.50542 - 0.000277696 * x
    T_ceiling == "Parabolic"=> assetDivisor:= -0.0000001058992338 * math.pow(x,2) + 0.000120729 * x + 3.1982
// ——————————————————————————————————————————————————————————————————————————— }
// Risk Levels { ———————————————————————————————————————————————————————————————
cycleLen = 1400
getMaLen() =>
    if bar_index < cycleLen
        bar_index + 1
    else
        cycleLen

// Define Risk Bands
price       = close
riskLow     = ta.sma(price,getMaLen())
risk1       = riskLow * math.exp((assetDivisor)*0.1)
risk2       = riskLow * math.exp((assetDivisor)*0.2)
risk3       = riskLow * math.exp((assetDivisor)*0.3)
risk4       = riskLow * math.exp((assetDivisor)*0.4)
risk5       = riskLow * math.exp((assetDivisor)*0.5)
risk6       = riskLow * math.exp((assetDivisor)*0.6)
risk7       = riskLow * math.exp((assetDivisor)*0.7)
risk8       = riskLow * math.exp((assetDivisor)*0.8)
risk9       = riskLow * math.exp((assetDivisor)*0.9)
riskHigh    = riskLow * math.exp((assetDivisor))

// Plot Risk Bands
p_low       = plot(riskLow,   "Beam Risk 0.0",color.new(#0042F0,50),3,editable=false)
p_band1     = plot(risk1,     "Beam Risk 0.1",color.new(#0090F5,20),1,editable=false)
p_band2     = plot(risk2,     "Beam Risk 0.2",color.new(#00C6DB,20),1,editable=false)
p_band3     = plot(risk3,     "Beam Risk 0.3",color.new(#00F5BD,20),1,editable=false)
p_band4     = plot(risk4,     "Beam Risk 0.4",color.new(#00F069,20),1,editable=false)
p_band5     = plot(risk5,     "Beam Risk 0.5",color.new(#00DB08,50),3,editable=false)
p_band6     = plot(risk6,     "Beam Risk 0.6",color.new(#E8D20C,20),1,editable=false)
p_band7     = plot(risk7,     "Beam Risk 0.7",color.new(#F2B40C,20),1,editable=false)
p_band8     = plot(risk8,     "Beam Risk 0.8",color.new(#DC7A00,20),1,editable=false)
p_band9     = plot(risk9,     "Beam Risk 0.9",color.new(#F2520C,20),1,editable=false)
p_band10    = plot(riskHigh,  "Beam Risk 1.0",color.new(#F01102,50),3,editable=false)
// ——————————————————————————————————————————————————————————————————————————— }
// Order Execution { ———————————————————————————————————————————————————————————
band5   = price<risk5 and price>risk4
band4   = price<risk4 and price>risk3
band3   = price<risk3 and price>risk2
band2   = price<risk2 and price>risk1
band1   = price<risk1

// DCA buy order weights
y       = DCAamount / 5
switch
    band5 => y:= y * 1
    band4 => y:= y * 2
    band3 => y:= y * 3
    band2 => y:= y * 4
    band1 => y:= y * 5

// Contracts per order
contracts =(y/price)

if testPeriod()
// Buy orders
    if T_buy == true
        if dayofmonth == day
            strategy.entry("Risk Band 5",strategy.long,qty=contracts,when=band5)
            strategy.entry("Risk Band 4",strategy.long,qty=contracts,when=band4)
            strategy.entry("Risk Band 3",strategy.long,qty=contracts,when=band3)
            strategy.entry("Risk Band 2",strategy.long,qty=contracts,when=band2)
            strategy.entry("Risk Band 1",strategy.long,qty=contracts,when=band1)
// Sell orders 
    if T_sell == true
        if strategy.opentrades > 5
            strategy.exit("Risk Band 6",qty_percent=6.67,limit=risk6) 
            strategy.exit("Risk Band 7",qty_percent=14.28,limit=risk7)
            strategy.exit("Risk Band 8",qty_percent=25.00,limit=risk8)
            strategy.exit("Risk Band 9",qty_percent=44.44,limit=risk9)
            strategy.exit("Risk Band 10",qty_percent=100,limit=riskHigh)
// ——————————————————————————————————————————————————————————————————————————— }
// Info { ——————————————————————————————————————————————————————————————————————

// Line plot of avg. entry price
plot(strategy.position_size > 0 ? strategy.position_avg_price : na,"Average Entry",color.red,trackprice=true,editable=false)

// Unrealised PNL
uPNL = price/strategy.position_avg_price

// Realised PNL
realPNL = 0.
for i = 0 to strategy.closedtrades-1
    realPNL += strategy.closedtrades.profit(i)

// Size of open position in ($)
openPosSize = 0.
for i = 0 to strategy.opentrades-1
    openPosSize += strategy.opentrades.size(i) * strategy.position_avg_price

// Size of closed position in ($)
closePosSize = 0.
if strategy.closedtrades > 0
    for i = 0 to strategy.closedtrades-1
        closePosSize += strategy.closedtrades.size(i) * strategy.closedtrades.entry_price(i)

invested    = openPosSize+closePosSize                              // Total capital ($) put into strategy
equity      = openPosSize+closePosSize+strategy.openprofit+realPNL  // Total current equity ($) in strategy (counting realised PNL)
ROI         = (equity-invested) / invested * 100                    // ROI of strategy (compare capital invested to excess return)

// // Info Table
// var table table1 = table.new(position.bottom_right,2,9,color.black,color.gray,1,color.gray,2)

// table.cell(table1,0,0,"Capital Invested",   text_color=color.white,text_halign=text.align_right)
// table.cell(table1,0,1,"Open Position",      text_color=color.white,text_halign=text.align_right)
// table.cell(table1,0,2,"Average Entry",      text_color=color.white,text_halign=text.align_right)
// table.cell(table1,0,3,"Last Price",         text_color=color.white,text_halign=text.align_right)
// table.cell(table1,0,4,"Open PNL (%)",       text_color=color.white,text_halign=text.align_right)
// table.cell(table1,0,5,"Open PNL ($)",       text_color=color.white,text_halign=text.align_right)
// table.cell(table1,0,6,"Realised PNL ($)",   text_color=color.white,text_halign=text.align_right)
// table.cell(table1,0,7,"Total Equity",       text_color=color.white,text_halign=text.align_right)
// table.cell(table1,0,8,"Strategy ROI",       text_color=color.white,text_halign=text.align_right)

// table.cell(table1,1,0,"$" + str.tostring(invested,                      "#,###.00"),      text_halign=text.align_right,text_color = color.white)
// table.cell(table1,1,1,"$" + str.tostring(openPosSize,                   "#,###.00"),      text_halign=text.align_right,text_color = color.white)
// table.cell(table1,1,2,"$" + str.tostring(strategy.position_avg_price,   "#,###.00"),      text_halign=text.align_right,text_color = color.white)
// table.cell(table1,1,3,"$" + str.tostring(price,                         "#,###.00"),      text_halign=text.align_right,text_color = color.white)
// table.cell(table1,1,4,      str.tostring((uPNL-1)*100,                  "#,###.00") + "%",text_halign=text.align_right,text_color = uPNL > 1 ? color.lime : color.red)
// table.cell(table1,1,5,"$" + str.tostring(strategy.openprofit,           "#,###.00"),      text_halign=text.align_right,text_color = uPNL > 1 ? color.lime : color.red)
// table.cell(table1,1,6,"$" + str.tostring(realPNL,                       "#,###.00"),      text_halign=text.align_right,text_color = color.white)
// table.cell(table1,1,7,"$" + str.tostring(equity,                        "#,###.00"),      text_halign=text.align_right,text_color = color.white)
// table.cell(table1,1,8,      str.tostring(ROI,                           "#,###.00") + "%",text_halign=text.align_right,text_color = ROI > 1 ? color.lime : color.red)
// // ——————————————————————————————————————————————————————————————————————————— }

مزید