Discusión sobre "Cómo escribir una DLL para MQL5 e intercambiar datos en 10 minutos". - página 7

 

pisara:

...En mi opinión, el desarrollo del lenguaje de escritura de la MT debe servir para las tareas específicas del comercio, es decir, la recopilación de información, el análisis, las pruebas, la gestión del comercio y la integración con otros sistemas; todo esto puede y, en mi opinión, debe hacerse con un alto nivel de herramientas de desarrollo modernas, es decir, integrando y ampliando el marco estándar seleccionado utilizando métodos generalmente aceptados en él (OOP, etc.). La tarea no consiste en escribir una plataforma cerrada y autosuficiente en una mezcla de C/C++ u otra cosa, sino, en primer lugar, en escribir los fundamentos de la plataforma comercial, sus servicios, la API y la interfaz de usuario...

El IMHO de Moe está completamente de acuerdo con tu IMHO. Es agradable exponer a personas con ideas afines. Asocio la MT con el proverbio "el diablo acecha en las cosas pequeñas" y sospecho de serios defectos arquitectónicos, si no, por qué hay tantos "ladrillos" - "¡Oye ciudadano! No vayas allí, ve aquí. Si no, la nieve caerá sobre tu cabeza: ¡estarás completamente muerto!".

Al mismo tiempo, hay que admitir que MT no es en absoluto el peor producto con el que he tenido que tratar.

 

Renat писал(а) :

....MQL4.community ya tiene artículos sobre la interacción Matad - MetaTrader 4:


Tal vez me haya perdido algo, o tal vez tú te hayas perdido algo. No encuentro ningún artículo sobre la interacción entre Matkad y MT4. Sí, tengo Matlab. No tengo Matcad ((.

En su día pedí el enlace MT4B<-> Matcad a los programadores. El único sitio aceptable (estable) era la comunicación mediante operaciones de archivo. MT4-escribe las cotizaciones en un archivo-Matkad lee-procesa-pone los resultados en un archivo (compra/venta de divisas)-MT4 lee y ejecuta. Pero a veces se cuelga por razones desconocidas... pasaron más de 3 meses pero aún no se pudo resolver el problema.

Por un lado su deseo de hacer todo en un solo paquete, sí bien y bueno. Es la estabilidad y la fiabilidad del sistema.

Pero, por otro lado, existen lenguajes de programación de alto nivel (Matlab, Matcad) para los que ya se ha escrito mucho, gastando miles de millones de años-hombre. Y conectar esta potencia a la MT5 sería genial. No tienes suficiente fuerza o habilidad para alcanzar el nivel de estas lenguas...

P.D. Quiero llamar tu atención, que ambos lenguajes están especializados para trabajar con arrays (álgebra matricial), exactamente lo que necesitas...

 
Prival:

Tal vez me haya perdido algo, o tal vez se haya expresado mal. No encuentro en ningún sitio un artículo sobre la conexión entre Matcad y MT4. Matlab está ahí. Pero Matcab no está disponible ((.

Sí, he confundido Matcad y Matlab. Lo siento.


En su día pedí el enlace MT4B<-> Matcad a los programadores. La única conexión aceptable (estable) era a través de operaciones de archivo. MT4-escribe las cotizaciones en un archivo-Matkad lee-procesa-pone los resultados en un archivo (compra/venta de divisas)-MT4 lee y ejecuta. Pero a veces se bloquea por razones desconocidas... hemos pasado más de 3 meses, pero todavía no hemos podido resolver el problema.

Intenta hacer un paquete con MQL5 - es un lenguaje más potente, eficiente y seguro.

Puede iniciar un trabajo público abierto sobre la integración de Matkad con MT5 para obtener un buen resultado. De este modo, ambos errores pueden solucionarse rápidamente y el resultado puede ser bueno.

 
Renat писал(а) :
Sí, he confundido Matkad y Matlab. Lo siento.


Intenta hacer un paquete con MQL5 - es un lenguaje más potente, eficiente y seguro.

Para obtener un buen resultado, podemos iniciar un trabajo público abierto sobre la integración de Matkad con MT5. De este modo, podrá corregir rápidamente los errores y obtener un buen resultado.

Puedes hacer muchas cosas, pero en primer lugar creo que eres tú quien debe interesarse por este tipo de proyectos (imagina cómo aumentará tu audiencia y forex y exchange + escribir programas en matlab estándar ).

Y el trabajo público, abierto, etc. no me interesa desde hace mucho tiempo. Yo también valoro mi tiempo. Cansado de cometer errores como estos.

//+----------------------------------------------------------------------------+
//|  Описание : Установка объекта OBJ_VLINE вертикальная линия                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование                                                       |
//|    t1 - время                                                              |
//+----------------------------------------------------------------------------+
void SetVLine(string nm="", datetime t1=0, color cl=Red)
  {
  if (t1<=0) return; //t1=Time[0];
  if (ObjectFind(0,nm)<0) ObjectCreate(0, nm, OBJ_VLINE, 0, t1, 2);
  else Print("Ошибка создания SetVLine ",nm," ",GetLastError()," t1=",t1);
  
  ObjectSetInteger(0, nm, OBJPROP_COLOR, cl);
  ObjectSetInteger(0, nm, OBJPROP_STYLE, STYLE_DOT);
  ObjectSetInteger(0, nm, OBJPROP_BACK, true);        // рисовать как фон
  ObjectSetInteger(0, nm, OBJPROP_SELECTABLE, false); // запретить выделение объекта мышкой
  }

¿Cómo puede producir esto este procedimiento?

2010.05.06 02:28:14 Setka_Final_1 (EURUSD,M5) SetVLine error de creación VLine_838524 4202 t1= 2010.05.06 00:00

Esto es una mierda.

ERR_OBJECT_NOT_FOUND

4202

Objeto gráfico no encontrado

Si no se encuentra ningún objeto. El programa debería haberlo creado. Pero el objeto está ahí si(...) así que por qué obtiene 4202.

Tal vez sólo estoy cansado y es hora de ir a la cama.

 

A Prival.

Si se formula un problema de MatCad lo suficientemente interesante (no muy complicado para empezar), estoy seguro de que habrá gente dispuesta a unirse a la tarea.

 
Prival:

2010.05.06 02:28:14 Setka_Final_1 (EURUSD,M5) Error al crear SetVLine VLine_838524 4202 t1= 2010

Si no se encuentra ningún objeto. El programa debería haberlo creado. Pero el objeto existe si(...) por qué se devuelve 4202.

El error se ha quedado en la llamada a la función anterior. Utilice ResetLastError()
 


Buenos días! Hablando de pasar cadenas a funciones desde la DLL

Tengo el siguiente código:

#include <WinUser32.mqh>.

#importar "mt4excel.dll"

bool ExcelOpen();//abre Excel y crea una página en blanco

bool ExcelSetTextCell(int X,int Y,char Value[]);//Escribir texto en la celda

/*

otros cortados

*/

#importar

void OnTick()

{

Tarifas MqlRates [];

int copied=CopyRates("EURUSD",PERIOD_M1,0,1,rates);

ExcelSetTextCell(1,1, "Tool");

ExcelSetTextCell(2,1, "EURUSD");

ExcelSetValueCell(2,2,rates[0];

}

Como se ha dicho, Excel muestra sólo la primera letra de la que se ha pasado allí usando ExcelSetTextCell. Después de leer este hilo, he descubierto cuál es el motivo, pero no sé muy bien cómo conseguir lo que necesito. La cuestión es que yo no he escrito la DLL, es una biblioteca de funciones para trabajar con Excel a través de MT4. Por razones obvias, MT5 toma un puntero a una cadena con sólo el primer carácter. La pregunta es, ¿cómo puedo hacer que MT5 pase allí lo que necesito, si no puedo editar el código fuente de la DLL? Según tengo entendido, hay que añadir algo como

_DLLAPI void __stdcall demo(char *stream, char*buf){ buf=stream;}

Agradecería los comentarios de los desarrolladores de MT5

Gracias.

 

ns_k, no olvides que las cadenas en MQL5 son unicode.

Hay dos soluciones posibles.

1. Rehacer (modificar) la dll para que acepte cadenas unicode

2. Convierta usted mismo una cadena en una matriz

 
stringo:

ns_k, no olvides que las cadenas en MQL5 son unicode.

Hay dos soluciones posibles.

1. Rehacer (modificar) la dll para que acepte cadenas unicode

2. Convierte la cadena en un array por ti mismo

La segunda solución me funciona. Dime, ¿tengo que cambiar también la declaración de la función? Es decir, en lugar de

bool ExcelSetTextCell(int X,int Y, string Value);//Escribir texto en la celda

¿Tengo que escribir una declaración donde el tercer parámetro sea un array? Si es así, no entiendo cómo hacerlo. Gracias.

Sin embargo, me lo imaginé, sólo tuve que pensar un poco. ¡¡¡Gracias por la ayuda!!!

 

Declaración de una función DLL

bool  ExcelSetTextCell(int X,int Y, uchar& Value[]);
Llamada a una función DLL
//--- объявляем массив символов
uchar value[];
//--- преобразуем юникод строку в однобайтный массив
StringToCharArray("EURUSD", value);
//--- передаем полученные данные массива по ссылке
ExcelSetTextCell(2,1,value);