Вот прямо сразу, сразу вопрос:
>>> [in] Количество запрашиваемых тиков. Если параметры from и count не указаны, то в массив ticks_array[] будут записаны все доступные последние тики, но не более 2000.
А если вдруг я не знаю (а я не знаю вообще) сколько их там? Ну вдруг их более 2000? Или это просто по минутам их перебирают поступательно?
p.s. И да, если было как то "еще" через API, было бы совсем здоровое.. Может можно терминалу запросы слать например? И получить XML/CSV? По большому счету сделать
CopyTicksRange
Есть ещё такой вариант: в терминале в окне "Обзор рынка" правый клик и меню "Символы". Перейти затем во вкладку "Тики".
Справка: Управление символами.
![Обзор рынка - Торговые операции - MetaTrader 5 Обзор рынка - Торговые операции - MetaTrader 5](https://c.mql5.com/36/27/obzor-rinka-torgovie-operacii-metatrader.png)
- www.metatrader5.com
Есть ещё такой вариант: в терминале в окне "Обзор рынка" правый клик и меню "Символы". Перейти затем во вкладку "Тики".
Справка: Управление символами.
Вот вот, я как раз вручную сейчас делаю, потом в C# своем файл подбираю, а хочется чтобы C# сам файл "взял" уже готовый, запрос там какой отправил ... GET/POST или DLL какой использовал или еще как-то ... А то вручную, конечно можно но немного муторновато оказывается со временем.
Пришла мысль, что можно написать "скрипт", который при запуске MT5 просто генерировал бы мне эти файлы, т.е. собирал их в кучу ну и я потом их получал. Но это тоже так себе вариант, т.к. следить за двумя языками и программами не самая лучшая альтернатива. Хочется все же ограничится одним языком ...
Вот вот, я как раз вручную сейчас делаю, потом в C# своем файл подбираю, а хочется чтобы C# сам файл "взял" уже готовый, запрос там какой отправил ... GET/POST или DLL какой использовал или еще как-то ... А то вручную, конечно можно но немного муторновато оказывается со временем.
Пришла мысль, что можно написать "скрипт", который при запуске MT5 просто генерировал бы мне эти файлы, т.е. собирал их в кучу ну и я потом их получал. Но это тоже так себе вариант, т.к. следить за двумя языками и программами не самая лучшая альтернатива. Хочется все же ограничится одним языком ...
Можно написать класс со статическими методами на C#, в метатрейдере - создать класс обертку для работы с ним, в таймере проверять
команды от C# и возвращать результат через статические методы.
Можно так же сделать pipe соединение на C# и MQL (через импорт методов из WinAPI)
Можно просто в таймере в MQL читать
запросы от C# через статические методы и далее формировать требуемый файл...
Можно написать класс со статическими
методами на C#, в метатрейдере - создать класс обертку для работы с ним, в таймере проверять команды от C# и
возвращать результат через статические методы.
Можно так же сделать pipe соединение на C# и MQL (через импорт методов из WinAPI)
Можно просто в таймере в MQL читать
запросы от C# через статические методы и далее формировать требуемый файл...
Спасибо, судя по всему решение вполне есть, хотя я правда понял самый минимум из того, что вы написали и буду пока разбираться ...
Спасибо, судя по всему решение вполне есть, хотя я правда понял самый минимум из того, что вы написали и буду пока разбираться ...
Там 3 возможных решения пришедших мне в голову.
MQL5 - умеет импортировать статические
методы публичных классов C# из указанной dll. по этому:
- Сделать dll C# внутри dll создать статическое свойство к примеру
static bool IsLoadTicks { get; private set; }
далее его можно будет вызвать в таймере из MQL5 как статический метод и в другой статический метод (только уже метод - который принимает параметры) - передать тиковые данные
- Если C# - дельный процесс то можно воспользоваться pipe - как межпроцессное взаимодействие где то на форуме видел что кто то реализовывал подобную стыковку.
- Можно как в первом способе просто передавать данные из C# в MQL5 - и в итоге средствами MQL5 - формировать файл с запрашиваемыми данными
// Обработка каждого бара по отдельности for (int i = BarsTotalInput - 1; i >= 0; i--) { datetime barTime = iTime(Pair, Period_TF, i); datetime barTimeStart = barTime; Print(i," barTimeStart", barTimeStart); datetime barTimeEnd = barTime + PeriodSeconds(); Print(i," barTimeEnd", barTimeEnd);// Определение конца бара MqlTick ticks[]; long ticksCopied = CopyTicksRange(Pair,ticks,COPY_TICKS_ALL,barTimeStart,barTimeEnd); // Копируем тики для диапазона времени
if (ticksCopied < 0) { int errorCode = GetLastError(); Print("Ошибка при копировании тиков для бара с временем ", TimeToString(barTime), ". Код ошибки: ", errorCode); ResetLastError(); continue; // Переход к следующему бару } else if (ticksCopied == 0) { Print("Нет доступных тиков для бара с временем ", TimeToString(barTime)); continue; // Переход к следующему бару }
а ведь есть же функции позволяющие копировать все тики заданного бара но почему то у меня не получается
Может кто то подсказать почему нельзя скопировать все тики хотя бы 3 последних баров и почему они не копируются?
int CopyTicks( string symbol_name, // имя символа MqlTick& ticks_array[], // массив для приёма тиков uint flags=COPY_TICKS_ALL, // флаг, определяющий тип получаемых тиков ulong from=0, // дата, начиная с которой запрашиваются тики uint count=0 // количество тиков, которые необходимо получить );
и как все получить тики одного бара если у меня есть только дата открытия бара и дата закрытия бара)) а вот тиков и их количество я не знаю как указать в требуемом баре?
long ticksCopied = CopyTicksRange(Pair, ticks, COPY_TICKS_ALL, barTimeStart, barTimeEnd);
так что ли - оно не работает
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Смотрел функции, в mql5 и нашел там возможность собственно перебирать себе бары. Но вот проблема, не нашел как перебирать Тики, то есть то что я могу получить экспортом данных в программе в виде csv, хотелось бы увидеть тут ...
Второй вопрос, как это сделать экспортно? Т.е. у меня C# на самом то деле, я думал что мог бы и в самой программе все сделать. Т.е. просто не делать в С# и сделать прямо тут ... В целом на распутье я немного, то есть у меня либо mql5 и написать на нем, либо C# если я получу экспорт нормальный (т.е. не в ручную). Выставлять ордера думаю в ручную все равно, по крайней мере значимо еще долго, не шибко доверяют программе автормату не глядя на график самостоятельно. Так что в целом выбор несмотря на судя по всему приемущества mql5 все еще остается... Хотя может и в C# это как то можно. Но вот такая вот у меня теперь проблема...
Как получить тики хоть каким то из способов, но программно не вводя все вечно вручную в экспортере?