GlobalVariableGet ( "LastTradeTime" ) - Error #4200 ( object is already exist )

 
Как такое может быть? =)
Код для проверки:
int _GetLastError = 0; int _LastTradeTime = GlobalVariableGet ( "LastTradeTime" ); _GetLastError = GetLastError(); if ( _GetLastError != 0 ) { Print( "GlobalVariableGet ( \"LastTradeTime\" ) - Error #", _GetLastError, " ( ", ErrorDescription( _GetLastError ), " )" ); return(-1); }
Глобальная переменная LastTradeTime, естественно, существует.
Используют её несколько экспертов, но по очереди. Разграничение с помощью другой гл. переменной (и ф-ции GlobalVariableSetOnCondition)
Билд 191 от 03.04.2006 г.
 
Не вижу где проблема.
Разве что, GlobalVariableGet тапа double.
 
Проблема в том, что GlobalVariableGet не может вызывать ошибку "object is already exist" =)

Если бы гл. переменной, к которой мы обращаемся, не было, я понимаю - заслуженная ошибка.
А тут - пытаемся получить значение переменной, а терминал говорит "низя! такая переменная уже есть" - где логика? ;)

Появилось, между прочим, относительно недавно.
Т.к. код у меня пол года не менялся...
 
Проблема в том, что GlobalVariableGet не может вызывать ошибку "object is already exist" =)
Согласен. Не может.

У меня тоже с некоторых пор начали появляться эпизодические отказы по неустановленной причине. Я потому и снял программку с форума.
Какая-то блуждающая ошибка. Например, выдаётся ошибка "Неправильные стопы" при заведомо больших дистанциях. Достаточно снять ордер и повторить - всё идёт нормально.
 
в словаре (Выполнение программ - Ошибки выполнения) написано:
===
Существует несколько встроенных функций, которые всегда меняют значение переменной last_error. (и перечисляются торговые функции)
...
Некоторые функции меняют значение переменной last_error только в случае возникновения какой-либо ошибки.
===
Вдумайтесь в последнюю фразу. Если у вас возникла некая ошибка в процессе выполнения, то она не обнулится до тех пор, пока не будет вызвана торговая функция, либо не будет вызвана функция GetLastError. В функции GlobalVariableGet у вас не возникло никакой ошибки, поэтому последняя ошибка осталась (ещё от работы с объектами)
 
Да, мой проезд. Где-то не уследил ;)

Будем проверять...


Хотя, логичней было бы обнулять GetLastError при успешном выполнении любой ф-ции, которая может вызвать ошибку. ..
 
stringo:
Если у вас возникла некая ошибка в процессе выполнения, то она не обнулится до тех пор, пока не будет вызвана торговая функция, либо не будет вызвана функция GetLastError.
Но ведь в данном случае GetLastError() вызвана:
_GetLastError = GetLastError();

Или Вы хотите сказать, что в данном случае значение GetLastError() не должно измениться, то есть, стать равным нулю?
Некоторые функции меняют значение переменной last_error только в случае возникновения какой-либо ошибки.
Если так, то надо бы опубликовать список этих "некоторых" функций.
А по-хорошему, GetLastError() должна бы всякий раз давать код последней ошибки, независимо от предыдущих событий.
 
SKif:

Но ведь в данном случае GetLastError() вызвана:
Или Вы хотите сказать, что в данном случае значение GetLastError() не должно измениться, то есть, стать равным нулю?
GetLastError вызвана после функции GlobalVariableGet. А до неё не была вызвана. Вот она и вернула предыдущую чужую ошибку. Что тут непонятного?
Если так, то надо бы опубликовать список этих "некоторых" функций.
А он разве не опубликован? Очень даже опубликован. С кодами возможных ошибок.
Вы словарь редактора давно читали? Мы с каждой новой версией его дополняем.

А по-хорошему, GetLastError() должна бы всякий раз давать код последней ошибки, независимо от предыдущих событий.
Про GetLastError в двух или трёх местах написано, что она обнуляет код ошибки.
 
stringo:
GetLastError вызвана после функции GlobalVariableGet. А до неё не была вызвана. Вот она и вернула предыдущую чужую ошибку. Что тут непонятного?
Вы правы, был ObjectCreate без проверки GetLastError (там не принципиально).

Но я всё равно считаю, что после успешного выполнения ф-ции код ошибки надо обнулять.
Т.к. не все ф-ции имеют коды возврата, и проверка ведётся только по GetLastError.
 
komposter:
Но я всё равно считаю, что после успешного выполнения ф-ции код ошибки надо обнулять.
Т.к. не все ф-ции имеют коды возврата, и проверка ведётся только по GetLastError.
Решается просто. Перед контролируемой функцией вызвать GetLastError
 
stringo:
komposter:
Но я всё равно считаю, что после успешного выполнения ф-ции код ошибки надо обнулять.
Т.к. не все ф-ции имеют коды возврата, и проверка ведётся только по GetLastError.
Решается просто. Перед контролируемой функцией вызвать GetLastError
Перед каждой ф-цией.
Я понял вашу позицию.
Причина обращения: