
انکولی گرڈ ٹریڈنگ اسٹریٹجی ایک انکولی گرڈ ٹریڈنگ سسٹم پر مبنی ایک مقداری حکمت عملی ہے جو مارکیٹ میں تبدیلیوں کے مطابق گرڈ لائن کی پوزیشن کو خود بخود ایڈجسٹ کرتی ہے۔ یہ حکمت عملی متعدد تکنیکی اشارے استعمال کرتی ہے جو بہترین ٹریڈنگ پوائنٹس کا حساب لگاتی ہے اور گرڈ کو متحرک طور پر قیمت کی تبدیلیوں کے مطابق اپ ڈیٹ کرتی ہے۔ اس حکمت عملی کا بنیادی خیال یہ ہے کہ جب قیمت پہلے سے طے شدہ گرڈ لائن کو چھوتی ہے تو اس میں خرید و فروخت کے آپریشن کو انجام دیا جاتا ہے۔
یہ حکمت عملی مندرجہ ذیل بنیادی اجزاء اور اصولوں پر مبنی ہے:
ہموار طریقہ کارحکمت عملی: قیمتوں کو ہموار کرنے کے لئے سب سے پہلے ، متعدد قسم کے چلنے والی اوسط کی حمایت کرتا ہے (لائنری ریگریشن ، ایس ایم اے ، ای ایم اے ، وی ڈبلیو ایم اے اور ٹی ای ایم اے) ، صارف اپنی ترجیحات کے مطابق مناسب ہموار کرنے کا انتخاب کرسکتا ہے۔
تاخیر پیرامیٹر ((Laziness)یہ حکمت عملی کا ایک اہم اختراعی نقطہ ہے ، جس میں تاخیر کی تقریب lz () متعارف کرایا گیا ہے ، جس میں مارکیٹ کے شور کو مؤثر طریقے سے فلٹر کرنے کے لئے نظام صرف اس وقت سگنل کو اپ ڈیٹ کرتا ہے جب قیمت میں تبدیلی ایک خاص فیصد سے زیادہ ہو۔
گرڈ تعمیر کا طریقہ کار:
سگنل جنریشن منطق:
ٹرانزیکشن کنٹرول:
متحرک گرڈ اپ ڈیٹ: جب Lazy Moving Average (LMA) میں تبدیلی آتی ہے تو ، حکمت عملی کو نئی قیمت کی حد کے مطابق ڈھالنے کے لئے پوری گرڈ کی ساخت کو دوبارہ ایڈجسٹ کیا جاتا ہے۔
حکمت عملی نے ہر گرڈ لائن کی قیمتوں کو ایک صف میں ذخیرہ کیا ، قیمتوں اور گرڈ لائنوں کے کراسنگ کا حساب کتاب کرکے خرید و فروخت کے مخصوص مقامات کا تعین کیا ، اور غیر ضروری تجارت سے بچنے کے لئے متعدد پابند شرائط پر غور کیا۔
لچکداراس حکمت عملی کا سب سے بڑا فائدہ یہ ہے کہ وہ بغیر کسی انسانی مداخلت کے ، مارکیٹ میں تبدیلیوں کے مطابق گرڈ کی پوزیشن کو خود بخود ایڈجسٹ کرسکتا ہے۔ لچکدار پیرامیٹرز اور لنک ایڈجسٹمنٹ میکانزم کے ذریعہ ، گرڈ قیمت کے رجحانات میں تبدیلی کے ساتھ حرکت کرسکتا ہے ، اور ہمیشہ متعلقہ رہتا ہے۔
شور فلٹرنگ: تاخیر پیرامیٹر ((Laziness) کا تعارف ایک ایسی جدت ہے جو اس بات کو یقینی بناتی ہے کہ گرڈ ایڈجسٹمنٹ صرف اس وقت ٹرگر کی جائے جب قیمت میں تبدیلی کافی نمایاں ہو ، جس سے مارکیٹ کے شور پر ردعمل کو مؤثر طریقے سے کم کیا جاسکے ، اور حکمت عملی کی استحکام میں اضافہ ہوا۔
لچکدار حسب ضرورت: حکمت عملی میں بہت سارے پیرامیٹرز کی ترتیبات ہیں ، بشمول گرڈ کی تعداد ، گرڈ اسپیس ، سمت کی ترجیحات ، ہموار اقسام ، وغیرہ۔ صارف مختلف مارکیٹ کی خصوصیات اور ذاتی تجارتی طرز کے مطابق ایڈجسٹ کرسکتا ہے۔
ٹریڈنگ زون کو دیکھنے کے لئے: حکمت عملی رنگ بھرنے کے ذریعہ موجودہ متحرک تجارتی زون کی نمائش کرتی ہے ، جس سے تاجروں کو بصری طور پر معلوم ہوتا ہے کہ موجودہ قیمتیں گرڈ میں کہاں ہیں ، جس سے فیصلے میں آسانی ہوتی ہے۔
رسک کنٹرولاس حکمت عملی نے ایک قدرتی خطرے کے کنٹرول کے طریقہ کار کو قائم کیا ہے جس میں انتہائی مارکیٹ کے حالات میں غیر منقولہ تجارت کو روکنے کے لئے صرف ایک مخصوص گرڈ کے اندر تجارت کو محدود کیا گیا ہے۔
یکساں لاگ ان اور آؤٹ لک منطق: خرید و فروخت کے سگنل کے طور پر ایک ہی گرڈ لائن کا استعمال ، تجارت کے منطق کی مستقل مزاجی اور پیش گوئی کو برقرار رکھتا ہے۔
خطرے سے دوچاریہ حکمت عملی بنیادی طور پر ایک وقفے وقفے سے تجارت کرنے والی حکمت عملی ہے ، جس میں مضبوط رجحان کی منڈیوں میں مستقل نقصان کا سامنا کرنا پڑ سکتا ہے۔ جب قیمت گرڈ کے نیچے سے ٹوٹ جاتی ہے اور ایک طرفہ حرکت کرتی رہتی ہے تو حکمت عملی غلط سمت میں مستقل طور پر بڑھتی رہتی ہے۔ اس کا حل رجحان کی شناخت کے اجزاء کو شامل کرنا ہے ، یا گرڈ ٹریڈنگ کو روکنا ہے جب رجحان کی تشکیل کی تصدیق ہو۔
پیرامیٹر کی حساسیت: حکمت عملی کی کارکردگی پیرامیٹرز کی ترتیب پر بہت زیادہ انحصار کرتی ہے ، خاص طور پر تاخیر پیرامیٹرز (لازنی) اور لچکدار پیرامیٹرز (الستی) ۔ نامناسب پیرامیٹرز سے گرڈ کی غیر بروقت یا ضرورت سے زیادہ حساس ایڈجسٹمنٹ ہوسکتی ہے۔ ان پیرامیٹرز کو مختلف مارکیٹ کے حالات میں بیک اپ کے ذریعہ بہتر بنانے کی سفارش کی جاتی ہے۔
پیراڈائم خطرات: حکمت عملی ایک ہی سمت میں متعدد اندراجات کی اجازت دیتی ہے ((pyramiding = 4) ، جو انتہائی مارکیٹ کے حالات میں ضرورت سے زیادہ بیعانہ اور خطرے کی حراستی کا باعث بن سکتی ہے۔ زیادہ سے زیادہ انعقاد کی حد اور متحرک پوزیشن مینجمنٹ کا تعین کرنے پر غور کیا جانا چاہئے۔
سلائڈ پوائنٹس اور فیس کا اثر: گرڈ ٹریڈنگ کی حکمت عملی میں عام طور پر بار بار تجارت شامل ہوتی ہے۔ عملی طور پر عملدرآمد میں ، سلائپ پوائنٹس اور فیسوں سے حکمت عملی کی منافع بخش صلاحیت پر نمایاں اثر پڑ سکتا ہے۔ ان عوامل کو بیک اپ میں شامل کرنے کی ضرورت ہے ، اور گرڈ کے وقفے کو ایڈجسٹ کرنے کی ضرورت ہوسکتی ہے تاکہ تجارت کی فریکوئنسی اور لاگت کو متوازن کیا جاسکے۔
سگنل تنازعہ: جب خرید و فروخت کے سگنل ایک ساتھ آتے ہیں تو ، موجودہ حکمت عملی نے دونوں سگنلوں کو نظرانداز کرنے کا انتخاب کیا ہے ، جس سے اہم تجارتی مواقع ضائع ہوسکتے ہیں۔ سگنل تنازعات کو اضافی مارکیٹ اشارے یا قیمت کے نمونوں کی بنیاد پر حل کرنے پر غور کیا جاسکتا ہے۔
خود کار طریقے سے پیرامیٹرز کو ایڈجسٹ: حکمت عملی کو مزید بہتر بنایا جاسکتا ہے تاکہ مارکیٹ کے اتار چڑھاؤ کے مطابق خود بخود گرڈ اسپیس اور تاخیر کے پیرامیٹرز کو ایڈجسٹ کیا جاسکے۔ مثال کے طور پر ، اعلی اتار چڑھاؤ والے بازاروں میں گرڈ اسپیس میں اضافہ اور کم اتار چڑھاؤ والے بازاروں میں گرڈ اسپیس کو کم کرنا تاکہ حکمت عملی مختلف مارکیٹ کے حالات کے مطابق بہتر طور پر ڈھال سکے۔
رجحانات کا پتہ لگانے کے اجزاء کو ضم کرنا: موجودہ حکمت عملی رجحان مارکیٹ میں خراب کارکردگی کا مظاہرہ کرسکتی ہے ، رجحانات کی شناخت کے اشارے متعارف کروائے جاسکتے ہیں (جیسے ADX ، منتقل اوسط کراسنگ ، وغیرہ) ، جب مضبوط رجحانات کی نشاندہی کی جاتی ہے تو خود بخود تجارت کی سمت کو ایڈجسٹ کریں یا گرڈ ٹریڈنگ کو معطل کریں۔
متحرک پوزیشن مینجمنٹ: موجودہ حکمت عملی فکسڈ پوزیشن سائز کا استعمال کرتی ہے ، جس میں خطرہ پر مبنی متحرک پوزیشن مینجمنٹ میں بہتری آسکتی ہے ، مثال کے طور پر پوزیشن سائز کو اے ٹی آر (اوسط حقیقی طول و عرض) کے مطابق ایڈجسٹ کرنا ، یا اکاؤنٹ کے خالص مالیت کے فیصد کے مطابق فنڈز کی تقسیم کرنا۔
ملٹی ٹائم فریم تجزیہ: ملٹی ٹائم فریم تجزیہ متعارف کرایا گیا ہے ، ٹریڈنگ سگنل کو فلٹر کرنے کے لئے طویل وقت کے دورانیے کی سمت کا استعمال کیا جاتا ہے ، اور صرف اس سمت میں گرڈ ٹریڈنگ کی جاتی ہے جو بڑے ٹائم فریم کے رجحانات کے مطابق ہے۔
کامل سٹاپ نقصان کے طریقہ کار: موجودہ حکمت عملی میں واضح اسٹاپ نقصان کا طریقہ کار موجود نہیں ہے۔ مجموعی طور پر مارکیٹ کی مجموعی صورتحال پر مبنی عالمی سطح پر اسٹاپ نقصان کا اضافہ کیا جاسکتا ہے ، یا ہر گرڈ لیول کے لئے علیحدہ اسٹاپ نقصان کا مقام مرتب کیا جاسکتا ہے تاکہ کسی ایک تجارت میں زیادہ سے زیادہ نقصان کو محدود کیا جاسکے۔
آؤٹ پٹ ٹائمنگ کو بہتر بنانا: حکمت عملی کو ٹریفک یا قیمت کی حرکیات کے اشارے میں ضم کیا جاسکتا ہے ، جب گرڈ سگنل ٹرگر ہوتا ہے تو ، اضافی فلٹرنگ شرائط کے ذریعہ مخصوص انٹری اور آؤٹ پٹ ٹائمنگ کو بہتر بنانا ، کامیابی کی شرح کو بہتر بنانا۔
مشین لرننگ انٹیگریشن: مشین لرننگ الگورتھم کا استعمال کرتے ہوئے گرڈ پوزیشن اور پیرامیٹرز کے انتخاب کو بہتر بنانے پر غور کیا جاسکتا ہے ، بہترین گرڈ سیٹنگ کی پیش گوئی کرنے کے لئے تاریخی اعداد و شمار کے ساتھ تربیت یافتہ ماڈل ، حکمت عملی کی موافقت کو مزید بہتر بنانا۔
خود سے ڈھالنے والی گرڈ ٹریڈنگ حکمت عملی جدید تاخیر کے افعال اور متحرک گرڈ ایڈجسٹمنٹ میکانزم کے ذریعہ روایتی گرڈ ٹریڈنگ حکمت عملی کی عدم لچک کی دشواری کو حل کرتی ہے۔ یہ مارکیٹ میں تبدیلیوں کو خود بخود ڈھالنے ، مختلف قیمتوں کے حلقوں میں تجارتی مواقع کو پکڑنے اور متعدد پیرامیٹرز کے ذریعہ تجارتی طرز عمل کو کنٹرول کرنے کی صلاحیت رکھتی ہے۔ یہ حکمت عملی اتار چڑھاؤ والی مارکیٹوں میں استعمال کے ل suitable موزوں ہے ، اور معقول گرڈ وقفہ اور سمت کی ترجیحات کو ترتیب دے کر خود کار طریقے سے تجارتی عملدرآمد کو حاصل کیا جاسکتا ہے۔
اسٹریٹجی میں مختلف مارکیٹ ماحول میں مستحکم کارکردگی حاصل کرنے کی صلاحیت موجود ہے ، اگرچہ اس میں ممکنہ مسائل جیسے بینڈ توڑنے کا خطرہ اور پیرامیٹرز کی حساسیت موجود ہے۔ عملی استعمال میں ، یہ مشورہ دیا جاتا ہے کہ حکمت عملی کی کارکردگی کو مکمل طور پر جانچنے کے بعد ، خاص طور پر مختلف مارکیٹ کے حالات میں کارکردگی کی توثیق کی جائے ، اور پیرامیٹرز کو مخصوص تجارتی اقسام کی خصوصیات کے مطابق ایڈجسٹ کیا جائے۔
//@version=5
// This source code is subject to the terms of the Mozilla Public License 2.0 https://mozilla.org/MPL/2.0/
// ©mvs1231 || xxattaxx
strategy(title='Grid Bot Auto Strategy', shorttitle='GridBot', initial_capital = 100000, overlay=true, pyramiding=4, default_qty_type = strategy.fixed, default_qty_value = 0, commission_value = 0.04, commission_type = strategy.commission.percent, margin_long = 0, margin_short = 0, process_orders_on_close = true)
//----<User Inputs>------------------------------------------------------------------------------//
iLen = input.int(7, 'Smoothing Length(7)', minval=1)
iMA = input.string('lreg', 'Smoothing Type', options=['lreg', 'sma', 'ema', 'vwma', 'tema'])
iLZ = input.float(4.0, 'Laziness(4%)', step=.25) / 100
iELSTX = input(50.0, 'Elasticity(50)')
iGI = input.float(2.0, 'Grid Interval(2%)', step=.25) / 100
iGrids = input.int(6, 'Number of Grids', options=[2, 4, 6, 8])
iCool = input.int(2, 'Cooldown(2)', minval=0)
iDir = input.string('neutral', 'Direction', options=['neutral', 'up', 'down'])
iGT = input.int(70, 'Grid Line Transparency(100 to hide)', minval=0, maxval=100)
iFT = input.int(90, 'Fill Transparency(100 to hide)', minval=0, maxval=100)
iSS = input.string('small', 'Signal Size', options=['small', 'large'])
iReset = input(true, 'Reset Buy/Sell Index When Grids Change')
iEXTR = input(true, 'Use Highs/Lows for Signals')
iMT = input(true, 'Show Min Tick')
iRFC = input(false, 'Reverse Fill Colors')
qty_ent = iGrids/2
qty_pos = strategy.initial_capital / qty_ent / 2 / open
//----<Colors>-----------------------------------------------------------------------------------//
RedGrid = color.new(color.red, iGT)
GreenGrid = color.new(color.green, iGT)
Crimson = #DC143C
LimeGreen = #32CD32
//----<Variables>--------------------------------------------------------------------------------//
NextUP = 0.0
NextDN = 0.0
LastSignal = 0
LastSignal_Index = 0
AP = 0.0
G = iGrids
Buy = false
Sell = false
UpperLimit = 0.0
LowerLimit = 0.0
SignalLine = 0.0
CurrentGrid = 0.0
BuyLine = 0.0
SellLine = 0.0
DIR = 0
MeaningOfLife = 42
//----<Calculations>-----------------------------------------------------------------------------//
//Lazy Formula
lz(x, lzf) =>
LZ = 0.0
s = math.sign(x)
LZ := x == nz(x[1], x) ? x : x > nz(LZ[1] + lzf * LZ[1] * s, x) ? x : x < nz(LZ[1] - lzf * LZ[1] * s, x) ? x : LZ[1]
LZ
//Smoothing
LR = ta.linreg(close, iLen, 0)
SMA = ta.sma(close, iLen)
EMA = ta.ema(close, iLen)
VWMA = ta.vwma(close, iLen)
TEMA = ta.ema(ta.ema(ta.ema(close, iLen), iLen), iLen)
MA = iMA == 'lreg' ? LR : iMA == 'sma' ? SMA : iMA == 'ema' ? EMA : iMA == 'vwma' ? VWMA : TEMA
//Make Lazy
LMA = lz(MA, iLZ)
//Calculate Elasticity
ELSTX = syminfo.mintick * iELSTX
//Show Mintick
if iMT and barstate.islast
table.cell(table.new(position.top_right, 1, 1), 0, 0, str.tostring(syminfo.mintick))
//Anchor Point
AP := MA > LMA ? AP[1] + ELSTX : MA < LMA ? AP[1] - ELSTX : AP[1]
AP := AP >= NextUP[1] ? NextUP[1] : AP
AP := AP <= NextDN[1] ? NextDN[1] : AP
//Reset if Next Level Reached or AP is crossed
AP := LMA != LMA[1] ? LMA : AP
//Next Gridlines
NextUP := LMA != LMA[1] ? LMA + LMA * iGI : NextUP[1]
NextDN := LMA != LMA[1] ? LMA - LMA * iGI : NextDN[1]
//Grid Interval
GI = AP * iGI
//----<Grid Array>-------------------------------------------------------------------------------//
a_grid = array.new_float(9)
for x = -4 to 4 by 1
array.set(a_grid, x + 4, AP + GI * x)
Get_Array_Values(ArrayName, index) =>
value = array.get(ArrayName, index)
value
//----<Set Static Grids>-------------------------------------------------------------------------//
G0 = Get_Array_Values(a_grid, 0) //Upper4
G1 = Get_Array_Values(a_grid, 1) //Upper3
G2 = Get_Array_Values(a_grid, 2) //Upper2
G3 = Get_Array_Values(a_grid, 3) //Upper1
G4 = Get_Array_Values(a_grid, 4) //Center
G5 = Get_Array_Values(a_grid, 5) //Lower1
G6 = Get_Array_Values(a_grid, 6) //Lower2
G7 = Get_Array_Values(a_grid, 7) //Lower3
G8 = Get_Array_Values(a_grid, 8) //Lower4
//----<Set Upper and Lower Limits>---------------------------------------------------------------//
UpperLimit := G >= 8 ? G8 : G >= 6 ? G7 : G >= 4 ? G6 : G5
LowerLimit := G >= 8 ? G0 : G >= 6 ? G1 : G >= 4 ? G2 : G3
//----<Calculate Signals>------------------------------------------------------------------------//
Get_Signal_Index() =>
Value = 0.0
Buy_Index = 0
Sell_Index = 0
start = 4 - G / 2
end = 4 + G / 2
for x = start to end by 1
Value := Get_Array_Values(a_grid, x)
if iEXTR
Sell_Index := low[1] < Value and high >= Value ? x : Sell_Index
Buy_Index := high[1] > Value and low <= Value ? x : Buy_Index
Buy_Index
else
Sell_Index := close[1] < Value and close >= Value ? x : Sell_Index
Buy_Index := close[1] > Value and close <= Value ? x : Buy_Index
Buy_Index
[Buy_Index, Sell_Index]
[BuyLine_Index, SellLine_Index] = Get_Signal_Index()
//----<Signals>----------------------------------------------------------------------------------//
Buy := BuyLine_Index > 0 ? true : Buy
Sell := SellLine_Index > 0 ? true : Sell
//No repeat trades at current level
Buy := low >= SignalLine[1] - GI ? false : Buy
Sell := high <= SignalLine[1] + GI ? false : Sell
//No trades outside of grid limits
Buy := close > UpperLimit ? false : Buy
Buy := close < LowerLimit ? false : Buy
Sell := close < LowerLimit ? false : Sell
Sell := close > UpperLimit ? false : Sell
//Direction Filter (skip one signal if against market direction)
DIR := iDir == 'up' ? 1 : iDir == 'down' ? -1 : 0
Buy := DIR == -1 and low >= SignalLine[1] - GI * 2 ? false : Buy
Sell := DIR == 1 and high <= SignalLine[1] + GI * 2 ? false : Sell
//Conflicting Signals
if Buy and Sell
Buy := false
Sell := false
LastSignal_Index := LastSignal_Index[1]
LastSignal_Index
//----<Cooldown>---------------------------------------------------------------------------------//
y = 0
for i = 1 to iCool by 1
if Buy[i] or Sell[i]
y := 0
break
y += 1
y
CoolDown = y
Buy := CoolDown < iCool ? false : Buy
Sell := CoolDown < iCool ? false : Sell
//----<Trackers>---------------------------------------------------------------------------------//
LastSignal := Buy ? 1 : Sell ? -1 : LastSignal[1]
LastSignal_Index := Buy ? BuyLine_Index : Sell ? SellLine_Index : LastSignal_Index[1]
SignalLine := Get_Array_Values(a_grid, LastSignal_Index)
//Reset to Center Grid when LMA changes
if iReset
SignalLine := LMA < LMA[1] ? UpperLimit : SignalLine
SignalLine := LMA > LMA[1] ? LowerLimit : SignalLine
SignalLine
BuyLine := Get_Array_Values(a_grid, BuyLine_Index)
SellLine := Get_Array_Values(a_grid, SellLine_Index)
//----<Plot Grids>--------------------------//
color apColor = na
apColor := MA < AP ? color.new(color.red, iGT) : MA > AP ? color.new(color.green, iGT) : apColor[1]
apColor := LMA != LMA[1] ? na : apColor
plot(G >= 8 ? G0 : na, color=GreenGrid)
plot(G >= 6 ? G1 : na, color=GreenGrid)
plot(G >= 4 ? G2 : na, color=GreenGrid)
plot(G >= 2 ? G3 : na, color=GreenGrid)
plot(G4, color=apColor, linewidth=4) // Center
plot(G >= 2 ? G5 : na, color=RedGrid)
plot(G >= 4 ? G6 : na, color=RedGrid)
plot(G >= 6 ? G7 : na, color=RedGrid)
plot(G >= 8 ? G8 : na, color=RedGrid)
//fill
LineAbove = SignalLine == UpperLimit ? SignalLine : SignalLine + GI
LineBelow = SignalLine == LowerLimit ? SignalLine : SignalLine - GI
a = plot(LineAbove, color=color.new(color.red, 100), style=plot.style_circles)
b = plot(LineBelow, color=color.new(color.green, 100), style=plot.style_circles)
boxColor = LastSignal == 1 ? color.new(color.green, iFT) : color.new(color.red, iFT)
if iRFC
boxColor := LastSignal == -1 ? color.new(color.green, iFT) : color.new(color.red, iFT)
boxColor
fill(a, b, color=boxColor)
//----<Plot Signals>-----------------------------------------------------------------------------//
plotchar(Buy and iSS == 'small', 'Buy', color=color.new(LimeGreen, 0), size=size.tiny, location=location.belowbar, char='▲')
plotchar(Sell and iSS == 'small', 'Sell', color=color.new(Crimson, 0), size=size.tiny, location=location.abovebar, char='▼')
plotchar(Buy and iSS == 'large', 'Buy', color=color.new(LimeGreen, 0), size=size.small, location=location.belowbar, char='▲')
plotchar(Sell and iSS == 'large', 'Sell', color=color.new(Crimson, 0), size=size.small, location=location.abovebar, char='▼')
//----<Alerts>-----------------------------------------------------------------------------------//
alertcondition(condition=Buy, title='buy', message='buy')
alertcondition(condition=Sell, title='sell', message='sell')
//-----------------------------------------------------------------------------------------------//
if strategy.position_size >= 0 and Buy
strategy.entry("Long", strategy.long, qty = qty_pos)
if strategy.position_size <= 0 and Sell
strategy.entry("Short", strategy.short, qty = qty_pos)
if strategy.position_size > 0 and Sell
strategy.close("Long", qty = qty_pos)
if strategy.position_size < 0 and Buy
strategy.close("Short", qty = qty_pos)