При использовании iOpen задается shift. Если истории не хватает для указанного шифта, возвращается iOpen самого старого бара.
Вопрос: Как сделать проверку на наличие бара с указанным шифтом? И в случае если истории не хватает не возвращать iOpen?
CopyOpen
Функция получает в массив open_array исторические данные цен открытия баров для указанной пары символ-период в указанном количестве. Необходимо отметить, что отсчет элементов от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар.
При копировании заранее неизвестного количества данных рекомендуется в качестве приемного массива использовать динамический массив, так как если данных оказывается меньше (или больше), чем вмещает массив, то производится попытка перераспределения массива таким образом, чтобы запрошенные данные поместились целиком и полностью.
Если необходимо копировать заранее известное количество данных, то лучше это делать в статически выделенный буфер, чтобы избежать излишнего перевыделения памяти.
Неважно, какое свойство имеет приёмный массив - as_series=true или as_series=false, данные будут скопированы таким образом, что самый старый по времени элемент будет в начале физической памяти, отведенной под массив. Существует 3 варианта функции.
Обращение по начальной позиции и количеству требуемых элементов
int CopyOpen( stringsymbol_name, // имя символа ENUM_TIMEFRAMEStimeframe, // период intstart_pos, // откуда начнем intcount, // сколько копируем doubleopen_array[]// массив для копирования цен открытия );
Обращение по начальной дате и количеству требуемых элементов
int CopyOpen( stringsymbol_name, // имя символа ENUM_TIMEFRAMEStimeframe, // период datetimestart_time, // с какой даты intcount, // сколько копируем doubleopen_array[]// массив для копирования цен открытия );
Обращение по начальной и конечной датам требуемого интервала времени
int CopyOpen( stringsymbol_name, // имя символа ENUM_TIMEFRAMEStimeframe, // период datetimestart_time, // с какой даты datetimestop_time, // по какую дату doubleopen_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.
Копаю...интересно...может через пару месяцев буду смеяться над своими нынешними вопросами, но пока еще в начале пути...
Sergey Gritsay: Для этого нужно создать сервер вне локального компьютера и передавать данные через этот сервер, для МТ соответственно пишется индикатор или советник, который эти данные обрабатывает, либо ставите терминалы на какой либо ВПС-сервер и там настраиваете копировщик сделок с вашего счета на счета друзей. Еще вариант через сервис сигналы копировать ваши сделки совершенные по данным уровням. В общем тут надо подходить из ваших финансовых возможностей для заказа соответствующего софта.
MosheDayan:
Напомню предисторию. Есть индикатор ежедневно получающий данные из csv и отображающий их(горизонтальные уровни) на графике. Создал сервер из домашнего ноутбука (слабый, но расчетов там не нужно и будет отдавать csv, а они очень маленькие). На сервере для теста связи залил движок обычного форума - все вроде как видно извне. Помогите советом. Что должно быть на сервере для чтения из него индикатором csv файлов? Т.е. как связывается индикатор с базой csv? Может залить движок ФТП сервера или что-то иное и может для MT необходимо открыть какие-нибудь специальные порты? Или я полез не в ту сторону вообще? Спасибо
Друзья, можно еще вопрос. Можно ли не грузить домашний ноут, а воспользоваться, для связи индикатора с csv файлами, бесплатными облачными хранилищами файлов такими как, например Яндекс.Диск или Облако@mail.ru или Box.net и т.д. Спасибо
Да, спасибо!
Нет, но всё равно спасибо!)Добрый вечер.
При использовании 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 и т.д. Спасибо
Вот функция по нахождению