Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я ни к кому конкретно и не обращался.
Но Вы видимо правильно сделали, что приняли на свой счет.
Дураком Вас назвать не могу, но то что Вы глухой - это точно.
Вы не слышите других. Это я не про свои реплики, а про те советы что Вам давали.
Вы когда-нибудь писали интероперабельные программы?
То, о чём спрашивает Ant_TL и есть "интероперабельность", но на MQL это не реализуемо.
Вы когда-нибудь писали интероперабельные программы?
То, о чём спрашивает Ant_TL и есть "интероперабельность", но на MQL это не реализуемо.
Реализовать не сложно. И решение в принципе есть. Лень дальше читать
Реализовать не сложно. И решение в принципе есть. Лень дальше читать
Вы не сможете выполнять опереции с ордерами и при этом гарантированно не затронуть окружение.
Про GetLastError() уже было сказано, Вы не сможете восстановить код, который должна была бы вернуть функция GetLastError().
Вы не сможете выполнять опереции с ордерами и при этом гарантированно не затронуть окружение.
Про GetLastError() уже было сказано, Вы не сможете восстановить код, который должна была бы вернуть функция GetLastError().
При желании можно, просто будет своя функция ( я про GetLastError())
Так может выглядеть решение - обертка OrderSelect() - MySelect() для использования в функциях, перебирающих ордера по индексу
int last_select=0; // ставим где-нибудь перед init и start
// ...... код программы
bool MySelect(int i,int mode=MODE_TRADES){ // Выбор нужного нам ордера - возвращает True, если ордер выбран и принадлежит советнику, False иначе
if(OrderSelect(i,SELECT_BY_POS,mode)){
last_select=OrderTicket();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
return(true);
else
return(false);
}
return(false);
}
bool TickSelect(int tick){ // Выбор ордера напрямую по тикету
if(OrderSelect(tick,SELECT_BY_TICKET))
last_select=tick;
else
return(false);
return(true);
}
void SomeFunc(){ // Шаблон функции, которая может нарушить выбор ордеров и соответственно нарушить логику работы программы, если не позаботиться о сохранности текущего выбора ордера
int tick=last_select;
// ... производим нужные действия
if(tick>0)
TickSelect(tick);
}
Не может, если в программе вы сами не изменяете это состояние.
Предполагалось, что состояние ордера поменялось с MODE_TRADES на MODE_HISTORY. Причем ваш советник ничего с ордером не делал. Это тот же ордер, или уже другой?
Предполагалось, что состояние ордера поменялось с MODE_TRADES на MODE_HISTORY. Причем ваш советник ничего с ордером не делал. Это тот же ордер, или уже другой?
Это тот же ордер
Так может выглядеть решение - обертка OrderSelect() - MySelect() для использования в функциях, перебирающих ордера по индексу
int last_select=0; // ставим где-нибудь перед init и start
// ...... код программы
bool MySelect(int i,int mode=MODE_TRADES){ // Выбор нужного нам ордера - возвращает True, если ордер выбран и принадлежит советнику, False иначе
if(OrderSelect(i,SELECT_BY_POS,mode)){
last_select=OrderTicket();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
return(true);
else
return(false);
}
return(false);
}
bool TickSelect(int tick){ // Выбор ордера напрямую по тикету
if(OrderSelect(tick,SELECT_BY_TICKET))
last_select=tick;
else
return(false);
return(true);
}
void SomeFunc(){ // Шаблон функции, которая может нарушить выбор ордеров и соответственно нарушить логику работы программы, если не позаботиться о сохранности текущего выбора ордера
int tick=last_select;
// ... производим нужные действия
if(tick>0)
TickSelect(tick);
}