Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 178
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Да, спасибо!
Нет, но всё равно спасибо!)Добрый вечер.
При использовании iOpen задается shift. Если истории не хватает для указанного шифта, возвращается iOpen самого старого бара.
Вопрос: Как сделать проверку на наличие бара с указанным шифтом? И в случае если истории не хватает не возвращать iOpen?
Добрый вечер.
При использовании iOpen задается shift. Если истории не хватает для указанного шифта, возвращается iOpen самого старого бара.
Вопрос: Как сделать проверку на наличие бара с указанным шифтом? И в случае если истории не хватает не возвращать iOpen?
CopyOpen
Функция получает в массив open_array исторические данные цен открытия баров для указанной пары символ-период в указанном количестве. Необходимо отметить, что отсчет элементов от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар.
При копировании заранее неизвестного количества данных рекомендуется в качестве приемного массива использовать динамический массив, так как если данных оказывается меньше (или больше), чем вмещает массив, то производится попытка перераспределения массива таким образом, чтобы запрошенные данные поместились целиком и полностью.
Если необходимо копировать заранее известное количество данных, то лучше это делать в статически выделенный буфер, чтобы избежать излишнего перевыделения памяти.
Неважно, какое свойство имеет приёмный массив - as_series=true или as_series=false, данные будут скопированы таким образом, что самый старый по времени элемент будет в начале физической памяти, отведенной под массив. Существует 3 варианта функции.
Обращение по начальной позиции и количеству требуемых элементов
int CopyOpen(
string symbol_name, // имя символа
ENUM_TIMEFRAMES timeframe, // период
int start_pos, // откуда начнем
int count, // сколько копируем
double open_array[] // массив для копирования цен открытия
);
Обращение по начальной дате и количеству требуемых элементов
int CopyOpen(
string symbol_name, // имя символа
ENUM_TIMEFRAMES timeframe, // период
datetime start_time, // с какой даты
int count, // сколько копируем
double open_array[] // массив для копирования цен открытия
);
Обращение по начальной и конечной датам требуемого интервала времени
int CopyOpen(
string symbol_name, // имя символа
ENUM_TIMEFRAMES timeframe, // период
datetime start_time, // с какой даты
datetime stop_time, // по какую дату
double open_array[] // массив для копирования цен открытия
);
Параметры
symbol_name
[in] Символ.
timeframe
[in] Период.
start_pos
[in] Номер первого копируемого элемента.
count
[in] Количество копируемых элементов.
start_time
[in] Время бара, соответствующее первому элементу.
stop_time
[in] Время бара, соответствующее последнему элементу.
open_array[]
[out] Массив типа double.
Возвращаемое значение
Количество скопированных элементов массива либо -1 в случае ошибки.
Примечание
Если интервал запрашиваемых данных полностью находится вне доступных данных на сервере, то функция возвращает -1. В случае если запрашиваются данные за пределами TERMINAL_MAXBARS (максимальное количество баров на графике), функция также вернет -1.
Если запрашиваемые таймсерии еще не построены или их необходимо загрузить с сервера, функция сразу же вернет -1.
При запросе данных из эксперта или скрипта, будет инициирована загрузка с сервера, если локально этих данных у терминала нет, либо начнется построение нужной таймсерии, если данные можно построить из локальной истории, но они еще не готовы. Функция вернет то количество данных, которые будут готовы к моменту истечения таймаута, но загрузка истории будет продолжаться, и при следующем аналогичном запросе функция вернет уже больше данных.
При запросе данных по начальной дате и количеству требуемых элементов возвращаются только данные, дата которых меньше (раньше) или равна указанной. При этом интервал задается и учитывается с точностью до секунды. То есть дата открытия любого бара, для которого возвращается значение (объем, спред, значение в индикаторном буфере, цена Open, High, Low, Close или время открытия Time), всегда равна или меньше указанной.
При запросе данных в заданном диапазоне дат возвращаются только данные, попадающие в запрашиваемый интервал, при этом интервал задается и учитывается с точностью до секунды. То есть время открытия любого бара, для которого возвращается значение (объем, спред, значение в индикаторном буфере, цена Open, High, Low, Close или время открытия Time), всегда находится в запрошенном интервале.
Таким образом, если текущий день недели Суббота, то при попытке скопировать данные на недельном таймфрейме с указанием start_time=Последний_Вторник и stop_time=Последняя_Пятница функция вернет 0, так как время открытия на недельном таймфрейме всегда приходится на воскресенье, но ни один недельный бар не попадает в указанный диапазон.
Если необходимо получить значение, соответствующее текущему незавершенному бару, то можно использовать первую форму вызова с указанием start_pos=0 и count=1.
Приветствую.
Господа, подскажите как прописать условие пересечения ценой уровней с 1-2-3 нулями в конце?
Приветствую.
Господа, подскажите как прописать условие пересечения ценой уровней с 1-2-3 нулями в конце?
Путем сравнения прошлого и текущего значения цены с этим уровнем, если уровень находиться между этими значениями значит произошло пересечение.
Путем сравнения прошлого и текущего значения цены с этим уровнем, если уровень находиться между этими значениями значит произошло пересечение.
А как прописать эти уровни, для сравнения?
Или - как прописать чтоб у числа оставалось нужное количество знаков после запятой? Не округляя а именно удаляя .
А как прописать эти уровни, для сравнения?
Или - как прописать чтоб у числа оставалось нужное количество знаков после запятой? Не округляя а именно удаляя .
Вот функция по нахождению
Sergey Gritsay, Vitaly Muzichenko спасиб.
Мне вот еще подсказали функцию MathFloor() - Возвращает ближайшее снизу целое числовое значение.
Копайте MySQL.
Sergey Gritsay:
Для этого нужно создать сервер вне локального компьютера и передавать данные через этот сервер, для МТ соответственно пишется индикатор или советник, который эти данные обрабатывает, либо ставите терминалы на какой либо ВПС-сервер и там настраиваете копировщик сделок с вашего счета на счета друзей. Еще вариант через сервис сигналы копировать ваши сделки совершенные по данным уровням. В общем тут надо подходить из ваших финансовых возможностей для заказа соответствующего софта.
MosheDayan:
Напомню предисторию. Есть индикатор ежедневно получающий данные из csv и отображающий их(горизонтальные уровни) на графике. Создал сервер из домашнего ноутбука (слабый, но расчетов там не нужно и будет отдавать csv, а они очень маленькие). На сервере для теста связи залил движок обычного форума - все вроде как видно извне. Помогите советом. Что должно быть на сервере для чтения из него индикатором csv файлов? Т.е. как связывается индикатор с базой csv? Может залить движок ФТП сервера или что-то иное и может для MT необходимо открыть какие-нибудь специальные порты? Или я полез не в ту сторону вообще? Спасибо
Друзья, можно еще вопрос. Можно ли не грузить домашний ноут, а воспользоваться, для связи индикатора с csv файлами, бесплатными облачными хранилищами файлов такими как, например Яндекс.Диск или Облако@mail.ru или Box.net и т.д. Спасибо
Вот функция по нахождению