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

MACD RSI EMA SRSI ATR SMA TP SL
تخلیق کی تاریخ: 2025-02-25 11:29:23 آخر میں ترمیم کریں: 2025-02-25 11:29:23
کاپی: 0 کلکس کی تعداد: 582
2
پر توجہ دیں
319
پیروکار

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

جائزہ

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

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

اس حکمت عملی کا مرکز اس کے وزنی سگنل سسٹم میں ہے جو پانچ مختلف ذیلی حکمت عملیوں کے ذریعہ تجارتی سگنل تیار کرتا ہے:

  1. MACD حکمت عملی: MACD لائن اور سگنل لائن کے کراس کا استعمال کرتے ہوئے مارکیٹ کے رجحان کی سمت کا تعین کریں۔ جب MACD لائن پر سگنل لائن کو عبور کرتے ہیں تو خریدنے کا اشارہ ہوتا ہے ، جب نیچے سے گزرتا ہے تو فروخت کا اشارہ ہوتا ہے۔

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

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

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

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

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

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

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

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

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

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

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

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

  6. بلٹ میں تاخیر کا نظاماس حکمت عملی میں تاخیر سے تصدیق کے طریقہ کار کو اپنایا گیا ہے تاکہ یہ یقینی بنایا جاسکے کہ صرف مسلسل سگنل ہی تجارت کو متحرک کرے گا ، جس سے قلیل مدتی اتار چڑھاؤ کا اثر کم ہوجائے گا۔

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

اسٹریٹجک رسک

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

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

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

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

  5. تکنیکی خرابی کا خطرہ: خودکار تجارتی نظام کو نیٹ ورک کی بندش ، ڈیٹا کی تاخیر اور دیگر تکنیکی مسائل کا سامنا کرنا پڑ سکتا ہے۔ اس کا حل دستی مداخلت کا طریقہ کار ترتیب دینا ، نظام کی آپریشن کی حیثیت کی باقاعدگی سے نگرانی کرنا ، اور غیر معمولی معاملات کو بروقت نمٹانا ہے۔

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

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

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

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

  4. ممکنہ ٹاپ بیس کی شناخت کے الگورتھم کو بہتر بنانا: موجودہ اوپر نیچے شناخت کی منطق کو بہتر بنانا ، مزید تصدیق کے عوامل جیسے قیمت کی شکل ، کثیر دورانیہ کی تصدیق وغیرہ شامل کرنا ، شناخت کی درستگی کو بہتر بنانا۔

  5. جذباتی اشارے شامل کریں: مارکیٹ کے جذبات کے اشارے کو مربوط کریں ، جیسے کہ خوف و ہراس کا اشارے ((VIX) ، بیعانہ اور بیعانہ اختیارات کا تناسب وغیرہ ، مارکیٹ کے جذبات کی شدت کے دوران تجارتی حکمت عملی کو ایڈجسٹ کریں یا تجارت کو روک دیں ، اور اعلی اتار چڑھاؤ کے دوران زیادہ تجارت سے گریز کریں۔

  6. متحرک سٹاپ نقصان کے نظام کی ترقی: مارکیٹ میں اتار چڑھاؤ کی شرح کے مطابق خود کار طریقے سے اسٹاپ نقصان کی سطح کو ایڈجسٹ کریں ، اعلی اتار چڑھاؤ کی مارکیٹ میں اسٹاپ نقصان کی حد کو وسیع کریں ، اور کم اتار چڑھاؤ کی مارکیٹ میں اسٹاپ نقصان کو سخت کریں ، خطرے کے انتظام کو زیادہ لچکدار اور موثر بنائیں۔

  7. ٹائم سائیکل کی اصلاح: ایک سے زیادہ ٹائم سائیکل تجزیہ کی خصوصیت شامل کی گئی ہے ، جس میں اعلی درجے کی اور کم درجے کی ٹائم سائیکلوں کی ایک ہی وقت میں سگنل کی تصدیق کی ضرورت ہوتی ہے ، جس سے جھوٹی توڑ اور جھوٹے سگنل کو کم کیا جاسکتا ہے۔

خلاصہ کریں۔

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

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

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2024-09-08 00:00:00
end: 2025-02-23 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

// **********************************************************************************************************************************************************************************************************************************************************************
// Last update: 08/03/2022
// *************************************************************************************************************************************************************************************************************************************************************************
//@version=5
strategy(title='Smart trading', overlay=true, precision=2, commission_value=0.075, commission_type=strategy.commission.percent, initial_capital=1000, currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=100, slippage=1,calc_on_every_tick = false,calc_on_order_fills = true)
// *************************************************************************************************************************************************************************************************************************************************************************
// COMMENTS
// *************************************************************************************************************************************************************************************************************************************************************************
chat_id = input("-1001587924564",'Chat ID Telegram')
procent_stop = input.float(1.0,'Процент стоп')
procent_teik = input.float(4.0,'Процент TP4 ')

// *************************************************************************************************************************************************************************************************************************************************************************
// INPUTS
// *************************************************************************************************************************************************************************************************************************************************************************
// * Type trading
allow_longs = input.bool(true, 'Только лонги', group='Trading type')
allow_shorts = input.bool(true, 'Только шорты', group='Trading type')
// * Datastamp
from_day = input.int(1, 'From Day', minval=1, maxval=31, group='DataStamp')
from_month = input.int(1, 'From Month', minval=1, maxval=12, group='DataStamp')
from_year = input.int(2021, 'From Year', minval=1980, maxval=9999, group='DataStamp')
to_day = input.int(1, 'To Day', minval=1, maxval=31, group='DataStamp')
to_month = input.int(1, 'To Month', minval=1, maxval=12, group='DataStamp')
to_year = input.int(9999, 'To Year', minval=2017, maxval=9999, group='DataStamp')
// * Stop loss
stoploss = input.bool(true, 'Стоп лосс в стратегии', group='Stop loss')
movestoploss = input.string('TP-2', 'Перенос стопа', options=['None', 'Percentage', 'TP-1', 'TP-2', 'TP-3'], group='Stop loss')
movestoploss_entry = input.bool(false, 'Перенос стопа на твх', group='Stop loss')
stoploss_perc = input.float(6.0, 'Стоп лосс в %', minval=0, maxval=100, group='Stop loss') * 0.01
move_stoploss_factor = input.float(20.0, 'Фактор переноса стопа в %', group='Stop loss') * 0.01 + 1
stop_source = input.source(hl2, 'Stop Source', group='Stop loss')
// * Take profits
take_profits = input.bool(true, 'Тейк профит в стратегии', group='Take Profits')
// retrade= input.bool(false, 'Retrade', group='Take Profits')
MAX_TP = input.int(6, 'Кол-во TP', minval=1, maxval=10, group='Take Profits')
long_profit_perc = input.float(6.8, 'Long - TP в % каждый', minval=0.0, maxval=999, step=1, group='Take Profits') * 0.01
long_profit_qty = input.float(15, 'Long - TP в % от твх', minval=0.0, maxval=100, step=1, group='Take Profits')
short_profit_perc = input.float(13, 'Short - TP в % каждый', minval=0.0, maxval=999, step=1, group='Take Profits') * 0.01
short_profit_qty = input.float(10, 'Short - TP в % от твх', minval=0.0, maxval=100, step=1, group='Take Profits')
// * Delays
delay_macd = input.int(1, 'Candles delay MACD', minval=1, group='Delays')
delay_srsi = input.int(2, 'Candles delay RSI', minval=1, group='Delays')
delay_rsi = input.int(2, 'Candles delay EMA', minval=1, group='Delays')
delay_super = input.int(1, 'Candles delay Supertrend', minval=1, group='Delays')
delay_cross = input.int(1, 'Candles delay MA', minval=1, group='Delays')
delay_exit = input.int(7, 'Candles delay exit', minval=1, group='Delays')
// * Inputs Smart strategies
str_0 = input.bool(true, 'Strategy 0: Weighted Strategy', group='Weights')
weight_trigger = input.int(2, 'Smart Signal entry [0, 5]', minval=0, maxval=5, step=1, group='Weights')
weight_str1 = input.int(1, 'Smart Strategy 1 [0, 5]', minval=0, maxval=5, step=1, group='Weights')
weight_str2 = input.int(1, 'Smart Strategy 2 [0, 5]', minval=0, maxval=5, step=1, group='Weights')
weight_str3 = input.int(1, 'Smart Strategy 3 [0, 5]', minval=0, maxval=5, step=1, group='Weights')
weight_str4 = input.int(1, 'Smart Strategy 4 [0, 5]', minval=0, maxval=5, step=1, group='Weights')
weight_str5 = input.int(1, 'Smart Strategy 5 [0, 5]', minval=0, maxval=5, step=1, group='Weights')
// * Inputs strategy 1: MACD 
str_1 = input.bool(true, 'Strategy 1: MACD', group='Strategy 1: MACD')
MA1_period_1 = input.int(16, 'MA 1', minval=1, maxval=9999, step=1, group='Strategy 1: MACD')
MA1_type_1 = input.string('EMA', 'MA1 Type', options=['RMA', 'SMA', 'EMA', 'WMA', 'HMA', 'DEMA', 'TEMA', 'VWMA'], group='Strategy 1: MACD')
MA1_source_1 = input.source(hl2, 'MA1 Source', group='Strategy 1: MACD')
MA2_period_1 = input.int(36, 'MA 2', minval=1, maxval=9999, step=1, group='Strategy 1: MACD')
MA2_type_1 = input.string('EMA', 'MA2 Type', options=['RMA', 'SMA', 'EMA', 'WMA', 'HMA', 'DEMA', 'TEMA', 'VWMA'], group='Strategy 1: MACD')
MA2_source_1 = input.source(high, 'MA2 Source', group='Strategy 1: MACD')
// * Inputs strategy 2: RSI oversold/overbought
str_2 = input.bool(true, 'Strategy 2: RSI', group='Strategy 2: RSI')
long_RSI = input.float(70, 'Exit RSI Long (%)', minval=0.0, step=1, group='Strategy 2: RSI')
short_RSI = input.float(27, 'Exit RSI Short (%)', minval=0.0, step=1, group='Strategy 2: RSI')
length_RSI = input.int(14, 'RSI Length', group='Strategy 2: RSI')
length_stoch = input.int(14, 'RSI Stochastic', group='Strategy 2: RSI')
smoothK = input.int(3, 'Smooth', group='Strategy 2: RSI')
// * Inputs strategy 3: EMA oversold/overbought
str_3 = input.bool(true, 'Strategy 3: RSI', group='Strategy 3: RSI')
long_RSI2 = input.float(77, 'Exit EMA Long', minval=0.0, step=1, group='Strategy 3: RSI')
short_RSI2 = input.float(30, 'Exit EMA Short', minval=0.0, step=1, group='Strategy 3: RSI')
// * Inputs strategy 4: Supertrend
str_4 = input.bool(true, 'Strategy 4: Supertrend', group='Strategy 4: Supertrend')
periods_4 = input.int(2, 'ATR Period', group='Strategy 4: Supertrend')
source_4 = input.source(hl2, 'Source', group='Strategy 4: Supertrend')
multiplier = input.float(2.4, 'ATR Multiplier', step=0.1, group='Strategy 4: Supertrend')
change_ATR = input.bool(true, 'Change ATR Calculation Method ?', group='Strategy 4: Supertrend')
// * Inputs strategy 5: MA
str_5 = input.bool(true, 'Strategy 5: MA', group='Strategy 5: MA')
MA1_period_5 = input.int(46, 'MA 1', minval=1, maxval=9999, step=1, group='Strategy 5: MA')
MA1_type_5 = input.string('EMA', 'MA1 Type', options=['RMA', 'SMA', 'EMA', 'WMA', 'HMA', 'DEMA', 'TEMA', 'VWMA'], group='Strategy 5: MA')
MA1_source_5 = input.source(close, 'MA1 Source', group='Strategy 5: MA')
MA2_period_5 = input.int(82, 'MA 2', minval=1, maxval=9999, step=1, group='Strategy 5: MA')
MA2_type_5 = input.string('EMA', 'MA2 Type', options=['RMA', 'SMA', 'EMA', 'WMA', 'HMA', 'DEMA', 'TEMA', 'VWMA'], group='Strategy 5: MA')
MA2_source_5 = input.source(close, 'MA2 Source', group='Strategy 5: MA')
// * Inputs Potential TOP/BOTTOM
str_6 = input.bool(false, 'Потенциальные ордера long/short', group='Potential TOP/BOTTOM')
top_qty = input.float(30, 'Лонг закрыть (%) из оставшейся позиции', minval=0.0, maxval=100, step=1, group='Potential TOP/BOTTOM')
bottom_qty = input.float(30, 'Шорт закрыть (%) из оставшейся позиции', minval=0.0, maxval=100, step=1, group='Potential TOP/BOTTOM') 
source_6_top = input.source(close, 'TP-TOP на предыдущий', group='Potential TOP/BOTTOM')
source_6_bottom = input.source(close, 'TP-BOTTOM на предыдущий', group='Potential TOP/BOTTOM')
long_trail_perc = input.float(150, 'Объем Long (%)', minval=0.0, step=1, group='Potential TOP/BOTTOM') * 0.01
short_trail_perc = input.float(150, 'Объем Short (%)', minval=0.0, step=1, group='Potential TOP/BOTTOM') * 0.01
// * Flags
FLAG_SIGNALS = input.bool(true, 'Show Buy/Sell Signals ?', group='Miscellaneous')
FLAG_SHADOWS = input.bool(true, 'Show shadows satisfied strategies ?', group='Miscellaneous')
// * Alarms
alarm_label_long = input.string('Buy', 'Label open long', group='Basic alarm system')
alarm_label_short = input.string('Sell', 'Label open short', group='Basic alarm system')
alarm_label_close_long = input.string('Close long', 'Label close long', group='Basic alarm system')
alarm_label_close_short = input.string('Close short', 'Label close short', group='Basic alarm system')
alarm_label_TP_long = input.string('TP long', 'Label Take Profit long', group='Basic alarm system')
alarm_label_TP_short = input.string('TP short', 'Label Take Profit short', group='Basic alarm system')
alarm_label_SL = input.string('SL', 'Label Stop-Loss', group='Basic alarm system')
// *************************************************************************************************************************************************************************************************************************************************************************
// ABBREVIATIONS
// *************************************************************************************************************************************************************************************************************************************************************************
// TP: Take profits
// SL: Stop-Loss
// *************************************************************************************************************************************************************************************************************************************************************************
// GLOBAL VARIABLES
// *************************************************************************************************************************************************************************************************************************************************************************
start = timestamp(from_year, from_month, from_day, 00, 00) // backtest start window
end = timestamp(to_year, to_month, to_day, 23, 59)// backtest finish window
var FLAG_FIRST = false
var price_stop_long = 0.
var price_stop_short = 0.
var profit_qty = 0. // Quantity to close per TP from open position
var profit_perc = 0. // Percentage to take profits since open position or last TP
var nextTP = 0. // Next target to take profits
var since_entry = 0 // Number of bars since open last postion
var since_close = 0 // Number of bars since close or TP/STOP last position

// * Compute profit quantity and profit percentage
if strategy.position_size > 0
    profit_qty := long_profit_qty
    profit_perc := long_profit_perc
else if strategy.position_size < 0
    profit_qty := short_profit_qty
    profit_perc := short_profit_perc
else
    nextTP := 0. // Next Take Profit target (out of market)
// *************************************************************************************************************************************************************************************************************************************************************************
// FUNCTIONS
// *************************************************************************************************************************************************************************************************************************************************************************
// * MA type
// *************************************************************************************************************************************************************************************************************************************************************************
ma(MAType, MASource, MAPeriod) =>
    if MAType == 'SMA'
        ta.sma(MASource, MAPeriod)
    else if MAType == 'EMA'
        ta.ema(MASource, MAPeriod)
    else if MAType == 'WMA'
        ta.wma(MASource, MAPeriod)
    else if MAType == 'RMA'
        ta.rma(MASource, MAPeriod)
    else if MAType == 'HMA'
        ta.wma(2 * ta.wma(MASource, MAPeriod / 2) - ta.wma(MASource, MAPeriod), math.round(math.sqrt(MAPeriod)))
    else if MAType == 'DEMA'
        e = ta.ema(MASource, MAPeriod)
        2 * e - ta.ema(e, MAPeriod)
    else if MAType == 'TEMA'
        e = ta.ema(MASource, MAPeriod)
        3 * (e - ta.ema(e, MAPeriod)) + ta.ema(ta.ema(e, MAPeriod), MAPeriod)
    else if MAType == 'VWMA'
        ta.vwma(MASource, MAPeriod)
// *************************************************************************************************************************************************************************************************************************************************************************
// * Number strategies
// *************************************************************************************************************************************************************************************************************************************************************************
n_strategies() =>
    var result = 0.
    if str_1
        result := 1.
    if str_2
        result += 1.
    if str_3
        result += 1.
    if str_4
        result += 1.
    if str_5
        result += 1.
// *************************************************************************************************************************************************************************************************************************************************************************
// * Price take profit
// *************************************************************************************************************************************************************************************************************************************************************************
price_takeProfit(percentage, N) =>
    if strategy.position_size > 0
        strategy.position_avg_price * (1 + N * percentage)
    else
        strategy.position_avg_price * (1 - N * percentage)
// *************************************************************************************************************************************************************************************************************************************************************************
// * Weigthed values
// *************************************************************************************************************************************************************************************************************************************************************************
weight_values(signal) =>
    if signal
        weight = 1.0
    else
        weight = 0.
// *************************************************************************************************************************************************************************************************************************************************************************
// * Weigthed total
// *************************************************************************************************************************************************************************************************************************************************************************
weight_total(signal1, signal2, signal3, signal4, signal5) =>
    weight_str1 * weight_values(signal1) + weight_str2 * weight_values(signal2) + weight_str3 * weight_values(signal3) + weight_str4 * weight_values(signal4) + weight_str5 * weight_values(signal5)
// *************************************************************************************************************************************************************************************************************************************************************************
// * Set alert TP message
// *************************************************************************************************************************************************************************************************************************************************************************
set_alarm_label_TP() =>
    if strategy.position_size > 0
        alarm_label_TP_long
    else if strategy.position_size < 0
        alarm_label_TP_short 
// *************************************************************************************************************************************************************************************************************************************************************************
// * Color
// *************************************************************************************************************************************************************************************************************************************************************************
colors(type, value=0) =>
    switch str.lower(type)
        'buy'=> color.new(color.aqua, value)
        'sell' => color.new(color.gray, value)
        'TP' => color.new(color.aqua, value)
        'SL' => color.new(color.gray, value)
        'signal' => color.new(color.orange, value)
        'profit' => color.new(color.teal, value)
        'loss' => color.new(color.red, value)
        'info' => color.new(color.white, value)
        'highlights' => color.new(color.orange, value)
// *************************************************************************************************************************************************************************************************************************************************************************
// * Bar since last entry
// *************************************************************************************************************************************************************************************************************************************************************************
bars_since_entry() =>
    bar_index - strategy.opentrades.entry_bar_index(0)
// *************************************************************************************************************************************************************************************************************************************************************************
// * Bar since close or TP/STOP
// *************************************************************************************************************************************************************************************************************************************************************************
bars_since_close() =>
    ta.barssince(ta.change(strategy.closedtrades))
// *************************************************************************************************************************************************************************************************************************************************************************
// ADDITIONAL GLOBAL VARIABLES
// *************************************************************************************************************************************************************************************************************************************************************************
// * Compute time since last entry and last close/TP position
since_entry := bars_since_entry()
since_close := bars_since_close()
if strategy.opentrades == 0
    since_entry := delay_exit
if strategy.closedtrades == 0
    since_close := delay_exit
// *************************************************************************************************************************************************************************************************************************************************************************
// STRATEGIES
// *************************************************************************************************************************************************************************************************************************************************************************
// * STRATEGY 1: MACD
// *************************************************************************************************************************************************************************************************************************************************************************
MA1 = ma(MA1_type_1, MA1_source_1, MA1_period_1)
MA2 = ma(MA2_type_1, MA2_source_1, MA2_period_1)

MACD = MA1 - MA2
signal = ma('SMA', MACD, 9)
trend= MACD - signal

long = MACD > signal
short = MACD < signal
proportion = math.abs(MACD / signal)

// * Conditions
long_signal1 = long and long[delay_macd - 1] and not long[delay_macd]
short_signal1 = short and short[delay_macd - 1] and not short[delay_macd]
close_long1 = short and not long[delay_macd]
close_short1 = long and not short[delay_macd]
// *************************************************************************************************************************************************************************************************************************************************************************
// * STRATEGY 2: STOCH RSI
// *************************************************************************************************************************************************************************************************************************************************************************
rsi = ta.rsi(close, length_RSI)
srsi = ta.stoch(rsi, rsi, rsi, length_stoch)
k = ma('SMA', srsi, smoothK)
isRsiOB = k >= long_RSI
isRsiOS = k <= short_RSI

// * Conditions
long_signal2 = isRsiOS[delay_srsi] and not isRsiOB and since_entry >= delay_exit and since_close >= delay_exit
short_signal2 = isRsiOB[delay_srsi] and not isRsiOS and since_entry >= delay_exit and since_close >= delay_exit
close_long2 = short_signal2
close_short2 = long_signal2
// *************************************************************************************************************************************************************************************************************************************************************************
// * STRATEGY 3: RSI
// *************************************************************************************************************************************************************************************************************************************************************************
isRsiOB2 = rsi >= long_RSI2
isRsiOS2 = rsi <= short_RSI2

// * Conditions
long_signal3 = isRsiOS2[delay_rsi] and not isRsiOB2 and since_entry >= delay_exit and since_close >= delay_exit
short_signal3 = isRsiOB2[delay_rsi] and not isRsiOS2 and since_entry >= delay_exit and since_close >= delay_exit
close_long3 = short_signal3
close_short3 = long_signal3
// *************************************************************************************************************************************************************************************************************************************************************************
// * STRATEGY 4: SUPERTREND
// *************************************************************************************************************************************************************************************************************************************************************************
atr2 = ma('SMA', ta.tr, periods_4)
atr = change_ATR ? ta.atr(periods_4) : atr2
up = source_4 - multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up

dn = source_4 + multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn

trend := 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

// * Conditions
long4 = trend == 1
short4 = trend == -1
long_signal4 = trend == 1 and trend[delay_super - 1] == 1 and trend[delay_super] == -1
short_signal4 = trend == -1 and trend[delay_super - 1] == -1 and trend[delay_super] == 1
changeCond = trend != trend[1]
close_long4 = short_signal4
close_short4 = short_signal4
// *************************************************************************************************************************************************************************************************************************************************************************
// * STRATEGY 5: MA CROSS
// *************************************************************************************************************************************************************************************************************************************************************************
MA12 = ma(MA1_type_5, MA1_source_5, MA1_period_5)
MA22 = ma(MA2_type_5, MA2_source_5, MA2_period_5)

long5 = MA12 > MA22
short5 = MA12 < MA22

// * Conditions
long_signal5 = long5 and long5[delay_cross - 1] and not long5[delay_cross]
short_signal5 = short5 and short5[delay_cross - 1] and not short5[delay_cross]
close_long5 = short5 and not long5[delay_cross]
close_short5 = long5 and not short5[delay_cross]
// *************************************************************************************************************************************************************************************************************************************************************************
// * STRATEGY 6: POTENTIAL TOP/BOTTOM
// *************************************************************************************************************************************************************************************************************************************************************************
// * Combination RSI, Stoch RSI, MACD, volume, and weighted-strategy to detect potential TOP/BOTTOMS areas
volumeRSI_condition = volume[2] > volume[3] and volume[2] > volume[4] and volume[2] > volume[5]
condition_OB1 = isRsiOB2 and (isRsiOB or volume < ma('SMA', volume, 20) / 2) and volumeRSI_condition
condition_OS1 = isRsiOS2 and (isRsiOS or volume < ma('SMA', volume, 20) / 2) and volumeRSI_condition

condition_OB2 = volume[2] / volume[1] > (1.0 + long_trail_perc) and isRsiOB and volumeRSI_condition
condition_OS2 = volume[2] / volume[1] > (1.0 + short_trail_perc) and isRsiOS and volumeRSI_condition

condition_OB3 = weight_total(MACD < signal, isRsiOB, isRsiOB2, short4, short5) >= weight_trigger
condition_OS3 = weight_total(MACD > signal, isRsiOS, isRsiOS2, long4, long5) >= weight_trigger

condition_OB = (condition_OB1 or condition_OB2)
condition_OS = (condition_OS1 or condition_OS2)
condition_OB_several = condition_OB[1] and condition_OB[2] or condition_OB[1] and condition_OB[3] or condition_OB[1] and condition_OB[4] or condition_OB[1] and condition_OB[5] or condition_OB[1] and condition_OB[6] or condition_OB[1] and condition_OB[7] 
condition_OS_several = condition_OS[1] and condition_OS[2] or condition_OS[1] and condition_OS[3] or condition_OS[1] and condition_OS[4] or condition_OS[1] and condition_OS[5] or condition_OS[1] and condition_OS[6] or condition_OS[1] and condition_OS[7] 
// *************************************************************************************************************************************************************************************************************************************************************************
// STRATEGY ENTRIES AND EXITS
// *************************************************************************************************************************************************************************************************************************************************************************


long_SL = close - ((close / 100) * procent_stop)
long_OP = close
long_TP_1 = close + ((close / 100) * (procent_teik * 1.1))
long_TP_2 = close + ((close / 100) * (procent_teik * 1.8))
long_TP_3 = close + ((close / 100) * (procent_teik * 2.8))
long_TP_4 = close + ((close / 100) * (procent_teik * 4.5))

short_SL = close + ((close / 100) * procent_stop)
short_OP = close
short_TP_1 = close - ((close / 100) * (procent_teik * 1.1))
short_TP_2 = close - ((close / 100) * (procent_teik * 1.8))
short_TP_3 = close - ((close / 100) * (procent_teik * 2.8))
short_TP_4 = close - ((close / 100) * (procent_teik * 4.5))


if time >= start and time <= end
    // ***************************************************************************************************************************************************************************
    // * Set Entries
    // ***************************************************************************************************************************************************************************
    if str_0
        if not str_1
            weight_str1 := 0
        if not str_2
            weight_str2 := 0
        if not str_3
            weight_str3 := 0
        if not str_4
            weight_str4 := 0
        if not str_5
            weight_str5 := 0
        if allow_shorts == true
            w_total = weight_total(short_signal1, short_signal2, short_signal3, short_signal4, short_signal5)
            if w_total >= weight_trigger
                alert('{"chat_id":"'+ chat_id +'","text":"' + syminfo.ticker + ' ' + str.tostring(timeframe.period) + ' ' + str.tostring('SHORT') + ' ' + str.tostring(math.round_to_mintick(short_TP_1)) + ' ' + str.tostring(math.round_to_mintick(short_TP_2)) + ' ' + str.tostring(math.round_to_mintick(short_TP_3)) + ' ' + str.tostring(math.round_to_mintick(short_TP_4)) + ' ' + str.tostring(math.round_to_mintick(short_SL)) + ' ' + str.tostring(math.round_to_mintick(close)) + '"}')
                


                strategy.entry('Short', strategy.short)
        if allow_longs == true
            w_total = weight_total(long_signal1, long_signal2, long_signal3, long_signal4, long_signal5)
            if w_total >= weight_trigger
                strategy.entry('Long', strategy.long)
                alert('{"chat_id":"'+ chat_id +'","text":"' + syminfo.ticker + ' ' + str.tostring(timeframe.period) + ' ' + str.tostring('LONG') + ' ' + str.tostring(math.round_to_mintick(long_TP_1)) + ' ' + str.tostring(math.round_to_mintick(long_TP_2)) + ' ' + str.tostring(math.round_to_mintick(long_TP_3)) + ' ' + str.tostring(math.round_to_mintick(long_TP_4)) + ' ' + str.tostring(math.round_to_mintick(long_SL)) + ' '  + str.tostring(math.round_to_mintick(close)) + '"}')

    else
        if allow_shorts == true
            if str_1
                strategy.entry('Short', strategy.short, when=short_signal1)
                // alert('{"chat_id":"'+ chat_id +'","text":"' + syminfo.ticker + ' ' + str.tostring(timeframe.period) + ' ' + str.tostring('SHORT')  + ' ' + str.tostring(math.round_to_mintick(long_TP_1)) + ' ' + str.tostring(math.round_to_mintick(long_TP_2)) + ' ' + str.tostring(math.round_to_mintick(long_TP_3)) + ' ' + str.tostring(math.round_to_mintick(long_TP_4)) + ' ' + str.tostring(math.round_to_mintick(long_SL))  + str.tostring(math.round_to_mintick(close)) + '"}')
                alert('{"chat_id":"'+ chat_id +'","text":"' + syminfo.ticker + ' ' + str.tostring(timeframe.period) + ' ' + str.tostring('SHORT') + ' ' + str.tostring(math.round_to_mintick(short_TP_1)) + ' ' + str.tostring(math.round_to_mintick(short_TP_2)) + ' ' + str.tostring(math.round_to_mintick(short_TP_3)) + ' ' + str.tostring(math.round_to_mintick(short_TP_4)) + ' ' + str.tostring(math.round_to_mintick(short_SL)) + ' ' + str.tostring(math.round_to_mintick(close)) + '"}')

            if str_2
                strategy.entry('Short', strategy.short, when=short_signal2)
                // alert('{"chat_id":"'+ chat_id +'","text":"' + syminfo.ticker + ' ' + str.tostring(timeframe.period) + ' ' + str.tostring('SHORT')  + ' ' + str.tostring(math.round_to_mintick(long_TP_1)) + ' ' + str.tostring(math.round_to_mintick(long_TP_2)) + ' ' + str.tostring(math.round_to_mintick(long_TP_3)) + ' ' + str.tostring(math.round_to_mintick(long_TP_4)) + ' ' + str.tostring(math.round_to_mintick(long_SL))  + str.tostring(math.round_to_mintick(close)) + '"}')
                alert('{"chat_id":"'+ chat_id +'","text":"' + syminfo.ticker + ' ' + str.tostring(timeframe.period) + ' ' + str.tostring('SHORT') + ' ' + str.tostring(math.round_to_mintick(short_TP_1)) + ' ' + str.tostring(math.round_to_mintick(short_TP_2)) + ' ' + str.tostring(math.round_to_mintick(short_TP_3)) + ' ' + str.tostring(math.round_to_mintick(short_TP_4)) + ' ' + str.tostring(math.round_to_mintick(short_SL)) + ' ' + str.tostring(math.round_to_mintick(close)) + '"}')

            if str_3
                strategy.entry('Short', strategy.short, when=short_signal3)
                // alert('{"chat_id":"'+ chat_id +'","text":"' + syminfo.ticker + ' ' + str.tostring(timeframe.period) + ' ' + str.tostring('SHORT')  + ' ' + str.tostring(math.round_to_mintick(long_TP_1)) + ' ' + str.tostring(math.round_to_mintick(long_TP_2)) + ' ' + str.tostring(math.round_to_mintick(long_TP_3)) + ' ' + str.tostring(math.round_to_mintick(long_TP_4)) + ' ' + str.tostring(math.round_to_mintick(long_SL))  + str.tostring(math.round_to_mintick(close)) + '"}')
                alert('{"chat_id":"'+ chat_id +'","text":"' + syminfo.ticker + ' ' + str.tostring(timeframe.period) + ' ' + str.tostring('SHORT') + ' ' + str.tostring(math.round_to_mintick(short_TP_1)) + ' ' + str.tostring(math.round_to_mintick(short_TP_2)) + ' ' + str.tostring(math.round_to_mintick(short_TP_3)) + ' ' + str.tostring(math.round_to_mintick(short_TP_4)) + ' ' + str.tostring(math.round_to_mintick(short_SL)) + ' ' + str.tostring(math.round_to_mintick(close)) + '"}')

            if str_4
                strategy.entry('Short', strategy.short, when=short_signal4)
                // alert('{"chat_id":"'+ chat_id +'","text":"' + syminfo.ticker + ' ' + str.tostring(timeframe.period) + ' ' + str.tostring('SHORT')  + ' ' + str.tostring(math.round_to_mintick(long_TP_1)) + ' ' + str.tostring(math.round_to_mintick(long_TP_2)) + ' ' + str.tostring(math.round_to_mintick(long_TP_3)) + ' ' + str.tostring(math.round_to_mintick(long_TP_4)) + ' ' + str.tostring(math.round_to_mintick(long_SL))  + str.tostring(math.round_to_mintick(close)) + '"}')
                alert('{"chat_id":"'+ chat_id +'","text":"' + syminfo.ticker + ' ' + str.tostring(timeframe.period) + ' ' + str.tostring('SHORT') + ' ' + str.tostring(math.round_to_mintick(short_TP_1)) + ' ' + str.tostring(math.round_to_mintick(short_TP_2)) + ' ' + str.tostring(math.round_to_mintick(short_TP_3)) + ' ' + str.tostring(math.round_to_mintick(short_TP_4)) + ' ' + str.tostring(math.round_to_mintick(short_SL)) + ' ' + str.tostring(math.round_to_mintick(close)) + '"}')

            if str_5
                strategy.entry('Short', strategy.short, when=short_signal5)
                // alert('{"chat_id":"'+ chat_id +'","text":"' + syminfo.ticker + ' ' + str.tostring(timeframe.period) + ' ' + str.tostring('SHORT') + ' ' + str.tostring(math.round_to_mintick(long_TP_1)) + ' ' + str.tostring(math.round_to_mintick(long_TP_2)) + ' ' + str.tostring(math.round_to_mintick(long_TP_3)) + ' ' + str.tostring(math.round_to_mintick(long_TP_4)) + ' ' + str.tostring(math.round_to_mintick(long_SL))  + str.tostring(math.round_to_mintick(close)) + '"}')
                alert('{"chat_id":"'+ chat_id +'","text":"' + syminfo.ticker + ' ' + str.tostring(timeframe.period) + ' ' + str.tostring('SHORT') + ' ' + str.tostring(math.round_to_mintick(short_TP_1)) + ' ' + str.tostring(math.round_to_mintick(short_TP_2)) + ' ' + str.tostring(math.round_to_mintick(short_TP_3)) + ' ' + str.tostring(math.round_to_mintick(short_TP_4)) + ' ' + str.tostring(math.round_to_mintick(short_SL)) + ' ' + str.tostring(math.round_to_mintick(close)) + '"}')

        if allow_longs == true
            if str_1
                strategy.entry('Long', strategy.long, when=long_signal1)
                // alert('{"chat_id":"'+ chat_id +'","text":"#' + syminfo.ticker + ' ' + str.tostring(timeframe.period) + ' min'+ '\n' + str.tostring('LONG') + '\n' +'Вход на 1-3% от депозита \n' + 'TP 1: ' + str.tostring(math.round_to_mintick(long_TP_1)) + '\n' + 'TP 2: ' + str.tostring(math.round_to_mintick(long_TP_2)) + '\n' + 'TP 3: ' + str.tostring(math.round_to_mintick(long_TP_3)) + '\n' + 'TP 4: ' + str.tostring(math.round_to_mintick(long_TP_4)) + '\n' + '?? STOP: ' + str.tostring(math.round_to_mintick(long_SL))  +'"}')
                alert('{"chat_id":"'+ chat_id +'","text":"' + syminfo.ticker + ' ' + str.tostring(timeframe.period) + ' ' + str.tostring('LONG') + ' ' + str.tostring(math.round_to_mintick(long_TP_1)) + ' ' + str.tostring(math.round_to_mintick(long_TP_2)) + ' ' + str.tostring(math.round_to_mintick(long_TP_3)) + ' ' + str.tostring(math.round_to_mintick(long_TP_4)) + ' ' + str.tostring(math.round_to_mintick(long_SL)) + ' '  + str.tostring(math.round_to_mintick(close)) + '"}')

            if str_2
                strategy.entry('Long', strategy.long, when=long_signal2)
                // alert('{"chat_id":"'+ chat_id +'","text":"#' + syminfo.ticker + ' ' + str.tostring(timeframe.period) + ' min'+ '\n' + str.tostring('LONG') + '\n' +'Вход на 1-3% от депозита \n' + 'TP 1: ' + str.tostring(math.round_to_mintick(long_TP_1)) + '\n' + 'TP 2: ' + str.tostring(math.round_to_mintick(long_TP_2)) + '\n' + 'TP 3: ' + str.tostring(math.round_to_mintick(long_TP_3)) + '\n' + 'TP 4: ' + str.tostring(math.round_to_mintick(long_TP_4)) + '\n' + '?? STOP: ' + str.tostring(math.round_to_mintick(long_SL))  +'"}')
                alert('{"chat_id":"'+ chat_id +'","text":"' + syminfo.ticker + ' ' + str.tostring(timeframe.period) + ' ' + str.tostring('LONG') + ' ' + str.tostring(math.round_to_mintick(long_TP_1)) + ' ' + str.tostring(math.round_to_mintick(long_TP_2)) + ' ' + str.tostring(math.round_to_mintick(long_TP_3)) + ' ' + str.tostring(math.round_to_mintick(long_TP_4)) + ' ' + str.tostring(math.round_to_mintick(long_SL)) + ' '  + str.tostring(math.round_to_mintick(close)) + '"}')

            if str_3
                strategy.entry('Long', strategy.long, when=long_signal3)
                // alert('{"chat_id":"'+ chat_id +'","text":"#' + syminfo.ticker + ' ' + str.tostring(timeframe.period) + ' min'+ '\n' + str.tostring('LONG') + '\n' +'Вход на 1-3% от депозита \n' + 'TP 1: ' + str.tostring(math.round_to_mintick(long_TP_1)) + '\n' + 'TP 2: ' + str.tostring(math.round_to_mintick(long_TP_2)) + '\n' + 'TP 3: ' + str.tostring(math.round_to_mintick(long_TP_3)) + '\n' + 'TP 4: ' + str.tostring(math.round_to_mintick(long_TP_4)) + '\n' + '?? STOP: ' + str.tostring(math.round_to_mintick(long_SL))  +'"}')
                alert('{"chat_id":"'+ chat_id +'","text":"' + syminfo.ticker + ' ' + str.tostring(timeframe.period) + ' ' + str.tostring('LONG') + ' ' + str.tostring(math.round_to_mintick(long_TP_1)) + ' ' + str.tostring(math.round_to_mintick(long_TP_2)) + ' ' + str.tostring(math.round_to_mintick(long_TP_3)) + ' ' + str.tostring(math.round_to_mintick(long_TP_4)) + ' ' + str.tostring(math.round_to_mintick(long_SL)) + ' '  + str.tostring(math.round_to_mintick(close)) + '"}')

            if str_4
                strategy.entry('Long', strategy.long, when=long_signal4)
                // alert('{"chat_id":"'+ chat_id +'","text":"#' + syminfo.ticker + ' ' + str.tostring(timeframe.period) + ' min'+ '\n' + str.tostring('LONG') + '\n' +'Вход на 1-3% от депозита \n' + 'TP 1: ' + str.tostring(math.round_to_mintick(long_TP_1)) + '\n' + 'TP 2: ' + str.tostring(math.round_to_mintick(long_TP_2)) + '\n' + 'TP 3: ' + str.tostring(math.round_to_mintick(long_TP_3)) + '\n' + 'TP 4: ' + str.tostring(math.round_to_mintick(long_TP_4)) + '\n' + '?? STOP: ' + str.tostring(math.round_to_mintick(long_SL))  +'"}')
                alert('{"chat_id":"'+ chat_id +'","text":"' + syminfo.ticker + ' ' + str.tostring(timeframe.period) + ' ' + str.tostring('LONG') + ' ' + str.tostring(math.round_to_mintick(long_TP_1)) + ' ' + str.tostring(math.round_to_mintick(long_TP_2)) + ' ' + str.tostring(math.round_to_mintick(long_TP_3)) + ' ' + str.tostring(math.round_to_mintick(long_TP_4)) + ' ' + str.tostring(math.round_to_mintick(long_SL)) + ' '  + str.tostring(math.round_to_mintick(close)) + '"}')

            if str_5
                strategy.entry('Long', strategy.long, when=long_signal5)
                // alert('{"chat_id":"'+ chat_id +'","text":"#' + syminfo.ticker + ' ' + str.tostring(timeframe.period) + ' min'+ '\n' + str.tostring('LONG') + '\n' +'Вход на 1-3% от депозита \n' + 'TP 1: ' + str.tostring(math.round_to_mintick(long_TP_1)) + '\n' + 'TP 2: ' + str.tostring(math.round_to_mintick(long_TP_2)) + '\n' + 'TP 3: ' + str.tostring(math.round_to_mintick(long_TP_3)) + '\n' + 'TP 4: ' + str.tostring(math.round_to_mintick(long_TP_4)) + '\n' + '?? STOP: ' + str.tostring(math.round_to_mintick(long_SL))  +'"}')
                alert('{"chat_id":"'+ chat_id +'","text":"' + syminfo.ticker + ' ' + str.tostring(timeframe.period) + ' ' + str.tostring('LONG') + ' ' + str.tostring(math.round_to_mintick(long_TP_1)) + ' ' + str.tostring(math.round_to_mintick(long_TP_2)) + ' ' + str.tostring(math.round_to_mintick(long_TP_3)) + ' ' + str.tostring(math.round_to_mintick(long_TP_4)) + ' ' + str.tostring(math.round_to_mintick(long_SL)) + ' '  + str.tostring(math.round_to_mintick(close)) + '"}')

    // ***************************************************************************************************************************************************************************
    // * Set Take Profits
    // ***************************************************************************************************************************************************************************
    if strategy.position_size != 0 and take_profits and since_entry == 0
        for i = 1 to MAX_TP
            id = 'TP ' + str.tostring(i)
            strategy.exit(id=id, limit=price_takeProfit(profit_perc, i), qty_percent=profit_qty, comment=id)
    // ***************************************************************************************************************************************************************************
    // * Set Stop loss
    // ***************************************************************************************************************************************************************************
    if strategy.position_size > 0
        if since_close == 0
            if high > price_takeProfit(profit_perc, 6) and MAX_TP >= 6
                n = 6
                nextTP := na
                if movestoploss == 'Percentage'
                    price_stop_long := strategy.position_avg_price * (1 + n*profit_perc - stoploss_perc * move_stoploss_factor)
                else if movestoploss == 'TP-1'
                    price_stop_long := price_takeProfit(profit_perc, n-1)
                else if movestoploss == 'TP-2'
                    price_stop_long := price_takeProfit(profit_perc, n-2)
                else if movestoploss == 'TP-3'
                    price_stop_long := price_takeProfit(profit_perc, n-3)
            else if high > price_takeProfit(profit_perc, 5) and MAX_TP >= 5
                n = 5
                nextTP := price_takeProfit(profit_perc, n + 1)
                if movestoploss == 'Percentage'
                    price_stop_long := strategy.position_avg_price * (1 + n*profit_perc - stoploss_perc * move_stoploss_factor)
                else if movestoploss == 'TP-1'
                    price_stop_long := price_takeProfit(profit_perc, n-1)
                else if movestoploss == 'TP-2'
                    price_stop_long := price_takeProfit(profit_perc, n-2)
                else if movestoploss == 'TP-3'
                    price_stop_long := price_takeProfit(profit_perc, n-3)
            else if high > price_takeProfit(profit_perc, 4) and MAX_TP >= 4
                n = 4
                nextTP := price_takeProfit(profit_perc, n + 1)
                if movestoploss == 'Percentage'
                    price_stop_long := strategy.position_avg_price * (1 + n*profit_perc - stoploss_perc * move_stoploss_factor)
                else if movestoploss == 'TP-1'
                    price_stop_long := price_takeProfit(profit_perc, n-1)
                else if movestoploss == 'TP-2'
                    price_stop_long := price_takeProfit(profit_perc, n-2)
                else if movestoploss == 'TP-3'
                    price_stop_long := price_takeProfit(profit_perc, n-3)
            else if high > price_takeProfit(profit_perc, 3) and MAX_TP >= 3
                n = 3
                nextTP := price_takeProfit(profit_perc, n + 1)
                if movestoploss == 'Percentage'
                    price_stop_long := strategy.position_avg_price * (1 + n*profit_perc - stoploss_perc * move_stoploss_factor)
                else if movestoploss == 'TP-1'
                    price_stop_long := price_takeProfit(profit_perc, n-1)
                else if movestoploss == 'TP-2'
                    price_stop_long := price_takeProfit(profit_perc, n-2)
                else if movestoploss == 'TP-3' and movestoploss_entry
                    price_stop_long := strategy.position_avg_price
            else if high > price_takeProfit(profit_perc, 2) and MAX_TP >= 2
                n = 2
                nextTP := price_takeProfit(profit_perc, n + 1)
                if movestoploss == 'Percentage'
                    price_stop_long := strategy.position_avg_price * (1 + n*profit_perc - stoploss_perc * move_stoploss_factor)
                else if movestoploss == 'TP-1'
                    price_stop_long := price_takeProfit(profit_perc, n-1)
                else if movestoploss == 'TP-2' and movestoploss_entry
                    price_stop_long := strategy.position_avg_price
                else if movestoploss == 'TP-3' and movestoploss_entry
                    price_stop_long := strategy.position_avg_price
            else if high > price_takeProfit(profit_perc, 1) and MAX_TP >= 1
                n = 1
                nextTP := price_takeProfit(profit_perc, n + 1)
                if movestoploss == 'Percentage'
                    price_stop_long := strategy.position_avg_price * (1 + n*profit_perc - stoploss_perc * move_stoploss_factor)
                else if movestoploss == 'TP-1' and movestoploss_entry
                    price_stop_long := strategy.position_avg_price
                else if movestoploss == 'TP-2' and movestoploss_entry
                    price_stop_long := strategy.position_avg_price
                else if movestoploss == 'TP-3' and movestoploss_entry
                    price_stop_long := strategy.position_avg_price
        if since_entry == 0
            n = 0
            nextTP := price_takeProfit(profit_perc, n + 1)
            price_stop_long := strategy.position_avg_price * (1 - stoploss_perc) 
    if strategy.position_size < 0
        if since_close == 0
            if low < price_takeProfit(profit_perc, 6) and MAX_TP >= 6
                n = 6
                nextTP := na
                if movestoploss == 'Percentage'
                    price_stop_short := strategy.position_avg_price * (1 - n*profit_perc + stoploss_perc * move_stoploss_factor)
                else if movestoploss == 'TP-1'
                    price_stop_short := price_takeProfit(profit_perc, n-1)
                else if movestoploss == 'TP-2'
                    price_stop_short := price_takeProfit(profit_perc, n-2)
                else if movestoploss == 'TP-3'
                    price_stop_short := price_takeProfit(profit_perc, n-3)
            else if low < price_takeProfit(profit_perc, 5) and MAX_TP >= 5
                n = 5
                nextTP := price_takeProfit(profit_perc, n + 1)
                if movestoploss == 'Percentage'
                    price_stop_short := strategy.position_avg_price * (1 - n*profit_perc + stoploss_perc * move_stoploss_factor)
                else if movestoploss == 'TP-1'
                    price_stop_short := price_takeProfit(profit_perc, n-1)
                else if movestoploss == 'TP-2'
                    price_stop_short := price_takeProfit(profit_perc, n-2)
                else if movestoploss == 'TP-3'
                    price_stop_short := price_takeProfit(profit_perc, n-3)
            else if low < price_takeProfit(profit_perc, 4) and MAX_TP >= 4
                n = 4
                nextTP := price_takeProfit(profit_perc, n + 1)
                if movestoploss == 'Percentage'
                    price_stop_short := strategy.position_avg_price * (1 - n*profit_perc + stoploss_perc * move_stoploss_factor)
                else if movestoploss == 'TP-1'
                    price_stop_short := price_takeProfit(profit_perc, n-1)
                else if movestoploss == 'TP-2'
                    price_stop_short := price_takeProfit(profit_perc, n-2)
                else if movestoploss == 'TP-3'
                    price_stop_short := price_takeProfit(profit_perc, n-3)
            else if low < price_takeProfit(profit_perc, 3) and MAX_TP >= 3
                n = 3
                nextTP := price_takeProfit(profit_perc, n + 1)
                if movestoploss == 'Percentage'
                    price_stop_short := strategy.position_avg_price * (1 - n*profit_perc + stoploss_perc * move_stoploss_factor)
                else if movestoploss == 'TP-1'
                    price_stop_short := price_takeProfit(profit_perc, n-1)
                else if movestoploss == 'TP-2'
                    price_stop_short := price_takeProfit(profit_perc, n-2)
                else if movestoploss == 'TP-3' and movestoploss_entry
                    price_stop_short := strategy.position_avg_price
            else if low < price_takeProfit(profit_perc, 2) and MAX_TP >= 2
                n = 2
                nextTP := price_takeProfit(profit_perc, n + 1)
                if movestoploss == 'Percentage'
                    price_stop_short := strategy.position_avg_price * (1 - n*profit_perc + stoploss_perc * move_stoploss_factor)
                else if movestoploss == 'TP-1'
                    price_stop_short := price_takeProfit(profit_perc, n-1)
                else if movestoploss == 'TP-2' and movestoploss_entry
                    price_stop_short := strategy.position_avg_price
                else if movestoploss == 'TP-3' and movestoploss_entry
                    price_stop_short := strategy.position_avg_price
            else if low < price_takeProfit(profit_perc, 1) and MAX_TP >= 1
                n = 1 
                nextTP := price_takeProfit(profit_perc, n + 1)
                if movestoploss == 'Percentage'
                    price_stop_short := strategy.position_avg_price * (1 - n*profit_perc + stoploss_perc * move_stoploss_factor)
                else if movestoploss == 'TP-1' and movestoploss_entry
                    price_stop_short := strategy.position_avg_price
                else if movestoploss == 'TP-2' and movestoploss_entry
                    price_stop_short := strategy.position_avg_price
                else if movestoploss == 'TP-3' and movestoploss_entry
                    price_stop_short := strategy.position_avg_price
        if since_entry == 0
            n = 0
            nextTP := price_takeProfit(profit_perc, n + 1)
            price_stop_short := strategy.position_avg_price * (1 + stoploss_perc)
    // ***************************************************************************************************************************************************************************
    // * Set Exits
    // ***************************************************************************************************************************************************************************
    if allow_longs == true and allow_shorts == false
        if str_0
            w_total = weight_total(short_signal1, short_signal2, short_signal3, short_signal4, short_signal5)
            strategy.close('Long', when=w_total>=weight_trigger, qty_percent=100, comment='SHORT')
        else
            if str_1
                strategy.close('Long', when=close_long1, qty_percent=100, comment='SHORT')
            if str_2
                strategy.close('Long', when=close_long2, qty_percent=100, comment='SHORT')
            if str_3
                strategy.close('Long', when=close_long3, qty_percent=100, comment='SHORT')
            if str_4
                strategy.close('Long', when=close_long4, qty_percent=100, comment='SHORT')
            if str_5
                strategy.close('Long', when=close_long5, qty_percent=100, comment='SHORT')
    if allow_longs == false and allow_shorts == true
        if str_0
            w_total = weight_total(long_signal1, long_signal2, long_signal3, long_signal4, long_signal5)
            strategy.close('Short', when=w_total>=weight_trigger, qty_percent=100, comment='LONG')
        else
            if str_1
                strategy.close('Short', when=close_long1, qty_percent=100, comment='LONG')
            if str_2
                strategy.close('Short', when=close_long2, qty_percent=100, comment='LONG')
            if str_3
                strategy.close('Short', when=close_long3, qty_percent=100, comment='LONG')
            if str_4
                strategy.close('Short', when=close_long4, qty_percent=100, comment='LONG')
            if str_5
                strategy.close('Short', when=close_long5, qty_percent=100, comment='LONG')
    if allow_shorts == true and strategy.position_size < 0 and stoploss and since_entry > 0
        strategy.close('Short', when=stop_source >= price_stop_short, qty_percent=100, comment='STOP')
        if str_6
            if top_qty == 100
                strategy.close('Short', when=condition_OS_several, qty_percent=bottom_qty, comment='STOP')
            else    
                strategy.exit('Short', when=condition_OS_several, limit=source_6_bottom[1], qty_percent=bottom_qty, comment='TP-B')
    if allow_longs == true and strategy.position_size > 0 and stoploss and since_entry > 0
        strategy.close('Long', when=stop_source <= price_stop_long, qty_percent=100, comment='STOP')
        if str_6
            if top_qty == 100
                strategy.close('Long', when=condition_OB_several, qty_percent=top_qty, comment='STOP')
            else
                strategy.exit('Long', when=condition_OB_several, limit=source_6_top[1], qty_percent=top_qty, comment='TP-T')
// ***********************************************************************************************************************************************************************************************************************************************************************************
// * Data window - debugging
// *************************************************************************************************************************************************************************************************************************************************************************
price_stop = strategy.position_size > 0 ? price_stop_long : price_stop_short

// *************************************************************************************************************************************************************************************************************************************************************************
// * Buy/Sell signals
// *************************************************************************************************************************************************************************************************************************************************************************
w_total_long = weight_total(long_signal1, long_signal2, long_signal3, long_signal4, long_signal5)
w_total_short = weight_total(short_signal1, short_signal2, short_signal3, short_signal4, short_signal5)
// *************************************************************************************************************************************************************************************************************************************************************************
// * Stop loss targets
// *************************************************************************************************************************************************************************************************************************************************************************
plot(series=(strategy.position_size > 0) ? price_stop_long : na, color=color.gray, style=plot.style_cross, linewidth=2, transp=30, title="Long Stop Loss")
plot(series=(strategy.position_size < 0) ? price_stop_short : na, color=color.gray, style=plot.style_cross, linewidth=2, transp=30, title="Short Stop Loss")
// *************************************************************************************************************************************************************************************************************************************************************************
// * TP targets
// *************************************************************************************************************************************************************************************************************************************************************************
plot(strategy.position_size > 0 or strategy.position_size < 0 ? nextTP : na, color=color.aqua, style=plot.style_cross, linewidth=2, transp=30, title="Next TP")
// *************************************************************************************************************************************************************************************************************************************************************************