
یہ حکمت عملی ایک لچکدار کریپٹوکرنسی سودے بازی حکمت عملی ہے جو گرڈ ٹریڈنگ کے تصور پر مبنی ہے۔ یہ مارکیٹ میں اتار چڑھاؤ کے مطابق گرڈ ٹریڈنگ کی قیمت کی حد کو خود بخود ایڈجسٹ کرنے اور اس قیمت کی حد میں موثر سودے بازی کی تجارت کرنے کی صلاحیت رکھتا ہے۔
اس حکمت عملی کے بنیادی خیالات یہ ہیں:
قیمتوں کی تاریخی اونچائیوں اور نچلی سطحوں کے مطابق ، متحرک طور پر ایک ٹرانزیکشن گرڈ کی قیمتوں کی حد کا حساب لگایا جاتا ہے۔
اس قیمت کی حد کے اندر ، N ٹرانزیکشن گرڈ لائنوں کو برابر وقفے سے ترتیب دیں۔
جب قیمت ہر گرڈ لائن کو توڑتی ہے تو ، ایک مقررہ تعداد میں پوزیشن کھولیں اور زیادہ یا کم کریں۔
ہمسایہ گرڈ لائنوں کے مابین سودے بازی ، منافع کے بعد صفائی۔
جب قیمت دوبارہ گرڈ رینج میں داخل ہوتی ہے تو ، گرڈ لائن مارجنل لاگت کی قیمت پر پوزیشن کھولنا جاری رکھیں۔
اس طرح ، یہ سائیکلنگ اور اعلی تعدد سودے بازی کی تجارت کے لئے نیٹ ورک قیمتوں کے اندر اندر ہے۔
خاص طور پر ، حکمت عملی نے پہلے ترتیب دی گئی پیچھے مڑنے والی ونڈو ((i_boundLookback) اور اتار چڑھاؤ کی حد ((i_boundDev) پیرامیٹرز کی بنیاد پر ، گرڈ کی قیمتوں کی اصل وقت میں حساب کتاب کی ہے۔
پھر اوپر اور نیچے کی حد کے درمیان N گرڈ لائنوں کو تقسیم کیا گیا ((i_gridQty) ◄ ۔ ان گرڈ لائنوں کی قیمتیں گرڈ لائن آر آر آر میں محفوظ ہیں۔
جب قیمت کسی گرڈ لائن کو توڑتی ہے تو ، ایک مقررہ مقدار پر ( حکمت عملی کی بنیادی رقم تقسیم کرنے والی گرڈ کی تعداد) پوزیشن کو زیادہ یا کم کردیں۔ آرڈر آر آر آر میں ریکارڈ کیا جاتا ہے۔
جب قیمت ایک بار پھر ملحقہ گرڈ لائن کو توڑ دیتی ہے تو ، آپ کو پہلے کے آرڈرز کے برابر منافع مل سکتا ہے ، جس سے آپ کو منافع کی جگہ مل سکتی ہے۔
اس طرح ، قیمتوں میں اتار چڑھاؤ کے دائرہ کار میں اعلی تعدد سودے بازی کا چکر لگایا جاتا ہے۔
روایتی گرڈ حکمت عملی کے مقابلے میں ، اس حکمت عملی کا سب سے بڑا فائدہ یہ ہے کہ گرڈ کی حد خود بخود ایڈجسٹ ہوتی ہے ، جو مارکیٹ میں اتار چڑھاؤ کے مطابق ڈھل جاتی ہے۔ اس کی خصوصیات یہ ہیں:
خود کار طریقے سے ایڈجسٹمنٹ، کوئی انسانی مداخلت کی ضرورت نہیں.
قیمتوں کے رجحانات کو پکڑنے اور اس رجحان کے مطابق تجارت کرنے کی صلاحیت۔
اس کے علاوہ ، یہ بھی کہا گیا ہے کہ اس کے نتیجے میں ، اس نے ایک بار پھر اپنے آپ کو ایک غیر جانبدار حملے سے بچایا ہے۔
اعلی تجارت کی فریکوئنسی، اعلی منافع کی شرح
یہ آسان سمجھنے اور ترتیب دینے کے لئے آسان ہے۔
فنڈز کے استعمال کی شرح زیادہ ہے، اور اس میں کوئی رکاوٹ نہیں ہے۔
روبوٹ ٹریڈنگ کے لئے مارکیٹ کی تبدیلیوں کو ریئل ٹائم میں ظاہر کرنا۔
اگرچہ اس حکمت عملی کے بہت سے فوائد ہیں ، اس میں کچھ خطرات بھی ہیں ، جن میں بنیادی طور پر درج ذیل پر توجہ دی گئی ہے:
قیمتوں میں شدید اتار چڑھاو کے دوران ، بڑے نقصان کا خطرہ ہوسکتا ہے۔
منافع بخش ہونے کے لئے موزوں پوزیشن ہولڈنگ وقت اور ٹریڈنگ جوڑے کی ضرورت ہوتی ہے۔
فنڈز کے سائز اور اتار چڑھاؤ کی حد کے ملاپ کا محتاط اندازہ لگانے کی ضرورت ہے۔
آپریشن کو یقینی بنانے کے لئے پیرامیٹرز کی باقاعدگی سے نگرانی اور اصلاح کی ضرورت ہوسکتی ہے۔
جواب میں شامل ہیں:
نیٹ ورک کے فاصلے کو بڑھانا، نیٹ ورک کے دائرہ کار کو بڑھانا
زیادہ مستحکم اتار چڑھاؤ والے جوڑے کا انتخاب کریں۔
کافی لیکویڈیٹی کو یقینی بنانے کے لئے فنڈز کا سائز ایڈجسٹ کریں۔
خود کار طریقے سے نگرانی اور الرٹ میکانزم کی تشکیل۔
اس حکمت عملی کو مندرجہ ذیل پہلوؤں سے بہتر بنایا جاسکتا ہے:
متحرک گرڈ: ٹریڈنگ جوڑوں کی اتار چڑھاؤ کے مطابق ، گرڈ پیرامیٹرز کو خود بخود ایڈجسٹ کیا جاسکتا ہے۔
نقصان روکنے کا نظاماس کے علاوہ ، آپ کو یہ بھی معلوم ہونا چاہئے کہ آپ کے کاروبار میں کیا ہو رہا ہے اور آپ کو کیا کرنا چاہئے:
جامع گرڈ: مختلف اوقات میں مختلف پیرامیٹرز کے ساتھ گرڈ کا مجموعہ ، وقت کی نقل و حرکت کو پورا کریں۔
مشین لرننگ: نیورل نیٹ ورکس جیسے متبادل قواعد کا استعمال کرتے ہوئے ، پیرامیٹرز کو خودکار طور پر بہتر بنانا۔
کراس مارکیٹ ثالثیکراس ایکسچینج یا کراس کرنسی کے جوڑے کے لئے بیعانہ تجارت۔
مجموعی طور پر ، یہ حکمت عملی ایک بہت ہی عملی ، خود کار طریقے سے ایڈجسٹ کرنے والی کریپٹوکرنسی گرڈ ارورائزنگ حکمت عملی ہے۔ روایتی گرڈ حکمت عملی کے مقابلے میں ، اس کی سب سے بڑی خصوصیت یہ ہے کہ گرڈ کی حد خود بخود ایڈجسٹ ہوتی ہے ، جو مارکیٹ میں ہونے والی تبدیلیوں کے مطابق اپنی تجارت کی حد کو تشکیل دے سکتی ہے۔ حکمت عملی کا نظریہ واضح ، سمجھنے اور ترتیب دینے میں آسان ہے ، جو ایک خاص بنیاد رکھنے والے انفرادی سرمایہ کار کے استعمال کے لئے موزوں ہے ، اور ٹریڈنگ روبوٹ کے طور پر استعمال کرنے کے لئے بھی موزوں ہے۔ اگر پیرامیٹرز کو مناسب ترتیب دیا جائے تو ، بہت زیادہ فنڈ افادیت حاصل کی جاسکتی ہے۔
/*backtest
start: 2024-01-11 00:00:00
end: 2024-01-18 00:00:00
period: 1m
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)