এই কৌশলটি প্রবণতা কার্যকরভাবে ট্র্যাক এবং বিপরীত করার জন্য চলমান গড় ক্রসওভার এবং গতির সূচকগুলিকে একত্রিত করে। এটি প্রথমে সোনার ক্রস দীর্ঘ সংকেত এবং মৃত্যুর ক্রস সংক্ষিপ্ত সংকেত উত্পন্ন করতে দ্রুত এবং ধীর চলমান গড় ব্যবহার করে। তারপরে নির্দিষ্ট পরামিতিগুলির গতির সূচকগুলির সাথে, যদি সোনার ক্রসের পরে দ্রুত এমএতে গতি আবার চালু হয় তবে প্রবণতা অব্যাহত বলে মনে করা হয় এবং দীর্ঘ অবস্থান বজায় থাকবে। যখন গতি কমে যায়, এটি প্রবণতা বিপরীত হিসাবে বিবেচিত হয় এবং বিদ্যমান অবস্থান বন্ধ হয়ে যাবে। একই যুক্তি প্রবণতা বিপরীত ট্র্যাকিংয়ের সময় মৃত্যুর ক্রস সংক্ষিপ্ত সংকেতগুলিতে প্রযোজ্য। এডিএক্স ফিল্টারটি প্রবণতা অবস্থায় না থাকলে ভুল সংকেতগুলি এড়াতেও ব্যবহৃত হয়।
এই কৌশলটির মূল যুক্তিটি এমএ ক্রসওভারের প্রবণতা সংকেত এবং গতির সূচকগুলির প্রবণতা বিপরীত সংকেতগুলির উপর ভিত্তি করে। মূল অংশগুলি হলঃ
দ্রুত এমএ মূল্য1 (5-period HMA) এবং ধীর এমএ মূল্য2 (7-period HMA) গণনা করুন।
মূল্য1 এর উপরে price2 অতিক্রম করলে গোল্ডেন ক্রস দীর্ঘ সংকেত উৎপন্ন করে। মূল্য1 এর নীচে price2 অতিক্রম করলে ডেথ ক্রস স্বল্প সংকেত উৎপন্ন করে। এটি এমএগুলির সাধারণ ব্যবহার।
লং সিগন্যালের পরে, যদি মূল্যের গতির রক1 আবার দেখা যায়, তবে প্রবণতা অব্যাহত বলে মনে করা হয় এবং লং পজিশন বজায় রাখা হবে।
যখন গতি roc1 হ্রাস পায়, এটি প্রবণতা বিপরীত হিসাবে বিবেচিত হয় এবং বিদ্যমান অবস্থান বন্ধ করা হবে। একই যুক্তি সংক্ষিপ্ত সংকেত প্রযোজ্য।
প্রবণতা অবস্থায় না থাকলে ভুল সংকেত এড়ানোর জন্য ADX থ্রেশহোল্ড চালু করুন। ADX থ্রেশহোল্ডের উপরে থাকলে কেবলমাত্র সংকেত তৈরি করা হয়।
সহজ এমএ কৌশলগুলির তুলনায়, এই কৌশলটির সবচেয়ে বড় সুবিধা হল প্রবণতা বিপরীতকরণগুলি আরও দ্রুত এবং সঠিকভাবে নির্ধারণের জন্য গতির সূচকগুলি প্রবর্তন করা। নির্দিষ্ট সুবিধাঃ
এমএগুলি মূল্যের পরিবর্তনে বিলম্ব করে, যখন গতির সূচকগুলি সময়মত স্টপ লস বা বিপরীত ট্রেডিংয়ের জন্য দ্রুত বিপরীত সংকেতগুলি ধরতে পারে।
প্রবণতা ট্রেডিংয়ের সময় অপ্রয়োজনীয় ওপেন/ক্লোজ অর্ডার এড়ানোর জন্য গতির উপর ভিত্তি করে বিপরীত সংকেতগুলি আরও নির্ভরযোগ্য।
এডিএক্স ট্রেন্ডিং না হওয়া বাজারগুলিতে ভুল সংকেত এড়ায়, কৌশলটি উচ্চতর বিজয়ী সম্ভাবনা সহ প্রবণতাগুলিতে আরও মনোনিবেশ করে।
যুক্তিটি সহজ এবং সহজেই বোঝা যায়, অ্যালগো ট্রেডিংয়ের নতুনদের জন্য উপযুক্ত।
বিভিন্ন বাজারের জন্য এমএ সময়কাল, গতির পরামিতি ইত্যাদি সামঞ্জস্য করে অপ্টিমাইজেশনের বড় জায়গা।
এই কৌশলটির প্রধান ঝুঁকিগুলি নিম্নলিখিত থেকে আসেঃ
এমএ-র বিলম্বিত প্রকৃতি, যা বিলম্বিত সংকেত সৃষ্টি করতে পারে, সেরা এন্ট্রি পয়েন্টগুলি মিস করে।
ভুল ব্রেকআউট অপ্রয়োজনীয় প্রবেশ বা প্রস্থান সৃষ্টি করে। পরামিতি বা অতিরিক্ত ফিল্টার আরও অপ্টিমাইজেশান প্রয়োজন।
প্রবণতা বিপরীত সনাক্তকরণ গতির উপর নির্ভর করে, যা বিপুল বাজারের ওঠানামা চলাকালীন অস্থির হতে পারে।
ADX প্রবণতা এবং সংহতকরণ সনাক্ত করতে অসম্পূর্ণ। ভুল থ্রেশহোল্ড সেটিংস সমস্যার কারণ হতে পারে।
ট্রেডিংয়ের খরচ বিবেচনা করা হয় না। বাস্তব ট্রেডিংয়ে প্রয়োগ করার সময় সঠিক স্টপ লস সেট করা উচিত।
কৌশলটি নিম্নলিখিত দিকগুলিতে আরও অনুকূলিত করা যেতে পারেঃ
আরও ভাল মসৃণ প্রভাবের জন্য অন্য ধরনের এমএ ব্যবহার করুন বা এমএ পরামিতিগুলি সামঞ্জস্য করুন।
দামের বিপরীতমুখী অবস্থার জন্য উচ্চ সংবেদনশীলতার জন্য গতির সূচকের দৈর্ঘ্য অনুকূল করুন।
স্বল্পমেয়াদী ওঠানামা দ্বারা বিভ্রান্ত না হওয়ার জন্য গতি বিপরীত হলে মূল্য ফিল্টার সেট করুন।
বিভিন্ন ADX স্তরে বিভিন্ন পরামিতি ব্যবহার করে ADX ব্যবহার উন্নত করুন।
সিগন্যালের গুণমান উন্নত করতে এবং মিথ্যা ব্রেকআউট ফিল্টার করতে ভলিউম ইন্ডিকেটর ইত্যাদি প্রবর্তন করুন।
একক বাণিজ্য ক্ষতি নিয়ন্ত্রণের জন্য স্টপ লস প্রক্রিয়া যোগ করুন। সঠিক মুনাফা লক্ষ্যমাত্রা এবং স্টপ লস সেট করার জন্য বাস্তবসম্মত ট্রেডিং খরচ মূল্যায়ন করুন।
এই কৌশলটি প্রবণতা ট্র্যাক এবং বিপরীত ক্যাপচার করার জন্য এমএ এবং গতির সূচকগুলির সুবিধাগুলিকে একত্রিত করে। বিশুদ্ধ প্রবণতা অনুসরণকারী কৌশলগুলির তুলনায়, এটি প্রবণতা ট্রেডিং বজায় রেখে প্রবণতা চূড়ান্ত থেকে ক্ষতি এড়াতে বিভিন্ন বাজারের পর্যায়ে মোকাবেলায় আরও নমনীয় হতে পারে। পরামিতি অপ্টিমাইজেশান এবং সহায়ক শর্ত প্রবর্তনের মাধ্যমে আরও উন্নতি করা যেতে পারে। সামগ্রিকভাবে বলতে গেলে, কৌশলটির স্পষ্ট এবং সহজ যুক্তি রয়েছে, যা আলগো ট্রেডিংয়ের নতুনদের শেখার এবং প্রয়োগের জন্য খুব উপযুক্ত।
/*backtest start: 2023-09-23 00:00:00 end: 2023-10-23 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //study(title="MA Crossover Strategy", overlay = true) strategy("MA Crossover Strategy with MA Turning Point Exits", overlay=true) src = input(open, title="Source") price = request.security(syminfo.tickerid, timeframe.period, src) ma1 = input(5, title="1st MA Length") type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA"]) ma2 = input(7, title="2nd MA Length") type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA"]) adxlen = input(14, title="ADX Smoothing") dilen = input(14, title="DI Length") adxthreshold = input(20, title="ADX threshold") dirmov(len) => up = change(high) down = -change(low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) truerange = rma(tr, len) plus = fixnan(100 * rma(plusDM, len) / truerange) minus = fixnan(100 * rma(minusDM, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) sig = adx(dilen, adxlen) //study("Average Directional Index", shorttitle="ADX", format=format.price, precision=2, resolution="") //plot(sig, color=color.red, title="ADX") 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 f_hma(price, ma1) price2 = if (type2 == "SMA") sma(price, ma2) else if (type2 == "EMA") ema(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 = price1> price2 longCondition = price1> price2 and sig > adxthreshold if (longCondition) strategy.entry("Long", strategy.long) shortCondition = price1 < price2 and sig > adxthreshold if (shortCondition) strategy.entry("Short", strategy.short) lookback1 = input(1, "Lookback 1") roc1 = roc(price1, lookback1) ma1up = false ma1down = false ma2up = false ma2down = false ma1up := nz(ma1up[1]) ma1down := nz(ma1down[1]) ma2up := nz(ma2up[1]) ma2down := nz(ma2down[1]) trendStrength1 = input(2, title="Minimum slope magnitude * 100", type=float) * 0.01 if crossover(roc1, trendStrength1) ma1up := true ma1down := false if crossunder(roc1, -trendStrength1) ma1up := false ma1down := true shortexitCondition = ma1up and ma1down[1] and sig > adxthreshold if (shortexitCondition) strategy.close("Short") longexitCondition = ma1down and ma1up[1] and sig > adxthreshold if (longexitCondition) strategy.close("Long")