انکولی گرڈ تجارتی حکمت عملی اور متحرک ایڈجسٹمنٹ میکانزم

MA EMA SMA VWMA TEMA LREG Grid Trading Elasticity Laziness Cooldown
تخلیق کی تاریخ: 2025-02-28 10:01:54 آخر میں ترمیم کریں: 2025-02-28 10:01:54
کاپی: 4 کلکس کی تعداد: 1044
2
پر توجہ دیں
319
پیروکار

انکولی گرڈ تجارتی حکمت عملی اور متحرک ایڈجسٹمنٹ میکانزم انکولی گرڈ تجارتی حکمت عملی اور متحرک ایڈجسٹمنٹ میکانزم

جائزہ

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

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

یہ حکمت عملی مندرجہ ذیل بنیادی اجزاء اور اصولوں پر مبنی ہے:

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

  2. تاخیر پیرامیٹر ((Laziness)یہ حکمت عملی کا ایک اہم اختراعی نقطہ ہے ، جس میں تاخیر کی تقریب lz () متعارف کرایا گیا ہے ، جس میں مارکیٹ کے شور کو مؤثر طریقے سے فلٹر کرنے کے لئے نظام صرف اس وقت سگنل کو اپ ڈیٹ کرتا ہے جب قیمت میں تبدیلی ایک خاص فیصد سے زیادہ ہو۔

  3. گرڈ تعمیر کا طریقہ کار:

    • اینکر پوائنٹ (Anchor Point) گرڈ کے مرکز کے طور پر ، قیمتوں اور منتقل اوسط کے مابین تعلقات کی بنیاد پر متحرک ایڈجسٹمنٹ
    • گرڈ وقفہ (Grid Interval) ملحقہ گرڈ لائنوں کے درمیان فاصلے کا تعین کرتا ہے
    • لچکدار پیرامیٹر ((Elasticity) فوکس ایڈجسٹمنٹ کی حساسیت کو کنٹرول کرتا ہے
  4. سگنل جنریشن منطق:

    • جب قیمت نیچے سے گرڈ لائن کو پار کرتی ہے تو خریدنے کا اشارہ پیدا ہوتا ہے
    • جب قیمت اوپر سے گرڈ لائن کو پار کرتی ہے تو فروخت کا اشارہ پیدا ہوتا ہے
    • سگنل ٹرگر کے طور پر اختیاری طور پر اعلی / کم یا اختتامی قیمت کا استعمال کریں
  5. ٹرانزیکشن کنٹرول:

    • ٹھنڈک کا دورانیہ (Cooldown)
    • سمت فلٹر (Direction Filter) ایک سے زیادہ ، خالی سر یا غیر جانبدار کی پالیسی کو ترجیح دینے پر مجبور کرتا ہے
    • اوپر اور نیچے گرڈ لائنوں کے اندر تجارت کی حد
  6. متحرک گرڈ اپ ڈیٹ: جب Lazy Moving Average (LMA) میں تبدیلی آتی ہے تو ، حکمت عملی کو نئی قیمت کی حد کے مطابق ڈھالنے کے لئے پوری گرڈ کی ساخت کو دوبارہ ایڈجسٹ کیا جاتا ہے۔

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

اسٹریٹجک فوائد

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

  2. شور فلٹرنگ: تاخیر پیرامیٹر ((Laziness) کا تعارف ایک ایسی جدت ہے جو اس بات کو یقینی بناتی ہے کہ گرڈ ایڈجسٹمنٹ صرف اس وقت ٹرگر کی جائے جب قیمت میں تبدیلی کافی نمایاں ہو ، جس سے مارکیٹ کے شور پر ردعمل کو مؤثر طریقے سے کم کیا جاسکے ، اور حکمت عملی کی استحکام میں اضافہ ہوا۔

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

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

  5. رسک کنٹرولاس حکمت عملی نے ایک قدرتی خطرے کے کنٹرول کے طریقہ کار کو قائم کیا ہے جس میں انتہائی مارکیٹ کے حالات میں غیر منقولہ تجارت کو روکنے کے لئے صرف ایک مخصوص گرڈ کے اندر تجارت کو محدود کیا گیا ہے۔

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

اسٹریٹجک رسک

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

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

  3. پیراڈائم خطرات: حکمت عملی ایک ہی سمت میں متعدد اندراجات کی اجازت دیتی ہے ((pyramiding = 4) ، جو انتہائی مارکیٹ کے حالات میں ضرورت سے زیادہ بیعانہ اور خطرے کی حراستی کا باعث بن سکتی ہے۔ زیادہ سے زیادہ انعقاد کی حد اور متحرک پوزیشن مینجمنٹ کا تعین کرنے پر غور کیا جانا چاہئے۔

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

  5. سگنل تنازعہ: جب خرید و فروخت کے سگنل ایک ساتھ آتے ہیں تو ، موجودہ حکمت عملی نے دونوں سگنلوں کو نظرانداز کرنے کا انتخاب کیا ہے ، جس سے اہم تجارتی مواقع ضائع ہوسکتے ہیں۔ سگنل تنازعات کو اضافی مارکیٹ اشارے یا قیمت کے نمونوں کی بنیاد پر حل کرنے پر غور کیا جاسکتا ہے۔

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

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

  2. رجحانات کا پتہ لگانے کے اجزاء کو ضم کرنا: موجودہ حکمت عملی رجحان مارکیٹ میں خراب کارکردگی کا مظاہرہ کرسکتی ہے ، رجحانات کی شناخت کے اشارے متعارف کروائے جاسکتے ہیں (جیسے ADX ، منتقل اوسط کراسنگ ، وغیرہ) ، جب مضبوط رجحانات کی نشاندہی کی جاتی ہے تو خود بخود تجارت کی سمت کو ایڈجسٹ کریں یا گرڈ ٹریڈنگ کو معطل کریں۔

  3. متحرک پوزیشن مینجمنٹ: موجودہ حکمت عملی فکسڈ پوزیشن سائز کا استعمال کرتی ہے ، جس میں خطرہ پر مبنی متحرک پوزیشن مینجمنٹ میں بہتری آسکتی ہے ، مثال کے طور پر پوزیشن سائز کو اے ٹی آر (اوسط حقیقی طول و عرض) کے مطابق ایڈجسٹ کرنا ، یا اکاؤنٹ کے خالص مالیت کے فیصد کے مطابق فنڈز کی تقسیم کرنا۔

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

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

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

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

خلاصہ کریں۔

خود سے ڈھالنے والی گرڈ ٹریڈنگ حکمت عملی جدید تاخیر کے افعال اور متحرک گرڈ ایڈجسٹمنٹ میکانزم کے ذریعہ روایتی گرڈ ٹریڈنگ حکمت عملی کی عدم لچک کی دشواری کو حل کرتی ہے۔ یہ مارکیٹ میں تبدیلیوں کو خود بخود ڈھالنے ، مختلف قیمتوں کے حلقوں میں تجارتی مواقع کو پکڑنے اور متعدد پیرامیٹرز کے ذریعہ تجارتی طرز عمل کو کنٹرول کرنے کی صلاحیت رکھتی ہے۔ یہ حکمت عملی اتار چڑھاؤ والی مارکیٹوں میں استعمال کے ل 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)