Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1022
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
или спрошу проще:
в функции OnCalculate() вставлен цикл, так вот он проходит только одну итерацию, следующую только при обновлении графика....
или спрошу проще:
в функции OnCalculate() вставлен цикл, так вот он проходит только одну итерацию, следующую только при обновлении графика....
Большое спасибо! Работает странно права у меня админские, специально для папки терминала дал все разрушения владельцу, помогло, но потом перестало ратотать. Далее пытался прочитать файл лога функцией FileReadStrArrayW (если не ошибаюсь с названием) считываютсяпустые строки, в режиме ansi скрипт зависает . Получилось считать ansi коды только FileReadCharArr . Может у вас есть какой-то пример, как парсить файл лога с помощью вашей библиотекой? Буду очень признателен!
Да, есть теперь проблема в чтении лога. Раньше было проще.
Дело в том, что сам файл с ANSI-кодировкой, а строки теперь UNICODE.
Вот такой скрипт работает:
Но он будет работать только, если предварительно файл лога сохранить в UNICODE!
Т.е. библиотека работает правильно. Надо придумать простой способ преобразования от ANSI-кодировки файла в UNICODE-строковый массив или мне в библиотеку добавить функцию, которая преобразовывала бы кодировку строк при чтении файла.
=====================Вариант 1. Можно не заморачиваться с массивами. Прочитать весть файл, как ANSI, преобразовать в UNICODE, потом парсить средствами MQL.
Вариант 2. Прочитать, как ANSI, записать в текущий каталог терминала, читать его с помощью MQL-функций для работы с CSV-файлами.
Вариант 3. Создать символическую ссылку на файл лога в песочницу функцией из этой же библиотеки и читать его с помощью MQL-функций для работы с CSV-файлами:
По моему, это самый красивый и простой вариант.
Пытаюсь написать один индикатор канала. Значения для отрисовки на графике вычислил и запихнул в массивы double tob[] и double tos[], но при попытке связать их с буфером для отрисовки на графике - в строках 25 и 26:
, эти массивы вместо нужных значений, типа:
0/1.424/1.3679
1/1.42/1.3639
заполняются числом 2147483647, вот так:
0/2147483647/2147483647
1/2147483647/2147483647
2/2147483647/2147483647
Как это вылечить?
Помогите найти шаблон для MT4 , чтобы разделять ночь и день.
Допустим на графике с 00:00 до 8:00 график одним цветом, а с 8:00 до 00:00 другим цветом .
Приветствую всех.
Столкнулся с такой проблемой:
фрагмент кода робота:
int per=Period();
if(per = 60)
{
Print("Если период не Н1 - этой строки не должно быть в журнале");
Comment (...);
... // далее сопственно тело робота
...
...
}
подразумевает, что ни тело робота, ни строка Print(...) , ни Comment(...) на экран НЕ будут выполнятся, если на графике включен период, отличный от Н1.
Однако, всё исполняется на любом периоде. Почему ?
Как прописать грамотно, что если период на графике не соответствует заданному - вернуть управление терминалу. (кстати пробовал через RETURN (0) - не помогает - всё равно всё печатает...)
Приветствую всех.
Столкнулся с такой проблемой:
фрагмент кода робота:
int per=Period();
if(per = 60)
{
Print("Если период не Н1 - этой строки не должно быть в журнале");
Comment (...);
... // далее сопственно тело робота
...
...
}
подразумевает, что ни тело робота, ни строка Print(...) , ни Comment(...) на экран НЕ будут выполнятся, если на графике включен период, отличный от Н1.
Однако, всё исполняется на любом периоде. Почему ?
Как прописать грамотно, что если период на графике не соответствует заданному - вернуть управление терминалу. (кстати пробовал через RETURN (0) - не помогает - всё равно всё печатает...)
Вы делаете присваивание, а нужно сравнение if(per == 60)
Вот спасибо товарищ... а то весь мозг прокипятил... был значительный перерыв в программировании - подзабыл многое, из того немногого что знал...
---
Ещё бы вопросик... фрагмент поиска макс/мини первых 8 часов в сутках по терминалу:
int h=TimeHour(TimeCurrent()); // узнаём текущий терминальный час (0...23)
if (h<8) return(0); // если нет H1 первых 8 свечей суток = уходим...
double Maxi=High[iHighest(NULL,PERIOD_H1,MODE_HIGH,8,h-7)]; // определяем макс первых 8 свечей в сутках.
double Mini=Low[iLowest(NULL,PERIOD_H1,MODE_LOW,8,h-7)];
Последние две строки работают некорректно, если на графике установлен период не Н1. Почему ? Ведь период для вычислений роботу задан явно...
Если включить на графике к примеру Н4 - робот и пересчитает свечами Н4 (так же и с другими периодами).
Вот спасибо товарищ... а то весь мозг прокипятил... был значительный перерыв в программировании - подзабыл многое, из того немногого что знал...
---
Ещё бы вопросик... фрагмент поиска макс/мини первых 8 часов в сутках по терминалу:
int h=TimeHour(TimeCurrent()); // узнаём текущий терминальный час (0...23)
if (h<8) return(0); // если нет H1 первых 8 свечей суток = уходим...
double Maxi=High[iHighest(NULL,PERIOD_H1,MODE_HIGH,8,h-7)]; // определяем макс первых 8 свечей в сутках.
double Mini=Low[iLowest(NULL,PERIOD_H1,MODE_LOW,8,h-7)];
Последние две строки работают некорректно, если на графике установлен период не Н1. Почему ? Ведь период для вычислений роботу задан явно...
Если включить на графике к примеру Н4 - робот и пересчитает свечами Н4 (так же и с другими периодами).
Вы вот тут получаете номер макс/мин бара: iHighest(NULL,PERIOD_H1,MODE_HIGH,8,h-7)
А потом вставляете к примеру бар номер 2, в итоге получаете: High[2] , и на другом таймфрейме вы и получите значение, отличное от Н1. Почитайте о High.
iHigh(NULL,PERIOD_H1, iHighest(NULL,PERIOD_H1,MODE_HIGH,8,h-7) )