تشخیص شروع کندل جدید در متاتریدر 4 با استفاده از اکسپرت 🕒📈
اگر شما هم در بازار فارکس یا معاملات دیگر فعالیت میکنید، احتمالاً میدانید که تشخیص لحظه شروع یک کندل جدید یکی از ابزارهای کلیدی برای اکسپرتها (EA) است. در این مقاله، به سادهترین و کاربردیترین روش این کار در متاتریدر 4 و حتی متاتریدر 5 میپردازیم.
🔹 چرا نیاز به تشخیص کندل جدید داریم؟
برای یک اکسپرت، هر بار که یک تیک (Tick) جدید وارد شود، ترمینال متاتریدر بهطور پیشفرض تابع OnTick() را فراخوانی میکند.
اما نکته مهم اینجاست که هیچ تابع پیشفرضی برای شروع یک بار یا کندل جدید وجود ندارد. بنابراین، اگر بخواهیم به محض باز شدن کندل جدید عملیاتی انجام دهیم، باید خودمان این تغییر را شناسایی کنیم.
🔹 روش تشخیص شروع کندل جدید 🕵️♂️
بهترین روش، پیگیری زمان باز شدن آخرین کندل فعلی است. زمانی که این مقدار تغییر کند، به معنای شروع یک کندل جدید است و میتوان برای آن برنامهریزی کرد.
کد نمونهای که در ادامه آمده، هم در MQL4 و هم در MQL5 قابل استفاده است و این امکان را فراهم میکند:
static datetime lastBarTime = 0; // متغیر static برای ذخیره زمان باز شدن کندل
if (Time[0] != lastBarTime) {
lastBarTime = Time[0]; // آپدیت زمان کندل
// اینجا میتوانید کدهای دلخواه خود را اجرا کنید
}
// Standard tick event handler
void OnTick()
{
// Check for a new bar (compatible with MQL4 and MQL5).
static datetime dtBarraCorrente = WRONG_VALUE;
datetime dtBarraPrecedente = dtBarraCorrente;
dtBarraCorrente = iTime( _Symbol, _Period, 0 );
bool bEventoBarraNova = ( dtBarraCorrente != dtBarraPrecedente );
// React to the event of a new bar and deal with the situation.
if( bEventoBarraNova )
{
// Detect if this is the first tick received and deal with the situation.
/* For example, when it is first applied to the graph and
the bar is somewhere in the middle of its progress and
is not really the start of a new bar. */
if( dtBarraPrecedente == WRONG_VALUE )
{
// Do something on the first tick or in the middle of a bar ...
}
else
{
// Do something when a normal bar appears ...
};
// Do something independent of the previous condition ...
}
else
{
// Do something else ...
};
// Do other things ...
};
🔹 نقش متغیر Static ⚡
متغیر static به ما این امکان را میدهد که زمان باز شدن کندل فعلی را حتی پس از خروج از تابع OnTick() حفظ کنیم. بر خلاف متغیرهای محلی معمولی، دادههای این متغیر پس از خروج از تابع پاک نمیشوند و همین نکته کلیدی، تشخیص تغییر کندل را ممکن میکند.
🔹 نکته مهم هنگام نصب اکسپرت 🛠️
زمانی که اکسپرت برای اولین بار روی نمودار قرار میگیرد، کد بهصورت پیشفرض واکنش نشان میدهد انگار که کندل تازه باز شده است. اگر قصد دارید این حالت را متفاوت مدیریت کنید، باید این شرایط را بهصورت ویژه در برنامه خود لحاظ کنید.
🔹 دسترسی به کدها 💻
تمام کدهای منتشرشده در CodeBase اکنون در تب Public Projects در MetaEditor با نام FMIC در دسترس هستند. میتوانید به راحتی آنها را دریافت کرده و در اکسپرت خود استفاده کنید.
تشخیص شروع یک کندل جدید، یکی از پایههای مهم طراحی اکسپرتها است. با استفاده از پیگیری زمان باز شدن کندل و متغیر static، میتوان به راحتی این رویداد را شناسایی کرد و برنامههای معاملاتی خود را دقیقتر و هوشمندتر کرد.



