ডুয়াল মুভিং এভারেজ ক্রসওভার কৌশলটি বিভিন্ন সময়ের চলমান গড় গণনা করে দামের প্রবণতার দিক বিচার করে এবং প্রবণতা অনুসরণ করে। এটি দীর্ঘ সময়ের এমএ অতিক্রম করার সময় স্বল্প সময়ের এমএ অতিক্রম করে এবং দীর্ঘ সময়ের এমএ অতিক্রম করার সময় স্বল্প সময়ের এমএ অতিক্রম করে। এটি একটি সাধারণ প্রবণতা অনুসরণকারী কৌশল।
এই কৌশলটি ৯, ২১ এবং ৫০ সময়ের এক্সপোনেন্সিয়াল মুভিং এভারেজ (ইএমএ) এর উপর ভিত্তি করে। ৯ সময়ের ইএমএ স্বল্পমেয়াদী প্রবণতা, ২১ সময়ের ইএমএ মধ্যমেয়াদী প্রবণতা এবং ৫০ সময়ের ইএমএ দীর্ঘমেয়াদী প্রবণতা উপস্থাপন করে।
যখন 9 পিরিয়ড ইএমএ 21 পিরিয়ড ইএমএ অতিক্রম করে, এটি স্বল্পমেয়াদে একটি আপট্রেন্ডের সংকেত দেয়, সুতরাং দীর্ঘ চলে যায়। যখন 9 পিরিয়ড ইএমএ 21 পিরিয়ড ইএমএ এর নীচে অতিক্রম করে, এটি স্বল্পমেয়াদে একটি ডাউনট্রেন্ডের সংকেত দেয়, তাই শর্ট যায়। ক্রসওভার ফাংশনটি এখানে এমএগুলির মধ্যে ক্রসওভার নির্ধারণ করতে ব্যবহৃত হয়।
লং / শর্ট এন্ট্রি, লাভ এবং স্টপ লস এর জন্য লজিক কনফিগার করা হয়েছে। এন্ট্রি শর্ত হল এমএগুলির ক্রসওভার। লং লস লাভ হল এন্ট্রি মূল্য * (1 + ইনপুট লস লাভের অনুপাত), শর্ট লস লাভ হল এন্ট্রি মূল্য * (1 - ইনপুট লস লাভের অনুপাত). লং স্টপ লস হল এন্ট্রি মূল্য * (1 - ইনপুট স্টপ লস অনুপাত), শর্ট স্টপ লস হল এন্ট্রি মূল্য * (1 + ইনপুট স্টপ লস অনুপাত) ।
কিছু ফিল্টার যুক্ত করা হয়, যেমন প্রবণতা ফিল্টার পার্শ্ববর্তী এড়াতে, এবং ইক্যুইটি ফিল্টার কৌশল ইক্যুইটি খুব কম যখন ট্রেডিং এড়াতে। এই ফিল্টার কিছু মিথ্যা সংকেত এড়াতে সাহায্য করতে পারেন।
সংক্ষেপে, এই কৌশলটি মূল্যের প্রবণতা দিক নির্ধারণের জন্য ডুয়াল ইএমএ ক্রসওভার ব্যবহার করে, সঠিক লাভ এবং স্টপ লস লজিকের সাথে, যা মাঝারি থেকে দীর্ঘমেয়াদী প্রবণতা ক্যাপচার করতে পারে। তবে একক ফ্যাক্টর কৌশল হিসাবে, সংকেতগুলি যথেষ্ট স্থিতিশীল নাও হতে পারে এবং আরও অনুকূলিত করা যেতে পারে।
ট্রেন্ডের দিকনির্দেশনা নির্ধারণের জন্য দ্বৈত এমএ ক্রসওভার ব্যবহার করে, যুক্তিটি সহজ এবং সহজেই বোঝা যায়।
বিভিন্ন সময়ের EMA গ্রহণ করা স্বল্প ও দীর্ঘমেয়াদী প্রবণতা নির্ধারণ করতে পারে।
লাভ এবং স্টপ লস লজিক লাভ এবং ঝুঁকি নিয়ন্ত্রণ করে।
ফিল্টারগুলি কিছু পরিমাণে ভুল সংকেত এড়াতে সাহায্য করে।
প্যারামিটারগুলি অবাধে কনফিগার করা যায়, সময়কালগুলি বিভিন্ন বাজারের পরিবেশের জন্য অনুকূলিত করা যায়।
একটি একক ফ্যাক্টর কৌশল হিসাবে, ট্রেডিং সংকেতগুলি যথেষ্ট স্থিতিশীল নাও হতে পারে। মূল্য সংহতকরণের সময় উইপসাউস দেখা দিতে পারে।
যখন ক্রসওভার ঘটে, তখন দামটি ইতিমধ্যে একটি স্ট্রেচ আপ / ডাউন চালিয়ে যেতে পারে, উচ্চ কিনতে এবং কম বিক্রি করার ঝুঁকি নিয়ে।
ট্রেডিং খরচ বিবেচনা করা হয় না, প্রকৃত রিটার্ন কম হতে পারে।
স্টপ লস নেই, চরম বাজারের পরিস্থিতিতে সীমাহীন ক্ষতির ঝুঁকি রয়েছে।
সমাধান:
আরো স্থিতিশীল সংকেত জন্য MA সময়কাল অপ্টিমাইজ করুন।
সিগন্যাল ফিল্টার করার জন্য অন্যান্য সূচক যোগ করুন।
খরচ কমানোর জন্য বাণিজ্যের আকার বাড়ানো।
সর্বোচ্চ ক্ষতি সীমাবদ্ধ করার জন্য যথাযথ স্টপ লস সেট করুন।
কৌশলটি নিম্নলিখিত দিকগুলিতে অপ্টিমাইজ করা যেতে পারেঃ
সেরা সমন্বয় খুঁজে পেতে এমএ সময়কাল অপ্টিমাইজ করুন, অথবা গতিশীলভাবে সেরা সময়কাল নির্বাচন করতে অভিযোজনমূলক অপ্টিমাইজেশন ব্যবহার করুন।
সিগন্যালগুলি ফিল্টার করতে এবং মান উন্নত করতে এমএসিডি, কেডি ইত্যাদির মতো অন্যান্য প্রযুক্তিগত সূচক যুক্ত করুন, বা সিগন্যালগুলি স্কোর করতে এবং মিথ্যাগুলি ফিল্টার করতে মেশিন লার্নিং ব্যবহার করুন।
ভলিউম বিশ্লেষণ অন্তর্ভুক্ত করুন। এমএ ক্রসওভারে ভলিউম অপর্যাপ্ত হলে সংকেত গ্রহণ করবেন না।
ক্রসওভারের আগে দামের ওঠানামা পরীক্ষা করুন।
স্টপ লস দূরত্ব কমাতে কিন্তু কার্যকর রাখতে স্টপ লসের পেছনের স্টপ লস, চ্যান্ডেলিয়ার এক্সট ইত্যাদির মতো গতিশীল স্টপ লস প্রক্রিয়া তৈরি করুন।
আরও যুক্তিসঙ্গত মুনাফা/হানি অনুপাত অর্জনের জন্য স্থির/গতিশীল/ধারকযুক্ত মত পজিশনের আকারকে অনুকূল করা।
লাইভ ট্রেডিংয়ে লাভজনকতা নিশ্চিত করার জন্য লাভ / স্টপ লস অনুপাতকে অনুকূল করুন।
এই কৌশলটির সামগ্রিক কাঠামোটি শব্দ, প্রবণতার দিক নির্ধারণের জন্য দ্বৈত ইএমএ ক্রসওভারের সহজ যুক্তি সহ, প্রবণতা ক্যাপচার করার জন্য লাভ এবং স্টপ লস লজিকের সাথে যুক্ত। একক ফ্যাক্টর কৌশল হিসাবে, এটি আরও শক্তিশালী করার জন্য প্যারামিটার, সংকেত ফিল্টার ইত্যাদিতে আরও অনুকূলিত করা যেতে পারে। সঠিক স্টপ লস এবং অবস্থান আকারের সাথে ঝুঁকিগুলি আরও হ্রাস করা যেতে পারে। সামগ্রিকভাবে, এটি কৌশল কাঠামো অনুসরণ করে একটি শক্ত প্রবণতা সরবরাহ করে, যা অপ্টিমাইজেশন এবং সমন্বয়গুলির পরে ধারাবাহিক মুনাফা অর্জন করতে পারে।
/*backtest start: 2023-10-16 00:00:00 end: 2023-11-15 00:00:00 period: 1h basePeriod: 15m 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/ // © TradingMentalist //@version=4 strategy("Initial template",initial_capital=1000, overlay=true, pyramiding=0, commission_type=strategy.commission.percent, commission_value=0.04, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////inputs //turn on/off longs/shorts / extraneous conditions longinc=input(true, title="include longs?") lConSw2=input(true, title="condition two?") lConSw3=input(true, title="condition three?") shotinc=input(true, title="include shorts?") sConSw2=input(true, title="condition two?") sConSw3=input(true, title="condition three?") //turn on/off / adjust trade filters (average range/average equity) sidein2 = input(200, step=10, title='lookback for average range (bars)') sidein = input(1, title='filter trades if range is less than (%)')/100 equityIn = input(40, title='filter trades if equity is below ema()') sidewayssw = input(true, title='sideways filter?') equitysw = input(true, title='equity filter?') longtpin = input(1,step=0.1, title='long TP %')/100 longslin = input(0.4,step=0.1, title='long SL %')/100 shorttpin = input(1,step=0.1, title='short TP %')/100 shortslin = input(0.4,step=0.1, title='short SL %')/100 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////filters //(leave as is) side1 = (close[1] + close[sidein2]) / 2 side2 = close[1] - close[sidein2] side3 = side2 / side1 notsideways = side3 > sidein equityMa = equitysw ? ema(strategy.equity, equityIn) : 0 equityCon = strategy.equity >= equityMa ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////indicators ma1 = ema(close, 9) ma2 = ema(close, 21) ma3 = ema(close, 50) plot(ma1, color=color.new(#E8B6B0,50)) plot(ma2, color=color.new(#B0E8BE,50)) plot(ma3, color=color.new(#00EEFF,50)) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////conditions //adjust conditions //------------------------------------------- longCondition1 = crossover(ma2,ma3) longCondition2 = close[5] > close[10] longCondition3 = close[1] > close[2] shortCondition1 = crossover(ma3,ma2) shortCondition2 = close[5] < close[10] shortCondition3 = close[1] < close[2] closelong = shortCondition1 closeshort = longCondition1 //------------------------------------------- //(leave as is) longCondition1in = longCondition1 longCondition2in = lConSw2 ? longCondition2 : true longCondition3in = lConSw3 ? longCondition3 : true shortCondition1in = shortCondition1 shortCondition2in = sConSw2 ? shortCondition2: true shortCondition3in = sConSw3 ? shortCondition3: true longConditions = longCondition1in and longCondition2in and longCondition3in shortConditions = shortCondition1in and shortCondition2in and shortCondition3in ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////execution //(leave as is) long = sidewayssw ? notsideways and equityCon and longConditions : equityCon and longConditions short = sidewayssw ? notsideways and equityCon and shortConditions : equityCon and shortConditions ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////risk //(leave as is) longtplevel = strategy.position_avg_price * (1 + longtpin) longsllevel = strategy.position_avg_price * (1 - longslin) shorttplevel = strategy.position_avg_price * (1 - shorttpin) shortsllevel = strategy.position_avg_price * (1 + shortslin) ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////timeframe //adjust timeframe //------------------------------------------- startyear = 2000 startmonth = 1 startday = 1 stopyear = 9999 stopmonth = 12 stopday = 31 //------------------------------------------- //(leave as is) startperiod = timestamp(startyear,startmonth,startday,0,0) periodstop = timestamp(stopyear,stopmonth,stopday,0,0) timeframe() => time >= startperiod and time <= periodstop ? true : false ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////orders //comments are empty characters for clear chart if timeframe() if longinc if strategy.position_size == 0 or strategy.position_size > 0 strategy.entry(id="long", long=true, when=long, comment=" ") strategy.exit("stop","long", limit=longtplevel, stop=longsllevel,comment=" ") strategy.close(id="long", when=closelong, comment = " ") if shotinc if strategy.position_size == 0 or strategy.position_size < 0 strategy.entry(id="short", long=false, when=short, comment = " ") strategy.exit("stop","short", limit=shorttplevel, stop=shortsllevel,comment = " ") strategy.close(id="short", when=closeshort, comment = " ")