
romanzif
Местный
Команда форума
Администратор
- Монет
- 129,255
Очень часто пользователи советников забывают менять Magic номер.
А мы знаем, к чему это может привести.
Может поломаться вся логика советника который работает с серией ордеров или принимает решения на основе уже закрытых ордеров.
Смешать ордера с разных графиков и т.д.
Предлагаю в функции onInit() вызывать функцию проверку использовался или используется Magic номер который задан в советнике.
Если функция возвращает TRUE, то данный Magic уже занят и нужно вывести сообщение трейдеру.
А мы знаем, к чему это может привести.
Может поломаться вся логика советника который работает с серией ордеров или принимает решения на основе уже закрытых ордеров.
Смешать ордера с разных графиков и т.д.
Предлагаю в функции onInit() вызывать функцию проверку использовался или используется Magic номер который задан в советнике.
Код:
int OnInit()
{
if (CheckMagic())
{
Alert("Этот Magic номер уже занят. Пожалуйста введите другой");
return(INIT_PARAMETERS_INCORRECT);
}
}
Если функция возвращает TRUE, то данный Magic уже занят и нужно вывести сообщение трейдеру.
Код:
//+------------------------------------------------------------------+
bool CheckMagic()
{
for (int i=OrdersTotal()-1; i >= 0; i--) // проверяем ордера в рынке
{
if (OrderSelect(i,SELECT_BY_POS))
{
if (OrderMagicNumber() == Magic) return(true);
}
}
for (int i=OrdersHistoryTotal()-1; i >= 0; i--) // проверяем закрытые ордера
{
if (OrderSelect(i,SELECT_BY_POS, MODE_HISTORY))
{
if (OrderMagicNumber() == Magic) return(true);
}
}
return(false);
}
//+------------------------------------------------------------------+