এই কৌশলটি ম্যাকগিনলি ডায়নামিক মুভিং এভারেজ সূচকের উপর ভিত্তি করে। ম্যাকগিনলি এমএ সূচকটি মুভিং এভারেজের একটি উন্নত সংস্করণ যা মূল্যের প্রবণতা আরও ভালভাবে ট্র্যাক করতে পারে। কৌশলটি মুনাফার জন্য ট্রেডিং নিয়ম প্রতিষ্ঠার জন্য এমএগুলির মূল্যের ব্রেকআউটের সাথে মিলিত ম্যাকগিনলি এমএ সূচক দ্বারা উত্পন্ন সংকেতগুলি ব্যবহার করে।
কৌশলটি মূলত দুটি চলমান গড় ব্যবহার করে, একটি 21-অবধি ইএমএ এবং একটি 42-অবধি ইএমএ। যখন স্বল্পতম এমএ দীর্ঘতম এমএ এর উপরে অতিক্রম করে, এটি একটি ক্রয় সংকেত হিসাবে বিবেচিত হয়। যখন স্বল্পতম এমএ দীর্ঘতম এমএ এর নীচে অতিক্রম করে, এটি একটি বিক্রয় সংকেত হিসাবে বিবেচিত হয়।
উপরন্তু, কৌশলটির জন্য মূল্যটি ম্যাকগিনলি ডায়নামিক এমএ এর উপরে থাকা এবং একটি ক্রয় সংকেত তৈরি করার জন্য স্বল্পতম এমএ এর উপরে ভাঙ্গার প্রয়োজন। বিক্রয় সংকেতের জন্য, এটির জন্য মূল্যটি ম্যাকগিনলি এমএ এর নীচে থাকা এবং স্বল্পতম এমএ এর নীচে ভাঙ্গার প্রয়োজন।
বিশেষত, ক্রয় সংকেতটি তখন সক্রিয় হয় যখনঃ স্বল্প MA দীর্ঘ MA এর উপরে ক্রস করে, ম্যাকগিনলি MA এর উপরে বন্ধ মূল্য, স্বল্প MA এর নীচে বন্ধ মূল্য বিরতি। বিক্রয় সংকেতটি সক্রিয় হয় যখনঃ স্বল্প MA দীর্ঘ MA এর নীচে ক্রস করে, ম্যাকগিনলি MA এর নীচে বন্ধ মূল্য, স্বল্প MA এর নীচে বন্ধ মূল্য বিরতি।
ম্যাকগিনলি এমএ হিসাব করা হয়ঃ এমডিআইটি = এমডিআইটি -1 + (বন্ধ - এমডিআইটি -1) / ম্যাক্স(কে * সময়কাল * (বন্ধ / এমডিআইটি -1) ^ 4, 1) যেখানে এমডিআইটি বর্তমান মান, এমডিআইটি -1 পূর্ববর্তী মান, বন্ধ বন্ধ মূল্য, কে মসৃণকরণ ধ্রুবক, এবং সময়কাল হিসাবের সময়কাল। এই সূত্রটি এমএকে রিয়েল টাইমে দামের পরিবর্তনগুলি ট্র্যাক করতে দেয়।
ম্যাকগিনলি এমএ ঐতিহ্যবাহী এমএগুলির বিলম্বিত ইস্যুকে উন্নত করে এবং দ্রুত প্রবণতা পরিবর্তনগুলি ধরতে পারে।
সিগন্যাল উৎপন্ন করার জন্য ডুয়াল এমএ ব্যবহার করে কার্যকরীভাবে মিথ্যা ব্রেকআউট ফিল্টার করতে পারে।
ম্যাকগিনলি এমএ এর উপরে/নীচে মূল্য যোগ করা ব্যাপ্তি-সীমাবদ্ধ বাজারে অত্যধিক লেনদেন এড়ায়।
ইএমএ ব্যবহার করে, এমএ সাম্প্রতিক মূল্য পরিবর্তনের প্রতি আরও সংবেদনশীল হয়।
Whipsaws পার্শ্ববর্তী বাজারে মিথ্যা সংকেত তৈরি করতে পারে, ক্ষতির কারণ হতে পারে। প্যারামিটারগুলি ফিল্টার সংকেতগুলিতে সামঞ্জস্য করা যেতে পারে।
গ্যাপ খোলার ফলে সময়মতো প্রবেশ করতে ব্যর্থ হতে পারে। প্রবেশের নিয়ম শিথিল করা যেতে পারে।
অপর্যাপ্ত প্যারামিটার টিউনিং কৌশল কর্মক্ষমতা প্রভাবিত করতে পারে। প্যারামিটার অপ্টিমাইজ করা উচিত।
দীর্ঘ হোল্ডিং সময় সিস্টেমিক ঝুঁকি জড়িত। স্টপ লস ব্যবহার বিবেচনা করুন।
সর্বোত্তম সমন্বয় খুঁজে পেতে বিভিন্ন এমএ দৈর্ঘ্য পরীক্ষা করুন।
এন্ট্রি/এক্সিটের টাইমিং উন্নত করতে কেডি, এমএসিডি-র মতো অন্যান্য সূচক যুক্ত করুন।
ম্যাকগিনলি এমএ গণনা অপ্টিমাইজ করার জন্য বিভিন্ন পণ্য এবং বাজারের উপর ভিত্তি করে কে মান সামঞ্জস্য করুন।
ডায়নামিক পজিশন সাইজিং এবং ঝুঁকি নিয়ন্ত্রণের জন্য অস্থিরতা পরিমাপ অন্তর্ভুক্ত করুন।
ক্ষতি নিয়ন্ত্রণের জন্য স্টপ লস সেট করুন। লাভে লক করার জন্য ট্রেলিং স্টপও পরীক্ষা করা যেতে পারে।
এই কৌশলটি ট্রেন্ডগুলি কার্যকরভাবে অনুসরণ করতে এবং প্রবণতা বিপরীত হলে অবস্থানগুলি স্যুইচ করতে মূল্যের ব্রেকআউট সংকেতগুলির সাথে মিলিত ম্যাকগিনলি এমএ এর দ্রুত ট্র্যাকিং ক্ষমতা ব্যবহার করে। ঐতিহ্যগত দ্বৈত এমএ কৌশলগুলির তুলনায়, এটি প্রবণতা পরিবর্তনগুলি দ্রুত ধরতে পারে। তবে ঝুঁকিগুলি নিয়ন্ত্রণের জন্য পরামিতিগুলির অপ্টিমাইজেশন এবং টিউনিংয়ের প্রয়োজন এমন ঝুঁকি রয়েছে।
/*backtest start: 2022-11-07 00:00:00 end: 2023-11-13 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/ // © LucasZancheta //@version=4 strategy(shorttitle="Maguila", title="McGinley Dynamic Indicator", overlay=true) //Médias móveis MA1Period=input(21, title="MA1") MA2Period=input(42, title="MA2") MA1 = ema(close, MA1Period) MA2 = ema(close, MA2Period) aboveAverage = MA1 >= MA2 hunderAverage = MA2 >= MA1 //Período do backtest startDate = input(title="Start Date", type=input.integer, defval=28, minval=1, maxval=31) startMonth = input(title="Start Month", type=input.integer, defval=5, minval=1, maxval=12) startYear = input(title="Start Year", type=input.integer, defval=2019, minval=1800, maxval=2100) endDate = input(title="End Date", type=input.integer, defval=28, minval=1, maxval=31) endMonth = input(title="End Month", type=input.integer, defval=5, minval=1, maxval=12) endYear = input(title="End Year", type=input.integer, defval=2030, minval=1800, maxval=2100) //Verifica se o candle está dentro do período do backtest inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0)) //Número de periodos da média móvel period = input(title="Períodos", type=input.integer, defval=20) //Constante K (0.6) k = input(title="Constante K", type=input.float, defval=0.6) //Preço de fechamento closePrice = input(title="Preço", type=input.source, defval=close) mdi = 0.0 //Fórmula de McGinley mdi := na(mdi[1]) ? closePrice : mdi[1] + (closePrice - mdi[1]) / max((k * period * pow(closePrice / mdi[1], 4)), 1) //Regra de coloração mdiColor = closePrice > mdi ? color.green : closePrice < mdi ? color.red : color.black //Inserindo as informações no gráfico plot(MA1, color=color.blue, linewidth=2) plot(MA2, color=color.purple, linewidth=2) barcolor(mdiColor) //Estratégia buySignal = aboveAverage and closePrice > mdi and crossunder(low, MA1) and close > MA1 buyLoss = closePrice < mdi and close < MA1 and close < MA2 if (inDateRange) strategy.entry("Compra", strategy.long, qty=1, when= buySignal) strategy.exit("Gain da compra", "Compra", qty=1, profit=20) strategy.close("Compra", qty=1, when= buyLoss, comment="Loss na operação") sellSignal = hunderAverage and closePrice < mdi and crossover(high, MA1) and close < MA1 sellLoss = closePrice > mdi and close > MA1 and close > MA2 if (inDateRange) strategy.entry("Venda", strategy.short, qty=1, when= sellSignal) strategy.exit("Gain da venda", "Venda", qty=1, profit=20) strategy.close("Venda", qty=1, when= sellLoss, comment="Loss na operação") if (not inDateRange) strategy.close_all()