এই কৌশলটি বিভিন্ন ধরণের চলমান গড় (সহজ চলমান গড় এসএমএ, এক্সপোনেনশিয়াল চলমান গড় ইএমএ, হাল্ল চলমান গড় এইচএমএ এবং ওয়েটেড চলমান গড় ভিডাব্লুএমএ) গণনা করে এবং তাদের মধ্যে ক্রসওভার পয়েন্টগুলি সনাক্ত করে, বাজারের প্রবণতা নির্ধারণ এবং অনুসরণ করার জন্য ট্রেডিং সংকেত উত্পন্ন করে। এটি যখন স্বল্পমেয়াদী এমএ নীচে থেকে দীর্ঘমেয়াদী এমএ এর উপরে ক্রস করে তখন এটি কিনতে সংকেত উত্পন্ন করে এবং বিপরীত ক্রসিং ঘটে তখন সংকেত বিক্রি করে।
এই কৌশলটির মূল ধারণা হল দুটি চলমান গড়ের তুলনা করে বাজারের প্রবণতা বিচার করা। বিশেষত, এটি ইনপুট পরামিতিগুলির মাধ্যমে বিভিন্ন ধরণের এবং দৈর্ঘ্যের দুটি এমএ কনফিগার করার অনুমতি দেয়। প্রথম এমএতে প্রধান প্রবণতা উপস্থাপন করার জন্য একটি দীর্ঘ সময়কাল রয়েছে, যখন দ্বিতীয় এমএতে বর্তমান স্বল্পমেয়াদী প্রবণতার জন্য একটি ছোট সময়কাল রয়েছে।
যখন স্বল্পমেয়াদী এমএ নীচে থেকে দীর্ঘমেয়াদী এমএ অতিক্রম করে, তখন এটি সংকেত দেয় যে স্বল্পমেয়াদী প্রবণতা শক্তিশালী হচ্ছে এবং বাজার একটি ঊর্ধ্বমুখী প্রবণতায় প্রবেশ করছে। সুতরাং এই ক্রসওভার পয়েন্টে একটি ক্রয় সংকেত উত্পন্ন হয়। বিপরীতভাবে, যখন স্বল্পমেয়াদী এমএ দীর্ঘমেয়াদী এমএ এর নীচে অতিক্রম করে, তখন এটি সংক্ষিপ্ত মেয়াদী প্রবণতা দুর্বল হচ্ছে এবং বাজারটি নেমে যাচ্ছে। সেই অনুযায়ী, একটি বিক্রয় সংকেত উত্পন্ন হয়।
এই ধরনের এমএ ক্রসওভারগুলি সনাক্ত করে, এই কৌশলটি বাজারের ট্রেডিংয়ের প্রবণতা অনুসরণ করে।
সমাধান:
এই কৌশলটি প্রধান প্রবণতা সনাক্তকরণের জন্য এমএ ক্রসওভার ব্যবহারের ক্লাসিক ধারণার উপর ভিত্তি করে। নমনীয় এমএ সংমিশ্রণের সাথে এটি বাস্তবায়ন করা সহজ এবং অ্যালগরিদমিক ট্রেডিং অটোমেশনের জন্য উপযুক্ত। সামগ্রিকভাবে এটি যুক্তিসঙ্গতভাবে ব্যবহারিক তবে পারফরম্যান্স আরও উন্নত করতে প্যারামিটার টিউনিং, অতিরিক্ত ফিল্টার ইত্যাদির মতো বর্ধনের জন্য জায়গা ছেড়ে দেয়।
/*backtest start: 2023-12-31 00:00:00 end: 2024-01-30 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //study(title="MA Crossover Strategy", overlay = true) strategy("MA Crossover Strategy", overlay=true) src = input(close, title="Source") price = request.security(syminfo.tickerid, timeframe.period, src) ma1 = input(25, title="1st MA Length") type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA", "VWMA"]) ma2 = input(7, title="2nd MA Length") type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA", "VWMA"]) f_hma(_src, _length)=> _return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length))) price1 = if (type1 == "SMA") sma(price, ma1) else if (type1 == "EMA") ema(price, ma1) else if (type1 == "VWMA") vwma(price, ma1) else f_hma(price, ma1) price2 = if (type2 == "SMA") sma(price, ma2) else if (type2 == "EMA") ema(price, ma2) else if (type2 == "VWMA") vwma(price, ma2) else f_hma(price, ma2) //plot(series=price, style=line, title="Price", color=black, linewidth=1, transp=0) plot(series=price1, style=line, title="1st MA", color=blue, linewidth=2, transp=0) plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0) longCondition = crossover(price1, price2) if (longCondition) strategy.entry("Long", strategy.long) shortCondition = crossunder(price1, price2) if (shortCondition) strategy.entry("Short", strategy.short)