
گرڈ ٹریڈنگ رسک ہیجنگ حکمت عملی ایک ایسی حکمت عملی ہے جو گرڈ ٹریڈنگ کے تصور پر مبنی ہے اور اس میں رسک ہیجنگ کی سوچ شامل ہے۔ اس حکمت عملی میں پہلے سے طے شدہ قیمتوں کے دائرے میں متعدد خرید و فروخت کے احکامات کی ترتیب دی جاتی ہے ، جس سے قیمتوں میں اتار چڑھاؤ سے فائدہ اٹھایا جاسکتا ہے۔ اس حکمت عملی میں ایک رسک ہیجنگ میکانزم بھی متعارف کرایا گیا ہے ، جس میں گرڈ کی حدود کو متحرک طور پر ایڈجسٹ کیا گیا ہے تاکہ مارکیٹ کے ماحول میں تبدیلیوں کے مطابق حکمت عملی کا خطرہ کم کیا جاسکے۔
اس حکمت عملی کا بنیادی اصول گرڈ ٹریڈنگ ہے۔ پہلے ، صارف کے مقرر کردہ پیرامیٹرز کے مطابق گرڈ کی اوپری اور نچلی سرحد اور گرڈ لائنوں کی تعداد کا تعین کریں۔ پھر ، گرڈ لائن پر خرید و فروخت کے احکامات لگائیں: جب قیمت گرڈ لائن کو چھوتی ہے تو ، اگر اس سے پہلے کوئی آرڈر نہیں ہوتا ہے تو ، پوزیشن کھولی جاتی ہے۔ اگر اس سے پہلے کوئی آرڈر ہوتا ہے تو ، اس کی جگہ لی جاتی ہے۔ اس طرح ، حکمت عملی قیمت کے اتار چڑھاؤ میں مسلسل پوزیشن کھول سکتی ہے ، اور اس طرح منافع کما سکتی ہے۔
اسی وقت ، خطرے کو کم کرنے کے لئے ، اس حکمت عملی میں متحرک گرڈ بارڈر ایڈجسٹمنٹ میکانزم بھی متعارف کرایا گیا ہے۔ صارف کے انتخاب کے مطابق ، گرڈ کے اوپری اور نچلے سرحدی حصے کو دو طریقوں سے خود بخود ایڈجسٹ کیا جاسکتا ہے: 1) حالیہ مدت کی اعلی ترین قیمتوں اور کم سے کم قیمتوں کے مطابق ، اور صارف کی طرف سے طے شدہ انحراف کو مدنظر رکھتے ہوئے؛ 2) چلتی اوسط کے مطابق ، اور صارف کی طرف سے طے شدہ انحراف کو مدنظر رکھتے ہوئے۔ گرڈ کی سرحد کو متحرک طور پر ایڈجسٹ کرکے ، گرڈ کو ہمیشہ موجودہ قیمت کے گرد رکھنا ممکن ہے ، جس سے قیمتوں میں گرڈ کی سرحد کو توڑنے کا خطرہ کم ہوجاتا ہے۔
اس کے علاوہ ، یہ حکمت عملی پوزیشن کھولتے وقت مجموعی فنڈز کو N حصوں میں تقسیم کرتی ہے ، اور ہر پوزیشن کھولنے کے لئے برابر فنڈز استعمال کیے جاتے ہیں ، اس طرح ایک ہی تجارت کے خطرے کو کم کیا جاسکتا ہے۔
لچکدار: گرڈ کی سرحدوں کو متحرک طور پر ایڈجسٹ کرکے ، حکمت عملی مختلف مارکیٹ کے حالات کے مطابق ڈھال سکتی ہے ، چاہے رجحان ہو یا ہنگامہ خیز صورتحال ، بہتر منافع کے ل automatically خود بخود ایڈجسٹ ہوسکتی ہے۔
خطرے کو کنٹرول کیا جاسکتا ہے: حکمت عملی پوزیشن کھولنے کے وقت مساوی رقم کا استعمال کرتی ہے ، جس میں ایک ہی تجارت کا خطرہ کم ہوتا ہے۔ اس کے علاوہ ، متحرک گرڈ بارڈر ایڈجسٹمنٹ میکانزم ، جس سے قیمتوں میں گرڈ بارڈر کو توڑنے کا خطرہ کم ہوسکتا ہے۔
اعلی تجارتی تعدد: چونکہ گرڈ عام طور پر زیادہ آرڈر دیتا ہے ، لہذا اعلی تجارتی تعدد ، اتار چڑھاؤ کے حالات میں منافع کمانا آسان ہے۔
پیرامیٹرز کی لچک: صارف اپنی ترجیحات کے مطابق ، گرڈ کی تعداد ، اوپری اور نچلی سرحد ، متحرک ایڈجسٹمنٹ پیرامیٹرز وغیرہ کو ترتیب دے سکتا ہے ، جس سے وہ مختلف تجارتی طرزوں کو اپنائے گا۔
رجحانات میں ناقص کارکردگی: اگر قیمتیں یک طرفہ طور پر بڑھتی یا گرتی رہتی ہیں ، گرڈ کی حدود کو پار کرتی ہیں ، اور متحرک ایڈجسٹمنٹ قیمتوں میں تبدیلی کی رفتار سے مطابقت نہیں رکھتی ہے تو حکمت عملی کو زیادہ خطرہ لاحق ہوسکتا ہے۔
ہینڈلنگ فیس: حکمت عملی کی تجارت کی اعلی تعدد کی وجہ سے ، ہینڈلنگ فیس سے آمدنی پر کچھ اثر پڑ سکتا ہے۔
غلط پیرامیٹرز کی ترتیب: اگر پیرامیٹرز کی ترتیب غلط ہے ، جیسے کہ گرڈ کی تعداد بہت زیادہ ہے ، گرڈ کی حدود کی غیر معقول ترتیب وغیرہ ، اس سے پالیسی کی خراب کارکردگی کا سبب بن سکتا ہے۔
حل: 1) رجحان کے حالات میں ، گرڈ کی حدود میں اضافے کی ایڈجسٹمنٹ کی مقدار پر غور کیا جاسکتا ہے ، یا رجحان کی حکمت عملی کے ساتھ مل کر۔ 2) کم فیس والے تبادلے اور کرنسیوں کا انتخاب کریں۔ 3) عملی طور پر چلانے سے پہلے ، پیرامیٹرز کی کافی مقدار میں بازیافت اور اصلاح کی ضرورت ہے۔
دیگر حکمت عملیوں کے ساتھ انضمام: حکمت عملی کی موافقت اور استحکام کو بہتر بنانے کے لئے گرڈ ٹریڈنگ حکمت عملی کو دیگر اقسام کی حکمت عملیوں جیسے رجحان کی حکمت عملی ، اوسط واپسی کی حکمت عملی وغیرہ کے ساتھ جوڑنے پر غور کیا جاسکتا ہے۔
متحرک ایڈجسٹمنٹ میکانزم کو بہتر بنائیں: موجودہ حکمت عملی میں متحرک ایڈجسٹمنٹ میکانزم نسبتا simple آسان ہے ، جسے مزید بہتر بنایا جاسکتا ہے ، جیسے مزید عوامل (جیسے ٹرانزٹ ، اتار چڑھاؤ کی شرح ، وغیرہ) کو مدنظر رکھتے ہوئے ، اعلی درجے کی الگورتھم (جیسے خود سے مطابقت پذیر الگورتھم ، مشین لرننگ الگورتھم ، وغیرہ) کو اپنانا۔
فنڈ مینجمنٹ کو بہتر بنائیں: موجودہ حکمت عملی میں مساوی فنڈ مینجمنٹ کا استعمال کیا گیا ہے۔ فنڈ مینجمنٹ کے اعلی درجے کے طریقوں کو متعارف کرانے پر غور کیا جاسکتا ہے ، جیسے کیلی قانون ، زیادہ سے زیادہ طریقوں وغیرہ ، تاکہ فنڈ کے استعمال کی کارکردگی اور منافع کو مزید بہتر بنایا جاسکے۔
اسٹاپ اسٹاپ کا تعارف: حکمت عملی کے خطرے کو مزید کم کرنے کے لئے ، گرڈ ٹریڈنگ کی بنیاد پر ، اسٹاپ اسٹاپ کی کچھ منطق متعارف کروائی جاسکتی ہے ، جیسے کہ چلنے والی اسٹاپ اسٹاپ ، اتار چڑھاؤ کی شرح اسٹاپ اسٹاپ اسٹاپ وغیرہ۔
گرڈ ٹریڈنگ رسک ہیجنگ حکمت عملی ایک اعلی درجے کی آٹومیشن ، لچکدار ، اور خطرے سے قابو پانے والی مقدار میں تجارت کی حکمت عملی ہے۔ گرڈ ٹریڈنگ اور متحرک گرڈ ایڈجسٹمنٹ کے ذریعہ ، حکمت عملی مختلف حالات میں منافع بخش ہوسکتی ہے ، جبکہ خطرے پر بھی قابو پایا جاسکتا ہے۔ تاہم ، حکمت عملی رجحان سازی کے حالات میں ناقص کارکردگی کا مظاہرہ کرسکتی ہے ، اور اس کی فیس پر اثر پڑ سکتا ہے ، لہذا عملی اطلاق میں مزید اصلاحات اور بہتری کی ضرورت ہے۔ مجموعی طور پر ، یہ حکمت عملی ایک زیادہ پختہ مقدار میں تجارت کا نظریہ پیش کرتی ہے ، جو مزید تحقیق اور اطلاق کے قابل ہے۔
/*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)