এই কৌশলটি বিভিন্ন সময়কালের তিনটি চলমান গড় গণনা করে এবং মূল্যের অগ্রগতি একত্রিত করে ট্রেডিং সংকেত উত্পন্ন করে। এটি একটি সাধারণ প্রবণতা অনুসরণকারী কৌশল। কৌশলটি বাজারের মধ্যমেয়াদী প্রবণতা অনুসরণ করার লক্ষ্যে এবং গতিশীলভাবে পরামিতিগুলি সামঞ্জস্য করে বিভিন্ন পণ্য এবং ট্রেডিং পরিবেশে অভিযোজিত হতে পারে।
কৌশলটিতে তিনটি চলমান গড় রয়েছেঃ এমএ 1, এমএ 2 এবং এমএ 3। এমএ 1 এবং এমএ 2 একটি ট্রেডিং চ্যানেল গঠন করে এবং তাদের ক্রসওভার ট্রেডিং সংকেত তৈরি করে; এমএ 3 সংকেতগুলি ফিল্টার করতে ব্যবহৃত হয়।
যখন দ্রুত চলমান গড় MA1 মধ্যমেয়াদী চলমান গড় MA2 এর উপরে অতিক্রম করে, এটি স্বল্পমেয়াদী প্রবণতার শক্তিশালীকরণের ইঙ্গিত দেয়। এই সময়ে, যদি দাম দীর্ঘমেয়াদী চলমান গড় MA3 এর উপরে থাকে তবে একটি দীর্ঘ সংকেত উত্পন্ন হয়; বিপরীতভাবে, যদি MA1 MA2 এর নীচে অতিক্রম করে এবং দাম MA3 এর নীচে থাকে তবে একটি সংক্ষিপ্ত সংকেত উত্পন্ন হয়।
এমএ 3 এর ভূমিকা হল স্বল্পমেয়াদী বাজার গোলমাল ফিল্টার করা এবং কেবলমাত্র ট্রেন্ডটি মাঝারি এবং দীর্ঘমেয়াদী পর্যায়ে প্রবেশ করেছে তা নির্ধারণ করার পরে সংকেত তৈরি করা। তিনটি চলমান গড়ের পরামিতিগুলিকে গতিশীলভাবে সামঞ্জস্য করে, কৌশলটি বিভিন্ন বাজারে সর্বোত্তম পরামিতি সংমিশ্রণ খুঁজে পেতে পারে।
বিভিন্ন পণ্যের জন্য এমএ সময়কাল অপ্টিমাইজ করতে পারে; একক ক্ষতি নিয়ন্ত্রণ করতে স্টপ লস অপ্টিমাইজ করতে পারে; সংকেত বৈধতা নিশ্চিত করতে এবং মিথ্যা সংকেত হ্রাস করতে অন্যান্য প্রযুক্তিগত সূচকগুলি একত্রিত করতে পারে।
এই কৌশলটি তিনটি চলমান গড় গণনা করে এবং তাদের ক্রসগুলি পর্যবেক্ষণ করে ট্রেডিং সংকেত উত্পন্ন করে। প্রবণতা নির্ধারণের জন্য দ্রুত, মাঝারি এবং ধীর রেখাগুলির সংমিশ্রণের ধারণা ব্যবহার করে এটি একটি সাধারণ প্রবণতা অনুসরণকারী কৌশল। কৌশলটি প্যারামিটার অপ্টিমাইজেশনের মাধ্যমে বিভিন্ন পণ্যের সাথে খাপ খাইয়ে নেওয়া যেতে পারে, তবে হুইপস এবং অনুপস্থিত ঘূর্ণনগুলির ঝুঁকি রয়েছে। ভবিষ্যতের উন্নতিগুলি সংকেত বৈধতা বিচার করতে অন্যান্য প্রযুক্তিগত সূচক প্রবর্তন করতে পারে, কৌশলটিকে আরও নমনীয় করতে গতিশীল প্যারামিটার অপ্টিমাইজেশন প্রক্রিয়া বিকাশ করতে পারে ইত্যাদি।
/*backtest start: 2023-01-16 00:00:00 end: 2024-01-22 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Meesemoo //@version=4 strategy("Custom MA Strategy Tester", overlay = true) MA1Period = input(13, title="MA1 Period") MA1Type = input(title="MA1 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"]) MA1Source = input(title="MA1 Source", type=input.source, defval=close) MA1Visible = input(title="MA1 Visible", type=input.bool, defval=true) MA2Period = input(50, title="MA2 Period") MA2Type = input(title="MA2 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"]) MA2Source = input(title="MA2 Source", type=input.source, defval=close) MA2Visible = input(title="MA2 Visible", type=input.bool, defval=true) MA3Period = input(200, title="MA3 Period") MA3Type = input(title="MA3 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"]) MA3Source = input(title="MA3 Source", type=input.source, defval=close) MA3Visible = input(title="MA3 Visible", type=input.bool, defval=true) ShowCrosses = input(title="Show Crosses", type=input.bool, defval=true) MA1 = if MA1Type == "SMA" sma(MA1Source, MA1Period) else if MA1Type == "EMA" ema(MA1Source, MA1Period) else if MA1Type == "WMA" wma(MA1Source, MA1Period) else if MA1Type == "RMA" rma(MA1Source, MA1Period) else if MA1Type == "HMA" wma(2*wma(MA1Source, MA1Period/2)-wma(MA1Source, MA1Period), round(sqrt(MA1Period))) else if MA1Type == "DEMA" e = ema(MA1Source, MA1Period) 2 * e - ema(e, MA1Period) else if MA1Type == "TEMA" e = ema(MA1Source, MA1Period) 3 * (e - ema(e, MA1Period)) + ema(ema(e, MA1Period), MA1Period) MA2 = if MA2Type == "SMA" sma(MA2Source, MA2Period) else if MA2Type == "EMA" ema(MA2Source, MA2Period) else if MA2Type == "WMA" wma(MA2Source, MA2Period) else if MA2Type == "RMA" rma(MA2Source, MA2Period) else if MA2Type == "HMA" wma(2*wma(MA2Source, MA2Period/2)-wma(MA2Source, MA2Period), round(sqrt(MA2Period))) else if MA2Type == "DEMA" e = ema(MA2Source, MA2Period) 2 * e - ema(e, MA2Period) else if MA2Type == "TEMA" e = ema(MA2Source, MA2Period) 3 * (e - ema(e, MA2Period)) + ema(ema(e, MA2Period), MA2Period) MA3 = if MA3Type == "SMA" sma(MA3Source, MA3Period) else if MA3Type == "EMA" ema(MA3Source, MA3Period) else if MA3Type == "WMA" wma(MA3Source, MA3Period) else if MA3Type == "RMA" rma(MA3Source, MA3Period) else if MA3Type == "HMA" wma(2*wma(MA3Source, MA3Period/2)-wma(MA3Source, MA3Period), round(sqrt(MA3Period))) else if MA3Type == "DEMA" e = ema(MA3Source, MA3Period) 2 * e - ema(e, MA3Period) else if MA3Type == "TEMA" e = ema(MA3Source, MA3Period) 3 * (e - ema(e, MA3Period)) + ema(ema(e, MA3Period), MA3Period) p1 = plot(MA1Visible ? MA1 : na, color=color.green, linewidth=1) p2 = plot(MA2Visible ? MA2 : na, color=color.yellow, linewidth=1) p3 = plot(MA3Visible ? MA3 : na, color=color.red, linewidth=2) fill(p1, p2, color.silver, transp=80, title="Fill") start = timestamp(2019, 1, 1, 1, 0) end = timestamp(2025, 1, 1, 1, 0) if time >= start and time <= end longCondition = crossover(MA1, MA2) and close > MA3 if (longCondition) strategy.entry("Long", strategy.long) shortCondition = crossunder(MA1, MA2) and close < MA3 if (shortCondition) strategy.entry("Short", strategy.short)