Créez votre propre extension MetaTrader (dll) - page 9

 

DLL ne se met pas à jour avec les nouveaux ticks

Suite à mon post précédent sur la DLL (#81), j'ai maintenant un problème supplémentaire ; lorsque la DLL est appelée ainsi :

int start()

{

double Rates[][6] ;

int MaximumRecords = ArrayCopyRates( Rates, Symbol(), 0 ) ;

for( int zz = MaximumRecords ; zz >= 0 ; zz-- ) { OutPut[zz] = EMPTY ; }

GetSMAArray( Rates, MaximumRecords, Periods, OutPut ) ;

retour(0) ;

}

Cela fonctionne bien dans la mesure où le tracé est conforme aux attentes sur le graphique, mais malheureusement, il ne se met pas à jour avec les nouveaux ticks entrants - il ne se trace que lors de son appel initial. Quel autre code puis-je ajouter pour que la DLL se mette à jour avec les ticks entrants ? Presque toutes mes recherches ont abouti à des variations sur l'utilisation de

ExtCountedBars = IndicatorCounted() ;

pour forcer une boucle while à calculer, mais elles s'appliquent toutes aux calculs contenus dans le fichier .mq4 lui-même. Je veux forcer la DLL à recalculer. Deuxièmement, je voudrais que ce recalcul ne se produise qu'à la fin d'une barre et non à l'arrivée de chaque tick.

 

La boucle For devrait être

for(int zz=MaximumRecords-1 ;.................

10 enregistrements prennent les positions 0 à 9 dans un tableau

 
Tzuman:
La boucle For devrait être

for(int zz=MaximumRecords-1 ;.................

10 enregistrements prennent les positions 0 à 9 dans un tableau

J'ai peur que cela n'ait pas aidé, la DLL ne se met toujours pas à jour avec les nouveaux ticks.

 

L'échantillon vidéo de Mistigri n'est pas disponible

Bonjour à tous,

Quelqu'un pourrait-il mettre à disposition la vidéo de démonstration de Mistigri sur Internet ?

 
jocinet:
Bonjour à tous, Quelqu'un pourrait-il mettre à disposition sur internet la vidéo de démonstration de Mistigri ?

Mistigri l'a rendu à nouveau disponible à :

Projets | PsNouvion

 

Un chemin pour les développeurs C# : MT4/5 -> DLL C#

Les développeurs C# qui souhaitent écrire une DLL en C# pour Metatrader plutôt qu'en C++ disposent désormais d'une voie pour y parvenir. Il y a un article très intéressant intitulé "Exposing C# code to MQL5 using unmanaged exports" que je viens de lire.

Lisez ou survolez l'article et lisez la section 2.5 et suivantes.

Exposer du code C# à MQL5 en utilisant des exportations non gérées - Articles MQL5

Lisez les instructions, puis téléchargez le modèle pour C# "Unmanaged Export Library" et placez le fichier zip dans le bon répertoire (en suivant les instructions de cette page) :

Modèle de projet C# pour les exportations non gérées

Chargez VS et sélectionnez le modèle "Unmanaged Export Library". Suivez les exemples de code. J'espère que cela aidera quelqu'un !

 

erreur critique mais pas de crash et voici comment écrire une dll

J'ai enfin réussi à écrire ma dll en utilisant MistigriFX Sample Debug (MFX_SD pour faire court) sur Visual Studio 2008 Express.

Cependant, j'ai un drôle de problème :

Il n'y a pas de problème lorsque je lance trois MFX_SD sur le graphique avec des périodes différentes. Cependant, lorsque j'attache trois autres MFX_SD au deuxième graphique avec une période différente, j'ai deux messages d'erreur (function 'GetSMAArray' call from dll 'Mistigri FX Sample 1.dll' critical error') et l'expert arrête de fonctionner.

Je vois donc deux graphiques, dans l'un les trois MFX_SD fonctionnent bien à chaque tick, dans l'autre je ne vois qu'un seul MFX_SD fonctionnant à chaque tick et les deux autres non.

Un conseil, les gars ?

Vous trouverez ci-joint comment j'ai écrit la dll dans Visual Studio 2008. Je l'ai écrit dans un document texte pour que vous puissiez le lire depuis votre Visual Studio.

Si vous avez une erreur, maudissez-vous pour avoir suivi les conseils d'un programmeur novice comme moi .

Merci beaucoup par avance.

 

erreur critique résolue

Après avoir essayé plusieurs fois, j'ai finalement résolu les messages d'erreur critique (voir mon message précédent).

Cela n'a rien à voir avec la façon dont j'ai créé la .dll, mais cela a à voir avec une erreur de logique dans la fonction GetSMAArray dans les codes MFX_SD.

Voici les codes MFX_SD dans lesquels j'ai mis en évidence la logique manquante.

for ( int i = 0 ; i < MaximumRecords ; i++)

{

double Sum = 0.0 ;

for ( int k = 0 ; k < Period ; k++ )

{

Sum += Taux[MaximumRecords-i-1-k].close ;

}

Resultat[MaximumRecords-i-1] = Somme / Période ;

}

Par exemple, on suppose que nous avons Période = 2, MaximumRecord = 75, et i = 74. Cela fait une erreur lors du calcul :

Sum += Taux[MaximumRecords-i-1-k].close ;

car le résultat de MaximumRecord - i - 1 - k est égal à -1. La seule valeur de Rates [-1] est zéro, ce qui rend la valeur de Sum égale à zéro également. Et comme nous calculons la SMA, nous devons diviser la somme par la période, qui est zéro divisé par 2, et il y a une "erreur critique" et l'expert s'arrête.

Si vous ne le croyez pas, attachez plusieurs MFX_SD à un graphique de 1 minute avec des périodes d'entrée différentes, mais l'un des MFX_SD doit avoir une période d'entrée = 1. Regardez la fenêtre du terminal MT et cliquez sur l'onglet expert. Vous verrez un message d'erreur critique et l'expert cessera de fonctionner. Cependant, si vous regardez le graphique, seul MFX_SD avec la période = 1 est toujours en cours d'exécution.

Je pense que ce que MistigriFX a essayé de montrer dans sa vidéo était comment créer une dll et passer des tableaux à la dll. S'il devait corriger sa logique de SMA, ce serait une vidéo qui serait un véritable casse-tête à regarder. C'est pour cela qu'il nous a montré un exemple simple de SMA simple, sans correction.

Bonne création de dll.

 

MT4 extension- votre cours

Bonjour codersguru,

pourriez-vous me donner des liens vers votre cours,

ou un manuel en pdf.

J'aurais besoin de toute documentation pour en savoir plus.

Merci beaucoup.

Meilleures salutations

Ivan

 

...

Dans le dossier experts\samples\DLLSample de metatrader (chaque metatrader l'installe là) vous avez un exemple (source mql et C++, avec projet et fichier def) qui est tout ce que vous devez savoir sur les appels de dll (tous les types de paramètres possibles supportés par metatrader vers dll et retour "communication" sont couverts là) Le reste dépend de votre connaissance de C/C++.

holesovsky:
Bonjour codersguru,

Pourriez-vous me donner quelques liens vers votre cours ?

ou un manuel en pdf.

J'aurais besoin de toute documentation pour en savoir plus.

Merci beaucoup.

Meilleures salutations

Ivan