опять 4200

 

Время от времени советник начинает выдавать ошибку 4200 - Object already exists. При том, что я четко контролирую присвоение каждому вновь создаваемому объекту уникального имени, типа "1l, 2l, 3l, " и т.д.

Попробовал проверять перед созданием объекта - существует ли такой уже в терминале - оказывается да, но его координаты - время и цена - совершенно неадекватны, типа цены 109 для EURUSD и времени соответствующего выходному дню 10 лет назад.

При этом в истории этого дня вообще нет.

Кто-нибудь может прояснить ситуацию?

Спасибо.


Код примерно такой:

int Handle; // handle журнала

int Graph_counter, ;// глобальная переменная, единственное обращение к ней - ниже

...

Graph_counter++;// счетчик наращивается перед любой операцией ObjectCreate и больше не используется нигде, так что пересечений имен быть не может

string Name=DoubleToStr(1.0*Graph_counter,0)+"l"; // имя объекта

if(ObjectFind(Name)==0)
{
FileWrite(Handle,"==== it says 4200 =======" );

FileWrite(Handle," time0, time1, price0, price1:",TimeToStr(ObjectGet(Name,0))," ",TimeToStr(ObjectGet(Name,2))," ", DoubleToStr(ObjectGet(Name,1),5)," ",DoubleToStr(ObjectGet(Name, 3),5));

}

ObjectCreate(Name, ...);

FileWrite(Handle, "Last error=",GetLastError());



А результат в случае ошибки (для EURUSDM5 тестируемого на интервале январь-февраль 2011)

==== it says 4200 =======

time0, time1, price0, price1: 2000.02.15 09:30 2000.02.16 06:00 109.04000 110.47500

Last error=4200






 

qomment:

При этом в истории этого дня вообще нет.

Кто-нибудь может прояснить ситуацию?

С объектами можно поступить например так - задать один раз их максимально возможное число в ините, а потом лишь менять их координаты и видимость, то есть по ходу программы никаких новых объектов не создавать чтобы не плодить ненужные объекты. Ну а ошибочные координаты нужно отлавливать отдельно - в какой момент это произошло.
 
Как может быть занято имя объекта когда я имена определяю только через Graph_counter++?
 

на какое имя объекта она выдает ошибку и каков в этот момент счетчик?

кстати зачем нужно это умножение на 1.0 с нормализацией чтобы получить то же самое целое число?

 
И кстати, почему не выводите на печать само имя, хотелось бы посмотреть.
 
Andrei01: кстати зачем нужно это умножение на 1.0 с нормализацией чтобы получить то же самое целое число?
Наверно, это просто буквально понятое имя функции DoubleToStr().
 

Рефлексия:

Вопрос: Кто-нибудь может прояснить ситуацию?

Варианты ответов (не всегда автору ветки):

1. С объектами можно поступить например так

2. зачем нужно это умножение на 1.0 с нормализацией

3. почему не выводите на печать само имя

4. это просто буквально понятое имя функции

Ответ: у Вас ошибка в алгоритме. Не в реализации.

"Порядок освобождает разум" (по-моему,- Декарт).

 
tara:

Рефлексия:

"Порядок освобождает разум" (по-моему,- Декарт).

"Упорядоченные рефлексы освобождают разум от мышления" (ц) Ацкий Сотона.
Причина обращения: