Ваши вопросы по языку MQL4

hoz

Активный участник
hoz
Попробовал... Облом какой-то, надо подумать.


Подумай! Я уже надумался...:laugh:

hoz
Про extern - переменные, объявленные в extern можно потом менять :)


Ну это если руками из под оболочки))

hoz
Вопрос на засыпку - а когда они обратно к дефолтным скинутся?


А хз, я такого не говорил..
 

qqmber

Почетный гражданин
По ходу ничего bs_Symbol не инициализируется первоначально при вызове её из функции.

Получается, что пусто и там, где не инициализоровалась переменная _string и в нашей доблесной bs_Symbol

Слушаю ещё варианты:facepalm:

Надо какой-нибудь ордер заселектить, чтобы это работало. У автора это видимо как-то гарантируется вне этой функции.
 

qqmber

Почетный гражданин
Хм. extern сбрасываются? Это как?

hoz
Попробовал... Облом какой-то, надо подумать.
Про extern - переменные, объявленные в extern можно потом менять :)
Вопрос на засыпку - а когда они обратно к дефолтным скинутся?

Правила инициализации вообще не элементарные, вот тут добрый человек собрал все их вместе. forum.mql4.com/ru/45031
Кроме того, я слышал, что в последних билдах изменение значений extern переменных внутри кода работает некорректно. Как именно - не помню и не проверял, но от греха не советую этим заниматься.
 

ansol

Местный знаток
Надо какой-нибудь ордер заселектить, чтобы это работало. У автора это видимо как-то гарантируется вне этой функции.

Тьфу, блин! Не заметил! Конечно, селектить надо!
Я нашел через getlasterrror - пишет 4105 no order selected
Проблем-то...:D
У автора это блок из трех или четырех библиотек и все они друг на друга завязаны, если смотреть выше выложенный один MQH
 
Последнее редактирование:

Obloco

Заблокирован
Помогите пожалуйста разобраться с машкой!

Мне хотелось бы чтобы TimeFrame работал правильно.
При такой записи все работает О'key.

PHP:
 int limit;
     int counted_bars=IndicatorCounted();
     if(counted_bars>0) counted_bars--;
     limit=Bars-counted_bars;
for (int i = limit; i >= 0; i--){
      Buffer_1[i] = ((iMA(Symbol(), TimeFrame, 21,0,0, PRICE_TYPICAL, i);
}

А при такой записи линии плывут, либо надо оставлять limit=Bars и удалять counted_bars. Очень хочется сохранить counted_bars. У меня без него все виснет.

PHP:
int limit;
     int counted_bars=IndicatorCounted();
     if(counted_bars>0) counted_bars--;
     limit=Bars-counted_bars;
for (int i = limit; i >= 0; i--){
      Buffer_1[i] = (iMA(Symbol(), TimeFrame, 5,0,0, PRICE_TYPICAL, i)-(iMA(Symbol(), TimeFrame, 21,0,0, PRICE_TYPICAL, i);
}
 

hoz

Активный участник
Правила инициализации вообще не элементарные, вот тут добрый человек собрал все их вместе. forum.mql4.com/ru/45031.


Да уж, там есть кой-чиво полезного. Реально по полочкам всё разложено. Имеет ли это актуальность сейчас, это уже хз.. Но я взял для себя некоторые моменты. Особо интересно, что статические и глобальные сохраняют свои текущие значения во различных ситуациях.

Кроме того, я слышал, что в последних билдах изменение значений extern переменных внутри кода работает некорректно. Как именно - не помню и не проверял, но от греха не советую этим заниматься.


В смысле? Т.е. работает эксперт, . залез в код и перебил значение переменной.. скомпилировал... и типа некорректно будет работать дальше эксперт?
 

ansol

Местный знаток
В смысле? Т.е. работает эксперт, . залез в код и перебил значение переменной.. скомпилировал... и типа некорректно будет работать дальше эксперт?
В смысле, не надо менять значение переменной extern в самом эксперте! Т.е. получил, засунул в другую переменную и там ее уже меняешь как хочешь, а исходную не трогаешь "во избежание"
 

hoz

Активный участник
Тьфу, блин! Не заметил! Конечно, селектить надо!
Я нашел через getlasterrror - пишет 4105 no order selected
Проблем-то...:D
У автора это блок из трех или четырех библиотек и все они друг на друга завязаны, если смотреть выше выложенный один MQH


У меня основные библиотеки все есть, не фига там не завязана эта переменная (bs_Symbol). Я уже перекопал всё. Изучая его логику, я уже понимаю, что у него куда идёт. Но это даже не библиотеки, а набор функций, хотя всё повязана одно на одно, от того и сложно читать изначально. А не библиотеки дословно, т.к. они не компялятся в таком виде, без доработки. Ну и автор мне сказал лично, что это первый вариант.. Т.е. сейчас у него уже другой вариант библ, и, возможно, уже всё будет как нужно.


Так. что если кто там увидел, а чём эта bs_Symbol завязана, я с радостью выслушаю :D Да вот только навряд ли.
 

ansol

Местный знаток
Так. что если кто там увидел, а чём эта bs_Symbol завязана, я с радостью выслушаю
Написали же выше - надо сначала сделать OrderSelect, тогда все будет работать, а без него не работает из-за "error 4105 no oreder selected"
 

hoz

Активный участник
А при такой записи линии плывут, либо надо оставлять limit=Bars и удалять counted_bars. Очень хочется сохранить counted_bars. У меня без него все виснет.

PHP:
int limit;
     int counted_bars=IndicatorCounted();
     if(counted_bars>0) counted_bars--;
     limit=Bars-counted_bars;
for (int i = limit; i >= 0; i--){
      Buffer_1[i] = (iMA(Symbol(), TimeFrame, 5,0,0, PRICE_TYPICAL, i)-(iMA(Symbol(), TimeFrame, 21,0,0, PRICE_TYPICAL, i);
}


А как насчёт скобок:

PHP:
 Buffer_1[i] = ((iMA(Symbol(), TimeFrame, 5,0,0, PRICE_TYPICAL, i)-(iMA(Symbol(), TimeFrame, 21,0,0, PRICE_TYPICAL, i))
 

aqpfn

Новичок форума
Цикл While

Здравствуйте. Помогите дубу). Вот код:
PHP:
int start(){
int a=1;
  
   while(a<10){a=a+4;Alert(a);}
   return(0);
  }
Alert(a) в терминале выдает разные значения, когда выражения в теле цикла меняются местами: 13 и 9. Объясните пожалуйста почему так получается ?
 

Obloco

Заблокирован
Скобки с одной стороны остались случайно, там переумножение было.
 

hoz

Активный участник
В смысле, не надо менять значение переменной extern в самом эксперте! Т.е. получил, засунул в другую переменную и там ее уже меняешь как хочешь, а исходную не трогаешь "во избежание"


А как можно иначе? Кто же трогает исходные переменные то? То же самое, что значения массив-таймсерии не трогаю, так же и данные входные только используют, но не переопределяют, на сколько я знаю. По крайне мере я такого не встречал. По-моему это не верно. Да и не логично.
 

hoz

Активный участник
Написали же выше - надо сначала сделать OrderSelect, тогда все будет работать, а без него не работает из-за "error 4105 no oreder selected"


Он и там в библиотеке выбран.. Я не о том..
Тут был головняк в понимании того, что он хотел этим реализовать. По ходу, судя из моего эксперимента, условие:

PHP:
fs_Symbol != bs_Symbol


означает не сравнение с нулём, а сравнение с пустым значением. Т.е. тут важно проверить если ли хоть какое-то значение у переменной fs_Symbol. Если значения нет, т.е. вообще пустота, то не условие не выполнено. Вот что я тогда не понимал. Думал нафига это нужно..
 

yupyalta

Гуру форума
Вот библиотека может кому и нужна .

________________________________________

Название файла: b-Error.rar download_trans.gif Скачать

Описание:
Библиотека функций b-Error предназначена для обеспечения программиста MQL4 функциями для работы с и над ошибками. В данный момент библиотека содержит только функцию ErrorRU(), которая возвращает краткое или подробное русскоязычное описание ошибки по её коду.

Для использования библиотеки b-Error в советнике нужно:

файл b-Error.mqh поместить в папку ..\experts\include\
в верхней части кода советника перед описаниями функций добавить строку:

#include <b-error.mqh>

в нужном месте советника обеспечить вызов функции ErrorRU()

Функция ErrorRU принимает два параметра, последний из которых является необязательным:

er - Код ошибки. Обязательный параметр.
po - Подробность описания. False - краткое описание, True - подробное. Необязательный параметр. Значение по умолчанию False.
 

Вложения

  • b-Error.rar
    5,1 КБ · Просмотры: 21

qqmber

Почетный гражданин
Здравствуйте. Помогите дубу). Вот код:
PHP:
int start(){
int a=1;
  
   while(a<10){a=a+4;Alert(a);}
   return(0);
  }
Alert(a) в терминале выдает разные значения, когда выражения в теле цикла меняются местами: 13 и 9. Объясните пожалуйста почему так получается ?

Переменная а пробегает значения 1 5 9 13. Если Alert() стоит после инкремента, будет печатать 5 9 13, а если до, то 1 5 9.
 

Leonup

Новичок форума
Пересечение МА

Добрый день, уважаемые форумчане!

Сделать пересечение двух МА – несложно.
А вот как написать код, в котором, например, MA5 пересекает снизу вверх последовательно три МА: МА31, МА21, MA11?

Прошу Вашей помощи.
Заранее благодарен.
 

AlexeyVik

Программист mql4 mql5
Добрый день, уважаемые форумчане!

Сделать пересечение двух МА – несложно.
А вот как написать код, в котором, например, MA5 пересекает снизу вверх последовательно три МА: МА31, МА21, MA11?

Прошу Вашей помощи.
Заранее благодарен.
Можно конечно тупо перебрать все МА
if(MA5 > MA31 && MA5 > MA21 && MA5 > MA11)
А можно и подумать... Ведь если MA5 > MA11 то естесственно она будет выше MA21 и безусловно выше MA31. Конечно если MA одного метода (ma_method), по одинаковым ценам(applied_price) и без сдвига.
 

Leonup

Новичок форума
Можно конечно тупо перебрать все МА
if(MA5 > MA31 && MA5 > MA21 && MA5 > MA11)
А можно и подумать... Ведь если MA5 > MA11 то естесственно она будет выше MA21 и безусловно выше MA31. Конечно если MA одного метода (ma_method), по одинаковым ценам(applied_price) и без сдвига.

Спасибо за оперативный ответ. Я не указал, что у тех МА, которые пересекает М5 методы одинаковые, а вот цены соответственно такие: PRICE_HIGH, PRICE_CLOSE, PRICE_LOW.
 

qqmber

Почетный гражданин
А можно и подумать... Ведь если MA5 > MA11 то естесственно она будет выше MA21 и безусловно выше MA31. Конечно если MA одного метода (ma_method), по одинаковым ценам(applied_price) и без сдвига.
Это почему вдруг? Машки могут быть расположены в любом порядке, в зависимости от истории.
 
Верх