А почему не работает удаление ордера?
Выдерживаете ли таймаут 10 секунд между торговыми операциями?
Торговой является любая операция, изменяющая/удаляющая ордер.
(упомяну, что в тестере всё работает идеально)
(упомяну, что в тестере всё работает идеально)
Тогда остается одно решение - выложите код эксперта (в тегах pre) в форуме, пожалуйста.
//начало
if CurTime < LastTradeTime + 11 Then exit;
//...
// много-много непринципиального кода
//...
If DOrders[1] > 1 then
{
for i=1 to TotalTrades
{
if Ord(i,VAL_TICKET) == DOrders[DOrders[1]] then
{
DeleteOrder(Ord(i,VAL_TICKET),Green);
exit;
};
};
DOrders[1]=DOrders[1]-1;
exit;
};
//ещё всякий код
//...
DOrders - массив в котором хранятся тикеты выставленных мной ордеров. Он заполнен правильно на 100%, в этом ошибки быть не может. В первом элементе массива хранится его длина. После высылания команды на удаление выхожу, жду 10 секунд и возвращаюсь опять. Пробовал вставлять между вызовом DeleteOrder команды Print("начало удаления"), Print("конец удаления") - в логе было отмечено это, то есть команда ТОЧНО выполнялась, но эфекта не было никакого. Выводил также тикеты - с ними тоже не оказалось проблем. Что тогда?
К сожалению, в MT3 есть сложности с определением статуса проводимых торговых операций.
Воспользуйтесь переменной LastTradeTime, которая дает время совершения последней операции.
Но не нужно торговать на границе 10 сек, лучше для гарантии увеличить время ожидания на несколько секунд.
If CurTime - LastTradeTime < 300 Then Exit;
Да, в МетаТрейдере 4 каждая торговая операция ждет своего завершения и на выходе всегда получаете код завершения (или тикет ордера).
Всё происходит в реальной торговле на 3-ем метатрейдере. Удаляю отложенный ордер. Команда DeleteOrder точно выполняется, но эффект бывает через раз. В большинстве случаев удаляет, иногда нет. Такая же проблема была с выставлением ордеров. Смирился, пришлось изощрятся и выставлять ордера в некоем подобии цикла "пока реально не выставлю n ордеров, посылаю запросы на выставление". С горем пополам работает. Но извольте, я думал такая лажа будет только с выставлением, оказывается - не только. Уверен, что с ModifyOrder та же история. Подскажите, может я делаю что-то не совсем то? Slippage ставлю равный 3 (вообще, как он влияет на работу?). 10-секундные промежутки учитываются, денег хватает (может есть ещё какие-то ограничения?).