Есть ли программный способ определить глубину тиковой истории?
Попробовал так:
voidOnStart()
{
MqlTick ExTicks[];
datetime tm=StringToTime("1971.01.01 00:00:00");
//--- вывод результатаulong m=tm*1000;
int copied=CopyTicks(_Symbol,ExTicks,COPY_TICKS_ALL,m);
Print("Получено тиков: ",copied," код ошибки: ",GetLastError());
}
все время получается 2000 тиков. В справке пишется, если время не указано, то передается не более 2000 тиков. Время указал в миллисекундах умножил секунды на 1000.
Еще в справке указывается, что это тики за текущую сессию. То есть получается к историческим данным нельзя обратиться?
Есть ли программный способ определить глубину тиковой истории?
Попробовал так:
все время получается 2000 тиков. В справке пишется, если время не указано, то передается не более 2000 тиков. Время указал в миллисекундах умножил секунды на 1000.
Еще в справке указывается, что это тики за текущую сессию. То есть получается к историческим данным нельзя обратиться?
Вы хотите получить все тики? :)
Для начала проверьте, а потянет ил Ваш компьютер столько тиков (если Ваш компьютер сгорит, я не виноват):
//+------------------------------------------------------------------+//| CopyTicks_1_02.mq5|//| Copyright 2015, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2015, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.031"//--- покажем окно входных параметров при запуске скрипта#property script_show_inputsinputint ticks=200000000000; // количество запрашиваемых тиковinputdatetime start=D'1971.01.01 23:59'; // с какой даты запрашивать тики//---MqlTick ExTicks[];
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//--- запросим тикиint copied=CopyTicks(_Symbol,ExTicks,COPY_TICKS_ALL,(ulong)start*1000,ticks);
//--- если тики получены, то выведем на график значения Bid и Ask Print("Получено тиков: ",copied," код ошибки: ",GetLastError());
if(copied>1)
{
Print("Тик: ",ExTicks[0].time," bid: ",ExTicks[0].bid," ask: ",ExTicks[0].ask," last: ",ExTicks[0].last," [0]");
Print("Тик: ",ExTicks[copied-1].time," bid: ",ExTicks[copied-1].bid," ask: ",ExTicks[copied-1].ask," last: ",ExTicks[copied-1].last," [",copied-1,"]");
//datetime Start =D'2015.10.16 23:59'; // время наступления 2015 года//datetime End =D'2015.10.19 00:02'; // время наступления 2015 года//for(int i=0;i<copied-1;i++)// if(ExTicks[i].time>Start && ExTicks[i].time<End)// Print("Тик: ",ExTicks[i].time," bid: ",ExTicks[i].bid," ask: ",ExTicks[i].ask," last: ",ExTicks[i].last," [i]");
}
Print("Size ",((long)copied*sizeof(MqlTick))>>20," Mb");
}
//+------------------------------------------------------------------+
Да мне нужно знать с какой даты есть данные(то есть с какой даты можно запустить тест на реальных тиках).
А сколько не проблематично для компьютера запросить? Сгореть это Вы преувеличили наверное, скорее зависнет?
Вместо "200000000000" поставьте "20000" и дату, любую дату 1971 года. При этом, очень вероятно, что нужно будет запустить скрипт не один раз. Дело в том, что при первом запросе инициализируется закачка всей истории (ведь заказали историю с 1971 года) и если скрипт долго не отвечает, ему отдадутся данные которые есть в наличии, но скачивание пойдёт дальше. Поэтому второй запрос может показать более глубокую историю.
Есть ли программный способ определить глубину тиковой истории?
Попробовал так:
все время получается 2000 тиков. В справке пишется, если время не указано, то передается не более 2000 тиков. Время указал в миллисекундах умножил секунды на 1000.
Еще в справке указывается, что это тики за текущую сессию. То есть получается к историческим данным нельзя обратиться?
Вы не сможете получить все тики по символу, если их больше INT_MAX, потому что возвращаемое значение
функции CopyTicks - integer. Поэтому нужно получать их частями.
Вы не сможете получить все тики по символу, если их больше INT_MAX, потому что возвращаемое значение
функции CopyTicks - integer. Поэтому нужно получать их частями.
Тем не менее, начальную дату тиков узнать можно запрашивая всего 20000 (двадцать тысяч) тиков - главное указать начальную дату, которая гарантирует, что на эту дату тиков ещё не было и для этого 1971 год подходи как нельзя лучше.
Karputov Vladimir: Тем не менее, начальную дату тиков узнать можно запрашивая всего 20000 (двадцать тысяч) тиков - главное указать начальную дату, которая гарантирует, что на эту дату тиков ещё не было и для этого 1971 год подходи как нельзя лучше.
Запросил много данных, действительно сильное торможение началось:
Есть ли программный способ определить глубину тиковой истории?
Попробовал так:
все время получается 2000 тиков. В справке пишется, если время не указано, то передается не более 2000 тиков. Время указал в миллисекундах умножил секунды на 1000.
Еще в справке указывается, что это тики за текущую сессию. То есть получается к историческим данным нельзя обратиться?
Есть ли программный способ определить глубину тиковой истории?
Попробовал так:
все время получается 2000 тиков. В справке пишется, если время не указано, то передается не более 2000 тиков. Время указал в миллисекундах умножил секунды на 1000.
Еще в справке указывается, что это тики за текущую сессию. То есть получается к историческим данным нельзя обратиться?
Вы хотите получить все тики? :)
Для начала проверьте, а потянет ил Ваш компьютер столько тиков (если Ваш компьютер сгорит, я не виноват):
Вы хотите получить все тики? :)
Для начала проверьте, а потянет ил Ваш компьютер столько тиков (если Ваш компьютер сгорит, я не виноват):
Да мне нужно знать с какой даты есть данные(то есть с какой даты можно запустить тест на реальных тиках).
А сколько не проблематично для компьютера запросить? Сгореть это Вы преувеличили наверное, скорее зависнет?
Да мне нужно знать с какой даты есть данные(то есть с какой даты можно запустить тест на реальных тиках).
А сколько не проблематично для компьютера запросить? Сгореть это Вы преувеличили наверное, скорее зависнет?
Есть ли программный способ определить глубину тиковой истории?
Попробовал так:
все время получается 2000 тиков. В справке пишется, если время не указано, то передается не более 2000 тиков. Время указал в миллисекундах умножил секунды на 1000.
Еще в справке указывается, что это тики за текущую сессию. То есть получается к историческим данным нельзя обратиться?
Вы не сможете получить все тики по символу, если их больше INT_MAX, потому что возвращаемое значение
функции CopyTicks - integer. Поэтому нужно получать их частями.
Вы не сможете получить все тики по символу, если их больше INT_MAX, потому что возвращаемое значение
функции CopyTicks - integer. Поэтому нужно получать их частями.
Тем не менее, начальную дату тиков узнать можно запрашивая всего 20000 (двадцать тысяч) тиков - главное указать начальную дату, которая гарантирует, что на эту дату тиков ещё не было и для этого 1971 год подходи как нельзя лучше.
Запросил много данных, действительно сильное торможение началось:
Для моей задачи и 100 тиков хватит. Вообщем спасибо!
Yes, custom charts and own datafeeds will be available soon.
Hi Renat, any update about these features ? (sorry if it's somewhere else I didn't find it).
Привет Ренат, есть какие-либо новости об этих функциях? (Извините, если это где-то уже есть, я не нашел).