اس حکمت عملی میں سمندری نظریہ میں گرڈ ٹریڈنگ کا طریقہ استعمال کیا گیا ہے ، جس میں قیمتوں کی ایک مقررہ حد میں یکساں طور پر تقسیم شدہ گرڈ لائن ، قیمت اور گرڈ لائن کے تعلقات کے مطابق خرید و فروخت کا آپریشن کیا گیا ہے۔ حکمت عملی میں خود کار طریقے سے گرڈ قیمت کی حد اور یکساں طور پر تقسیم شدہ گرڈ لائن کی خصوصیات ہیں ، جو خطرے کو مؤثر طریقے سے کنٹرول کرسکتی ہیں۔
یہ حکمت عملی سب سے پہلے صارف کے منتخب کردہ یا ڈیفالٹ سیٹ کی بنیاد پر قیمت کے گرڈ کی اوپری اور نچلی حد ، یعنی گرڈ کی اعلی ترین قیمت اور کم ترین قیمت کا حساب لگاتی ہے۔ حساب کتاب کے دو طریقے ہیں ، ایک ہے پیمائش کے دورانیے میں اعلی ترین قیمت اور کم ترین قیمت تلاش کرنا ، دوسرا ہے ایک خاص دورانیے کی اوسط کا حساب لگانا۔ پھر صارف کے مقرر کردہ گرڈ کی تعداد کے مطابق ، یکساں طور پر تقسیم شدہ گرڈ لائن۔
ٹریڈنگ سگنل کی پیداوار قیمت اور گرڈ لائن کے تعلقات پر منحصر ہے۔ جب قیمت نیچے گرڈ لائن سے کم ہوتی ہے تو ، اس گرڈ لائن پر ایک مقررہ تعداد میں پوزیشن کھولی جاتی ہے۔ جب قیمت اوپر گرڈ لائن سے زیادہ ہوتی ہے تو ، اس گرڈ لائن پر ایک مقررہ تعداد میں پوزیشن ختم کردی جاتی ہے۔ اس طرح قیمت کے اتار چڑھاؤ کے ساتھ ، پوزیشن بھی گرڈ میں اتار چڑھاؤ کرتی ہے ، جس سے منافع ہوتا ہے۔
خاص طور پر ، حکمت عملی ایک گرڈ لائن کی قیمت کی صف اور ایک بولی کی صف کو برقرار رکھتی ہے جو ہر گرڈ لائن میں کوئی لٹکا ہوا ہے یا نہیں۔ جب قیمت کسی گرڈ لائن سے کم ہو اور اس لائن میں کوئی لٹکا ہوا نہ ہو تو ، اس لائن پر زیادہ قیمت لگائیں۔ جب قیمت کسی گرڈ لائن سے زیادہ ہو اور اس کے نیچے گرڈ لائن میں لٹکا ہوا ہو تو ، نیچے گرڈ لائن پر صف بندی کریں۔ اس طرح ، گرڈ تجارت کی جاتی ہے۔
خود کار طریقے سے گرڈ کے فاصلے کا حساب لگانا ، دستی ترتیب کی دشواری سے بچنے کے لئے۔ مختلف حساب کتاب کے طریقوں کا انتخاب کیا جاسکتا ہے۔
یکساں طور پر تقسیم شدہ گرڈ لائن ، گرڈ کثافت سے بچنے کے ل excessive ضرورت سے زیادہ تجارت کریں۔ گرڈ لائنوں کی تعداد ایڈجسٹ کی جاسکتی ہے۔
گرڈ ٹریڈنگ کا استعمال کرتے ہوئے، آپ کو مؤثر طریقے سے خطرے کو کنٹرول کر سکتے ہیں، اور گرڈ کے اندر اندر قیمتوں میں اتار چڑھاو ہمیشہ منافع بخش ہوسکتا ہے.
قیمتوں کی کوئی سمت متوقع نہیں ہے ، جو زلزلے کی صورت حال میں لاگو ہوتا ہے۔
مختلف اقسام کے لین دین کے لئے کسٹم فیس اور پوزیشن کی تعداد کو اپنی مرضی کے مطابق کیا جاسکتا ہے۔
اس کے علاوہ ، یہ ایک بہت ہی آسان اور آسان ٹرانزیکشن ہے ، جس کی مدد سے آپ آسانی سے تجارت کر سکتے ہیں۔
گرڈ کی حد کو توڑنے کا خطرہ۔ گرڈ کے نچلے حصے کو توڑنے سے نقصان میں اضافہ ہوتا ہے۔
گرڈ کے فاصلے میں بہت زیادہ نرمی کا خطرہ ہے۔ گرڈ بہت وسیع ہے اور اس سے فائدہ اٹھانا مشکل ہے ، لیکن گرڈ بہت تنگ ہے اور اس سے فیس میں اضافہ ہوتا ہے۔ توازن کی ضرورت ہے۔
طویل عرصے تک پوزیشن رکھنے کا خطرہ۔ طویل عرصے تک پوزیشن رکھنے سے منافع حاصل کرنا مشکل ہے yet مزید فیسوں میں کمی۔
پیرامیٹرز کی غلط ترتیب کا خطرہ۔ جیسے ریٹرننگ پیریڈ یا اوسط لائن پیریڈ جیسے پیرامیٹرز کی غلط ترتیب ، گرڈ کے فاصلے کے حساب کو متاثر کرے گی۔
مارکیٹ میں سسٹم کا خطرہ۔ یہ حکمت عملی طویل مدتی یکطرفہ رویے کے لئے نہیں بلکہ ہنگامی صورتحال کے لئے موزوں ہے۔
گرڈ پیرامیٹرز کی ترتیب کو بہتر بنائیں۔ مارکیٹ کی خصوصیات ، ٹرانزیکشن لاگت اور دیگر عوامل کو جامع طور پر مدنظر رکھتے ہوئے ، گرڈ کی تعداد کو بہتر بنائیں ، ریٹرننگ سائیکل جیسے پیرامیٹرز۔
جب مارکیٹ میں بڑی تبدیلی ہوتی ہے تو ، گرڈ بینڈ کو متحرک طور پر ایڈجسٹ کرنے کا طریقہ کار متعارف کرایا جاسکتا ہے۔
اسٹاپ نقصان کے طریقہ کار میں شامل ہوں۔ معقول اسٹاپ لائن طے کریں تاکہ زیادہ سے زیادہ نقصان سے بچا جاسکے۔ اسٹاپ نقصان کی لائن کو متحرک طور پر بھی ایڈجسٹ کیا جاسکتا ہے۔
دوسرے اشارے کے ساتھ مل کر ٹریڈنگ کو فلٹر کریں۔ جیسے برلن لائن ، رجحان اشارے وغیرہ۔
فنڈز کے استعمال کی کارکردگی کو بہتر بنائیں۔ ٹھنڈے گرم تجزیہ میں شامل ہوں ، اور کم اتار چڑھاو کے دوران تجارت کو کم کریں۔
اس حکمت عملی میں گرڈ ٹریڈنگ کے اصول کا استعمال کیا گیا ہے ، جس میں خطرے پر قابو پانے کے لئے ہلچل والے حالات میں تجارت کی جاسکتی ہے۔ اس حکمت عملی میں خود کار طریقے سے حساب کتاب گرڈ ، یکساں طور پر تقسیم شدہ گرڈ اور دیگر فوائد ہیں ، جو پیرامیٹرز کو مختلف مارکیٹ کے ماحول میں ایڈجسٹ کرکے اپنایا جاسکتا ہے۔ خطرہ قابل کنٹرول اور آسان ہے۔ تاہم ، اس حکمت عملی میں کچھ حدود بھی ہیں ، جن کو مارکیٹ میں تبدیلیوں کے مطابق ڈھالنے کے لئے مسلسل اصلاح کی ضرورت ہے۔ مجموعی طور پر ، یہ حکمت عملی گرڈ ٹریڈنگ کے لئے ایک نسبتا standardized معیاری اور پیرامیٹر قابل عمل عمل درآمد کا طریقہ فراہم کرتی ہے۔
/*backtest
start: 2023-09-12 00:00:00
end: 2023-10-12 00:00:00
period: 1h
basePeriod: 15m
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
strategy.initial_capital = 50000
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
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)