Проблемы с кодированием локальных и глобальных переменных на mql4
Results 1 to 10 of 10

Thread: Проблемы с кодированием локальных и глобальных переменных на mql4

  1. #1
    Вложений: 2 Привет,
    Я довольно новичок в mql4. У меня все в порядке, но в последнее время я был полностью в шоке от проблемы, с которой я столкнулся. Я закодировал простой ea, который отлично работает, когда я объявляю локальную переменную для buyorder
    int buyorder = OrderSend (Символ (), OP_BUY, LotSize, Ask, 3,0,0, NULL, MagicNumber, 0, Green);

    если (buyordergt; 0)
    OrderModify (buyorder, OrderOpenPrice (), BSL, БТП, 0, CLR_NONE);

    но если я объявляю buyorder как глобальную переменную (и убираю int), она не работает. Он просто продолжает изменять порядки бесконечно. В моей жизни я не могу понять, почему это должно произойти, поскольку глобальная переменная должна быть использована в любом месте программы, и ее ценность должна быть в состоянии измениться. Я мог бы придерживаться локальной переменной, но я хочу расширить ea, чтобы сделать несколько заказов и использовать трейлинг-стопы и т. Д., И мне нужно будет использовать глобальные переменные. Я включил ea ниже. Первая версия (локальная переменная) работает, вторая (глобальная) - нет. Если бы кто-нибудь мог мне помочь, это было бы так оценено, как я буквально потратил дни, пытаясь это выработать. PS Это также относится к переменной sellorder.
    благодаря

    https://www.russia-forex.ru/attachme...1727520325.mq4

    https://www.russia-forex.ru/attachme...1081469781.mq4

  2. #2

    Quote Originally Posted by ;
    Привет, я довольно новичок в mql4. У меня все в порядке, но в последнее время я был полностью в шоке от проблемы, с которой я столкнулся. Для жизни меня я не могу понять, почему это ...
    Начните с выполнения правильного вложения кода. Форматирование действительно плохое.
    https://en.wikipedia.org/wiki/Indent_styleЗатем заключите все if-инструкцииблоки в фигурные скобки {}. Затем вы увидите, что вы используете неопределеннуюнеинициализ ированную переменную в одной из программ. Компилятор не должен успешно скомпилировать его. Или что переменная не обновляется в другой версии. Я также предложил бы определить все локальные переменные в верхней части каждой функции и использовать фигурные скобки, чтобы заключить все блоки. Вероятно, это обеспечило бы обратной связи через компилятор, что что-то не так. TLDR: плохое форматирование кода; Вложение операторов if без фигурных скобок; Объявление встроенной переменной. Компилятор Tricking для утверждения плохого кода; Код работает не так, как ожидалось.

  3. #3
    Когда вы объявляете локальную переменную, она доступна только в том экземпляре, который вызывается {}. Каждый раз, когда start {} запускает, он повторно объявляет переменную. Глядя на ваш код, переменная buyorder вызывается только в том случае, если нет открытых ордеров BUY, и открывается новый заказ. Если порядок существует, переменная buyorder игнорируется операторами if и поэтому не объявляется, и поэтому процедура изменения порядка не вызывается. т.е. если buyorder не вызван, то buyorder остается необъявленным или имеет нулевое или нулевое значение, как buyorder gt; 0 - false. Поэтому никакая модификация заказа. С другой стороны, если вы объявляете глобальную переменную, то buyorder сохранит значения, и поэтому код, как написано, будет пытаться каждый раз изменять, как buyorder gt; 0 верно. Надеюсь, это поможет Фреду

  4. #4
    Спасибо, Фред, спасибо, Ксафод, так легко ошибиться с этим кодированием! Обязательно попробуем сделать кодировку более разборчивой. Еще раз спасибо за ваш вклад!

  5. #5

    Quote Originally Posted by ;
    Спасибо, Фред, спасибо, Так легко ошибиться с этим кодированием! Обязательно попробуем сделать кодировку более разборчивой. Еще раз спасибо за ваш вклад!
    Вы должны только вызвать OrderModify один раз после OrderSend. Тогда важно не то, является ли buyorder локальным или глобальным. Местный предпочтительнее. Введенный код int buyorder = 0; if (PreviousFastlt; PreviousSlow CurrentFastgt; CurrentSlow) {if (OpenOrdersThisPair (Symbol ()) == 0) {buyorder = OrderSend (Symbol (), OP_BUY, LotSize, Ask, 3,0,0, NULL, MagicNumber, 0, Green ); if (buyordergt; 0) {OrderModify (buyorder, OrderOpenPrice (), bsl, btp, 0, CLR_NONE); }}}

  6. #6

    Quote Originally Posted by ;
    Я не могу понять, почему это должно произойти, поскольку глобальная переменная должна использоваться в любом месте
    Это точная проблема. Это проблема. В обоих примерах операторы if (lt; buyordersellordergt; gt; 0) находятся в неправильном объеме; с той разницей, что сфера применения buyordersellorder изменяется с примерами, вызывая плохое действие во втором примере. См. Пример кода Xaphod для правильной области обзора. Если я могу спросить, на каком языке вы использовали код?

  7. #7

    Quote Originally Posted by ;
    {quote} Это точная проблема. Это проблема. В обоих примерах операторы if (lt; buyordersellordergt; gt; 0) находятся в неправильном объеме; с той разницей, что сфера применения buyordersellorder изменяется с примерами, вызывая плохое действие во втором примере. См. Пример кода Xaphod для правильной области обзора. Если я могу спросить, на каком языке вы использовали код?
    Привет, рок! На самом деле я не знаю, как программировать, я много читал и читал книгу mql4. Я понимаю из приведенных выше примеров, где я поступил не так, но я не уверен, что вы подразумеваете под прицелом. Благодаря!

  8. #8

    Quote Originally Posted by ;
    {quote} Привет! На самом деле я не знаю, как программировать, я много читал и читал книгу mql4. Я понимаю из приведенных выше примеров, где я поступил не так, но я не уверен, что вы подразумеваете под прицелом. Благодаря!
    Я имею в виду областьконтекст:
    https://en.wikipedia.org/wiki/Scope_(computer_science) Операторы if, которые проверяют порядок покупкипродажи, были помещены в неправильный контекст, поскольку они принадлежали к контексту (сфере) других (внешних) if-операторов.

  9. #9
    Привет, как можно видеть различия между глобальной переменной и локалью, заключается в том, что глобальная переменная может использоваться более чем EA сразу для передачи данных между EA и Indiors, локальная переменная известна только EA объявляет об этом. Надеюсь, вы найдете это полезным

  10. #10

    Quote Originally Posted by ;
    Привет, как можно видеть различия между глобальной переменной и локалью, заключается в том, что глобальная переменная может использоваться более чем EA сразу для передачи данных между EA и Indiors, локальная переменная известна только EA объявляет об этом. Надеюсь, вы найдете это полезным
    Терминология является неудачной и может смущать некоторых. Вы имеете в виду глобальную переменную клиентского терминала. Ранние сообщения ссылаются на переменную globalscope, которая может использоваться только в EA и т. Д., Где она объявлена.

Действующие разрешения

  • Вы не можете создавать новые темы
  • Вы не можете размещать ответы
  • Вы не можете использовать вложения
  • Вы не можете редактировать ваши записи
  •  
  • BB-код - Вкл.
  • Смайлики - Вкл.
  • Код [IMG] - Вкл.
  • Код [VIDEO] - Вкл.
  • HTML-код - Выкл.
Веб-сайт использует cookies
Веб-сайт использует cookies, в настоящее время некоторые из них уже установлены. Вы можете ознакомиться с более подробной информацией об использовании нами cookies здесь. Чтобы принять условия использования cookies, пожалуйста, нажмите на кнопку справа. Если вы продолжаете пользоваться веб-сайтом, вы по умолчанию принимаете условия использования cookies.