
মুভিং এভারেজ এনভেলপ চ্যানেল ট্রেন্ড ট্র্যাকিং কৌশল হল একটি ট্রেন্ড ট্র্যাকিং কৌশল যা মুভিং এভারেজ এবং চ্যানেলের সূচকগুলির উপর ভিত্তি করে তৈরি করা হয়। এটি একাধিক স্তরের মুভিং এভারেজ চ্যানেল স্থাপন করে মূল্যের প্রবণতা সম্পর্কে বিচার এবং ট্র্যাকিং সক্ষম করে। এই কৌশলটি একই সাথে বিভিন্ন সময়কালের মুভিং এভারেজ গণনাকে একত্রিত করে, একাধিক সময় ফ্রেমের সংমিশ্রণ করে, যা বৃহত্তর প্রবণতা ক্যাপচার করতে সহায়তা করে।
এই কৌশলটির মূল নীতিটি চলমান গড়ের ট্রেন্ড ট্র্যাকিং ফাংশন এবং এনভেলপ সূচকের চ্যানেল বিচারের উপর ভিত্তি করে। কৌশলটি বেসলাইন চলমান গড় তৈরি করতে কনফিগারযোগ্য চলমান গড় সময়কাল, সমতল টাইপ, মূল্য উত্স এবং অন্যান্য প্যারামিটার ব্যবহার করে। তারপরে প্যারামিটার দ্বারা সেট করা শতাংশ স্থানান্তর মান অনুসারে একটি আপ-ডাউন চ্যানেল তৈরি করুন। যখন দাম নীচের চ্যানেলটি ভেঙে যায়, তখন আরও বেশি করুন; যখন দাম উপরের চ্যানেলটি ভেঙে যায়, তখন খালি করুন। একই সাথে, কৌশলটি স্টপ লাইন ক্ষতি হিসাবে একটি স্বাধীন চলমান গড় প্রবর্তন করে।
বিশেষ করে, এই কৌশলটি নিম্নলিখিত বৈশিষ্ট্যগুলির সাথে পরিচিতঃ
১. একই সময়ে অতিরিক্ত ও নিম্নমুখী অপারেশন সমর্থন করে, যা ট্রেন্ডের দিকনির্দেশনাকে উপরের এবং নীচের চ্যানেলের মাধ্যমে বিচার করে।
২. সর্বাধিক ৪ টি কার্ড খুলতে পারে, আরও বেশি লাভ অর্জনের লক্ষ্যে পিরামিড বাড়াতে পারে।
৩. স্বতন্ত্রভাবে পজিশনের চলমান গড় এবং পজিশনের চলমান গড় কনফিগার করা যায়, যা সঠিকভাবে ক্ষতি বন্ধ করে দেয়।
৪. বিভিন্ন সময়কালের (১ মিনিট থেকে ১ দিন পর্যন্ত) চলমান গড় গণনা সমর্থন করে, একাধিক সময় ফ্রেম একীভূতকরণ সম্ভব।
৫. খোলা ও বন্ধ মুভিং এভারেজ ছয়টি ভিন্ন মসৃণ মোডের বিকল্প সমর্থন করে, যা বিভিন্ন জাত এবং সময়কালের জন্য অপ্টিমাইজ করা যায়।
৬. পজিটিভ-নেগেটিভ ওভারফ্লো ইনপুট করা যায়, যাতে আরও সুনির্দিষ্ট ব্রেকথ্রু করা যায়।
এই কৌশলটি নিম্নরূপঃ
বেঞ্চমার্ক মুভিং এভারেজ গণনা করুন, পরামিতি অনুযায়ী শতাংশ সেট করুন এবং 4 টি ব্রেক লাইন পান।
যখন দাম নীচের চ্যানেল লাইন অতিক্রম করে, তখন ক্রমানুসারে পজিশন খোলার জন্য আরও বেশি করুন; যখন দাম উপরের চ্যানেল লাইন অতিক্রম করে, তখন ক্রমানুসারে পজিশন খোলার জন্য খালি করুন।
একটি স্বতন্ত্র প্লেইন মুভিং এভারেজ গণনা করা হয়, যা স্টপ লিন হিসাবে কাজ করে। যখন দাম আবার এই লাইনটি অতিক্রম করে, তখন একাধিক একক স্তরের ক্ষতি হয়; যখন দাম আবার এই লাইনটি অতিক্রম করে, তখন খালি একক স্তরের ক্ষতি হয়।
সর্বাধিক চারটি কার্ড খুলতে পারবেন এবং আরও বেশি অর্থ উপার্জন করতে পারবেন।
এই কৌশলটির নীতি অনুসারে, এই কৌশলটি একটি তুলনামূলকভাবে কঠোর এবং সম্পূর্ণ প্রবণতা সিস্টেম গঠন করে যা চলমান গড়ের প্রবণতা ট্র্যাকিং, রেলের বিচারের ব্রেকিং সিগন্যাল এবং স্বাধীন স্টপ লিনের সেটআপের মতো উপাদানগুলিকে একত্রিত করে।
কৌশল কোড এবং লজিক্যাল অ্যানালাইসিসের উপর ভিত্তি করে, মুভিং এভারেজ এনভেলপ চ্যানেল ট্রেন্ড ট্র্যাকিং কৌশলটির নিম্নলিখিত সুবিধাগুলি রয়েছেঃ
একাধিক টাইম ফ্রেম একত্রীকরণ, বৃহত্তর স্তরের প্রবণতা ক্যাপচার সম্ভাবনা বৃদ্ধি কৌশল 1 মিনিট থেকে 1 দিন বিভিন্ন সময়কালের জন্য চলমান গড় গণনা সমর্থন করে, বিভিন্ন সময়কাল ব্যবহার করে পজিশন খোলার এবং স্টপ ক্ষতির চলমান গড় কনফিগার করতে পারে, একাধিক টাইম ফ্রেম ট্রেন্ড বিচারককে একত্রিত করে, বৃহত্তর স্তরের প্রবণতা ক্যাপচার করার জন্য আরও সুবিধাজনক
পিরামিড পজিশনিং পদ্ধতি, আরও লাভের জন্য অনুসন্ধান করুন। কৌশলটি সর্বোচ্চ 4 টি পত্র খুলতে পারে, স্তরবিন্যাস পজিশনিং পদ্ধতির মাধ্যমে লাভ-ক্ষতির অনুপাতকে ভারসাম্যপূর্ণ করে, ঝুঁকি নিয়ন্ত্রণের পূর্বশর্তে আরও লাভের জন্য অনুসন্ধান করুন।
৬টি মুভিং এভারেজ মোডের বিকল্প রয়েছে, যা অত্যন্ত অভিযোজিত। মুভিং এভারেজগুলি যেমন এসএমএ / ইএমএ / ডায়নামিক মুভিং এভারেজ সমর্থন করে, যা বিভিন্ন জাত এবং সময়কালের জন্য অনুকূলিতকরণ করা যেতে পারে, যার ফলে অভিযোজনযোগ্যতা বৃদ্ধি পায়।
চ্যানেল লাইনটি সামঞ্জস্যযোগ্য, ব্রেকথ্রু বিচারটি নির্ভুল। কৌশলটি চ্যানেলের চলমান শতাংশের প্যারামিটারগুলি ইনপুট করতে পারে, চ্যানেলের প্রস্থটি সামঞ্জস্য করতে পারে, যাতে বিভিন্ন জাত বা বাজার পরিবেশের জন্য অনুকূলিতকরণ করা যায় এবং ব্রেকথ্রু বিচারটির নির্ভুলতা বাড়ানো যায়।
স্বতন্ত্র স্টপ লিন, যা ঝুঁকি নিয়ন্ত্রণে সহায়তা করে। কৌশলটি স্বতন্ত্র মুভিং এভারেজকে সমতল লাইন হিসাবে গণনা করে, একাধিক বা খালি পত্রের জন্য স্টপ লস করে, ট্রেডিংয়ের ঝুঁকি হ্রাস করে এবং ইনজেকশন অনুসরণ করা এড়ায়।
কোডের কাঠামো পরিষ্কার এবং পুনর্ব্যবহারযোগ্য। পিন স্ক্রিপ্ট ব্যবহার করে কোডের কাঠামো পরিষ্কার, সহজেই বোঝা যায় এবং পুনর্ব্যবহারযোগ্য। ব্যবহারকারীরা বিদ্যমান ফ্রেমওয়ার্কের উপর ভিত্তি করে প্যারামিটারগুলি অপ্টিমাইজ করতে বা অন্যান্য লজিক যুক্ত করতে পারেন।
যদিও এই কৌশলটি সামগ্রিকভাবে যুক্তিসঙ্গত এবং ঝুঁকি নিয়ন্ত্রণে রয়েছে, তবুও কিছু ট্রেডিং ঝুঁকি রয়েছে যা সম্পর্কে সতর্ক হওয়া দরকার, যার মধ্যে রয়েছেঃ
বড় আকারের প্রবণতা বিপরীত ঝুঁকি। কৌশলটির মূল অনুমানটি হ’ল দামগুলি অব্যাহত থাকবে এবং একটি নির্দিষ্ট প্রবণতা রয়েছে। তবে যখন বড় আকারের প্রবণতা বিপরীত হয়, তখন কৌশলটির মুনাফার উপর একটি বড় প্রভাব ফেলবে। এই সময়ে সময়মতো স্টপ লস প্রয়োজন, ক্ষতি নিয়ন্ত্রণ করুন।
ব্রেকডাউন ব্যর্থতার ঝুঁকি। সংহত বা অস্থির বাজারে, দামগুলি যখন চ্যানেল লাইনটি অতিক্রম করে তখন আবারও পতিত হতে পারে। এই ক্ষেত্রে, ফ্যাক্টর ইনজেকশন তৈরি হয় এবং অপ্টিমাইজেশান প্যারামিটারগুলির মাধ্যমে এই ঘটনাটি হ্রাস করা প্রয়োজন।
প্রত্যাশিত মূল্য পরিচালনার ঝুঁকি। কৌশলটি আরও বেশি লাভের জন্য 4 টি স্তর সংরক্ষণ করে, যা লাভের সময় উল্লেখযোগ্য, তবে ক্ষতির সময় প্রত্যাশিত মূল্য উল্লেখযোগ্যভাবে হ্রাস পায়। এটি বিনিয়োগকারীদের পেশাদার মানসিক ব্যবস্থাপনা দক্ষতার প্রয়োজন।
সিগন্যাল অপ্টিমাইজেশান ঝুঁকি। কৌশলটি একাধিক প্যারামিটার যেমন চ্যানেল প্রস্থ, চলমান গড়ের সময়কাল ইত্যাদির অপ্টিমাইজেশনের সাথে জড়িত, যার জন্য পেশাদার পরিমাণগত বিশ্লেষককে অপ্টিমাইজেশনের অভিজ্ঞতা থাকতে হবে যাতে ওভারফিট ঝুঁকি এড়ানো যায়।
বিশেষ পরিস্থিতির ঝুঁকি। দ্রুত গ্যাপ বা সংক্ষিপ্ত লাইন মূল্যের দিনগুলির মতো চরম পরিস্থিতি কৌশলগত যুক্তিকে ব্যাপকভাবে বিঘ্নিত করতে পারে। এই ক্ষেত্রে, সিস্টেম ঝুঁকি সূচকগুলিতে মনোযোগ দেওয়া এবং সময়মতো ক্ষতি বন্ধ করা প্রয়োজন।
সামগ্রিকভাবে, এই কৌশলটি মূলত বড় আকারের প্রবণতার উপর নির্ভর করে এবং কেবলমাত্র দীর্ঘমেয়াদী ধারাবাহিকতার বৈশিষ্ট্যযুক্ত জাত এবং বাজারের পরিবেশের জন্য প্রযোজ্য। এছাড়াও, মাল্টি-প্যারামিটার অপ্টিমাইজেশন এবং মানসিক নিয়ন্ত্রণ কৌশলটি স্থিতিশীল লাভজনকতা নিশ্চিত করার মূল চাবিকাঠি।
এই চলমান গড় envelop চ্যানেল ট্রেন্ড ট্র্যাকিং কৌশলটির জন্য, এর পরবর্তী প্রধান অপ্টিমাইজেশনের দিকগুলি হলঃ
মেশিন লার্নিং অ্যালগরিদমের উপর ভিত্তি করে কানাল লাইন এবং স্টপ লাইনগুলির স্ব-অনুকূলিতকরণ অনুকূলিতকরণ। এলএসটিএম, ট্র্যাক্টর পূর্বাভাস এবং অন্যান্য অ্যালগরিদমগুলি কানাল লাইন এবং স্টপ লাইন মডেলগুলিকে আরও স্মার্ট মূল্য পূর্বাভাস এবং ঝুঁকি এড়ানোর জন্য প্রশিক্ষণ দিতে পারে।
সংবেদনশীল সূচক, পোর্টফোলিও হোল্ডিং অনুপাত ইত্যাদি সহকারী ফ্যাক্টর অপ্টিমাইজেশান পজিশনিং লজিকের সাথে মিলিত। আপনি পরম তরঙ্গের পরিধি, বাজার সংবেদনশীলতা ইত্যাদির মতো সূচকগুলি বিচার করতে পারেন, পোর্টফোলিও ঝুঁকি নিয়ন্ত্রণ করতে পারেন, পিরামিড পজিশনিং লজিক অপ্টিমাইজ করতে পারেন।
লেনদেনের ব্যয় এবং স্লাইড পয়েন্ট মডেলগুলি প্রবর্তন করে, যা পুনরুদ্ধারের সত্যতা বাড়ায়। বর্তমান পুনরুদ্ধারগুলি লেনদেনের ব্যয়ের প্রভাবকে বিবেচনা করে না, যা বাস্তব ডিস্কে একটি গুরুত্বপূর্ণ উপাদান, যার মধ্যে একটি গাণিতিক মডেল তৈরি করা প্রয়োজন।
একই ধরণের জাতের সম্পর্কিত বিশ্লেষণকে প্রসারিত করুন, একটি ইউনিফাইড বায়ু নিয়ন্ত্রণ ব্যবস্থা তৈরি করুন। বিদ্যমান একক জাতের কৌশলটি পণ্য, ডিজিটাল মুদ্রা ইত্যাদির মতো একাধিক অনুরূপ বাজারে প্রসারিত করুন, সম্পর্কিত বিশ্লেষণের মাধ্যমে একীভূত বায়ু নিয়ন্ত্রণ করুন, কৌশলটির স্থিতিশীলতা বাড়ান।
নীতির ব্যাখ্যাযোগ্যতা বৃদ্ধি, ব্যবহারকারীর ব্যবহারযোগ্যতা উন্নত করুন। SHAP এবং অন্যান্য পদ্ধতি ব্যবহার করে, নীতির ফলাফলের উপর প্রতিটি ইনপুট ভেরিয়েবলের প্রভাবের পরিমাণ বিশ্লেষণ করুন, আউটপুট গুরুত্বের সারি করুন, যাতে নীতির যুক্তি ব্যবহারকারীদের জন্য আরও স্বচ্ছ এবং ব্যাখ্যাযোগ্য হয়।
মেশিন লার্নিং, মাল্টি ফ্যাক্টর মডেলিং এবং অন্যান্য অ্যালগরিদমিক পদ্ধতির মাধ্যমে কৌশলটির স্থিতিশীলতা, সত্যতা এবং ব্যবহারের সহজতা আরও উন্নত করা হবে।
সামগ্রিকভাবে বলা যায়, এই চলমান গড় envelop চ্যানেল ট্রেন্ড ট্র্যাকিং কৌশলটি চলমান গড়ের ট্রেন্ড ট্র্যাকিং, চ্যানেল সূচকগুলির প্রবণতা বিচার এবং স্বতন্ত্র স্টপ লিনের ঝুঁকি নিয়ন্ত্রণের তিনটি মূল উপাদানকে একত্রিত করে। কঠোর প্রবণতা বাজারে, কৌশলগুলি স্থিতিশীল এবং কিছু ব্রেকআউট লাভের বাস্তবায়ন সরবরাহ করতে পারে। তবে ব্যবহারকারীদের বড় আকারের বাজারের পরিবেশের উপর নজর রাখা, সংখ্যাগত অপ্টিমাইজেশন এবং ঝুঁকি পরিচালনার কাজ করা প্রয়োজন, যাতে কৌশলগুলি জটিল এবং পরিবর্তনশীল ট্রেডিং বাজারের সাথে খাপ খাইয়ে নিতে পারে। সামগ্রিকভাবে, কৌশলটি ব্যবহারকারীদের একটি অপেক্ষাকৃত সম্পূর্ণ এবং কঠোর প্রবণতা ট্র্যাকিং সমাধান সরবরাহ করে, যা স্ব-নির্মাণ এবং দ্বিতীয় স্তরের বিকাশের জন্য উপযুক্ত কৌশলগত কাঠামো।
/*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")