
এই কৌশলটি ম্যাককিন নন-ডায়নামিক গড়ের উপর ভিত্তি করে একটি ট্রেডিং কৌশল। ম্যাককিন নন-ডায়নামিক গড় একটি উন্নত সংস্করণ যা বাজারের প্রবণতার পরিবর্তনকে আরও ভালভাবে ক্যাপচার করতে পারে। এই কৌশলটি ম্যাককিন নন-ডায়নামিক গড়ের সংকেত ব্যবহার করে, দামের ব্রেকিং গড়ের সংকেতগুলির সাথে মিলিত হয়, এবং মুনাফা অর্জনের জন্য ক্রয় এবং বিক্রয় নিয়ম তৈরি করে।
এই কৌশলটি মূলত দুটি গড় লাইন ব্যবহার করে, যথাক্রমে 21 তম সূচকীয় চলমান গড় এবং 42 তম সূচকীয় চলমান গড়। যখন স্বল্পমেয়াদী গড় লাইনটি দীর্ঘমেয়াদী গড় লাইনটি অতিক্রম করে, তখন এটি কেনার সংকেত হিসাবে বিবেচিত হয়; যখন দীর্ঘমেয়াদী গড় লাইনটি দীর্ঘমেয়াদী গড় লাইনটি অতিক্রম করে, তখন এটি বিক্রয় সংকেত হিসাবে বিবেচিত হয়।
এছাড়াও, এই কৌশলটি একই সাথে ম্যাককিন্স নন-ডায়নামিক গড়ের চেয়ে বেশি দামের শর্ত পূরণ করতে হবে, দামটি স্বল্পমেয়াদী গড়ের বিপরীতে একটি ক্রয় সংকেত তৈরি করবে। বিক্রয় সংকেতের জন্য একইভাবে ম্যাককিন্স নন-গড়ের চেয়ে কম দামের শর্ত পূরণ করতে হবে, দামটি স্বল্পমেয়াদী গড়ের নীচে পড়ে।
ক্রয় সংকেতের ট্রিগার শর্তগুলি হ’লঃ সংক্ষিপ্ত গড়ের নীচে দীর্ঘ গড় লাইন, ম্যাককিনের অ-গড়ের চেয়ে বেশি বন্ধের দাম, বন্ধের দামটি সংক্ষিপ্ত গড়ের নীচে বিচ্ছিন্ন। বিক্রয় সংকেতের ট্রিগার শর্তগুলি হ’লঃ সংক্ষিপ্ত গড়ের নীচে দীর্ঘ গড় লাইন, ম্যাককিনের অ-গড়ের চেয়ে কম বন্ধের দাম, বন্ধের দামটি সংক্ষিপ্ত গড়ের উপরে বিচ্ছিন্ন।
ম্যাকিন নন-ডায়নামিক গড়ের গণনা সূত্রটি হলঃ MDIt = MDIt-1 + (Close - MDIt-1) / Max(k * Period * (Close / MDIt-1) ^ 4, 1) । যার মধ্যে, MDIt বর্তমান মান, MDIt-1 আগের দিনের মান, Close আজকের সমাপ্তি মূল্য, k সমান্তরাল ধ্রুবক, এবং Period গণনা। এই সূত্রটি গড়কে রিয়েল-টাইমে মূল্য পরিবর্তনের ট্র্যাকিং করতে দেয়।
ম্যাকিনফি গড়রেখার সূচকটি ঐতিহ্যগত গড়রেখার পিছিয়ে থাকা অবস্থার উন্নতি করে, যা দামের প্রবণতার পরিবর্তনকে আরও দ্রুত ধরতে পারে।
ডাবল ইক্যুয়ালিটি ট্রেডিং সিগন্যালের সাথে মিলিত হয় যা কার্যকরভাবে জাল ব্রেকআউটগুলি ফিল্টার করতে পারে।
ম্যাক্সিমিনফির গড়ের উপরে/নিচে দাম যোগ করা, ঘন ঘন ট্রেডিং এড়ানো।
ইন্ডেক্সের মাধ্যমে চলমান গড়রেখা ব্যবহার করা হয়, যা গড়রেখাকে সাম্প্রতিক মূল্য পরিবর্তনের প্রতি আরো সংবেদনশীল করে তোলে।
ত্রিভুজীয় অস্থির বাজারে, মিথ্যা সংকেত তৈরি হতে পারে, যার ফলে ক্ষতি হতে পারে। প্যারামিটারগুলি যথাযথভাবে সামঞ্জস্য করা যেতে পারে, সংকেতগুলি ফিল্টার করা যেতে পারে।
বড় ধরনের উড়োজাহাজের উড্ডয়নের ফলে সময়মত ভাণ্ডার তৈরি করা সম্ভব হবে না, প্রবেশের শর্তগুলি যথাযথভাবে শিথিল করা উচিত।
ভুল প্যারামিটার সেট করাও কৌশলটির কার্যকারিতাকে প্রভাবিত করতে পারে, প্যারামিটারগুলিকে অনুকূলিতকরণ পরীক্ষা করা উচিত।
দীর্ঘমেয়াদী হোল্ডিংয়ের সাথে জড়িত সিস্টেমিক ঝুঁকিগুলি সম্পর্কে সচেতন থাকুন এবং একটি স্টপ লস সেট করুন।
বিভিন্ন দৈর্ঘ্যের গড়রেখার পরামিতি পরীক্ষা করে দেখা যায় কোনটি বেশি উপযুক্ত।
কেডি, এমএসিডি ইত্যাদির মতো অন্যান্য প্রযুক্তিগত সূচক যুক্ত করা যেতে পারে, যা ক্রয়-বিক্রয় পয়েন্টের পছন্দকে অনুকূল করে তোলে।
ম্যাকগিনিফির গড়ের গণনাকে অপ্টিমাইজ করার জন্য, k এর মানগুলি বিভিন্ন জাত এবং বাজারের সাথে সামঞ্জস্য করা যেতে পারে।
একক ঝুঁকি নিয়ন্ত্রণ করতে অস্থিরতা সূচকগুলির সাথে একত্রে ডায়নামিকাল পজিশন সাইজিং করা যায়।
স্টপ লস পয়েন্ট সেট করা যেতে পারে ক্ষতির ঝুঁকি নিয়ন্ত্রণের জন্য, অথবা মুনাফা লক করার জন্য স্টপ লস মুভ করার জন্য পরীক্ষা করা যেতে পারে।
এই কৌশলটি ম্যাককিন অ-সমতুল্য সূচকের দ্রুত ট্র্যাকিং ক্ষমতা ব্যবহার করে, দামের ব্রেক মিডল লাইন গঠনের ট্রেডিং সিগন্যালের সাথে মিলিত হয়, যাতে প্রবণতা কার্যকরভাবে অনুসরণ করা যায় এবং প্রবণতা পরিবর্তিত হলে সময়মতো অবস্থান পরিবর্তন করা যায়। প্রচলিত দ্বি-সমতুল্য কৌশলগুলির তুলনায় এই কৌশলটি মূল্যের প্রবণতার পরিবর্তনগুলিকে আরও দ্রুত ক্যাপচার করতে পারে। তবে এই কৌশলটিও কিছু ঝুঁকি নিয়ে আসে, যার জন্য উপযুক্ত প্যারামিটার সংমিশ্রণ নির্ধারণের জন্য অপ্টিমাইজেশন পরীক্ষার প্রয়োজন।
/*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()