Здравствуйте! Моя цель - перенести индикатор с помощью создания функции в советник.
Первый этап - а именно создание функции я выполнил. Но следующий - проверка, никак не получается.
Индикатор рисует каналы. У него 4 буфера и куча external переменных. Все это я разместил в функции.
Но при создании проверочного советника, чтобы удостовериться в точности работы с помощью сравнения индикатора и моей функции - я никак не могу добиться компилирования.
Постоянные ошибки внешних переменных, которых не было при создании функции, в советнике всплыли.
Пожалуйста, дайте мне совет или ссылку на пример. Я использовал статьи GODZILLA, но его примеры отличаются от моего.
Схема примерно такая:
всё, что было в init() индикатора переносите в отдельную функцию, например, fInit_Indicator() и прописываете её в init() советника, при этом не забываем убрать из кода всё, что касается инициализации индикаторных буферов.
копируете все глобальные переменные индикатора и помещаете их в глобальные переменные советника. Не забудьте буферы индикатора при объявлении в советнике определить им размеры. Типа gd_Buf1[100], gd_Buf2[100] и т.д. Я думаю, что 100 значений Вам хватит.
функцию start() индикатора переименовываете, например, fMyIndicator() и переносите в функцию start() советника перед кодом открытия ордеров (для принятия решения).
ещё не нужно забыть, что индикаторный буфер отличается от "неиндикаторного". Для этого существует несколько вариантов решения:
при приходе нового бара все данные в "неиндикаторном" массиве сдвигаются, освобождая 0-вой индекс, куда помещается новое расчётное значение.
опять же, при приходе нового бара пересчитывать весь "неиндикаторный массив".
Мне необходимо в массив на каждом новом тике загружать значения количества пунктов.
Размер массива каждый раз будет разным. Как быть в этом случае, использовать АррейРесайз на каждой итерации цикла?
1-ое: изначально Ваша философия изменения размера массива дефектна, для обработки показаний индикаторов в 99-ти случаях из 100 можно обойтись 10-тью ячейками;
2-ое: пересчитывать эти показания на каждом тике - блажь мало осведомлённого мозга.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Здравствуйте! Моя цель - перенести индикатор с помощью создания функции в советник.
Первый этап - а именно создание функции я выполнил. Но следующий - проверка, никак не получается.
Индикатор рисует каналы. У него 4 буфера и куча external переменных. Все это я разместил в функции.
Но при создании проверочного советника, чтобы удостовериться в точности работы с помощью сравнения индикатора и моей функции - я никак не могу добиться компилирования.
Постоянные ошибки внешних переменных, которых не было при создании функции, в советнике всплыли.
Пожалуйста, дайте мне совет или ссылку на пример. Я использовал статьи GODZILLA, но его примеры отличаются от моего.
Схема примерно такая:
Потренируйтесь - ничего сложного.
Помогите написать условие при котором советник будет умножать лот в два раза после открытия n-ордеров
Добрый день!
Продолжаю разбираться с массивами.
Мне необходимо в массив на каждом новом тике загружать значения количества пунктов.
Размер массива каждый раз будет разным. Как быть в этом случае, использовать АррейРесайз на каждой итерации цикла?
Добрый день. в тему массивов.
есть ячейка такого типа
12345,p,fgh,2011-01-01,55,66
как можно из нее получить 55?
с ув. спасибо.
Если массив разнородный, то вероятно нужно привести все элементы в тип string и далее искать нужный через
StringFinde (https://www.mql5.com/ru/forum/138609/page22#613148) . Если неправ поправьте.
else gd_200 = AccountBalance() * RiskPercent / 100.0 / 10000.0;
чем заменить чтобы советник считал не от баланса, а от количества открытых ордеров.
За ответ буду благодарен.
else gd_200 = AccountBalance() * RiskPercent / 100.0 / 10000.0;
чем заменить чтобы советник считал не от баланса, а от количества открытых ордеров.
За ответ буду благодарен.
Добрый день. в тему массивов.
есть ячейка такого типа
12345,p,fgh,2011-01-01,55,66
как можно из нее получить 55?
с ув. спасибо.
https://book.mql4.com/ru/variables/arrays
Помогите написать условие при котором советник будет умножать лот в два раза после открытия n-ордеров
Добрый день!
Продолжаю разбираться с массивами.
Мне необходимо в массив на каждом новом тике загружать значения количества пунктов.
Размер массива каждый раз будет разным. Как быть в этом случае, использовать АррейРесайз на каждой итерации цикла?
1-ое: изначально Ваша философия изменения размера массива дефектна, для обработки показаний индикаторов в 99-ти случаях из 100 можно обойтись 10-тью ячейками;
2-ое: пересчитывать эти показания на каждом тике - блажь мало осведомлённого мозга.