এই কৌশলটি এমএসিডি সূচকের দ্রুত রেখা এবং ধীর রেখার ক্রসওভার তুলনা করে ক্রয় এবং বিক্রয় সংকেত তৈরি করে। যখন একটি ক্রয় সংকেত তৈরি হয়, এটি অ্যাকাউন্ট ইক্যুইটির একটি নির্দিষ্ট শতাংশ সহ একটি অবস্থান খুলবে। তারপরে নির্দিষ্ট পুনরুদ্ধার পয়েন্টে অতিরিক্ত অবস্থান যুক্ত করা হবে। যখন অবস্থানের সমষ্টিগত মুনাফা কনফিগার করা লাভের পয়েন্টে পৌঁছে যায়, তখন সমস্ত অবস্থান বন্ধ হয়ে যাবে। বিক্রয় সংকেতের যুক্তি ক্রয় সংকেতের অনুরূপ।
এই কৌশলটির মূল যুক্তি হ'ল প্রবণতা নির্ধারণের জন্য এমএসিডি দ্রুত লাইন এবং ধীর লাইনের ক্রসওভার তুলনা করা। এমএসিডি হ'ল চলমান গড়ের মধ্যে পার্থক্য, স্বল্পমেয়াদী এবং দীর্ঘমেয়াদী চলমান গড়ের মধ্যে পার্থক্য গণনা করে এটি বাজারের প্রবণতা এবং গতি বিচার করে। দ্রুত লাইন এবং ধীর লাইনের মধ্যে ক্রসওভারকে সোনার ক্রস এবং মৃত্যুর ক্রস হিসাবে বিবেচনা করা হয়।
যখন দ্রুত রেখা ধীর রেখার উপরে অতিক্রম করে, তখন একটি গোল্ডেন ক্রস তৈরি হয়, যা নির্দেশ করে যে বাজারটি একটি ঊর্ধ্বমুখী প্রবণতায় রয়েছে এবং কৌশলটি দীর্ঘ অবস্থান খুলবে। যখন দ্রুত রেখা ধীর রেখার নীচে অতিক্রম করে, তখন একটি মৃত্যু ক্রস তৈরি হয়, যা একটি নিম্নমুখী প্রবণতা নির্দেশ করে এবং কৌশলটি শর্ট অবস্থান খুলবে।
পজিশন খোলার পরে, কৌশলটি নির্দিষ্ট পুনরুদ্ধার পয়েন্টগুলিতে বিদ্যমান দীর্ঘ বা সংক্ষিপ্ত অবস্থানগুলিতে যুক্ত হবে। এটি মার্টিনগেল নীতির মাধ্যমে লাভের সম্ভাবনা বাড়িয়ে তুলতে পারে। যখন জমে থাকা লাভটি কনফিগার করা লাভের পয়েন্টে পৌঁছে যায়, তখন কৌশলটি সমস্ত অবস্থান বন্ধ করবে।
এই কৌশল নিম্নলিখিত সুবিধাগুলি আছেঃ
বাজারের প্রবণতা নির্ধারণের জন্য MACD সূচক ব্যবহার করে, যা একটি ক্লাসিক এবং নির্ভরযোগ্য প্রযুক্তিগত বিশ্লেষণ সূচক।
ব্যাচে পজিশন খোলার পদ্ধতি গ্রহণ করে, যা একটি একক ব্যবসায়ের ঝুঁকি নিয়ন্ত্রণ করতে পারে।
মার্টিনগেল নীতির মাধ্যমে পজিশনের যোগফল লাভের সম্ভাবনা বাড়িয়ে তুলতে পারে।
ক্ষতি সীমিত করার জন্য মুনাফা পয়েন্ট কনফিগার করা।
এই কৌশলটির কিছু ঝুঁকিও রয়েছেঃ
এমএসিডি সূচক বাজারের গতিবিধি পুরোপুরি পূর্বাভাস দিতে পারে না, মিথ্যা সংকেত দেখা দিতে পারে।
সম্পূর্ণ পজিশন যোগ করার সাথে সাথে পুনর্নির্মাণের ঝুঁকি রয়েছে। প্রতিটি যোগ করা পজিশনের শতাংশকে যথাযথভাবে সামঞ্জস্য করতে পারে।
খুব কম লাভের পয়েন্ট সেট করা লাভের সম্ভাবনাকে সীমাবদ্ধ করতে পারে। বিভিন্ন পণ্যের জন্য সামঞ্জস্য করতে পারে।
অ্যাকাউন্টের সীমা অতিক্রম করা এড়াতে পণ্য প্রতি পজিশন খোলার জন্য মূলধনের যুক্তিসঙ্গত শতাংশ কনফিগার করা প্রয়োজন।
এই কৌশলটি নিম্নলিখিত দিকগুলিতে অনুকূলিত করা যেতে পারেঃ
ম্যাকডি পরামিতি পরীক্ষা করুন, নির্দিষ্ট ট্রেডিং পণ্যের জন্য উপযুক্ত পরামিতি খুঁজুন।
প্রতিটি যোগ করা পজিশনের জন্য অর্থ শতাংশ এবং পুনর্নির্মাণ শতাংশ অনুকূল করুন, সর্বোত্তম পরামিতি সমন্বয় খুঁজে।
সর্বোত্তম মাত্রা নির্ধারণের জন্য দীর্ঘমেয়াদী এবং স্বল্পমেয়াদী লাভের পয়েন্ট পরীক্ষা করুন।
অ্যাকাউন্টের মার্জিন ক্ষমতা মূল্যায়ন করুন, পণ্য প্রতি যুক্তিসঙ্গত সর্বোচ্চ অবস্থান সীমা সেট করুন।
স্টপ লস লজিক যোগ করুন। স্টপ লস বাজারে মারাত্মক পরিবর্তন হলে ক্ষতি কার্যকরভাবে নিয়ন্ত্রণ করতে পারে।
সংক্ষেপে, এটি একটি সাধারণ প্রবণতা অনুসরণকারী কৌশল। এটি বাজারের প্রবণতার দিকনির্দেশ নির্ধারণের জন্য এমএসিডি সূচক ব্যবহার করে, প্রবণতা অনুসরণ করার জন্য ব্যাচে অবস্থান যোগ করার পদ্ধতি গ্রহণ করে এবং জমা লাভের একটি নির্দিষ্ট স্তরে পৌঁছলে মুনাফা নেয়। এই সহজ এবং ব্যবহারিক কৌশলটি বাস্তবায়ন করা সহজ এবং পরিমাণগত ট্রেডিং নতুনদের জন্য উপযুক্ত। পরামিতিগুলি অনুকূলিতকরণ এবং ঝুঁকি নিয়ন্ত্রণ যুক্তি প্রসারিত করে কৌশলটি আরও শক্তিশালী হতে পারে।
/*backtest start: 2023-11-26 00:00:00 end: 2023-12-26 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/ // © TradingSoft_tech //@version=5 strategy("MAPM-V1", overlay=true, default_qty_value=10, max_bars_back=5000,default_qty_type = strategy.percent_of_equity, commission_value=0.1, initial_capital = 100, pyramiding=6, currency=currency.USD) ///////// Options SignalFast = input.int(300, step=10) SignalSlow = input.int(600, step=10) StepAddPurchases = input.float(2.5, step=0.1) VolumePurchases = input.int(6,step=1) Buy = input(true) Sell = input(true) longProfitPerc = input.float(title="Long Take Profit (%)", minval=0.0, step=0.1, defval=1) * 0.01 shortProfitPerc = input.float(title="Short Take Profit (%)", minval=0.0, step=0.1, defval=1) * 0.01 Martingale = input.float(1.6, minval = 1, step = 0.1) VolumeDepo = input.int(100, step=1) PercentOfDepo = input.float(10, step=1) Close = (close) EnterVolume = VolumeDepo*PercentOfDepo*0.01/Close ///////// Calculation indicator fastAverage = ta.ema(close, 8) slowAverage = ta.ema(close, 49) macd = fastAverage - slowAverage macdSignalF = ta.ema(macd,SignalFast) macdSignalS = ta.ema(macd,SignalSlow) // Test Start startYear = input(2005, "Test Start Year") startMonth = input(1, "Test Start Month") startDay = input(1, "Test Start Day") startTest = timestamp(startYear,startMonth,startDay,0,0) //Test End endYear = input(2050, "Test End Year") endMonth = input(12, "Test End Month") endDay = input(30, "Test End Day") endTest = timestamp(endYear,endMonth,endDay,23,59) timeRange = time > startTest and time < endTest ? true : false ///////// Plot Data //plot(macd, style = plot.style_histogram) //plot(macdSignalF*10000, style = plot.style_line, color=color.red) //plot(macdSignalS*10000, style = plot.style_line, color=color.blue) //plot(fastAverage, style = plot.style_line, color=color.red) //plot(slowAverage, style = plot.style_line, color=color.blue) ///////// Calculation of the updated value var x = 0.0 if strategy.opentrades>strategy.opentrades[1] x := x + 1 else if strategy.opentrades==0 x := 0 y = x+1 ///////// Calculation of reference price data entryPrice = strategy.opentrades==0? 0 : strategy.opentrades.entry_price(0) limitLong = strategy.position_avg_price * (1 + longProfitPerc) limitShort = strategy.position_avg_price * (1 - shortProfitPerc) SteplimitLong = entryPrice[0]*(1-StepAddPurchases*y/100) SteplimitShort = entryPrice[0]*(1+StepAddPurchases*y/100) ///////// Conditions for a long bool EntryLong = ta.crossover(macdSignalF, macdSignalS) and Buy and strategy.opentrades==0 and strategy.position_size==0 bool PurchasesLong = Buy and strategy.opentrades==x and strategy.position_size>0 and x<=VolumePurchases bool CancelPurchasesLong = strategy.position_size==0 and strategy.opentrades==0 bool TPLong = strategy.position_size>0 and strategy.opentrades!=0 ///////// Entry Long + add.purchases + cancel purchases + Take profit Long switch EntryLong => strategy.entry("Entry Long", strategy.long, qty = EnterVolume) PurchasesLong => strategy.entry("PurchasesLong", strategy.long, qty = EnterVolume*math.pow(Martingale,y), limit = SteplimitLong) CancelPurchasesLong => strategy.cancel("PurchasesLong") switch TPLong => strategy.exit("TPLong", qty_percent = 100, limit = limitLong) ///////// Conditions for a Short bool EntryShort = ta.crossunder(macdSignalF, macdSignalS) and Sell and strategy.opentrades==0 and strategy.position_size==0 bool PurchasesShort = Sell and strategy.opentrades==x and strategy.position_size<0 and x<=VolumePurchases bool CancelPurchasesShort = strategy.position_size==0 and strategy.opentrades==0 bool TPShort = strategy.position_size<0 and strategy.opentrades!=0 ///////// Entry Short + add.purchases + cancel purchases + Take profit Short switch EntryShort => strategy.entry("Entry Short", strategy.short, qty = EnterVolume) PurchasesShort => strategy.entry("PurchasesShort", strategy.short, qty = EnterVolume*math.pow(Martingale,y), limit = SteplimitShort) CancelPurchasesShort => strategy.cancel("PurchasesShort") switch TPShort => strategy.exit("TPShort", qty_percent = 100, limit = limitShort) /////////Calculation of conditions and reference data for level drawing InTradeLong = strategy.position_size<0 InTradeShort = strategy.position_size>0 PickInLong = strategy.opentrades.entry_price(0)*(1-StepAddPurchases*y/100) PickInShort = strategy.opentrades.entry_price(0)*(1+StepAddPurchases*y/100) /////////Displaying the level of Take Profit plot(InTradeLong ? na : limitLong, color=color.new(#00d146, 0), style=plot.style_linebr, linewidth=1) plot(InTradeShort ? na : limitShort, color=color.new(#00d146, 0), style=plot.style_linebr, linewidth=1) /////////Displaying the level of add.purchases plot(InTradeLong ? na : PickInLong, color=color.white, style=plot.style_linebr, linewidth=1) plot(InTradeShort ? na : PickInShort, color=color.white, style=plot.style_linebr, linewidth=1)