Discussion sur "Comment écrire une DLL pour MQL5 et échanger des données en 10 minutes". - page 7

 

pisara:

...IMHO le développement du langage d'écriture MT devrait servir les tâches spécifiques du commerce, c'est-à-dire la collecte d'informations, l'analyse, les tests, la gestion du commerce et l'intégration avec d'autres systèmes - tout cela peut et IMHO devrait être fait à un haut niveau d'outils de développement modernes, c'est-à-dire en intégrant et en étendant le cadre standard choisi en utilisant des méthodes généralement acceptées dans ce domaine (OOP, etc.). La tâche n'est pas d'écrire une plateforme fermée et autosuffisante sur un mélange de C/C++ ou autre, mais, tout d'abord, d'écrire les bases de la plateforme commerciale, ses services, son API et son interface utilisateur...

Moe IMHO est en accord complet avec votre IMHO. C'est agréable d'exposer des personnes partageant les mêmes idées. J'associe MT au proverbe "le diable se cache dans les petites choses" et soupçonne de sérieux défauts d'architecture, sinon pourquoi y a-t-il tant de "briques" - "Hé, citoyen ! N'allez pas là, allez ici ! Ou bien la neige tombera sur ta tête - tu seras complètement mort !".

Dans le même temps, vous devez admettre que MT n'est en aucun cas le pire produit auquel j'ai eu affaire.

 

Renat писал(а) :

....MQL4.community a déjà des articles sur l'interaction Matad - MetaTrader 4 :


Peut-être que j'ai manqué quelque chose, ou peut-être que vous avez manqué quelque chose. Je ne trouve pas d'article sur l'interaction entre Matkad et MT4. Oui, j'ai Matlab. Je n'ai pas Matcad ((.

A un moment donné, j'ai commandé le lien MT4B<-> Matcad aux programmeurs. Le seul moyen acceptable (stable) était la communication via les opérations sur les fichiers. MT4-écrit les cotations dans un fichier-Matkad lit-traite-met les résultats dans un fichier (achat/vente de devises)-MT4 lit et exécute. Mais parfois, il se bloque pour des raisons inconnues... j'ai passé plus de 3 mois sans pouvoir résoudre le problème.

D'un côté, votre désir de tout faire en un seul paquet, oui bien sûr. C'est la stabilité et la fiabilité du système.

Mais d'un autre côté, il existe des langages de programmation de haut niveau (Matlab, Matcad) pour lesquels tant de choses ont déjà été écrites, dépensées en milliards d'années-hommes. Et ce serait génial de pouvoir connecter cette puissance à MT5. Vous n'avez pas assez de force ou de capacité pour atteindre le niveau de ces langues...

P.S. Je tiens à attirer votre attention sur le fait que ces deux langages sont spécialisés pour travailler avec des tableaux (algèbre matricielle), exactement ce dont vous avez besoin...

 
Prival:

Peut-être ai-je manqué quelque chose, ou peut-être vous êtes-vous mal exprimé. Je ne trouve nulle part un article sur la connexion entre Matcad et MT4. Matlab est là. Mais Matcab n'est pas disponible ((.

Oui, j'ai confondu Matcad et Matlab. Je suis désolé.


A un moment donné, j'ai commandé le lien MT4B<-> Matcad aux programmeurs. La seule connexion acceptable (stable) était l'exploitation de fichiers. MT4-écrit les cotations dans un fichier-Matkad lit-traite-met les résultats dans un fichier (achat/vente de devises)-MT4 lit et exécute. Mais parfois il se bloque pour des raisons inconnues... nous avons passé plus de 3 mois, mais n'avons toujours pas réussi à résoudre le problème.

Essayez de faire une offre groupée avec MQL5 - c'est un langage plus puissant, plus efficace et plus sûr.

Vous pouvez commencer un travail public ouvert sur l'intégration de Matkad avec MT5 pour obtenir un bon résultat. De cette façon, les deux erreurs peuvent être corrigées rapidement et le résultat peut être bon.

 
Renat писал(а) :
Oui, j'ai confondu Matkad et Matlab. Je suis désolé.


Essayez de faire une offre groupée avec MQL5 - c'est un langage plus puissant, plus efficace et plus sûr.

Pour obtenir un bon résultat, nous pouvons commencer un travail public ouvert sur l'intégration de Matkad avec MT5. De cette façon, les deux erreurs peuvent être corrigées rapidement et un bon résultat peut être obtenu.

Vous pouvez faire beaucoup de choses, mais avant tout, je pense que c'est vous qui devriez être intéressé par de tels projets (imaginez comment votre audience va augmenter et forex et exchange + écrire des programmes sur matlab standard ).

Et le travail public, ouvert, etc. ne m'intéresse plus depuis longtemps. Moi aussi, je tiens à mon temps. Je suis fatigué de faire des erreurs comme celles-ci.

//+----------------------------------------------------------------------------+
//|  Описание : Установка объекта 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); // запретить выделение объекта мышкой
  }

Comment cette procédure peut-elle produire cela ?

2010.05.06 02:28:14 Setka_Final_1 (EURUSD,M5) SetVLine creation error VLine_838524 4202 t1= 2010.05.06 00:00

C'est des conneries.

ERR_OBJET_NON_TROUVÉ

4202

Objet graphique non trouvé

Si aucun objet n'a été trouvé. Le programme aurait dû le créer. Mais l'objet est là if(...) alors pourquoi obtient-il 4202.

Peut-être que je suis juste fatiguée et qu'il est temps d'aller au lit.

 

A Prival.

Si vous formulez un problème MatCad suffisamment intéressant (pas très compliqué pour commencer), je suis sûr qu'il y aura des gens qui seront prêts à se joindre à la tâche.

 
Prival:

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

Si aucun objet n'a été trouvé. Le programme aurait dû le créer. Mais l'objet existe si(...) pourquoi 4202 est retourné.

L'erreur provient de l'appel de fonction précédent. Utiliser ResetLastError()
 


Bonjour, en parlant de passer des chaînes de caractères dans des fonctions à partir d'une DLL...

J'ai le code suivant :

#include <WinUser32.mqh>.

#import "mt4excel.dll"

bool ExcelOpen();//ouvre Excel et crée une page blanche

bool ExcelSetTextCell(int X,int Y,char Value[]);//Écrit du texte dans la cellule

/*

autres coupures

*/

#import

void OnTick()

{

MqlRates rates [] ;

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

ExcelSetTextCell(1,1, "Outil") ;

ExcelSetTextCell(2,1, "EURUSD") ;

ExcelSetValueCell(2,2,rates[0] ;

}

Comme indiqué, Excel n'affiche que la première lettre de celle qui est transmise à l'aide de ExcelSetTextCell. Après avoir lu ce fil de discussion, j'ai trouvé la raison, mais je ne sais pas vraiment comment obtenir ce dont j'ai besoin. Le fait est que je n'ai pas écrit la DLL, c'est une bibliothèque de fonctions pour travailler avec Excel via MT4. Pour des raisons évidentes, MT5 prend un pointeur sur une chaîne de caractères ne comportant que le premier caractère. La question est la suivante : comment puis-je faire en sorte que MT5 transmette ce dont j'ai besoin, si je ne peux pas modifier le code source de la DLL ? D'après ce que j'ai compris, vous devez ajouter quelque chose comme

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

Je serais reconnaissant aux développeurs de MT5 de me faire part de leurs commentaires.

Merci !

 

ns_k, n'oubliez pas que les chaînes de caractères dans MQL5 sont unicode.

Il y a deux solutions possibles.

1. Retravailler (modifier) la dll pour accepter les chaînes unicode

2. Convertissez vous-même une chaîne en un tableau

 
stringo:

ns_k, n'oubliez pas que les chaînes de caractères dans MQL5 sont unicode.

Il y a deux solutions possibles.

1. Retravailler (modifier) la dll pour accepter les chaînes unicode

2. Convertissez la chaîne de caractères en un tableau par vous-même

La deuxième solution fonctionne pour moi. Dites-moi, dois-je aussi changer la déclaration de la fonction ? C'est-à-dire qu'au lieu de

bool ExcelSetTextCell(int X,int Y, string Value);//Écrire du texte dans la cellule

Je dois écrire une déclaration où le troisième paramètre sera un tableau ? Si oui, comment le faire, je ne comprends pas. Merci !

J'ai trouvé la solution, j'ai juste dû réfléchir un peu. Merci pour l'aide ! !!

 

Déclaration d'une fonction DLL

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