Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 9

 
gyfto:

Можно написать if((b-a)*(c-a)*(d-a)>0), но не факт, что будет работать быстрее. Логическое AND и есть двоичное умножение, это всего лишь другая запись того же самого выражения, разница только в размере типов переменных. a>b - это булевая переменная, 4 байта, а b-a, если они double, то и разница будет double (8 байт), а это умножение как минимум в 2 раза дольше.


Бесценный совет.

Сейчас поясню. Можно же переписать ваше выражение как if((a>b)*(a>c)*(a>d)==1), потому что выражения в скобках принимают значения 0 или 1 (а они, в свою очередь, определены в define в прекомпиляторе как false и true).

Спасибо - думаю так будет работать быстрее
 

Ребят, подскажите пожалуйста.

В режиме теста стратегии не могу изменить цифры в свойствах оптимизации:

Минимальный баланс 200

Максимальная прибыль 10000

и тд.

В чем проблема? 

 

Подскажите, пожалуйста, какие значения могут возвращать init, start и deinit ? и что они означают?

По форуму пробовал искать - не нашел. В справочнике этой инфы нету. Наверное, секретная информация. : ))   (эмоциональный текст удален...)

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

 
Chiripaha:

Подскажите, пожалуйста, какие значения могут возвращать init, start и deinit ? и что они означают?

По форуму пробовал искать - не нашел. В справочнике этой инфы нету. Наверное, секретная информация. : ))   (эмоциональный текст удален...)

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

Совсем недавно это обсуждалось. Справка:

В MQL4 существуют 3 функции с предопределенными именами:

init() - функция, вызывающаяся в процессе инициализации модуля. В случае ее отсутствия при инициализации не вызывается никакой функции.

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

deinit() - функция, вызывающаяся в процессе деинициализации модуля. В случае ее отсутствия при деинициализации не вызывается никакой функции.

Предопределенные функции могут иметь параметры. Однако при вызове этих функций клиентским терминалом никакие параметры переданы извне не будут, а будут использованы умолчательные значения.
Функции start(), init() и deinit() могут быть вызваны из любого места модуля по общим правилам, наравне с другими функциями.

Нежелательно из функции init() вызывать start() или совершать торговые операции, так как в момент инициализации модуля могут быть не готовы данные графиков, рыночные цены и т.д. Функции init() и deinit() должны максимально быстро завершать свою работу и ни в коем случае не зацикливаться в попытке начать полноценную работу раньше вызова функции start(). 

При системном вызове возврат значения не имеет.
 

Хорошо, тогда попробую уточнить вопрос.

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

Если я правильно понял Ваш, Вадим, комментарий, то результат инициализации значения иметь не будет (в этом случае) и функция Старт будет запущена? и обойти это никак нельзя? и придется (нужно) дублировать эту проверку в старте?

 

тогда вам нужно самому вызвать инит из старта.

Зачем такие сложности ? Глобальные переменные еще никто не отменял... 

 
Chiripaha:

Хорошо, тогда попробую уточнить вопрос.

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

Если я правильно понял Ваш, Вадим, комментарий, то результат инициализации значения иметь не будет (в этом случае) и функция Старт будет запущена? и обойти это никак нельзя? и придется (нужно) дублировать эту проверку в старте?

Рустам ответил:

FAQ:

тогда вам нужно самому вызвать инит из старта.

Зачем такие сложности ? Глобальные переменные еще никто не отменял... 

Объявляете на глобальном уровне переменные и инициализируете, как надо. Всем функциям одного модуля видны глобальные переменные.
 
Zhunko:

Рустам ответил:

Объявляете на глобальном уровне переменные и инициализируете, как надо. Всем функциям одного модуля видны глобальные переменные.

Да, если это только не проверка на ограничение доступа к программе, к примеру.
 
FAQ:

тогда вам нужно самому вызвать инит из старта.

Зачем такие сложности ? Глобальные переменные еще никто не отменял... 


Не проще ли флагом проверять? Есс-но глобальным..
 
hoz:

Не проще ли флагом проверять? Есс-но глобальным..

Нет, не проще. Т.к. если был отрицательный флаг (или глобальная переменная), то проверку все равно нужно запускать. И флаг и глобалька сработают лишь в положительном случае. А некоторые функции все равно нужны в Старте (хотя, тут по-разному бывает).

Как ни крути, в старте все равно запускать: либо через повтор "инита", что не менее гиморно, либо через повтор нужных функций.