گرڈ ٹریڈنگ کے خطرے کی حفاظتی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-03-27 18:15:12
ٹیگز:

img

حکمت عملی کا جائزہ

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

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

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

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

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

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

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

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

  3. اعلی تجارتی تعدد: چونکہ گرڈ میں عام طور پر بہت سارے آرڈر ہوتے ہیں ، لہذا تجارتی تعدد زیادہ ہوتا ہے ، جس سے اتار چڑھاؤ والی منڈیوں میں منافع حاصل کرنا آسان ہوجاتا ہے۔

  4. لچکدار پیرامیٹرز: صارفین اپنی ترجیحات کے مطابق گرڈ کی تعداد، اوپری اور نچلی حدود، متحرک ایڈجسٹمنٹ پیرامیٹرز وغیرہ مقرر کرسکتے ہیں، اس طرح مختلف تجارتی طرزوں کو اپنانے کے لئے.

خطرے کا تجزیہ

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

  2. ٹرانزیکشن فیس: چونکہ اسٹریٹجی میں تجارت کی کثرت زیادہ ہے ، لہذا ٹرانزیکشن فیسوں کا منافع پر ایک خاص اثر پڑ سکتا ہے۔

  3. غلط پیرامیٹرز کی ترتیبات: اگر پیرامیٹرز کو غلط طریقے سے ترتیب دیا جاتا ہے ، جیسے بہت زیادہ گرڈ لائنیں یا غیر معقول گرڈ کی حد کی ترتیبات ، اس سے حکمت عملی کی خراب کارکردگی کا باعث بن سکتی ہے۔

حل: 1) رجحاناتی منڈیوں میں ، گرڈ کی حدود کی ایڈجسٹمنٹ رینج میں اضافہ کرنے پر غور کریں یا رجحاناتی حکمت عملیوں کے ساتھ مل کر۔ 2) ٹرانزیکشن فیسوں میں کم تبادلے اور کرنسیوں کا انتخاب کریں۔ 3) اصل آپریشن سے پہلے ، پیرامیٹرز کو مکمل طور پر بیک ٹیسٹ اور بہتر بنانے کی ضرورت ہے۔

اصلاح کی ہدایات

  1. دیگر حکمت عملیوں کے ساتھ مل کر: حکمت عملی کی موافقت اور استحکام کو بہتر بنانے کے لئے گرڈ ٹریڈنگ کی حکمت عملیوں کو دیگر قسم کی حکمت عملیوں جیسے رجحان کی حکمت عملیوں ، اوسط ریورسشن کی حکمت عملیوں وغیرہ کے ساتھ مل کر غور کریں۔

  2. متحرک ایڈجسٹمنٹ میکانزم کو بہتر بنائیں: حکمت عملی میں موجودہ متحرک ایڈجسٹمنٹ میکانزم نسبتا simple آسان ہے اور اسے مزید بہتر بنایا جاسکتا ہے ، جیسے زیادہ عوامل (جیسے تجارتی حجم ، اتار چڑھاؤ وغیرہ) پر غور کرنا ، اور زیادہ جدید الگورتھم (جیسے موافقت پذیر الگورتھم ، مشین لرننگ الگورتھم وغیرہ) کو اپنانا۔

  3. فنڈ مینجمنٹ کو بہتر بنائیں: فی الحال ، حکمت عملی مساوی فنڈ مینجمنٹ کو اپناتی ہے۔ ہم فنڈ کے استعمال کی کارکردگی اور واپسی کو مزید بہتر بنانے کے ل more ، کیلی معیار ، اصلاح کے طریقوں وغیرہ جیسے فنڈ مینجمنٹ کے زیادہ جدید طریقوں کو متعارف کرانے پر غور کرسکتے ہیں۔

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

خلاصہ

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


/*backtest
start: 2024-03-19 00:00:00
end: 2024-03-23 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("(IK) Grid Script", overlay=true, pyramiding=14, close_entries_rule="ANY", default_qty_type=strategy.cash, initial_capital=100.0, currency="USD", commission_type=strategy.commission.percent, commission_value=0.1)
i_autoBounds    = input(group="Grid Bounds", title="Use Auto Bounds?", defval=true, type=input.bool)                             // calculate upper and lower bound of the grid automatically? This will theorhetically be less profitable, but will certainly require less attention
i_boundSrc      = input(group="Grid Bounds", title="(Auto) Bound Source", defval="Hi & Low", options=["Hi & Low", "Average"])     // should bounds of the auto grid be calculated from recent High & Low, or from a Simple Moving Average
i_boundLookback = input(group="Grid Bounds", title="(Auto) Bound Lookback", defval=250, type=input.integer, maxval=500, minval=0) // when calculating auto grid bounds, how far back should we look for a High & Low, or what should the length be of our sma
i_boundDev      = input(group="Grid Bounds", title="(Auto) Bound Deviation", defval=0.10, type=input.float, maxval=1, minval=-1)  // if sourcing auto bounds from High & Low, this percentage will (positive) widen or (negative) narrow the bound limits. If sourcing from Average, this is the deviation (up and down) from the sma, and CANNOT be negative.
i_upperBound    = input(group="Grid Bounds", title="(Manual) Upper Boundry", defval=0.285, type=input.float)                      // for manual grid bounds only. The upperbound price of your grid
i_lowerBound    = input(group="Grid Bounds", title="(Manual) Lower Boundry", defval=0.225, type=input.float)                      // for manual grid bounds only. The lowerbound price of your grid.
i_gridQty       = input(group="Grid Lines",  title="Grid Line Quantity", defval=8, maxval=15, minval=3, type=input.integer)       // how many grid lines are in your grid

f_getGridBounds(_bs, _bl, _bd, _up) =>
    if _bs == "Hi & Low"
        _up ? highest(close, _bl) * (1 + _bd) : lowest(close, _bl)  * (1 - _bd)
    else
        avg = sma(close, _bl)
        _up ? avg * (1 + _bd) : avg * (1 - _bd)

f_buildGrid(_lb, _gw, _gq) =>
    gridArr = array.new_float(0)
    for i=0 to _gq-1
        array.push(gridArr, _lb+(_gw*i))
    gridArr

f_getNearGridLines(_gridArr, _price) =>
    arr = array.new_int(3)
    for i = 0 to array.size(_gridArr)-1
        if array.get(_gridArr, i) > _price
            array.set(arr, 0, i == array.size(_gridArr)-1 ? i : i+1)
            array.set(arr, 1, i == 0 ? i : i-1)
            break
    arr

var upperBound      = i_autoBounds ? f_getGridBounds(i_boundSrc, i_boundLookback, i_boundDev, true) : i_upperBound  // upperbound of our grid
var lowerBound      = i_autoBounds ? f_getGridBounds(i_boundSrc, i_boundLookback, i_boundDev, false) : i_lowerBound // lowerbound of our grid
var gridWidth       = (upperBound - lowerBound)/(i_gridQty-1)                                                       // space between lines in our grid
var gridLineArr     = f_buildGrid(lowerBound, gridWidth, i_gridQty)                                                 // an array of prices that correspond to our grid lines
var orderArr        = array.new_bool(i_gridQty, false)                                                              // a boolean array that indicates if there is an open order corresponding to each grid line

var closeLineArr    = f_getNearGridLines(gridLineArr, close)                                                        // for plotting purposes - an array of 2 indices that correspond to grid lines near price
var nearTopGridLine = array.get(closeLineArr, 0)                                                                    // for plotting purposes - the index (in our grid line array) of the closest grid line above current price
var nearBotGridLine = array.get(closeLineArr, 1)                                                                    // for plotting purposes - the index (in our grid line array) of the closest grid line below current price
strategy.initial_capital = 50000
for i = 0 to (array.size(gridLineArr) - 1)
    if close < array.get(gridLineArr, i) and not array.get(orderArr, i) and i < (array.size(gridLineArr) - 1)
        buyId = i
        array.set(orderArr, buyId, true)
        strategy.entry(id=tostring(buyId), long=true, qty=(strategy.initial_capital/(i_gridQty-1))/close, comment="#"+tostring(buyId))
    if close > array.get(gridLineArr, i) and i != 0
        if array.get(orderArr, i-1)
            sellId = i-1
            array.set(orderArr, sellId, false)
            strategy.close(id=tostring(sellId), comment="#"+tostring(sellId))

if i_autoBounds
    upperBound  := f_getGridBounds(i_boundSrc, i_boundLookback, i_boundDev, true)
    lowerBound  := f_getGridBounds(i_boundSrc, i_boundLookback, i_boundDev, false)
    gridWidth   := (upperBound - lowerBound)/(i_gridQty-1)
    gridLineArr := f_buildGrid(lowerBound, gridWidth, i_gridQty)

closeLineArr    := f_getNearGridLines(gridLineArr, close)
nearTopGridLine := array.get(closeLineArr, 0)
nearBotGridLine := array.get(closeLineArr, 1)

مزید