Неверная стоимость 1п (может быть) - страница 3

 
avm , я Вам предалагаю перед посылкой торговой операции сделать следующее:
1) Провести RefreshRates()
2) Записать lastBid=Bid (или для Ask)
3) Записать lastMarketBid=MarketInfo(Symbol(),MODE_BID)
4) В случае ошибки после торговой операции вывести номер ошибки и эти значения.
При этом увидите,что lastBid==lastMarketBid

Если нет - сообщите.
 
В моем советнике (который, кстати, и стоит-то на демо) никаких циклов нет.

А это что такое?
int start()
{
  while(true)
  {
    Trade();
    Sleep(1000);
  }
  return;
}


Самый что ни на есть бесконечный цикл.


Он как-то на днях позицию не открыл и выдал сообщение об ошибке 129. А приведённый выше пример нужен всего лишь для того (и сделан исключительно только для этого), чтобы Вы же и увидели побыстрее своими глазами эту же ситуацию, описанную ещё выше. А за брокеров Вы можете быть спокойны. Я все правила знаю. И чаще нескольких раз в месяц я их не беспокою.


Ваша функция start начинает работу с неизвестно каким торговым окружением (она и запускается-то из функции init)

Я не вижу ни одного вызова RefreshRates, которые обновляют торговое окружение: Bid, Ask, Bars, Open[], High[], Low[], Close[], Time[], Volume[]

Вы работаете с устаревшими необновляемыми копиями данных и удивляетесь, почему цена неправильная

 
Rosh, благодарю за совет. Я понаблюдаю. Спецально вставлю в советника Ваши предложения и он сам последит за этим. И если он мне выдаст сообщение об ошибке я Вам обязательно сообщу. А вообще-то, я свои торговые операции уже "пересадил" на MarketInfo(). Кстати, я и этот зацикленный советник тоже переделал на MarketInfo(), после чего он открутился 2 часа без всяких ошибок. Даже реквот ни разу не выскочил.
 
В моем советнике (который, кстати, и стоит-то на демо) никаких циклов нет.

А это что такое?
int start()
{
  while(true)
  {
    Trade();
    Sleep(1000);
  }
  return;
}


Самый что ни на есть бесконечный цикл.

Он как-то на днях позицию не открыл и выдал сообщение об ошибке 129. А приведённый выше пример нужен всего лишь для того (и сделан исключительно только для этого), чтобы Вы же и увидели побыстрее своими глазами эту же ситуацию, описанную ещё выше. А за брокеров Вы можете быть спокойны. Я все правила знаю. И чаще нескольких раз в месяц я их не беспокою.


Ваша функция start начинает работу с неизвестно каким торговым окружением (она и запускается-то из функции init)
Я не вижу ни одного вызова RefreshRates, которые обновляют торговое окружение: Bid, Ask, Bars, Open[], High[], Low[], Close[], Time[], Volume[]

Вы работаете с устаревшими необновляемыми копиями данных и удивляетесь, почему цена неправильная


Парни, да поймите вы одну простую вещь. Все эти циклы я сделал СПЕЦИАЛЬНО для этого случая. Чтоб максимально ускорить "познавательный" процесс. В противном случае, можно было днями (или неделями) сидеть и ждать повторения ситуации. Этот зацикленный советник - просто демонстрация на 5 минут. Запустил, посмотрел и выкинул. Вы что, в институтах лабораторные работы прогуливали?
 
Ещё раз скажу, ситуация возникла в нормальном советнике, срабатывающем исключительно "на тиках". В этом моём нормальном советнике никаких циклов нет ни в старте() ни в других местах. Висит себе и ждёт кода "тикнет".
 
Бывают всякие ситуации. Например, быстрый рынок и перегруженная сеть. Тут и реквоту можно словить, и "устаревшую цену". (что у Вас и случилось)

Если для Вас очень важен положительные результаты торговых операций, тогда Вам необходимо серьёзно подойти к обработке ошибок. Специально для такого случая мы написали в документации по языку специальный топик "MQL4: Ошибки исполнения"