Создание собственного расширения MetaTrader (dll) - страница 11

 

Основной вопрос к mql4-программированию

Здравствуйте,

Я хочу импортировать некоторые функции из dll. Поэтому мне нужно включить некоторые *.h файлы.

Возможно ли это, или я должен написать *.mqh вместо *.h?

Эта dll предназначена для языка программирования Си.

И там есть функции с указателями и структурами в качестве дататайпов. Можно ли это использовать в mql4?

 

получение цены акций

Здравствуйте,

Я пытаюсь получить цены акций из meta trader с помощью c#, но не знаю, как это сделать.

Может ли кто-нибудь объяснить мне или послать меня в конкретное руководство?

Большое спасибо.

 
kfirmt:
Здравствуйте,

Я пытаюсь получить цены акций из meta trader с помощью c#, но не знаю, как это сделать.

Может ли кто-нибудь объяснить мне или направить меня в конкретное руководство?

спасибо большое.

В experts\examples\DLLExample вы найдете, как цены могут быть переданы из metatrader в C (это достаточно близко, так что вы можете использовать этот пример непосредственно для этого), Инфоструктура курса не изменилась с самого начала и по-прежнему определяется как :

struct RateInfo

{

unsigned int ctm;

double open;

double low;

double high;

double close;

double vol;

};

поэтому у вас не должно возникнуть никаких проблем с передачей ее в C#.

 

спасибо!

где эксперты\examples\DLLExample?

 
kfirmt:
Спасибо! Где находится experts\examples\DLLExample?

В папке metatrader (папка, в которую вы его установили).

 
mladen:
В папке metatrader (папка, в которую вы установили программу)

Я скачал 2 метатрейдера, и в обоих из них примеры были на c++. Я думаю, что мог бы понять, хотя я программирую на c#, но я не смог найти то, что мне нужно, как получить цены акций.

 
kfirmt:
Я скачал 2 метатрейдера, и в обоих из них примеры были на c++. Я думаю, я мог бы понять это, хотя я программирую на c#, но я не смог найти то, что мне нужно, как получить цены акций.

Вы передаете цены от индикатора или советника в ваше расширение DLL.

У вас есть полный пример (MQL часть, а также C часть) в этой папке, как это делается. После получения данных из mql части в C# части это только вопрос кода, что вы собираетесь делать с ним.

 
mladen:
Вы передаете цены от индикатора или советника в ваше расширение DLL У вас есть полный пример (MQL часть, а также C часть) в этой папке, как это делается. После получения данных из mql части в C# части это только вопрос кода, что вы собираетесь делать с ним.

Я не нашел примера на MQL или C, только на C++. В общем, функций было много, и я не мог понять, какая из них та, которая мне нужна для получения цены. есть ли у вас такой пример?

Спасибо большое.

 
kfirmt:
Я не нашел примера ни на MQL, ни на C, только на C++. В любом случае, там было много функций, и я не мог понять, какая из них является функцией, которая мне нужна для получения цены. есть ли у вас такой пример? спасибо большое.

Со стороны C (см. комментарий) :

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

MT4_EXPFUNC double __stdcall GetRatesItemValue(const RateInfo* rates,const int rates_total,const int shift,const int nrate)

{

//---

if(rates==NULL)

{

printf("GetRatesItemValue: NULL array\n");

return(0.0);

}

//---

if(rates_total<0)

{

printf("GetRatesItemValue: wrong rates_total number (%d)\n", rates_total);

return(0.0);

}

//---

if(shift=rates_total)

{

printf("GetRatesItemValue: wrong shift number (%d)\n", shift);

return(0.0);

}

//---

if(nrate5)

{

printf("GetRatesItemValue: wrong rate index (%d)\n", nrate);

return(0.0);

}

//

// here you are having prices, time and volume

//

int nitem=rates_total-1-shift;

switch(nrate)

{

case 0: return double(rates[nitem].ctm);

case 1: return rates[nitem].open;

case 2: return rates[nitem].low;

case 3: return rates[nitem].high;

case 4: return rates[nitem].close;

case 5: return rates[nitem].vol;

}

//---

return(0.0);

}

 
mladen:
Со стороны C (см. комментарий) :
//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

MT4_EXPFUNC double __stdcall GetRatesItemValue(const RateInfo* rates,const int rates_total,const int shift,const int nrate)

{

//---

if(rates==NULL)

{

printf("GetRatesItemValue: NULL array\n");

return(0.0);

}

//---

if(rates_total<0)

{

printf("GetRatesItemValue: wrong rates_total number (%d)\n", rates_total);

return(0.0);

}

//---

if(shift=rates_total)

{

printf("GetRatesItemValue: wrong shift number (%d)\n", shift);

return(0.0);

}

//---

if(nrate5)

{

printf("GetRatesItemValue: wrong rate index (%d)\n", nrate);

return(0.0);

}

//

// here you are having prices, time and volume

//

int nitem=rates_total-1-shift;

switch(nrate)

{

case 0: return double(rates[nitem].ctm);

case 1: return rates[nitem].open;

case 2: return rates[nitem].low;

case 3: return rates[nitem].high;

case 4: return rates[nitem].close;

case 5: return rates[nitem].vol;

}

//---

return(0.0);

}

спасибо!

есть ли у вас что-то на C#? потому что мне это ничего не говорит.

Причина обращения: