Залез в папку с примерами, нашел структуру RateInfo, разобрался.
Доброго дня!
Раньше создавал массив, копировал кусок графика и отправлял
в ДЛЛ, но способ долгий. Решил попробовать через копи_рэйтс и не могу…
ArrayCopyRates(price,NULL,0);
Залез в папку с примерами, нашел структуру RateInfo, разобрался.
То, что в коде теперь работает?
Все работает, на всякий случай код:
MQL: #import "DDD.dll" void fn(double ar[], int count); int start() { double price[][6]; int count = ArrayCopyRates(price); if( count < 1 ) Alert("Ошибка"); fn(price, count); return(0); } Dll: // MSVC #include <Windows.h> #include <string> using namespace std; #pragma pack(push,1) struct RateInfo { unsigned int ctm; double open; double low; double high; double close; double vol; }; #pragma pack(pop) void __stdcall fn(const RateInfo *data, int count) { MessageBoxA(NULL, to_string(data[count - 1].high).c_str(), "", MB_OK); }
Все работает, на всякий случай код:
Соорудил небольшой эксперимент - сравнил время двух способов (копирование истории "руками" и через ArrayCopyRates). На таймфрейме 216617 свечек. Задача - скопировать open, high, low, close, time. Соответственно два кода:
int start() { int time_s = GetTickCount(); double price[][6]; int count = ArrayCopyRates(price, NULL, PERIOD_M1); if( count < 1 ) Alert("Ошибка"); Alert( GetTickCount() - time_s ); return(0); }
и
int start() { int time_s = GetTickCount(); int count = iBars(NULL, PERIOD_M1); double high[], low[], open[], close[]; int time[]; ArrayResize(high, count); ArrayResize(low, count); ArrayResize(open, count); ArrayResize(close, count); ArrayResize(time, count); for(int i = 0; i < count; i++) { high[i] = iHigh(NULL, PERIOD_M1, i); low[i] = iLow(NULL, PERIOD_M1, i); open[i] = iOpen(NULL, PERIOD_M1, i); close[i] = iClose(NULL, PERIOD_M1, i); time[i] = iTime(NULL, PERIOD_M1, i); if(high[i] == 0 || low[i] == 0 || open[i] == 0 || close[i] == 0 || time[i] == 0) { Alert("Ошибка"); return(0); } } Alert( GetTickCount() - time_s ); return(0); }
"Ручной" способ занял 499 мсек, через copyRates 7.75 (быстрее в 64 раза). Это для тех, кто сомневается ))
Соорудил небольшой эксперимент - сравнил время двух способов (копирование истории "руками" и через ArrayCopyRates). На таймфрейме 216617 свечек. Задача - скопировать open, high, low, close, time. Соответственно два кода:
и
"Ручной" способ занял 499 мсек, через copyRates 7.75 (быстрее в 64 раза). Это для тех, кто сомневается ))
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброго дня!
Раньше создавал массив, копировал кусок графика и отправлял в ДЛЛ, но способ долгий. Решил попробовать через копи_рэйтс и не могу…
Первый вариант вроде логичней, но в МКЛ нет массивов массивов? В общем получить хоть какой-нибудь положительный результат не удается. Кому-нибудь удавалось?