Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Подними скорость в сети MQL5 Cloud Network. Установи Strategy Tester Agent!
ivan
505
ivan 2011.03.04 13:49 

Время от времени советник начинает выдавать ошибку 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






Andrei
2316
Andrei 2011.03.04 14:28  

qomment:

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

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

С объектами можно поступить например так - задать один раз их максимально возможное число в ините, а потом лишь менять их координаты и видимость, то есть по ходу программы никаких новых объектов не создавать чтобы не плодить ненужные объекты. Ну а ошибочные координаты нужно отлавливать отдельно - в какой момент это произошло.
ivan
505
ivan 2011.03.04 14:58  
Как может быть занято имя объекта когда я имена определяю только через Graph_counter++?
Andrei
2316
Andrei 2011.03.04 15:30  

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

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

Alexander
2441
Alexander 2011.03.04 19:54  
И кстати, почему не выводите на печать само имя, хотелось бы посмотреть.
Sceptic Philozoff
Модератор
17848
Sceptic Philozoff 2011.03.04 23:40  
Andrei01: кстати зачем нужно это умножение на 1.0 с нормализацией чтобы получить то же самое целое число?
Наверно, это просто буквально понятое имя функции DoubleToStr().
Алексей Тарабанов
7220
Алексей Тарабанов 2011.03.05 00:41  

Рефлексия:

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

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

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

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

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

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

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

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

Vladimir Gomonov
8231
Vladimir Gomonov 2011.03.05 02:01  
tara:

Рефлексия:

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

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