Modify error 1 - страница 2

 
Mislaid:

PS Если MQL поддерживает рекурсию, то, ребята скромняги, что так долго скрывали от мира возможности языка.

если ты ее не используешь, не значит что ее нет :)
 
Mislaid:

Условие в строке все еще записано неправильно.


Это не рабочий вариант. (та строка и давала ошибку. при равенстве значений, почему-то, условие все-равно соблюдалось)

Mislaid:


Я думаю, если еще раз попробуете переписать, то ошибка пропадет навсегда. Наверно, глаз замылился.


Я переписал как вы советовали, но с рекурсией. и ошибка пропала.

if(Bid - OrderOpenPrice()-Tral*Point>0.5*Point && Bid-OrderStopLoss()-Tral*Point>0.5*Point)
              {
              if (NormalizeDouble(Bid-Tral*Point,Digits)-OrderStopLoss() >0.5*Point )
              {
              if   (OrderModify (OrderTicket(),OrderOpenPrice(),
                   Bid-NormalizeDouble(Tral*Point,Digits),
                   OrderTakeProfit(),0,CLR_NONE)== false)
                 {
                 
                 Sleep(5000);
                 Trall();
                 }
              }
              }

Теперь, по непонятным причинам, в альпари error 130 при любом значении стопа. В 3-х других терминалах нормально.

 
MarkTrade:


Это не рабочий вариант. (та строка и давала ошибку. при равенстве значений, почему-то, условие все-равно соблюдалось)


Я переписал как вы советовали, но с рекурсией. и ошибка пропала.


Отлично! Теперь, уберите рекурсию от греха подальше. Это недекларируемый вариант использования языка. Думаю, что практиков с рекурсией здесь мало, и, в случае чего, помощи ждать будет не от кого.

Ошибка 130. Почитайте MarketInfo(). Воспользуйтесь поиском. Информации просто море. И, поаккуратнее со сравнениями чисел типа double

 
Mislaid:

Ошибка 130. Почитайте MarketInfo(). Воспользуйтесь поиском. Информации просто море. И, поаккуратнее со сравнениями чисел типа double


Это я читал... Дело в том что в альпари эта ошибка при любом! значении стопа.

Открывает сделку, устанавливает стоп (без ошибок), а перевод в безубыток, даже если цена уже в +300пп - error 130

Что-то с тестером в их терминале.... я так думаю.

 
MarkTrade:


Я переписал как вы советовали, но с рекурсией. и ошибка пропала.


1. У Вас нет критерия останова для рекурсии. Если проявляется ситуация когда модификация не удалась по неустранимой причине - например, неверно заданы уровни стопа, закрыты торги .... да мало ли - вы получаете бесконечный цикл (из вызовов функций) и, как закономерность, переполнение стека.

2. Рекурсия в таких случаях (модификация ордеров) не нужна - выбрали ордер и обрабатывайте его .... При рекурсивном вызове Вы опять начинаете сканировать ордера - в том числе и те, в которых уже все поменяно.

И, самое главное: Вы не обрабатываете ошибку, которую возвращает функция модификации ордера - это практика порочная. Если причина не может быть устранена, то циклические попытки повторить операцию бессмысленны и только грузят комп и сервер - Вас ДЦ просто рано или поздно заблокирует .......

Удачи.

Причина обращения: