глобальная инициализация не удалась!!!!!!! - страница 3

 

Спасибо за подсказки!

С 646 происходят странные вещи, и никто, похоже, не может помочь!

1. Ярлыки выходят за линию, как будто не соблюдаются XDISTANCE и YDISTANCE.

Они возвращаются в линию только после переключения Tf туда-сюда.

После переключения окон графика или изменения ввода параметров они выходят за линию.

2. Некоторые старые индексы приводят MT4 в аварийное состояние.

3. После запуска MT4 он сначала входит в аккаунт, через некоторое время выходит из него, и мне приходится входить снова.

4. Скрипты и советники с OrderClose() не работают, они не закрывают ордера.

OrderModify() работает нормально.

Что мы можем сделать, чтобы MetaQuotes что-то с этим сделала?????

В конце концов, MT4 - это торговая платформа, а значит серьезный инструмент, а не какая-то игрушка!!!

И еще:

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

Вычисления находятся внутри start().

Но после запуска MT4 я не вижу своего прямоугольника, даже на тиках.

Но после повторной инициализации indi или переключения Tf он появляется.

Раньше таких вещей не было!

 
Dadas:

Спасибо за подсказки!

С 646 происходят странные вещи, и никто, похоже, не может помочь!

1. Ярлыки выходят за линию, как будто не соблюдаются XDISTANCE и YDISTANCE.

Они возвращаются в линию только после переключения Tf туда-сюда.

После переключения окон графика или изменения ввода параметров они выходят за линию.

это значит, что вы можете исправить это в своем коде

2. Некоторые старые индексы выводят MT4 из строя.

вы должны адаптировать код к новому миру, (B600 >) например, "zero divide" является критической ошибкой и заставляет индикатор исчезнуть (до B600 этого не было)

3. После запуска MT4 он сначала входит в аккаунт, через некоторое время выходит из него, и мне приходится входить снова.

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

4. Скрипты и советники с OrderClose() не работают, они не закрывают ордера.

Я уверен, что проблема в вашем коде, покажите нам соответствующий код и кто-нибудь попробует вам помочь.

OrderModify() работает нормально.

Что мы можем сделать, чтобы MetaQuotes что-то с этим сделала?

В конце концов, MT4 - это торговая платформа, а значит серьезный инструмент, а не какая-то игрушка!!!

я согласен, но я думаю (почти уверен), что критическая ошибка находится в вашем коде, вы используете устаревший код, т.е. он был написан с ошибками в то время, ошибки, которые не мешали работе индикатора/EA, но теперь это критические ошибки и их нужно исправить

 

Дадас,

Я коллега-разработчик и не могу ответить на все ваши вопросы. Я сам решаю некоторые проблемы с PITA в приложениях, которые я планирую выпустить на рынок. Одно, что я определенно предлагаю, это заменить по крайней мере ваши функции init и deinit новыми функциями OnInit() и OnDeInit(). Возможно, вы также захотите заменить функцию start на OnStart(). Согласно документации, реализация должна быть обратно совместимой, но мой опыт говорит об обратном. У меня была ситуация на одной из моих инди-систем, когда deinit() не вызывалась. Моя deinit() удаляла объекты, и все, что вызывало повторную инициализацию, не срабатывало, потому что объекты все еще существовали. Я все еще использую start(), а не OnStart(), но я не уверен в целесообразности этого. У меня есть предчувствие, что я сам себе создаю проблемы. Дайте мне знать, что произойдет, если вы решите попробовать мои предложения. Мы, разработчики, должны держаться вместе. :-)

 
Dadas:

И еще один момент:

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

Вычисления находятся внутри start().

Но после запуска MT4 я не вижу своего прямоугольника, даже на тиках.

Но после повторной инициализации indi или переключения Tf он появляется.

Раньше таких вещей не было!


как я уже писал выше, перед нами новый мир.
разве вы не "начинаете" использовать "OnTick" (советник) или "OnCalculate" (индикатор).
 
qjol:

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


Смотрите, MetaQuotes выпускает платформу, которая, какговорит ProfessorMetal , должна быть обратно совместима!

Я не думаю, что кто-то способен переписать все тысячи уже существующих индикаторов, скриптов и советников.

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

В них нет ничего особенного, они создают объект метки, вычисляют что-то, затем устанавливают объект соответствующим образом.

Никакой особой философии к ним не прилагается:

  ObjectSet    ("Lot_Size_Label",OBJPROP_CORNER,Corner);

  ObjectSet    ("Lot_Size_Label",OBJPROP_XDISTANCE,XDistance);
  ObjectSet    ("Lot_Size_Label",OBJPROP_YDISTANCE,YDistance);
  ObjectSetText("Lot_Size_Label",comment,Font_Size,Font_Type,Font_Color);
  ObjectSet    ("Lot_Size_Label",OBJPROP_SELECTABLE,false); 

Что касается скриптов закрытия ордеров и советников, я говорю о тех, которые прекрасно работали на более ранних билдах (500).

Так что это не вопрос правильности или неправильности моих кодов.

Это проблема того, что MetaQuotes все портит!

Я попробую воспользоваться подсказками ProfessorMetal ,но все же, как быть с пользователями, которые ничего не смыслят в кодировании?

А, честно говоря, они и не должны разбираться в кодинге!

Они должны использовать торговую платформу!!!

 
ProfessorMetal:

Дадас,

Я коллега-разработчик и не могу ответить на все ваши вопросы. Я сам решаю некоторые проблемы с PITA в приложениях, которые я планирую выпустить на рынок. Одно, что я определенно предлагаю, это заменить по крайней мере ваши функции init и deinit новыми функциями OnInit() и OnDeInit(). Возможно, вы также захотите заменить функцию start на OnStart(). Согласно документации, реализация должна быть обратно совместимой, но мой опыт говорит об обратном. У меня была ситуация на одной из моих инди-систем, когда deinit() не вызывалась. Моя deinit() удаляла объекты, и все, что вызывало повторную инициализацию, не срабатывало, потому что объекты все еще существовали. Я все еще использую start(), а не OnStart(), но я не уверен в целесообразности этого. У меня есть предчувствие, что я попрошу проблем в дальнейшем. Дайте мне знать, что произойдет, если вы решите попробовать мои предложения. Мы, разработчики, должны держаться вместе. :-)


Спасибо, у меня была такая же проблема с тем, что объекты не удалялись при deinit.

Я разрабатывал некоторые инди, и получил эти странные результаты, затем я увидел в списке объектов, что они все еще там.

Я обошел это, вероятно, самым простым способом, ObjectDelete() в start().

Да, замена init() на OnInit() и deinit() на OnDeinit() вернула ярлыки на свои места! Спасибо!

Потом через некоторое время не помогло!!! Они все еще танцуют тот же танец.

 

Если код самый простой, его реализация действительно зависит от реализуемых кодов. Вам необходимо иметь проверку ошибок в критических точках, чтобы при возникновении ошибки инди/ea мог правильно ее обработать. У меня тоже были проблемы в прошлый раз, но как только я установил обработчики ошибок, все работает гладко до такой степени, что вы забыли о проблемах, которые возникли в прошлый раз.


still, what about the users who don't know a thing about coding???

And, frankly speaking, they aren't even supposed to know anything coding!

They are supposed to be using the trading platform!!!

Платформа является метатрейдером и поставляется со всеми базовыми потребностями, никто не заставляет вас кодировать.

 

Знаете, что помогло выровнять метки?

Мои координаты X,Y взяты из экстернов.

extern int XDISTANCE =9;
extern int YDISTANCE =9;

Потом:

int X,Y;

int OnInit()
  {
 X = XDISTANCE;
 Y = YDISTANCE;
 ObjectCreate("INSTR",OBJ_LABEL,0,0,0); 
 
    return(0);
  }

int start() {
        ObjectSet("INSTR",OBJPROP_CORNER,Corner);
        ObjectSetText("INSTR",Symbol_Period+Date_Time,FontSize, "Berlin Sans FB", Color);
        ObjectSet("INSTR", OBJPROP_XDISTANCE, X);
        ObjectSet("INSTR", OBJPROP_YDISTANCE, Y); 
        ObjectSet("INSTR", OBJPROP_SELECTABLE, false);   
   return(0);
  }

Этот способ делает все правильно.

Или, скорее, делает лучше, но не совсем правильно.

 
deysmacro:

Если код самый простой, то его реализация действительно зависит от реализуемых кодов.


Платформа является метатрейдером и поставляется со всеми базовыми потребностями, никто не заставляет вас кодировать.


Как ваш комментарий должен кому-то помочь?????
 
int X,Y;

int OnInit()
  {
 X = XDISTANCE;
 Y = YDISTANCE;
 ObjectCreate("INSTR",OBJ_LABEL,0,0,0); 
 
    return(0);
  }

int start() {
        ObjectSet("INSTR",OBJPROP_CORNER,Corner);
        ObjectSetText("INSTR",Symbol_Period+Date_Time,FontSize, "Berlin Sans FB", Color);
        ObjectSet("INSTR", OBJPROP_XDISTANCE, X);
        ObjectSet("INSTR", OBJPROP_YDISTANCE, Y); 
        ObjectSet("INSTR", OBJPROP_SELECTABLE, false);   
   return(0);
  }

Вы не ставите никакой функции поиска объекта, чтобы проверить, существует ли объект уже или нет. Затем вы создаете объект соответствующим образом.


How's your comment supposed to help anybody??? 

Я помогаю вам, прямо сейчас.