مقدمه: چرا ترکیب CCI و RSI؟ 📈
در دنیای پرهیاهو و پرنوسان بازار فارکس، معاملهگران همواره به دنبال یافتن روشهایی مطمئن برای شناسایی روندها و نقاط برگشت بازار هستند. استفاده از یک اندیکاتور به تنهایی میتواند همراه با سیگنالهای غلط و تأخیر باشد. اما وقتی دو اندیکاتور قدرتمند و تکمیلکننده هم را تأیید کنند، احتمال موفقیت معامله به طور چشمگیری افزایش مییابد.
این مقاله به شما یاد میدهد که چگونه با ترکیب دو اندیکاتور محبوب شاخص قدرت نسبی (RSI) و شاخص کانال کالا (CCI)، یک سیستم معاملاتی خودکار و قدرتمند برای پلتفرم متاتریدر 5 بسازید. اکسپرتی که طراحی خواهیم کرد، به گونهای برنامهریزی میشود که تنها در مواقعی که هر دو اندیکاتور همجهت و همنظر باشند، وارد معامله شود.
شناخت اجزای سیستم: RSI و CCI چیستند؟
قبل از پرداختن به کدنویسی، باید با هسته مرکزی استراتژی خود آشنا شوید.
🔍 اندیکاتور RSI (شاخص قدرت نسبی)
- کاربرد اصلی: شناسایی قدرت روند و شرایط اشباع خرید و اشباع فروش.
- محدوده نوسان: بین 0 تا 100.
- سطوح کلیدی:
- سطح 70: منطقه اشباع خرید. احتمال کاهش قیمت وجود دارد.
- سطح 30: منطقه اشباع فروش. احتمال افزایش قیمت وجود دارد.
- نحوه استفاده در استراتژی ما: ما از RSI برای تأیید قدرت حرکت قیمت استفاده میکنیم.
📊 اندیکاتور CCI (شاخص کانال کالا)
- کاربرد اصلی: شناسایی روندهای جدید و سنجش انحراف قیمت از میانگین خود.
- محدوده نوسان: این اندیکاتور محدوده خاصی ندارد اما عمدتاً حول محور صفر نوسان میکند.
- سطوح کلیدی:
- سطح 100+: نشاندهنده روند صعودی قدرتمند است.
- سطح 100-: نشاندهنده روند نزولی قدرتمند است.
- نحوه استفاده در استراتژی ما: ما از CCI برای تأیید شروع یک روند جدید استفاده میکنیم.
استراتژی پایه: قوانین ورود و خروج ⚔️

حالا که با این دو اندیکاتور آشنا شدید، هسته اصلی استراتژی خود را تعریف میکنیم. تمام تصمیمها تنها با تشکیل یک کندل (Bar) جدید گرفته میشود.
💹 شرایط ورود به معامله BUY (خرید)
برای باز کردن یک پوزیشن خرید، باید هر دو شرط زیر به طور همزمان برقرار باشند:
| اندیکاتور | شرط | توضیح |
|---|---|---|
| RSI | > RSI Level Up | مقدار RSI از سطح از پیش تعیینشده برای شروع روند صعودی (مثلاً 50) بزرگتر باشد. |
| CCI | > CCI Level Up | مقدار CCI از سطح از پیش تعیینشده برای شروع روند صعودی (مثلاً 0) بزرگتر باشد. |
نمونه عملی: فرض کنید RSI Level Up = 50 و CCI Level Up = 0 باشد. اگر با بسته شدن کندل جدید، مقدار RSI برابر 55 و مقدار CCI برابر +25 باشد، چون هر دو شرط برقرارند، سیگنال خرید صادر میشود.
🔻 شرایط ورود به معامله SELL (فروش)
برای باز کردن یک پوزیشن فروش، باید هر دو شرط زیر به طور همزمان برقرار باشند:
| اندیکاتور | شرط | توضیح |
|---|---|---|
| RSI | < RSI Level Down | مقدار RSI از سطح از پیش تعیینشده برای شروع روند نزولی (مثلاً 50) کوچکتر باشد. |
| CCI | < CCI Level Down | مقدار CCI از سطح از پیش تعیینشده برای شروع روند نزولی (مثلاً 0) کوچکتر باشد. |
نمونه عملی: فرض کنید RSI Level Down = 50 و CCI Level Down = 0 باشد. اگر با بسته شدن کندل جدید، مقدار RSI برابر 45 و مقدار CCI برابر -15 باشد، چون هر دو شرط برقرارند، سیگنال فروش صادر میشود.
🛑 قوانین خروج و مدیریت معامله

اکسپرت ما باید بتواند معاملات را نیز مدیریت کند. این کار از طریق پارامترهای زیر انجام میشود:
- حد ضرر (Stop Loss): برای محدود کردن ضررهای احتمالی.
- حد سود (Take Profit): برای ثبت سود در سطحی مشخص.
- تریلینگ استاپ (Trailing Stop): برای قفل کردن سود و همراهی با روند.
نکته مهم: برای غیرفعال کردن هر یک از این ویژگیها کافی است مقدار آن را در تنظیمات اکسپرت بر روی 0.0 قرار دهید.
پیادهسازی در متاتریدر 5: از ایده تا اکسپرت 👨💻
این بخش فنیتر است. اکسپرت ما باید بتواند کارهای زیر را به ترتیب انجام دهد:
- انتظار برای بار جدید: کد باید چک کند که آیا یک کندل جدید (New Bar) در چارت تشکیل شده است یا خیر.
- محاسبه مقادیر اندیکاتورها: مقادیر فعلی RSI و CCI را برای کندل بستهشته قبلی محاسبه کند.
- بررسی شرایط: طبق جداول بالا، شرایط خرید یا فروش را بررسی نماید.
- بررسی موجودی باز: قبل از ارسال دستور جدید، چک کند که آیا از قبل پوزیشن بازی برای این نماد وجود دارد یا خیر.
- ارسال دستور معاملاتی: در صورت وجود سیگنال و نبود پوزیشن باز، با حجم مشخص (Lots) و با پارامترهای مدیریت ریسک (SL, TP) اقدام به باز کردن پوزیشن کند.
(کد شبهنمونه برای درک بهتر منطق):
void OnTick()
{
// فقط در اولین تیک از یک کندل جدید وارد شو
if(isNewBar() == false)
return;
// دریافت مقادیر اندیکاتورها
double current_rsi = iRSI(_Symbol, _Period, 14, PRICE_CLOSE, 1); // مقدار RSI در کندل قبل
double current_cci = iCCI(_Symbol, _Period, 14, PRICE_CLOSE, 1); // مقدار CCI در کندل قبل
// بررسی شرایط برای BUY
if(current_rsi > RSI_Level_Up && current_cci > CCI_Level_Up)
{
if(CountPositions() == 0) // اگر پوزیشن بازی نیست
OpenBuyOrder(); // تابع مربوط به باز کردن پوزیشن خرید
}
// بررسی شرایط برای SELL
if(current_rsi < RSI_Level_Down && current_cci < CCI_Level_Down)
{
if(CountPositions() == 0) // اگر پوزیشن بازی نیست
OpenSellOrder(); // تابع مربوط به باز کردن پوزیشن فروش
}
// بررسی برای اعمال تریلینگ استاپ (اگر فعال باشد)
TrailingStopFunc();
}
بهینهسازی و بکتست: کلید موفقیت 🔑
هیچ استراتژی از همان ابتدا کامل نیست. پارامترهای بهینه برای جفتارزهای مختلف و تایمفریمهای متفاوت، فرق میکنند.
- بکتست (Backtest) چیست؟ تست کردن استراتژی بر روی دادههای تاریخی بازار است تا عملکرد آن در گذشته سنجیده شود.
- بهینهسازی (Optimization) چیست؟ پیدا کردن بهترین مقادیر برای پارامترها (مانند
RSI Level Up,CCI Level Up, دوره اندیکاتورها و…) through فرآیند آزمون و خطا توسط خود نرمافزار.
مطالعه موردی: همانطور در توضیحات اولیه اشاره شد، این اکسپرت بر روی جفتارز EURUSD و در تایمفریم 15 دقیقه (M15) تست شده است. یک دوره سهماهه (از می 2018 تا آگوست 2018) برای بهینهسازی انتخاب شد. این دوره کوتاه اما پرنوسان به ما کمک میکند تا پارامترهایی پیدا کنیم که در شرایط مختلف بازار جوابگو باشد.
نکته: مراقب اورفیت (Overfitting) باشید! اورفیت زمانی رخ میدهد که استراتژی شما آنقدر روی دادههای گذشته بهینه شده که فقط بر روی آنها عالی عمل میکند، اما در بازار واقعی و آینده شکست میخورد.
مدیریت سرمایه و ریسک: ضامن بقا 🛡️
حتی بهترین استراتژیها هم بدون مدیریت ریسک در بلندمدت با شکست مواجه میشوند.
- حجم معاملات (Lots): از حجمی استفاده کنید که حداکثر 1-2% از سرمایه شما در هر معامله در خطر باشد.
- تنوع سبد: تمام سرمایه خود را روی یک جفت ارز متمرکز نکنید.
- تست forward: پس از بهینهسازی، استراتژی را روی یک بازه زمانی جدید (مثلاً ماههای بعد از دوره بهینهسازی) تست کنید تا از پایداری آن اطمینان حاصل کنید.
در این مقاله آموختیم که چگونه با ترکیب دو اندیکاتور RSI و CCI، یک سیستم معاملاتی فیلترشده و کمخطا طراحی کنیم. این سیستم با برنامهنویسی در قالب یک اکسپرت برای متاتریدر 5، میتواند به طور خودکار و بدون دخالت احساسات انسانی معامله کند.
یادآوری مهم: این مقاله جنبه آموزشی دارد. بازار فارکس بسیار پرریسک است و هیچ تضمینی برای سودآوری یک استراتژی وجود ندارد. این اکسپرت یک قالب پایه است. شما باید آن را گسترش دهید (مثلاً اضافه کردن فیلتر روند اصلی، مدیریت پیشرفته پول و…) و حتماً قبل از استفاده با سرمایه واقعی، آن را به طور گسترده در حساب دمو تست و بهینهسازی کنید.
موفق و پرسود باشید! 💰



