
چلتی اوسط لفافہ چینل رجحانات کی پیروی کی حکمت عملی ایک رجحانات کی پیروی کی حکمت عملی ہے جو چلتی اوسط اور چینل کے اشارے پر مبنی ہے۔ یہ قیمتوں کے رجحانات کا فیصلہ کرنے اور ان کی پیروی کرنے کے لئے ایک کثیر پرت چلتی اوسط چینل قائم کرکے قابل بناتا ہے۔ یہ حکمت عملی ایک ہی وقت میں مختلف وقت کی مدت کے لئے چلتی اوسط کے حساب سے ملتی ہے ، جس سے متعدد ٹائم فریموں کا امتزاج ہوتا ہے ، جس سے بڑے رجحانات کو پکڑنے میں مدد ملتی ہے۔
اس حکمت عملی کا بنیادی اصول حرکت پذیر اوسط کی رجحانات کی پیروی کرنے کی صلاحیت اور Envelop اشارے کے راستے پر مبنی ہے۔ حکمت عملی بیس لائن حرکت پذیر اوسط کو تشکیل دینے کے لئے ترتیب دینے کے قابل حرکت پذیر اوسط دورانیہ ، ہموار قسم ، قیمت کا ماخذ وغیرہ جیسے پیرامیٹرز کا استعمال کرتی ہے۔ اس کے بعد ، پیرامیٹرز کے مقرر کردہ فیصد شفٹ کی قدر کے مطابق ، اوپر اور نیچے کی طرف ایک راستہ قائم کریں۔ جب قیمت نیچے کی طرف جاتی ہے تو ، زیادہ کام کریں؛ جب قیمت اوپر کی طرف جاتی ہے تو ، خالی جگہیں۔
اس حکمت عملی کی کچھ خاص خصوصیات یہ ہیں:
1۔ ایک ہی وقت میں زیادہ اور کم کرنے کی حمایت کرتا ہے ، اوپر اور نیچے کے راستے کے ذریعہ رجحانات کی سمت کا تعین کرتا ہے۔
2۔ زیادہ سے زیادہ 4 ورق کھول سکتے ہیں ، زیادہ سے زیادہ منافع کے حصول کے لئے کراس لائن کی سطح کے ذریعہ پائریڈم کو بڑھا سکتے ہیں۔
3۔ ایک علیحدہ پوزیشن کھولنے والی اور ایک پوزیشن منتقل کرنے والی اوسط ترتیب دی جاسکتی ہے ، جس سے نقصانات کو روکنے میں مدد ملتی ہے۔
4۔ مختلف ٹائم فریموں ((1 منٹ سے 1 دن) کے لئے متحرک اوسط حساب کتاب کی حمایت کریں ، تاکہ کثیر ٹائم فریم انضمام ممکن ہو۔
5۔ اسٹاک کھولنے اور اسٹاک منتقل کرنے والی اوسط 6 مختلف ہموار موڈ کے اختیارات کی حمایت کرتا ہے ، جو مختلف اقسام اور ادوار کے لئے بہتر بنایا جاسکتا ہے۔
اس حکمت عملی کے تحت تجارت کی منطق کچھ اس طرح ہے:
بیس لیول پوزیشن کھولنے کی اوسط اوسط حساب لگائیں ، اور پیرامیٹرز کے مطابق فی صد مقرر کریں ، جس سے 4 بریک لائنیں ملیں۔
جب قیمت نیچے چینل لائن کو توڑتی ہے تو ، ترتیب سے زیادہ پوزیشن کھولی جائے۔ جب قیمت اوپر چینل لائن کو توڑتی ہے تو ، ترتیب سے پوزیشن کھولی جائے۔
اسٹاپ نقصان کی لائن کے طور پر ایک علیحدہ کھلنے والی حرکت پذیری اوسط کا حساب لگائیں۔ جب قیمت دوبارہ اس لائن سے نیچے آجائے تو ، ایک سے زیادہ واحد کی سطح پر اسٹاپ۔ جب قیمت دوبارہ اس لائن کو توڑتی ہے تو ، خالی واحد کی سطح پر اسٹاپ۔
زیادہ سے زیادہ 4 بٹ کھولیں ، اور زیادہ سے زیادہ منافع کے حصول کے لئے فریک لائن پرتوں کے اہرام کے ذریعے ذخیرہ کریں۔
اس حکمت عملی کے اصول سے معلوم ہوتا ہے کہ یہ حکمت عملی ایک نسبتاً سخت اور مکمل رجحاناتی نظام کی تشکیل کے لئے ایک متحرک اوسط کی رجحانات کی پیروی ، راستے کے فیصلے کے بریک سگنل ، اور آزاد اسٹاپ لائن کی ترتیب جیسے عناصر کو جوڑتی ہے۔
حکمت عملی کے کوڈ اور منطقی تجزیہ کے مطابق ، اس متحرک اوسط لفافہ چینل رجحان سے باخبر رہنے کی حکمت عملی کے درج ذیل فوائد ہیں:
ملٹی ٹائم فریم انضمام ، بڑے پیمانے پر رجحانات کو پکڑنے کے امکانات کو بہتر بناتا ہے۔ حکمت عملی 1 منٹ سے 1 دن تک مختلف ادوار کے لئے متحرک اوسط کے حساب کتاب کی حمایت کرتی ہے ، مختلف ادوار کو استعمال کرتے ہوئے پوزیشن کھولنے اور روکنے کے لئے متحرک اوسط کو ترتیب دے سکتی ہے ، اور ملٹی ٹائم فریموں کے رجحانات کے فیصلے کو یکجا کرتی ہے ، جو بڑے پیمانے پر رجحانات کو پکڑنے کے لئے زیادہ موزوں ہے۔
زیادہ منافع حاصل کرنے کے لئے پیراڈائزڈ اسٹوریج کا طریقہ۔ حکمت عملی میں زیادہ سے زیادہ 4 پیپر کھولے جاسکتے ہیں ، اور خطرہ پر قابو پانے کی شرط پر منافع کو کنٹرول کرنے کے لئے اسٹوریج کی تقسیم کے ذریعہ منافع اور نقصان کو متوازن کیا جاسکتا ہے۔
6 قسم کے متحرک اوسط کے طریقوں کا انتخاب ، قابل موافقت ہے۔ 6 قسم کے طریقوں کا انتخاب ، جیسے ایس ایم اے / ای ایم اے / متحرک متحرک اوسط کو کھولنے اور روکنے کے لئے متحرک اوسط کی حمایت کرتا ہے ، جو مختلف اقسام اور ادوار کے لئے بہتر بنایا جاسکتا ہے ، جس سے موافقت کو بہتر بنایا جاسکتا ہے۔
چینل لائنوں کو ایڈجسٹ کیا جاسکتا ہے ، اور اس کی درستگی کو بہتر بنایا جاسکتا ہے۔ حکمت عملیوں کو چینل میں منتقل ہونے والے فیصد پیرامیٹرز کو ان پٹ کیا جاسکتا ہے ، جس سے چینل کی چوڑائی کو ایڈجسٹ کیا جاسکتا ہے ، جس سے مختلف اقسام یا مارکیٹ کے ماحول کے مطابق اصلاح کی جاسکتی ہے ، اور اس سے اس کی درستگی میں اضافہ ہوتا ہے۔
آزاد اسٹاپ لائن ، جو خطرے پر قابو پانے میں معاون ہے۔ حکمت عملی کا حساب لگانا آزاد حرکت پذیر اوسط کے طور پر صفائی کی لائن ، متعدد یا خالی ٹکٹوں پر اسٹاپ نقصان ، تجارت کے خطرے کو نمایاں طور پر کم کرنے اور انجکشن کو روکنے سے بچنے کے لئے۔
کوڈ کی ساخت صاف ہے ، دوبارہ استعمال میں آسان ہے۔ حکمت عملی پائن اسکرپٹ کا استعمال کرتے ہوئے لکھی گئی ہے ، کوڈ کی ساخت صاف ہے ، سمجھنے میں آسان ہے اور دوبارہ استعمال میں آسان ہے۔ صارف موجودہ فریم ورک کی بنیاد پر پیرامیٹرز کو بہتر بنانا جاری رکھ سکتا ہے یا دوسرے منطق میں شامل ہوسکتا ہے۔
اس حکمت عملی کے باوجود ، جو کہ مجموعی طور پر منطقی طور پر سخت اور خطرے پر قابو پانے والی ہے ، کچھ تجارتی خطرات موجود ہیں جن کے بارے میں آگاہ رہنا ضروری ہے ، خاص طور پر:
بڑے پیمانے پر رجحان کا رخ موڑنے کا خطرہ۔ حکمت عملی کا بنیادی مفروضہ یہ ہے کہ قیمتیں مستقل طور پر آگے بڑھیں گی ، اس میں ایک خاص رجحان موجود ہے۔ تاہم ، جب بڑے پیمانے پر رجحان کا رخ موڑ جاتا ہے تو ، اس حکمت عملی کے منافع پر زیادہ اثر پڑتا ہے۔ اس وقت ، نقصان کو روکنے اور نقصان کو کنٹرول کرنے کی ضرورت ہے۔
توڑنے کی ناکامی کا خطرہ۔ تالیف یا ہلچل والے بازاروں میں ، قیمتوں میں چینل لائن کو توڑنے کے بعد دوبارہ گرنے کا خدشہ ہے۔ اس وقت اس کی وجہ سے انجکشن انجکشن ہوتا ہے ، جس کی اصلاح کے پیرامیٹرز کے ذریعہ اس واقعے کو کم کرنے کی ضرورت ہے۔
متوقع قدر کا انتظام خطرہ۔ حکمت عملی زیادہ منافع کی تلاش میں 4 پرتوں کا ذخیرہ قائم کرتی ہے ، جو منافع کے وقت نمایاں ہوتا ہے ، لیکن نقصان کے وقت متوقع قدر میں نمایاں کمی ہوتی ہے۔ اس میں سرمایہ کاروں کو پیشہ ورانہ ذہنی انتظام کی صلاحیت کی ضرورت ہوتی ہے۔
سگنل ایڈجسٹمنٹ کا خطرہ۔ حکمت عملی میں متعدد پیرامیٹرز کی ایڈجسٹمنٹ کو بہتر بنانا شامل ہے ، جیسے چینل کی چوڑائی ، منتقل اوسط کی مدت ، وغیرہ۔ اس سے زیادہ فٹ ہونے کے خطرے سے بچنے کے لئے پیشہ ورانہ مقداری تجزیہ کاروں کو بہتر بنانے کا تجربہ درکار ہوتا ہے۔
خصوصی حالات کا خطرہ۔ انتہائی حالات جیسے تیز رفتار گیپ یا شارٹ لائن کی قیمتوں کا دن حکمت عملی کی منطق کو بہت زیادہ نقصان پہنچا سکتا ہے ، اس وقت سسٹم کے خطرے کے اشارے پر توجہ دینے کی ضرورت ہے ، اور وقت پر نقصان کو روکنا ہے۔
مجموعی طور پر ، اس حکمت عملی میں منافع کمانے کے لئے بنیادی طور پر بڑے پیمانے پر رجحانات پر انحصار کیا جاتا ہے ، اور یہ صرف ایسی اقسام اور مارکیٹ کے ماحول کے لئے لاگو ہوتا ہے جس میں طویل مدتی استحکام کی خصوصیات ہوتی ہیں۔ اس کے علاوہ ، کثیر پیرامیٹرز کی اصلاح اور ذہنیت کا کنٹرول بھی حکمت عملی کی مستحکم منافع کو یقینی بنانے کی کلید ہے۔
موبائل اوسط کے لئے envelop چینل رجحانات کی پیروی کی حکمت عملی کے لئے، اس کے بعد کے اہم اصلاحات میں شامل ہیں:
مشین لرننگ الگورتھم پر مبنی وے لائن اور اسٹاپ لائن کی خود کار طریقے سے اصلاح۔ ایل ایس ٹی ایم ، ٹریکشن پیشن گوئی اور دیگر الگورتھم کو وے لائن اور اسٹاپ لائن ماڈل کی تربیت کے لئے استعمال کیا جاسکتا ہے ، جس سے زیادہ ذہین قیمت کی پیش گوئی اور خطرہ سے بچاؤ ممکن ہے۔
جذبات کے اشارے ، پورٹ فولیو ہولڈنگ تناسب جیسے معاون عوامل کو بہتر بنانے کے لئے پوزیشن لگانے کی منطق۔ اس میں اشارے جیسے مطلق لہر ، مارکیٹ کے جذبات کا فیصلہ ، پورٹ فولیو رسک کو کنٹرول کرنے ، پوزیشن لگانے کی منطق کو بہتر بنانے کے لئے پائیرمیٹ شامل کیا جاسکتا ہے۔
ٹرانزیکشن لاگت اور سلائیڈ پوائنٹ ماڈل متعارف کروائیں ، تاکہ ریٹرننگ کی صداقت کو بہتر بنایا جاسکے۔ موجودہ ریٹرننگ میں ٹرانزیکشن لاگت کے اثرات کو مدنظر نہیں رکھا گیا ہے ، جو کہ حقیقی وقت میں ایک اہم عنصر ہے ، جس میں ریاضیاتی ماڈل بنانے کی ضرورت ہے۔
اسی طرح کی اقسام کے لئے وابستگی کے تجزیے کو بڑھانا ، ایک متحد وینڈ کنٹرول سسٹم کی تعمیر کریں۔ موجودہ ایک ہی قسم کی حکمت عملی کو متعدد اسی طرح کے بازاروں جیسے اجناس ، ڈیجیٹل کرنسیوں تک بڑھانا ، وابستگی کے تجزیے کے ذریعہ یکساں وینڈ کنٹرول ، حکمت عملی کی استحکام کو بہتر بنانا۔
حکمت عملی کی وضاحت کو بڑھانا ، صارف کی آسانی کو بہتر بنانا۔ SHAP جیسے طریقوں کا استعمال کرتے ہوئے حکمت عملی کے نتائج پر ہر ان پٹ متغیر کے اثر و رسوخ کی مقدار کا تجزیہ کریں ، اور آؤٹ پٹ کی اہمیت کو ترتیب دیں ، تاکہ حکمت عملی کے منطق کو صارف کے لئے زیادہ شفاف اور قابل فہم بنایا جاسکے۔
مشین لرننگ ، ملٹی فیکٹر ماڈل اور دیگر الگورتھم کے ذرائع کو متعارف کرانے کے ذریعے حکمت عملی کی استحکام ، صداقت اور آسانی سے استعمال کو بہتر بنانا جاری رکھنا اس حکمت عملی کے بعد کی اہم پیشرفت ہے۔
مجموعی طور پر ، یہ موبائل اوسط لفافہ چینل ٹرینڈ ٹریکنگ حکمت عملی تین بنیادی نکات کو جوڑتی ہے: حرکت پذیر اوسط کے رجحان کی پیروی ، چینل اشارے کے رجحان کا فیصلہ ، اور آزاد اسٹاپ نقصان کی لائن کے خطرے کو کنٹرول کرنا۔ سخت رجحان کی منڈی میں ، حکمت عملی مستحکم اور کچھ بریک آؤٹ کے ساتھ عمل درآمد فراہم کرسکتی ہے۔ لیکن صارف کو بڑے پیمانے پر مارکیٹ کے ماحول پر قابو پانے ، عددی اصلاح اور خطرے کے انتظام کے کام پر دھیان دینے کی ضرورت ہے ، تاکہ حکمت عملی کو پیچیدہ اور متغیر ٹریڈنگ مارکیٹوں کے مطابق ڈھال سکے۔ مجموعی طور پر ، یہ حکمت عملی صارفین کو ایک نسبتا complete مکمل اور سخت رجحان سے باخبر رہنے کا حل فراہم کرتی ہے ، جو خود ساختہ اور ثانوی ترقی کے لئے بہت موزوں حکمت عملی کا فریم ورک ہے۔
/*backtest
start: 2023-10-23 00:00:00
end: 2023-11-22 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the GNU Affero General Public License v3.0 at https://www.gnu.org/licenses/agpl-3.0.html
//@version=4
strategy(title = "HatiKO Envelopes", shorttitle = "HatiKO Envelopes", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 4, initial_capital=10, calc_on_order_fills=false)
//Settings
isLotSizeAvgShifts=input(true, title ="Calculate lot size with avgPrice shifts (HatiKO calculate)")
lotsize_Short = input(100, defval = 100, minval = 0, maxval = 10000, title = "Lot short, %")
lotsize_Long = input(100, defval = 100, minval = 0, maxval = 10000, title = "Lot long, %")
//Shorts Open Config
timeFrame_Short = input(defval = "Current.", options = ["Current.", "1m", "3m", "5m", "10m", "15m", "20m", "30m", "45m", "1H","2H","3H","4H","1D"], title = "Timeframe Short")
ma_type_Short = input(defval = "1. SMA", options = ["1. SMA", "2. PCMA", "3. EMA", "4. WMA", "5. DEMA", "6. ZLEMA"], title = "MA Type Short")
Short_Data_input = input(defval = "7.OHLC4", options = ["1.Open", "2.High", "3.Low", "4.Close", "5.HL2", "6.HLC3", "7.OHLC4", "8.OC2"], title = "Data Short")
len_Short = input(3, minval = 1, title = "MA Length Short")
offset_Short = input(0, minval = 0, title = "MA offset Short")
//Longs Open Config
timeFrame_Long = input(defval = "Current.", options = ["Current.", "1m", "3m", "5m", "10m", "15m", "20m", "30m", "45m", "1H","2H","3H","4H","1D"], title = "Timeframe Long")
ma_type_Long = input(defval = "1. SMA", options = ["1. SMA", "2. PCMA", "3. EMA", "4. WMA", "5. DEMA", "6. ZLEMA"], title = "MA Type Long")
Long_Data_input = input(defval = "7.OHLC4", options = ["1.Open", "2.High", "3.Low", "4.Close", "5.HL2", "6.HLC3", "7.OHLC4", "8.OC2"], title = "Data Long")
len_Long = input(3, minval = 1, title = "MA Length Long")
offset_Long = input(0, minval = 0, title = "MA offset Long")
//Shorts Close Config
isEnableShortCustomClose=input(false, title ="Mode close MA Short")
timeFrame_close_Short = input(defval = "Current.", options = ["Current.", "1m", "3m", "5m", "10m", "15m", "20m", "30m", "45m", "1H","2H","3H","4H","1D"], title = "Timeframe Short Close")
ma_type_close_Short = input(defval = "1. SMA", options = ["1. SMA", "2. PCMA", "3. EMA", "4. WMA", "5. DEMA", "6. ZLEMA"], title = "MA Type Close Short")
Short_Data_input_close = input(defval = "7.OHLC4", options = ["1.Open", "2.High", "3.Low", "4.Close", "5.HL2", "6.HLC3", "7.OHLC4", "8.OC2"], title = "Data Short Close")
len_Short_close = input(3, minval = 1, title = "MA Length Short Close")
shortDeviation = input( 0.0, title = "Short Deviation %",step=0.1)
offset_Short_close = input(0, minval = 0, title = "MA offset Short Close")
//Longs Close Config
isEnableLongCustomClose=input(false, title ="Mode close MA Long")
timeFrame_close_Long = input(defval = "Current.", options = ["Current.", "1m", "3m", "5m", "10m", "15m", "20m", "30m", "45m", "1H","2H","3H","4H","1D"], title = "Timeframe Long Close")
ma_type_close_Long = input(defval = "1. SMA", options = ["1. SMA", "2. PCMA", "3. EMA", "4. WMA", "5. DEMA", "6. ZLEMA"], title = "MA Type Close Long")
Long_Data_input_close = input(defval = "7.OHLC4", options = ["1.Open", "2.High", "3.Low", "4.Close", "5.HL2", "6.HLC3", "7.OHLC4", "8.OC2"], title = "Data Long Close")
len_Long_close = input(3, minval = 1, title = "MA Length Long Close")
longDeviation = input( -0.0, title = "Long Deviation %",step=0.1)
offset_Long_close = input(0, minval = 0, title = "MA offset Long Close")
shift_Short4_percent = input(0.0, title = "Short Shift 4")
shift_Short3_percent = input(10.0, title = "Short Shift 3")
shift_Short2_percent = input(7.0, title = "Short Shift 2")
shift_Short1_percent = input(4.0, title = "Short Shift 1")
shift_Long1_percent = input(-4.0, title = "Long Shift 1")
shift_Long2_percent = input(-7.0, title = "Long Shift 2")
shift_Long3_percent = input(-10.0, title = "Long Shift 3")
shift_Long4_percent = input( -0.0, title = "Long Shift 4")
isEnableDoubleLotShift3_Long=input(false, title ="Shift3 Long LotSize*2")
isEnableDoubleLotShift3_Short=input(false, title ="Shift3 Short LotSize*2")
year_Start = input(19, defval = 19, minval = 10, maxval = 99, title = "From Year 20XX")
year_End = input(99, defval = 99, minval = 10, maxval = 99, title = "To Year 20XX")
month_Start = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
month_End = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
day_Start = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
day_End = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
short4_isActive = shift_Short4_percent != 0 and lotsize_Short > 0
short3_isActive = shift_Short3_percent != 0 and lotsize_Short > 0
short2_isActive = shift_Short2_percent != 0 and lotsize_Short > 0
short1_isActive = shift_Short1_percent != 0 and lotsize_Short > 0
long1_isActive = shift_Long1_percent != 0 and lotsize_Long > 0
long2_isActive = shift_Long2_percent != 0 and lotsize_Long > 0
long3_isActive = shift_Long3_percent != 0 and lotsize_Long > 0
long4_isActive = shift_Long4_percent != 0 and lotsize_Long > 0
mult = 1 / syminfo.mintick
is_time_true = time > timestamp(2000+year_Start, month_Start, day_Start, 00, 00) and time < timestamp(2000+ year_End, month_End, day_End, 23, 59)
//MA
TFsecurity_Short = timeFrame_Short == "4H"?60*4:timeFrame_Short=="3H"?60*3:timeFrame_Short=="2H"?60*2:timeFrame_Short=="1H"?60:timeFrame_Short=="45m"?45:timeFrame_Short=="30m"?30:timeFrame_Short=="20m"?20:timeFrame_Short=="15m"?15:timeFrame_Short=="10m"?10:timeFrame_Short=="5m"?5:timeFrame_Short=="3m"?3:1
TFsecurity_Long = timeFrame_Long == "4H"?60*4:timeFrame_Long=="3H"?60*3:timeFrame_Long=="2H"?60*2:timeFrame_Long=="1H"?60:timeFrame_Long=="45m"?45:timeFrame_Long=="30m"?30:timeFrame_Long=="20m"?20:timeFrame_Long=="15m"?15:timeFrame_Long=="10m"?10:timeFrame_Long=="5m"?5:timeFrame_Long=="3m"?3:1
oc2 = (open + close) / 2
lag_Short = (len_Short - 1) / 2//floor((len_Short - 1) / 2)
lag_Long = (len_Long - 1) / 2 //floor((len_Long - 1) / 2)
source_Short = Short_Data_input == "1.Open" ? open : Short_Data_input == "2.High" ? high : Short_Data_input == "3.Low" ? low : Short_Data_input == "4.Close" ? close : Short_Data_input == "5.HL2" ? hl2 : Short_Data_input == "6.HLC3" ? hlc3 : Short_Data_input == "7.OHLC4" ? ohlc4 : Short_Data_input == "8.OC2" ? oc2: close
source_Long = Long_Data_input == "1.Open" ? open : Long_Data_input == "2.High" ? high : Long_Data_input == "3.Low" ? low : Long_Data_input == "4.Close" ? close : Long_Data_input == "5.HL2" ? hl2 : Long_Data_input == "6.HLC3" ? hlc3 : Long_Data_input == "7.OHLC4" ? ohlc4 : Long_Data_input == "8.OC2" ? oc2: close
preS_MA_Short = ma_type_Short == "1. SMA" ? sma(source_Short, len_Short) : ma_type_Short == "2. PCMA"? (highest(high, len_Short) + lowest(low, len_Short)) / 2 : ma_type_Short == "3. EMA" ? ema(source_Short, len_Short) : ma_type_Short == "4. WMA" ? wma(source_Short, len_Short) : ma_type_Short == "5. DEMA" ? (2 * ema(source_Short,len_Short) - ema(ema(source_Short,len_Short), len_Short)) : ma_type_Short == "6. ZLEMA" ? ema(source_Short + (source_Short - source_Short[lag_Short]), len_Short) : na
preS_MA_Long = ma_type_Long == "1. SMA" ? sma(source_Long, len_Long) :ma_type_Long == "2. PCMA"? (highest(high, len_Long) + lowest(low, len_Long)) / 2 : ma_type_Long == "3. EMA" ? ema(source_Long, len_Long) : ma_type_Long == "4. WMA" ? wma(source_Long, len_Long) : ma_type_Long == "5. DEMA" ? (2 * ema(source_Long,len_Long) - ema(ema(source_Long,len_Long), len_Long)) : ma_type_Long == "6. ZLEMA" ? ema(source_Long + (source_Long - source_Long[lag_Long]), len_Long) : na
pre_MA_Short = timeFrame_Short == "Current." ? preS_MA_Short : security(syminfo.tickerid, tostring(TFsecurity_Short), preS_MA_Short)
pre_MA_Long = timeFrame_Long == "Current." ? preS_MA_Long : security(syminfo.tickerid, tostring(TFsecurity_Long), preS_MA_Long)
MA_Short = (round(pre_MA_Short * mult) / mult)[offset_Short]
MA_Long = (round(pre_MA_Long * mult) / mult)[offset_Long]
Level_Long1 = long1_isActive ? round((MA_Long + MA_Long* shift_Long1_percent / 100) * mult) / mult : na
Level_Long2 = long2_isActive ? round((MA_Long + MA_Long* shift_Long2_percent / 100) * mult) / mult : na
Level_Long3 = long3_isActive ? round((MA_Long + MA_Long* shift_Long3_percent / 100) * mult) / mult : na
Level_Long4 = long4_isActive ? round((MA_Long + MA_Long* shift_Long4_percent / 100) * mult) / mult : na
Level_Short1 = short1_isActive ? round((MA_Short + MA_Short*shift_Short1_percent/ 100) * mult) / mult : na
Level_Short2 = short2_isActive ? round((MA_Short + MA_Short*shift_Short2_percent/ 100) * mult) / mult : na
Level_Short3 = short3_isActive ? round((MA_Short + MA_Short*shift_Short3_percent/ 100) * mult) / mult : na
Level_Short4 = short4_isActive ? round((MA_Short + MA_Short*shift_Short4_percent/ 100) * mult) / mult : na
//MA_Close
lag_Short_close = (len_Short_close - 1) / 2 //floor((len_Short_close - 1) / 2)
lag_Long_close = (len_Long_close - 1) / 2 //floor((len_Long_close - 1) / 2)
pre_PCMA_Short_close = (highest(high, len_Short_close) + lowest(low, len_Short_close)) / 2
pre_PCMA_Long_close = (highest(high, len_Long_close) + lowest(low, len_Long_close)) / 2
source_Short_close = Short_Data_input_close == "1.Open" ? open : Short_Data_input_close == "2.High" ? high : Short_Data_input_close == "3.Low" ? low : Short_Data_input_close == "4.Close" ? close : Short_Data_input_close == "5.HL2" ? hl2 : Short_Data_input_close == "6.HLC3" ? hlc3 : Short_Data_input_close == "7.OHLC4" ? ohlc4 : Short_Data_input_close == "8.OC2" ? oc2: close
source_Long_close = Long_Data_input_close == "1.Open" ? open : Long_Data_input_close == "2.High" ? high : Long_Data_input_close == "3.Low" ? low : Long_Data_input_close == "4.Close" ? close : Long_Data_input_close == "5.HL2" ? hl2 : Long_Data_input_close == "6.HLC3" ? hlc3 : Long_Data_input_close == "7.OHLC4" ? ohlc4 : Long_Data_input_close == "8.OC2" ? oc2: close
preS_MA_Short_close = ma_type_close_Short == "1. SMA" ? sma(source_Short_close, len_Short_close) : ma_type_close_Short == "2. PCMA"? (highest(high, len_Short_close) + lowest(low, len_Short_close)) / 2 : ma_type_close_Short == "3. EMA" ? ema(source_Short_close, len_Short_close) : ma_type_close_Short == "4. WMA" ? wma(source_Short_close, len_Short_close) : ma_type_close_Short == "5. DEMA" ? (2 * ema(source_Short_close,len_Short_close) - ema(ema(source_Short_close,len_Short_close), len_Short_close)) : ma_type_close_Short == "6. ZLEMA" ? ema(source_Short_close + (source_Short_close - source_Short_close[lag_Short_close]), len_Short_close) : na
preS_MA_Long_close = ma_type_close_Long == "1. SMA" ? sma(source_Long_close, len_Long_close) : ma_type_close_Long == "2. PCMA"? (highest(high, len_Long_close) + lowest(low, len_Long_close)) / 2 : ma_type_close_Long == "3. EMA" ? ema(source_Long_close, len_Long_close) : ma_type_close_Long == "4. WMA" ? wma(source_Long_close, len_Long_close) : ma_type_close_Long == "5. DEMA" ? (2 * ema(source_Long_close,len_Long_close) - ema(ema(source_Long_close,len_Long_close), len_Long_close)) : ma_type_close_Long == "6. ZLEMA" ? ema(source_Long_close + (source_Long_close - source_Long_close[lag_Long_close]), len_Long_close) : na
TFsecurity_close_Short=timeFrame_close_Short=="4H"?60*4:timeFrame_close_Short=="3H"?60*3:timeFrame_close_Short=="2H"?60*2:timeFrame_close_Short=="1H"?60:timeFrame_close_Short=="45m"?45:timeFrame_close_Short=="30m"?30:timeFrame_close_Short=="20m"?20:timeFrame_close_Short=="15m"?15:timeFrame_close_Short=="10m"?10:timeFrame_close_Short=="5m"?5:timeFrame_close_Short=="3m"?3:1
TFsecurity_close_Long=timeFrame_close_Long=="4H"?60*4:timeFrame_close_Long=="3H"?60*3:timeFrame_close_Long=="2H"?60*2:timeFrame_close_Long=="1H"?60:timeFrame_close_Long=="45m"?45:timeFrame_close_Long=="30m"?30:timeFrame_close_Long=="20m"?20:timeFrame_close_Long=="15m"?15:timeFrame_close_Long=="10m"?10:timeFrame_close_Long=="5m"?5:timeFrame_close_Long=="3m"?3:1
pre_MA_close_Short = isEnableShortCustomClose? security(syminfo.tickerid, timeFrame_close_Short=="Current."?timeframe.period:tostring(TFsecurity_close_Short), preS_MA_Short_close) : preS_MA_Short_close
pre_MA_close_Long = isEnableLongCustomClose? security(syminfo.tickerid, timeFrame_close_Long=="Current."?timeframe.period:tostring(TFsecurity_close_Long), preS_MA_Long_close) : preS_MA_Long_close
MA_Short_close = (round(pre_MA_close_Short * mult) / mult)[offset_Short_close]
MA_Long_close = (round(pre_MA_close_Long * mult) / mult)[offset_Long_close]
countShifts_Long = 0
countShifts_Long:=long1_isActive?countShifts_Long+1:countShifts_Long
countShifts_Long:=long2_isActive?countShifts_Long+1:countShifts_Long
countShifts_Long:=long3_isActive?countShifts_Long+1:countShifts_Long
countShifts_Long:=long4_isActive?countShifts_Long+1:countShifts_Long
avgPriceForLotShiftLong_Data_input = MA_Long+ (MA_Long*((shift_Long1_percent+shift_Long2_percent+shift_Long3_percent+shift_Long4_percent)/countShifts_Long/100))
countShifts_Short = 0
countShifts_Short:=short1_isActive?countShifts_Short+1:countShifts_Short
countShifts_Short:=short2_isActive?countShifts_Short+1:countShifts_Short
countShifts_Short:=short3_isActive?countShifts_Short+1:countShifts_Short
countShifts_Short:=short4_isActive?countShifts_Short+1:countShifts_Short
avgPriceForLotShiftShort_Data_input = MA_Short + (MA_Short*((shift_Short1_percent+shift_Short2_percent+shift_Short3_percent+shift_Short4_percent)/countShifts_Short/100))
strategy.initial_capital = 50000
balance=strategy.initial_capital + strategy.netprofit
lotlong = 0.0
lotshort = 0.0
lotlong := (balance / avgPriceForLotShiftLong_Data_input) * (lotsize_Long / 100) //strategy.position_size == 0 ? (strategy.equity / close) * (lotsize_Long / 100) : lotlong[1]
lotshort := (balance / avgPriceForLotShiftShort_Data_input) * (lotsize_Short / 100) //strategy.position_size == 0 ? (strategy.equity / close) * (lotsize_Short / 100) : lotshort[1]
lotlong:= lotlong>1000000000?1000000000:lotlong
lotshort:=lotshort>1000000000?1000000000:lotshort
if isLotSizeAvgShifts==false
lotlong := (strategy.equity / open) * (lotsize_Long / 100)
lotshort := (strategy.equity / open) * (lotsize_Short / 100)
value_deviationLong=0.0
value_deviationShort=0.0
if(isEnableLongCustomClose == false )
MA_Long_close:=MA_Long
else
value_deviationLong := round(MA_Long_close * longDeviation /100 * mult) / mult
if(isEnableShortCustomClose == false )
MA_Short_close:=MA_Short
else
value_deviationShort := round(MA_Short_close * shortDeviation /100 * mult) / mult
if MA_Short > 0 and lotshort > 0// and strategy.position_size<=0
lotShort_Data_input = strategy.position_size < 0 ? round(abs(strategy.position_size) / lotshort) : 0.0
strategy.entry("S1", strategy.short, lotshort, limit = Level_Short1, when = (lotShort_Data_input == 0 and short1_isActive and is_time_true ))
lotShort_Data_input := strategy.position_size < 0 ? round(abs(strategy.position_size) / lotshort) : 0.0
strategy.entry("S2", strategy.short, lotshort, limit = Level_Short2, when = (lotShort_Data_input <= 1 and short2_isActive and is_time_true ))
lotshort3 = isEnableDoubleLotShift3_Short? lotshort*2 :lotshort
lotShort_Data_input := strategy.position_size < 0 ? round(abs(strategy.position_size) / lotshort) : 0.0
maxLotsshift3=isEnableDoubleLotShift3_Short?3:2
strategy.entry("S3", strategy.short, lotshort3, limit = Level_Short3, when = (lotShort_Data_input <= maxLotsshift3 and short3_isActive and is_time_true ))
lotShort_Data_input := strategy.position_size < 0 ? round(abs(strategy.position_size) / lotshort) : 0.0
maxLotsshift4=isEnableDoubleLotShift3_Short?4:3
strategy.entry("S4", strategy.short, lotshort, limit = Level_Short4, when = (lotShort_Data_input <= maxLotsshift4 and short4_isActive and is_time_true))
strategy.exit("TPS", "S1" ,limit = MA_Short_close+value_deviationShort , when = is_time_true)
strategy.exit("TPS", "S2" ,limit = MA_Short_close+value_deviationShort , when = is_time_true)
strategy.exit("TPS", "S3" ,limit = MA_Short_close+value_deviationShort , when = is_time_true)
strategy.exit("TPS", "S4" ,limit = MA_Short_close+value_deviationShort , when = is_time_true)
if MA_Long > 0 and lotlong > 0// and strategy.position_size>=0
lotLong_Data_input = strategy.position_size > 0 ? round(strategy.position_size / lotlong) : 0.0
strategy.entry("L1", strategy.long, lotlong, limit = Level_Long1, when = (lotLong_Data_input ==0 and long1_isActive and is_time_true))
lotLong_Data_input := strategy.position_size > 0 ? round(strategy.position_size / lotlong) : 0.0
strategy.entry("L2", strategy.long, lotlong, limit = Level_Long2, when = ( lotLong_Data_input <= 1 and long2_isActive and is_time_true))
lotlong3 = isEnableDoubleLotShift3_Long? lotlong*2 : lotlong
lotLong_Data_input := strategy.position_size > 0 ? round(strategy.position_size / lotlong) : 0.0
maxLotsshift3=isEnableDoubleLotShift3_Long?3:2
strategy.entry("L3", strategy.long, lotlong3, limit = Level_Long3, when = (lotLong_Data_input <= maxLotsshift3 and long3_isActive and is_time_true))
maxLotsshift4=isEnableDoubleLotShift3_Long?4:3
lotLong_Data_input := strategy.position_size > 0 ? round(strategy.position_size / lotlong) : 0.0
strategy.entry("L4", strategy.long, lotlong, limit = Level_Long4, when = ( lotLong_Data_input<maxLotsshift4 and long4_isActive and is_time_true))
strategy.exit( "TPL", "L1",limit = MA_Long_close+value_deviationLong, when = is_time_true)
strategy.exit( "TPL", "L2", limit = MA_Long_close+value_deviationLong, when = is_time_true)
strategy.exit( "TPL", "L3", limit = MA_Long_close+value_deviationLong, when = is_time_true)
strategy.exit( "TPL", "L4", limit = MA_Long_close+value_deviationLong, when = is_time_true)
if (MA_Long_close < close)
strategy.close("L1")
strategy.close("L2")
strategy.close("L3")
strategy.close("L4")
if (MA_Short_close > close)
strategy.close("S1")
strategy.close("S2")
strategy.close("S3")
strategy.close("S4")
if time > timestamp(2000+year_End, month_End, day_End, 23, 59)
strategy.close_all()
strategy.cancel("L1")
strategy.cancel("L2")
strategy.cancel("L3")
strategy.cancel("S1")
strategy.cancel("S2")
strategy.cancel("S3")
//Lines
colorlong = color.green
colorshort = color.red
value_long1 = long1_isActive ? Level_Long1 : na
value_long2 = long2_isActive ? Level_Long2 : na
value_long3 = long3_isActive ? Level_Long3 : na
value_long4 = long4_isActive ? Level_Long4 : na
value_short1 = short1_isActive ? Level_Short1 : na
value_short2 = short2_isActive ? Level_Short2 : na
value_short3 = short3_isActive ?Level_Short3 : na
value_short4 = short4_isActive? Level_Short4 : na
value_maShort_close= isEnableShortCustomClose ? MA_Short_close : na
value_maLong_close= isEnableLongCustomClose ? MA_Long_close : na
plot(value_maShort_close + value_deviationShort, offset = 1, color = color.orange, title = "MA line Short Close")
plot(value_short4, offset = 1, color = colorshort, title = "Short Shift 4")
plot(value_short3, offset = 1, color = colorshort, title = "Short Shift 3")
plot(value_short2, offset = 1, color = colorshort, title = "Short Shift 2")
plot(value_short1, offset = 1, color = colorshort, title = "Short Shift 1")
plot(countShifts_Short>0 and lotsize_Short>0 ? MA_Short:na, offset = 1, color = color.purple, title = "MA line Short")
plot(countShifts_Long>0 and lotsize_Long>0? MA_Long:na, offset = 1, color = color.lime, title = "MA line Long")
plot(value_long1, offset = 1, color = colorlong, title = "Long Shift 1")
plot(value_long2, offset = 1, color = colorlong, title = "Long Shift 2")
plot(value_long3, offset = 1, color = colorlong, title = "Long Shift 3")
plot(value_long4, offset = 1, color = colorlong, title = "Long Shift 4")
plot(value_maLong_close + value_deviationLong, offset = 1, color = color.blue, title = "MA line Long Close")