Цикл не работает бесконечно..

 

void start(){
while(!IsStopped()){
RefreshRates();
//--------------------------
if (IsConnected)
{
// advisor code
}
else
{
//no connection alert
}

//--------------------------
Sleep(700);
}}

интересно, я использую именно такую структуру, некоторое время все идет нормально, но бывают моменты когда цикл прекращается и эксп. ждет прихода нового тика! На сколько я понимаю, такой цикл должен продолжать работать даже если пропала связь (ну естественно если не стоит команды остановить эксп. при отсутствии связи)?

 
Если внутри цикла не используется return или break, он будет работать бесконечно.
Как проводилась проверка?
Не было ли ошибки zero divide (деление на 0) (она останавливает выполнение эксперта)?
Не переключался ли период/символ графика?
 
Проверка.. ну, довольно просто, в зацикленном блоке была запись Print ("всякая ерунда"); и естественно, эта запись должна появляться каждую секунду при Sleep (1000); Но через некоторое время надписи просто перестают появляться, ну и по некоторым другим признакам тоже было видно, что эксп. не работает, т.к. выдавал всякую ахинею. .
Графики не трогались.
Обратил внимание, что чаще это профвляется на спокойном рынке, ночью, например.. или если принудительно отключаешь сеть(но не всегда)
 Насчет деления на 0 надо проверить, спасибо за совет..
 

Да, но ведь если происходит деление на ноль, эксперт это напишет перед тем как остановить?

 
Тогда не знаю.
Давайте полный код, чтоб можно было воспроизвести ситуацию. Может, кто-то не поленится проверить.

shubert:

Да, но ведь если происходит деление на ноль, эксперт это напишет перед тем как остановить?

Да.
 
komposter:
Тогда не знаю.
Давайте полный код, чтоб можно было воспроизвести ситуацию. Может, кто-то не поленится проверить.

shubert:

Да, но ведь если происходит деление на ноль, эксперт это напишет перед тем как остановить?

Да.

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

Вроде хорошо, но нужна уверенность, что мы действительно в состоянии захватить и удерживать сколько хотим управление.

С уважением - С.Д.
 
shubert:

На сколько я понимаю, такой цикл должен продолжать работать даже если пропала связь (ну естественно если не стоит команды остановить эксп. при отсутствии связи)?


А может быть Вы просто переключали таймфрейм?:)