এটি একাধিক এক্সপোনেনশিয়াল মুভিং এভারেজ (ইএমএ) এবং কমোডিটি চ্যানেল সূচক (সিসিআই) এর উপর ভিত্তি করে একটি প্রবণতা অনুসরণকারী কৌশল। কৌশলটি সম্ভাব্য প্রবণতা পরিবর্তনগুলি সনাক্ত করতে একাধিক সময়কালের ইএমএ ক্রসওভারগুলি ব্যবহার করে, সিসিআই সূচকের সাথে মিলিত হয়ে ওভারকপ বা ওভারসোল্ড মার্কেট শর্তগুলি নিশ্চিত করে, যার ফলে এন্ট্রি টাইমিংয়ের নির্ভুলতা উন্নত হয়। কৌশলটিতে ঝুঁকি পরিচালনা এবং মুনাফা লক করার জন্য সময় এবং মূল্যের উপর ভিত্তি করে গতিশীল লাভ গ্রহণ এবং স্টপ-লস প্রক্রিয়াও অন্তর্ভুক্ত রয়েছে।
কৌশলটি মূলত নিম্নলিখিত মূল উপাদানগুলির উপর ভিত্তি করেঃ
একাধিক ইএমএ ক্রসওভারঃ ৮, ১২, ২৪ এবং ৭২-পরিয়ালের ইএমএ ব্যবহার করে। যখন স্বল্প-পরিয়ালের ইএমএ (৮, ১২, ২৪) একই সাথে ৭২-পরিয়ালের ইএমএ এর উপরে অতিক্রম করে, তখন এটি একটি সম্ভাব্য দীর্ঘ সংকেত হিসাবে বিবেচিত হয়; সংক্ষিপ্ত সংকেতগুলির জন্য বিপরীত সত্য।
সিসিআই সূচক নিশ্চিতকরণঃ সিসিআই সূচকটি ২০ পেরিওড ব্যবহার করে, যখন সিসিআই ১৫০ এর উপরে থাকে তখন অতিরিক্ত ক্রয়ের শর্ত এবং -১৫০ এর নিচে থাকলে অতিরিক্ত বিক্রয়ের শর্ত নিশ্চিত করে।
প্রবেশের শর্ত:
ডায়নামিক টেক-ওফট এবং স্টপ-লসঃ
পজিশন ম্যানেজমেন্টঃ কৌশলটি সম্পূর্ণ পজিশন ট্রেডিং ব্যবহার করে, ট্রেডিংয়ের জন্য 100% অ্যাকাউন্টের তহবিল ব্যবহার করে।
মাল্টিপল কনফার্মেশন মেকানিজমঃ একাধিক ইএমএ ক্রসওভার এবং সিসিআই সূচকের সংমিশ্রণটি ভুয়া সংকেতগুলির প্রভাবকে কার্যকরভাবে হ্রাস করে, প্রবেশের নির্ভুলতা উন্নত করে।
নমনীয় প্রবেশ প্রক্রিয়াঃ কৌশলটি বিভিন্ন বাজারের পরিবেশের সাথে খাপ খাইয়ে নেওয়ার জন্য এককালীন ক্রসওভার এবং একটি সময়ের উইন্ডোর মধ্যে ক্রসওভার উভয়ই বিবেচনা করে।
ডায়নামিক রিস্ক ম্যানেজমেন্টঃ বিভিন্ন এন্ট্রি মোড, আরও ভাল ভারসাম্যপূর্ণ রিটার্ন এবং ঝুঁকিগুলির উপর ভিত্তি করে বিভিন্ন লাভ-লাভ এবং স্টপ-লস অনুপাত নির্ধারণ করা হয়।
প্রবণতা অনুসরণ করার ক্ষমতাঃ মাঝারি থেকে দীর্ঘমেয়াদী প্রবণতা পরিবর্তনগুলি কার্যকরভাবে ক্যাপচার করার জন্য একাধিক ইএমএ ক্রসওভার ব্যবহার করে।
অস্থির বাজারকে ফিল্টার করাঃ সিসিআই সূচকের অতিরিক্ত ক্রয় এবং অতিরিক্ত বিক্রয়ের সিদ্ধান্তগুলি পার্শ্ববর্তী, অস্থির বাজারে ঘন ঘন ট্রেডিং এড়াতে সহায়তা করে।
বিলম্বঃ ইএমএ এবং সিসিআই উভয়ই বিলম্বিত সূচক, যা অস্থির বাজারে যথেষ্ট দ্রুত প্রতিক্রিয়া জানাতে পারে না।
ঘন ঘন ট্রেডিংঃ অস্থির বাজারে, এটি অনেক মিথ্যা ব্রেকআউট সংকেত তৈরি করতে পারে, যার ফলে ঘন ঘন ট্রেডিং এবং লেনদেনের ব্যয় বৃদ্ধি পায়।
পূর্ণ পজিশন ঝুঁকিঃ ১০০% পজিশন ট্রেডিং ব্যবহারে উল্লেখযোগ্য ড্রাউনডাউন ঝুঁকি থাকতে পারে।
স্থির শতাংশ স্টপ লসঃ অত্যন্ত অস্থির বাজারে, স্থির শতাংশ স্টপ লসগুলি অনুকূল প্রবণতা খুব তাড়াতাড়ি ছেড়ে যেতে পারে।
ঐতিহাসিক তথ্যের উপর নির্ভরশীলতাঃ ভবিষ্যতে বাজারের অবস্থার পরিবর্তন হলে কৌশল কর্মক্ষমতা ঐতিহাসিক তথ্য দ্বারা প্রভাবিত হতে পারে এবং পরামিতি পুনরায় অপ্টিমাইজেশান প্রয়োজন হতে পারে।
বাজারের অস্থিরতার উপর ভিত্তি করে লাভ এবং স্টপ-লস স্তরগুলি সামঞ্জস্য করার জন্য, বিভিন্ন বাজারের পরিবেশে অভিযোজিত করার জন্য ATR (গড় সত্য পরিসীমা) সূচক যুক্ত করার বিষয়টি বিবেচনা করুন।
পজিশন ম্যানেজমেন্টের অপ্টিমাইজেশানঃ ট্রেন্ড শক্তি এবং অ্যাকাউন্ট ঝুঁকি সহনশীলতার ভিত্তিতে পজিশন আকার সামঞ্জস্য করার জন্য গতিশীল পজিশন ম্যানেজমেন্ট প্রক্রিয়া চালু করা।
ফিল্টারিং শর্তাদি যোগ করুন: ট্রেডিং সংকেতগুলি আরও ফিল্টার করতে এবং জয়ের হার উন্নত করতে ভলিউম এবং প্রবণতার শক্তির মতো সূচক যুক্ত করার বিষয়টি বিবেচনা করুন।
প্যারামিটার অপ্টিমাইজেশানঃ বিভিন্ন বাজারের পরিবেশে কৌশল অভিযোজনযোগ্যতা উন্নত করতে EMA সময়কাল এবং CCI প্রান্তিকের মতো প্যারামিটারগুলি অপ্টিমাইজ করার জন্য জেনেটিক অ্যালগরিদম বা গ্রিড অনুসন্ধান পদ্ধতি ব্যবহার করুন।
মার্কেট রিজিম রিকগনিশন যোগ করুনঃ বিভিন্ন মার্কেট স্টেটের ভিত্তিতে কৌশল পরামিতিগুলি সামঞ্জস্য করতে বা ট্রেডিং বন্ধ করার জন্য একটি মার্কেট স্টেট (ট্রেন্ড, অস্থির, উচ্চ অস্থিরতা) স্বীকৃতি মডিউল বিকাশ করুন।
মাল্টি-ইএমএ এবং সিসিআই ক্রসওভার ট্রেন্ড অনুসরণ কৌশল একটি পরিমাণগত ট্রেডিং সিস্টেম যা প্রযুক্তিগত বিশ্লেষণকে গতিশীল ঝুঁকি ব্যবস্থাপনার সাথে একত্রিত করে। একাধিক ইএমএ ক্রসওভার এবং সিসিআই সূচকের সংমিশ্রণের মাধ্যমে, এই কৌশলটি নমনীয় এন্ট্রি প্রক্রিয়া এবং গতিশীল লাভ এবং স্টপ-লস সেটিংসের মাধ্যমে ঝুঁকি পরিচালনার সময় কার্যকরভাবে বাজারের প্রবণতা ক্যাপচার করতে পারে। যদিও কৌশলটির কিছু অন্তর্নিহিত ঝুঁকি রয়েছে, যেমন পূর্ণ অবস্থান ট্রেডিং থেকে বিলম্ব এবং সম্ভাব্য উচ্চ ড্রডাউন, এটি আরও অপ্টিমাইজেশন এবং উন্নতির মাধ্যমে স্থিতিশীলতা এবং অভিযোজনযোগ্যতা উল্লেখযোগ্যভাবে উন্নত করতে পারে, যেমন অস্থিরতা সমন্বয়, গতিশীল অবস্থান ব্যবস্থাপনা এবং বাজার স্বীকৃতি প্রবর্তন। সামগ্রিকভাবে, এটি একটি শক্তিশালী ভিত্তি এবং বিভিন্ন বাজারের পরিবেশে স্থিতিশীল রিটার্ন উত্পন্ন করার সম্ভাবনা সহ একটি কৌশল কাঠামো।
/*backtest start: 2019-12-23 08:00:00 end: 2024-09-24 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("EMA & CCI Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // Параметры EMA ema8_length = 8 ema12_length = 12 ema24_length = 24 ema72_length = 72 // Расчет EMA ema8 = ta.ema(close, ema8_length) ema12 = ta.ema(close, ema12_length) ema24 = ta.ema(close, ema24_length) ema72 = ta.ema(close, ema72_length) // Параметры CCI cci_length = 20 cci_overbought = 150 cci_oversold = -150 // Параметры тейк-профита и стоп-лосса takeProfitPercent = input.float(1.5, title="Take Profit (%)", step=0.1) stopLossPercent = input.float(0.5, title="Stop Loss (%)", step=0.1) takeProfitPercentTime = input.float(0.5, title="Take Profit (%) for Time-based", step=0.1) stopLossPercentTime = input.float(0.2, title="Stop Loss (%) for Time-based", step=0.1) max_wait_bars = input.float(2, title="Max wait candles", step=1) // Расчет CCI cci = ta.cci(close, cci_length) // Состояние открытой позиции sz = strategy.position_size // Флаги для отслеживания пересечений EMA вверх var int ema8_cross_index_up = na var int ema12_cross_index_up = na var int ema24_cross_index_up = na // Флаги для отслеживания пересечений EMA вниз var int ema8_cross_index_down = na var int ema12_cross_index_down = na var int ema24_cross_index_down = na // Проверка пересечения EMA с 72 вверх и обновление индекса пересечения if (ta.crossover(ema8, ema72)) ema8_cross_index_up := bar_index if (ta.crossover(ema12, ema72)) ema12_cross_index_up := bar_index if (ta.crossover(ema24, ema72)) ema24_cross_index_up := bar_index // Проверка пересечений EMA вниз и обновление индекса пересечения if (ta.crossunder(ema8, ema72)) ema8_cross_index_down := bar_index if (ta.crossunder(ema12, ema72)) ema12_cross_index_down := bar_index if (ta.crossunder(ema24, ema72)) ema24_cross_index_down := bar_index // Условия пересечения за одну свечу (лонг и шорт) cross_condition_one_candle_long = (na(ema8_cross_index_up) == false and (bar_index - ema8_cross_index_up) == 0) and (na(ema12_cross_index_up) == false and (bar_index - ema12_cross_index_up) == 0) and (na(ema24_cross_index_up) == false and (bar_index - ema24_cross_index_up) == 0) cross_condition_one_candle_short = (na(ema8_cross_index_down) == false and (bar_index - ema8_cross_index_down) == 0) and (na(ema12_cross_index_down) == false and (bar_index - ema12_cross_index_down) == 0) and (na(ema24_cross_index_down) == false and (bar_index - ema24_cross_index_down) == 0) // Условия пересечения в течение указанного времени (лонг и шорт) cross_condition_within_time_long = (not na(ema8_cross_index_up) and (bar_index - ema8_cross_index_up) <= max_wait_bars) and (not na(ema12_cross_index_up) and (bar_index - ema12_cross_index_up) <= max_wait_bars) and (not na(ema24_cross_index_up) and (bar_index - ema24_cross_index_up) <= max_wait_bars) cross_condition_within_time_short = (not na(ema8_cross_index_down) and (bar_index - ema8_cross_index_down) <= max_wait_bars) and (not na(ema12_cross_index_down) and (bar_index - ema12_cross_index_down) <= max_wait_bars) and (not na(ema24_cross_index_down) and (bar_index - ema24_cross_index_down) <= max_wait_bars) // Условие для открытия лонга long_condition_one = cross_condition_one_candle_long and cci > cci_overbought and close > ema72 long_condition_time = cross_condition_within_time_long and cci > cci_overbought and close > ema72 // Условие для открытия шорта short_condition_one = cross_condition_one_candle_short and cci < cci_oversold and close < ema72 short_condition_time = cross_condition_within_time_short and cci < cci_oversold and close < ema72 // Вход в лонг if (long_condition_one and sz == 0) strategy.entry(id='Long_one', direction=strategy.long) if (long_condition_time and sz == 0) strategy.entry(id='Long_time', direction=strategy.long) // Вход в шорт if (short_condition_one and sz == 0) strategy.entry(id='Short_one', direction=strategy.short) if (short_condition_time and sz == 0) strategy.entry(id='Short_time', direction=strategy.short) // Вычисление цен тейк-профита и стоп-лосса для лонга if (sz > 0 and strategy.opentrades.entry_id(0) == 'Long_one') entryPriceLong = strategy.opentrades.entry_price(0) takeProfitPriceLong = entryPriceLong * (1 + takeProfitPercent / 100) stopLossPriceLong = entryPriceLong * (1 - stopLossPercent / 100) strategy.exit("Close long one", "Long_one", limit=takeProfitPriceLong, stop=stopLossPriceLong) ema8_cross_index_up := na ema12_cross_index_up := na ema24_cross_index_up := na if (sz > 0 and strategy.opentrades.entry_id(0) == 'Long_time') entryPriceLongTime = strategy.opentrades.entry_price(0) takeProfitPriceLongTime = entryPriceLongTime * (1 + takeProfitPercentTime / 100) stopLossPriceLongTime = entryPriceLongTime * (1 - stopLossPercentTime / 100) strategy.exit("Close long time", "Long_time", limit=takeProfitPriceLongTime, stop=stopLossPriceLongTime) ema8_cross_index_up := na ema12_cross_index_up := na ema24_cross_index_up := na // Вычисление цен тейк-профита и стоп-лосса для шорта if (sz < 0 and strategy.opentrades.entry_id(0) == 'Short_one') entryPriceShort = strategy.opentrades.entry_price(0) takeProfitPriceShort = entryPriceShort * (1 - takeProfitPercent / 100) stopLossPriceShort = entryPriceShort * (1 + stopLossPercent / 100) strategy.exit("Close short one", "Short_one", limit=takeProfitPriceShort, stop=stopLossPriceShort) ema8_cross_index_down := na ema12_cross_index_down := na ema24_cross_index_down := na if (sz < 0 and strategy.opentrades.entry_id(0) == 'Short_time') entryPriceShortTime = strategy.opentrades.entry_price(0) takeProfitPriceShortTime = entryPriceShortTime * (1 - takeProfitPercentTime / 100) stopLossPriceShortTime = entryPriceShortTime * (1 + stopLossPercentTime / 100) strategy.exit("Close short time", "Short_time", limit=takeProfitPriceShortTime, stop=stopLossPriceShortTime) ema8_cross_index_down := na ema12_cross_index_down := na ema24_cross_index_down := na // Отображение EMA на графике plot(ema8, title="EMA 8", color=color.blue, linewidth=2) plot(ema12, title="EMA 12", color=color.orange, linewidth=2) plot(ema24, title="EMA 24", color=color.green, linewidth=2) plot(ema72, title="EMA 72", color=color.red, linewidth=2) // Вывод CCI в подвале //plot(cci, title="CCI", color=color.purple) //hline(100, "CCI 150", color=color.green) //hline(-100, "CCI -150", color=color.red) //hline(0, "CCI 0", color=color.gray) // Отладочная информация //plotshape(series=long_condition_one, location=location.belowbar, color=color.lime, style=shape.labelup, title="Long Condition") //plotshape(series=cross_condition_one_candle_long, location=location.belowbar, color=color.blue, style=shape.triangleup, title="Cross Condition Long") //plotshape(series=long_condition_time, location=location.belowbar, color=#e6d700, style=shape.labelup, title="Long Condition Time") //plotshape(series=cross_condition_within_time_long, location=location.belowbar, color=#a21dbd, style=shape.triangleup, title="Cross Condition Time Long") //plotshape(series=short_condition_one, location=location.abovebar, color=color.red, style=shape.labeldown, title="Short Condition") //plotshape(series=cross_condition_one_candle_short, location=location.abovebar, color=color.blue, style=shape.triangledown, title="Cross Condition Short") //plotshape(series=short_condition_time, location=location.abovebar, color=#e6d700, style=shape.labeldown, title="Short Condition Time") //plotshape(series=cross_condition_within_time_short, location=location.abovebar, color=#a21dbd, style=shape.triangledown, title="Cross Condition Time Short")