وسائل لوڈ ہو رہے ہیں... لوڈنگ...

چلتی اوسط لفافہ چینل رجحان کی پیروی کی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-11-23 15:06:32
ٹیگز:

img

جائزہ

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

حکمت عملی منطق

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

خاص طور پر اس حکمت عملی کی مندرجہ ذیل خصوصیات ہیں:

  1. دونوں طویل اور مختصر آپریشن کی حمایت، اوپر اور نیچے چینلز کے ذریعے رجحان کی سمت کا فیصلہ.

  2. 4 احکامات تک کھولیں، زیادہ سے زیادہ منافع حاصل کرنے کے لئے پولین لائن پرتوں کے ذریعے پیرامڈ آرڈر کھولنے کو لاگو کریں.

  3. درست سٹاپ نقصان کے حصول کے لیے آزاد افتتاحی اور بند ہونے والی اوسط اوسط کو ترتیب دیں۔

  4. ملٹی ٹائم فریم فیوژن کے حصول کے لئے مختلف ٹائم فریم (1 منٹ سے 1 دن) کے چلتے ہوئے اوسط حساب کی حمایت کریں۔

  5. کھولنے اور بند ہونے والے چلتے ہوئے اوسط 6 مختلف ہموار طریقوں کا انتخاب کرتے ہیں، جو مختلف اقسام اور سائیکلوں کے لئے بہتر بنایا جا سکتا ہے.

  6. مثبت اور منفی آفسیٹس کو چینلز کو ایڈجسٹ کرنے اور زیادہ درست پیشرفتوں کا پیچھا کرنے کے لئے داخل کیا جاسکتا ہے۔

حکمت عملی کا مخصوص تجارتی منطق مندرجہ ذیل ہے:

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

  2. جب قیمت نیچے کی چینل لائن کو توڑتی ہے تو، طویل عرصے تک جانے کے لئے پوزیشن کھولیں؛ جب قیمت اوپر کی چینل لائن کو توڑتی ہے تو، مختصر کرنے کے لئے پوزیشن کھولیں.

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

  4. زیادہ سے زیادہ 4 آرڈر کھولے جاسکتے ہیں۔ زیادہ سے زیادہ منافع حاصل کرنے کے لئے پرتوں پر مشتمل اہرام کے آرڈر کھولنے کا استعمال کریں۔

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

فوائد کا تجزیہ

کوڈ اور منطقی تجزیہ کے مطابق، چلتی اوسط کو چینل کے رجحان کے بعد کی حکمت عملی مندرجہ ذیل فوائد ہیں:

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

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

  3. 6 اقسام کے حرکت پذیر اوسط انتخاب کے لئے دستیاب ہیں اور موافقت پذیری مضبوط ہے۔ افتتاحی اور اسٹاپ نقصان حرکت پذیر اوسط 6 طریقوں کے انتخاب کی حمایت کرتا ہے جن میں ایس ایم اے / ای ایم اے / متحرک حرکت پذیر اوسط شامل ہیں ، جو موافقت پذیری کو بہتر بنانے کے لئے مختلف اقسام اور سائیکلوں کے لئے بہتر بنایا جاسکتا ہے۔

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

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

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

خطرے کا تجزیہ

اگرچہ مجموعی طور پر حکمت عملی کا منطق سخت ہے اور خطرے کا کنٹرول موجود ہے ، لیکن پھر بھی کچھ تجارتی خطرات سے آگاہ ہونا ضروری ہے ، خاص طور پر ان میں شامل ہیں:

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

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

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

  4. سگنل کی اصلاح کا خطرہ۔ اس حکمت عملی میں متعدد پیرامیٹرز جیسے چینل کی چوڑائی اور حرکت پذیر اوسط سائیکل میں ایڈجسٹمنٹ اور اصلاحات شامل ہیں۔ اس کے ل professional پیشہ ور کوانٹس کو زیادہ سے زیادہ فٹنگ سے بچنے کے ل optimization اصلاح کا تجربہ ہونا ضروری ہے۔

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

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

اصلاح کی ہدایات

اس حرکت پذیر اوسط کے لئے، چینل کے رجحان کے بعد کی حکمت عملی کے لئے، اصلاح کی اہم سمتوں میں شامل ہیں:

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

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

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

  4. اسی طرح کے اثاثہ جات کی کلاسوں میں ارتباط کا تجزیہ بڑھانا تاکہ رسک کنٹرول کے متحد فریم ورک تیار کیے جاسکیں۔ موجودہ واحد اثاثہ حکمت عملی کو اجناس اور کریپٹو کرنسیوں جیسی متعدد اسی طرح کی منڈیوں میں بڑھانا ، اور حکمت عملی کے استحکام کو بہتر بنانے کے لئے ارتباط کے تجزیے کے ذریعے رسک کنٹرول کو متحد کرنا۔

  5. صارف دوست کو بہتر بنانے کے لئے حکمت عملی کی وضاحت کی اہلیت میں اضافہ کریں۔ حکمت عملی کے نتائج ، آؤٹ پٹ اہمیت کی درجہ بندی میں ہر ان پٹ متغیر کی اہمیت کا تجزیہ کرنے ، اور صارفین کے لئے حکمت عملی کی منطق کو زیادہ شفاف اور قابل تشریح بنانے کے لئے 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")

مزید