কৌশল অনুসরণ করে চলমান গড় এনভেলপ চ্যানেল ট্রেন্ড

লেখক:চাওঝাং, তারিখ: ২০২৩-১১-২৩ ১৫ঃ০৬ঃ৩২
ট্যাগঃ

img

সারসংক্ষেপ

চলমান গড় চ্যানেল ট্রেন্ড অনুসরণকারী কৌশল হল চলমান গড় রেখা এবং চ্যানেল সূচকগুলির উপর ভিত্তি করে একটি প্রবণতা অনুসরণকারী কৌশল। এটি বহু-স্তরের চলমান গড় চ্যানেল প্রতিষ্ঠার মাধ্যমে মূল্য প্রবণতার বিচার এবং ট্র্যাকিং উপলব্ধি করে। কৌশলটি বিভিন্ন সময় ফ্রেমের চলমান গড় গণনাগুলিকে একত্রিত করে মাল্টি-টাইমফ্রেম ফিউশন অর্জন করতে, যা বৃহত্তর প্রবণতা ক্যাপচার করতে সহায়তা করে।

কৌশলগত যুক্তি

এই কৌশলটির মূল নীতিটি চলমান গড় রেখাগুলির প্রবণতা ট্র্যাকিং কার্যকারিতা এবং এনভেলপ সূচকগুলির চ্যানেল বিচারের উপর ভিত্তি করে। কৌশলটি একটি বেসলাইন চলমান গড় তৈরি করতে চলমান গড় সময়কাল, মসৃণ প্রকার, মূল্য উত্স ইত্যাদির মতো কনফিগারযোগ্য পরামিতি ব্যবহার করে। তারপরে পরামিতিগুলি দ্বারা নির্ধারিত শতাংশ শিফট মান অনুযায়ী উপরের এবং নীচের চ্যানেলগুলি প্রতিষ্ঠিত হয়। যখন দামটি নিম্ন চ্যানেলটি ভেঙে যায়, তখন দীর্ঘ যান; যখন দামটি উপরের চ্যানেলটি ভেঙে যায়, তখন শর্ট যান। একই সাথে, কৌশলটি স্টপ লস লাইন হিসাবে একটি স্বাধীন চলমান গড় প্রবর্তন করে।

বিশেষ করে, কৌশলটির নিম্নলিখিত বৈশিষ্ট্য রয়েছেঃ

  1. দীর্ঘ এবং সংক্ষিপ্ত উভয় অপারেশন সমর্থন, আপ এবং ডাউন চ্যানেল মাধ্যমে প্রবণতা দিক বিচার।

  2. ৪ টি পর্যন্ত অর্ডার খুলুন, পলিলাইন স্তর দিয়ে পিরামিড অর্ডার খুলুন, যাতে বেশি লাভ হয়।

  3. সঠিক স্টপ লস অর্জনের জন্য স্বাধীনভাবে খোলার মুভিং মিডিয়া এবং বন্ধের মুভিং মিডিয়া কনফিগার করুন।

  4. মাল্টি-টাইমফ্রেম ফিউশন অর্জনের জন্য বিভিন্ন টাইম ফ্রেম (1 মিনিট থেকে 1 দিন) এর চলমান গড় গণনা সমর্থন করুন।

  5. খোলার এবং বন্ধের চলমান গড়গুলি 6 টি ভিন্ন মসৃণকরণ মোডের নির্বাচনকে সমর্থন করে, যা বিভিন্ন জাত এবং চক্রের জন্য অপ্টিমাইজ করা যেতে পারে।

  6. ইতিবাচক এবং নেতিবাচক অফসেটগুলি চ্যানেলগুলি সামঞ্জস্য করতে এবং আরও নির্ভুল অগ্রগতি অনুসরণ করতে প্রবেশ করা যেতে পারে।

কৌশলটির নির্দিষ্ট ট্রেডিং যুক্তি নিম্নরূপঃ

  1. বেঞ্চমার্ক খোলার চলমান গড় গণনা করুন, এবং পরামিতিগুলির সেট শতাংশ অনুযায়ী 4 টি অগ্রগতি লাইন পান।

  2. যখন মূল্য নিম্ন চ্যানেল লাইন অতিক্রম করে, তখন লম্বা হওয়ার জন্য পজিশন খুলুন; যখন দাম উপরের চ্যানেল লাইন অতিক্রম করে, তখন শর্ট হওয়ার জন্য পজিশন খুলুন।

  3. স্টপ লস লাইন হিসাবে স্বাধীন ক্লোজিং চলমান গড় গণনা করুন। যখন দাম আবার লাইনের নীচে পড়ে, স্তরগুলিতে দীর্ঘ অর্ডারগুলি বন্ধ করুন; যখন দাম আবার লাইনের উপরে উঠে যায়, স্তরগুলিতে সংক্ষিপ্ত অর্ডারগুলি বন্ধ করুন।

  4. সর্বোচ্চ ৪টি অর্ডার খোলা যেতে পারে। বৃহত্তর মুনাফা অর্জনের জন্য স্তরযুক্ত পিরামিড অর্ডার খোলার ব্যবহার করুন।

এই কৌশলটির নীতির মাধ্যমে দেখা যায় যে কৌশলটি একটি তুলনামূলকভাবে কঠোর এবং সম্পূর্ণ ট্রেন্ড সিস্টেম গঠনের জন্য চলমান গড় রেখাগুলির প্রবণতা ট্র্যাকিং, চ্যানেল বিচারের অগ্রগতি সংকেত এবং স্বতন্ত্র স্টপ লস রেখাগুলি সেট করার মতো উপাদানগুলিকে একীভূত করে।

সুবিধা বিশ্লেষণ

কোড এবং যৌক্তিক বিশ্লেষণ অনুসারে, চলমান গড়টি চ্যানেলের প্রবণতা অনুসরণ করে কৌশলটি নিম্নলিখিত সুবিধাগুলি রয়েছেঃ

  1. মাল্টি-টাইমফ্রেম ফিউশন বড় আকারের প্রবণতা ক্যাপচার করার সম্ভাবনা উন্নত করে। কৌশলটি 1 মিনিট থেকে 1 দিন পর্যন্ত বিভিন্ন চক্রের চলমান গড়ের গণনা সমর্থন করে। বিভিন্ন চক্রের সাথে খোলার এবং স্টপ-লস চলমান গড়ের কনফিগারেশন মাল্টি-টাইমফ্রেম ট্রেন্ড বিচারের শক্তির ফিউশন অর্জন করে, যা বড় আকারের প্রবণতা ক্যাপচার করতে আরও অনুকূল।

  2. পিরামিড অর্ডার খোলার পদ্ধতি বৃহত্তর মুনাফা অর্জন করে। কৌশলটি 4 টি পর্যন্ত অর্ডার খুলতে পারে। স্তরযুক্ত অর্ডার খোলার মাধ্যমে, এটি লাভের অনুপাতকে ভারসাম্য করে এবং ঝুঁকি নিয়ন্ত্রণের সময় বৃহত্তর মুনাফা অর্জন করে।

  3. 6 ধরণের চলমান গড় নির্বাচন করার জন্য উপলব্ধ এবং অভিযোজনযোগ্যতা শক্তিশালী। খোলার এবং স্টপ-লস চলমান গড় এসএমএ / ইএমএ / ডায়নামিক চলমান গড় সহ 6 টি মোডের নির্বাচনকে সমর্থন করে, যা অভিযোজনযোগ্যতা উন্নত করতে বিভিন্ন জাত এবং চক্রের জন্য অনুকূলিত করা যেতে পারে।

  4. সামঞ্জস্যযোগ্য চ্যানেল লাইনগুলি অগ্রগতির বিচারকে আরও সুনির্দিষ্ট করে তোলে। কৌশলটি বিভিন্ন জাত বা বাজারের পরিবেশের দিকে অপ্টিমাইজেশনের জন্য চ্যানেলের প্রস্থকে সামঞ্জস্য করার জন্য চ্যানেল চলমান শতাংশ পরামিতিগুলির ইনপুটকে অনুমতি দেয়, অগ্রগতির বিচারের নির্ভুলতা উন্নত করে।

  5. স্বতন্ত্র স্টপ লস লাইন ঝুঁকি নিয়ন্ত্রণের জন্য সহায়ক। কৌশলটি একটি স্বতন্ত্র চলমান গড় লাইন গণনা করে যা দীর্ঘ বা সংক্ষিপ্ত অর্ডারগুলি বন্ধ করার জন্য বন্ধ লাইন হিসাবে, যা ট্রেডিং ঝুঁকিগুলিকে ব্যাপকভাবে হ্রাস করতে পারে এবং হারাতে অর্ডার দ্বারা তাড়া এড়াতে পারে।

  6. কোড কাঠামোটি পরিষ্কার এবং বিকাশ করা সহজ দ্বিতীয়ত। কৌশলটি পাইন স্ক্রিপ্টে পরিষ্কার কাঠামোর সাথে লেখা হয়েছে এবং দ্বিতীয়ত বুঝতে এবং বিকাশ করা সহজ। ব্যবহারকারীরা বিদ্যমান কাঠামোর উপর ভিত্তি করে পরামিতিগুলি অপ্টিমাইজ করতে বা অন্যান্য যুক্তি যুক্ত করতে পারেন।

ঝুঁকি বিশ্লেষণ

যদিও সামগ্রিক কৌশলগত যুক্তি কঠোর এবং ঝুঁকি নিয়ন্ত্রণ রয়েছে, তবুও কিছু ট্রেডিং ঝুঁকি সম্পর্কে সচেতন হওয়া উচিত, বিশেষত নিম্নলিখিতগুলি সহঃ

  1. বড় আকারের প্রবণতা বিপরীত ঝুঁকি। কৌশলটির মূল অনুমানটি হ'ল দামগুলি কিছু প্রবণতার সাথে ধারাবাহিকভাবে এগিয়ে যাবে। তবে, যখন বড় আকারের প্রবণতা বিপরীত হয়, তখন এটি কৌশলটির লাভজনকতার উপর আরও বেশি প্রভাব ফেলবে। ক্ষতি নিয়ন্ত্রণের জন্য সময়মতো ক্ষতি বন্ধ করা প্রয়োজন।

  2. অবৈধ অগ্রগতির ঝুঁকি। পাশের বা শক বাজারে, দামগুলি অগ্রগতির পরে চ্যানেল লাইনের নীচে ফিরে আসতে পারে, যা অর্ডার হারাতে অনুসরণ করবে। এই জাতীয় ঘটনাগুলি হ্রাস করার জন্য পরামিতিগুলি অনুকূল করা দরকার।

  3. প্রত্যাশা ব্যবস্থাপনা ঝুঁকি। কৌশলটি বৃহত্তর মুনাফা অর্জনের জন্য পিরামিডিং অর্ডারগুলির 4 স্তর সেট করে, যার ফলে মুনাফা সময়কালে উল্লেখযোগ্য রিটার্ন হয় তবে ক্ষতির সময়কালে প্রত্যাশাগুলিতে তীব্র পতন ঘটে। এটি বিনিয়োগকারীদের পেশাদার মানসিক পরিচালনার দক্ষতা থাকতে হবে।

  4. সিগন্যাল অপ্টিমাইজেশান ঝুঁকি। কৌশলটি চ্যানেলের প্রস্থ এবং চলমান গড় চক্রের মতো একাধিক পরামিতি জুড়ে সমন্বয় এবং অপ্টিমাইজেশান জড়িত। এটি অতিরিক্ত ফিটিং এড়াতে পেশাদার কোয়ান্টের অপ্টিমাইজেশন অভিজ্ঞতা প্রয়োজন।

  5. বিশেষ বাজার পরিস্থিতি ঝুঁকিঃ দ্রুত ফাঁক বা সংক্ষিপ্ত লাইন সীমা মত চরম বাজার পরিস্থিতি কৌশল যুক্তি ব্যাপকভাবে ক্ষতি হবে, তাই সময়মত স্টপ ক্ষতির জন্য সিস্টেমিক ঝুঁকি মেট্রিক মনোযোগ দিতে হবে।

সাধারণভাবে, কৌশলটি মূলত লাভজনকতার জন্য বৃহত আকারের প্রবণতা লাভের উপর নির্ভর করে এবং কেবলমাত্র দীর্ঘমেয়াদী ধারাবাহিকতার বৈশিষ্ট্যযুক্ত জাত এবং বাজারের পরিবেশে প্রযোজ্য। তদতিরিক্ত, কৌশলগুলির স্থিতিশীল লাভজনকতা নিশ্চিত করার জন্য বহু-প্যারামিটার অপ্টিমাইজেশন এবং মানসিকতা নিয়ন্ত্রণও গুরুত্বপূর্ণ।

অপ্টিমাইজেশান নির্দেশাবলী

এই চলমান গড়ের জন্য চ্যানেলের প্রবণতা অনুসরণকারী কৌশলটির জন্য প্রধান অপ্টিমাইজেশান দিকগুলির মধ্যে রয়েছেঃ

  1. মেশিন লার্নিং অ্যালগরিদমের উপর ভিত্তি করে চ্যানেল লাইন এবং স্টপ লস লাইনগুলির অভিযোজিত অপ্টিমাইজেশন। আরও স্মার্ট মূল্য পূর্বাভাস এবং ঝুঁকি এড়ানোর জন্য চ্যানেল এবং স্টপ লস লাইন মডেলগুলি প্রশিক্ষণের জন্য এলএসটিএম এবং ট্র্যাজেক্টরি পূর্বাভাসের মতো মডেলগুলি ব্যবহার করা যেতে পারে।

  2. পিরামিড লজিক অপ্টিমাইজ করার জন্য অনুভূতি সূচক, পোর্টফোলিও ওজন অনুপাতের মতো সহায়ক কারণগুলি অন্তর্ভুক্ত করুন। পরম অস্থিরতা এবং বাজারের অনুভূতিগুলির মতো কারণগুলি পোর্টফোলিও ঝুঁকি নিয়ন্ত্রণ করতে এবং পিরামিড অর্ডার খোলার লজিককে অনুকূল করতে যুক্ত করা যেতে পারে।

  3. ব্যাকটেস্টিং এর সত্যতা উন্নত করতে ট্রেডিং খরচ এবং স্লিপজ মডেল প্রবর্তন করুন। বর্তমান ব্যাকটেস্টিং ট্রেডিং খরচ প্রভাব বিবেচনা করে না, যা বাস্তব ট্রেডিং একটি গুরুত্বপূর্ণ ফ্যাক্টর যা গাণিতিক মডেল অন্তর্ভুক্ত করা প্রয়োজন।

  4. অভিন্ন ঝুঁকি নিয়ন্ত্রণ কাঠামো তৈরির জন্য অনুরূপ সম্পদ শ্রেণীর মধ্যে সম্পর্ক বিশ্লেষণ প্রসারিত করুন। পণ্য এবং ক্রিপ্টোকারেন্সির মতো একাধিক অনুরূপ বাজারে বর্তমান একক সম্পদ কৌশল প্রসারিত করুন এবং কৌশল স্থিতিশীলতা উন্নত করতে সম্পর্ক বিশ্লেষণের মাধ্যমে ঝুঁকি নিয়ন্ত্রণকে একীভূত করুন।

  5. ব্যবহারকারীর বন্ধুত্বপূর্ণ উন্নতি করার জন্য কৌশল ব্যাখ্যাযোগ্যতা বৃদ্ধি করুন। কৌশল ফলাফল, আউটপুট গুরুত্ব র্যাঙ্কিং প্রতিটি ইনপুট পরিবর্তনশীল গুরুত্ব বিশ্লেষণ, এবং কৌশল যুক্তি ব্যবহারকারীদের জন্য আরো স্বচ্ছ এবং ব্যাখ্যাযোগ্য করতে SHAP মত পদ্ধতি ব্যবহার করুন।

মেশিন লার্নিং এবং মাল্টি-ফ্যাক্টর মডেলের মতো অ্যালগরিদম প্রবর্তন করে কৌশল স্থিতিশীলতা, সত্যতা এবং ব্যবহারযোগ্যতা আরও অনুকূল করতে হবে।

সংক্ষিপ্তসার

সংক্ষেপে, চলমান গড় চ্যানেল ট্রেন্ড অনুসরণকারী কৌশলটি তিনটি মূল পয়েন্টকে সংহত করেঃ চলমান গড়ের প্রবণতা ট্র্যাকিং, চ্যানেল সূচকগুলির প্রবণতা সনাক্তকরণ এবং ঝুঁকি নিয়ন্ত্রণের জন্য স্বতন্ত্র স্টপ লস লাইন। কঠোর প্রবণতা বাজারে, কৌশলটি লাভের পরে প্রবণতার যুক্তিসঙ্গত পরিমাণে স্থিতিশীল রিটার্ন সরবরাহ করতে পারে। তবে ব্যবহারকারীদের ম্যাক্রো বাজার পরিবেশে মনোযোগ দিতে হবে, সঠিকভাবে পরামিতিগুলি অনুকূল করতে হবে এবং ঝুঁকি পরিচালনা করতে হবে, যাতে কৌশলটি জটিল এবং ক্রমাগত পরিবর্তিত ট্রেডিং বাজারে অভিযোজিত হতে পারে। সামগ্রিকভাবে, কৌশলটি ব্যবহারকারীদের তুলনামূলকভাবে সম্পূর্ণ এবং কঠোর প্রবণতা ট্র্যাকিং সমাধান সরবরাহ করে এবং মালিকানাধীন বিকাশ এবং গৌণ বিকাশের জন্য একটি খুব উপযুক্ত পরিমাণগত কৌশল কাঠামো।


/*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")

আরো