Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1302

 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Toutes les questions des débutants sur MQL4 et MQL5, conseils et discussions sur les algorithmes et les codes.

Dmitry Custurov, 2020.08.27 13:10

Salutations.

J'ai la chose suivante dans MT4 :

#import "user32.dll"
   int SendMessageA(int hWnd, int Msg, int wParam, char &lParam[]);
   int RegisterWindowMessageA(uchar &lParam[]);
#import

string IndiName="TestBot";

void OnStart()
  {
   char buf[];
   StringToCharArray("MetaTrader4_Internal_Message", buf);
   int MT4InternalMsg=RegisterWindowMessageA(buf);
   StringToCharArray(IndiName, buf);
   long handle=ChartGetInteger(0, CHART_WINDOW_HANDLE);
   Print(MT4InternalMsg);
   bool res=SendMessageA((int)handle, MT4InternalMsg, 14, buf);
   Print("Функция SendMessageA завершила работу с результатом: ",res);
  }

Ce code envoie une commande à la fenêtre du terminal pour lancer un EA spécifique.

Existe-t-il une fonctionnalité similaire pour MT5 ?

J'ai essayé comme ça :

#import "user32.dll"
   int SendMessageA(long hWnd, long Msg, uint wParam, uchar &lParam[]);
   int RegisterWindowMessageA(uchar &lParam[]);
#import

string IndiName="TestBot";

void OnStart()
  {
   uchar buf[];
   StringToCharArray("MetaTrader5_Internal_Message", buf);
   long MT5InternalMsg=RegisterWindowMessageA(buf);
   StringToCharArray(IndiName, buf);
   long handle=ChartGetInteger(0, CHART_WINDOW_HANDLE);
   Print("Window handle: ", handle);
   Print("Message: ",MT5InternalMsg);
   for(int i = 0; i<100; i++){
      bool res=SendMessageA(handle, MT5InternalMsg, i , buf);
      printf("Функция SendMessageA завершила работу с результатом: %d, номер: %d ",res, i);
   }
  }

Ça ne marche pas.

J'ai essayé de rechercher les spy++, mais il n'y a pas de messages dans MT5 contrairement à MT4.

J'ai exactement besoin d'ouvrir la fenêtre des paramètres de l'Expert Advisor.


Je dois être en mesure d'exécuter le script par le biais de WinAPI. Y a-t-il une solution pour 5 ?

 
Hé ! Les gars, aidez-moi ! Je n'arrive pas à trouver une fonction. Le conseiller expert ouvre une position par jour (entre 00:00 et 23:59), c'est-à-dire un jour, un ordre. La tâche consiste à trouver la série de pertes continues et à l'afficher dans le journal (en utilisant la commande Print(), pour imprimer une fois). Le nombre d'éléments de la série est saisi au clavier (par exemple, si vous avez saisi 5 au clavier et que la série comporte 4 jours perdants, nous l'ignorons --> nous attendons l'occurrence de 5 jours ou plus). Une série est considérée comme telle si les jours de perte sont consécutifs ou si les ordres sont clôturés en un jour (ils sont ouverts une fois par jour, et les ordres au marché peuvent "pendre" plus d'un jour). Par exemple, dans le journal, il devrait y avoir les séries de pertes suivantes : 01.05, 02.05, 03.05, 04.05, 05.05. Condition importante : reconnaître la série (et par conséquent la sortir dans le journal), qui est supérieure ou égale à la valeur entrée depuis le clavier (extern).
//
Personnellement, j'ai l'idée suivante :
1. Fiya remplit le tableau des ordres perdants avec leurs valeurs de clôture ( Mass[i] = OrderCloseTime() ;). Autrement dit, le tableau ne stocke que les dates et heures de clôture des ordres perdants
2. Nous commençons à comparer l'élément à la position i et à la position i-1 (2 adjacents)
2.1 nous les comparons en convertissant les données de la cellule en jour de l'année ( TimeDayOfYear(Mass[i]) et TimeDayOfYear(Mass[i-1])
2.(Supposons que le premier jour perdant = 178, et le précédent = 176 --> pas de série, car ils ne sont pas consécutifs, par contre si le premier = 178, et le second 177 --> on a une série)
2.3 Avec la boucle for on regarde toutes les cellules du tableau et on compare ses voisins. S'il y a une série de pertes sur desélémentsvoisinsdu tableau--> commençons à compresser jusqu'à 1.nous n'avons pas atteint lenombreminimum requis de jours perdants pour la considérer comme une série. 2. (si le point 1 est rempli) AVANT que la série ne s'arrête.
2.4 L'ARRÊT DE LA SÉRIE --> mémoriser l'indice de l'élément du tableau où elle s'est terminée et mémoriser le nombre d'éléments de la série (la série peut être == OU supérieure à la valeur entrée au clavier)
3. ---- c'est ici que commence le problème de la réalisation---
3.1 Nous devrions "reculer" d'une manière ou d'une autre dans une série de jours perdus, en connaissant la date de chaque élément, traduire la date de datetime --> chaîne de caractères,
3.11 remplir la chaîne de caractères ( je ne sais pas, peut-être par StringAdd() ?), et la sortir dans un fichier LOG (pas des millions de fois, juste une)

L'algorithme du conseiller n'est pas important, ce qui est important c'est la fonction utilisateur elle-même

Pour l'amour de Dieu, aidez-moi !))
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные должны быть объявлены перед их использованием. Для идентификации переменных используются уникальные имена. Описания переменных используются для их определения и объявления типов. Описание не является оператором. Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Нумерация элементов массива...
Dossiers :
 

Bonjour.
Un conseil sur un algorithme est nécessaire.
J'essaie de formuler l'exigence suivante avant de traiter le bloc d'ouverture de l'ordre :

S'il existe déjà des ordres d'achat/de vente et que le prix d'ouverture du dernier ordre est inférieur de X points au prix actuel, alors ignorez les ordres bloqués/non ouverts.

Veuillez nous conseiller - quelles sont les options d'implémentation dans le code ?

 

Quelqu'un a-t-il mesuré pour mt 5 à partir du moment où un ordre est envoyé pour ouvrir une position jusqu'à ce qu'elle apparaisse effectivement, combien de temps cela peut prendre ?

Je suis plus intéressé par le fait qu'un ordre est envoyé et qu'une transaction est conseillée. Entre le moment où l'ordre est envoyé et celui où les transactions apparaissent, combien de temps cela peut-il prendre ?

 
Сергей Таболин:

k = {1,2,4,8,16,......}

cn = k[c]

Solution amusante))))

 
Vladimir Baskakov:
MQ prévoit-il d'ajouter des indicateurs personnalisés à la plate-forme mobile ?

À en juger par les réponses sur le nouveau terminal mobile, pas dans un avenir proche. Seulement des stylos.

 
Valeriy Yastremskiy:

Solution fantaisie))))

Si les coefficients sont connus à l'avance, pourquoi les calculer ? )))

 
Сергей Таболин:

Si les coefficients sont connus à l'avance, pourquoi les calculer ? )))

C'est plus universel si vous les calculez.

 

Collègues, bonne journée à tous - intuitivement je comprends la solution, j'aimerais avoir votre avis.

Quelle est la meilleure façon d'attribuer des parties du lot pour leur fermeture ultérieure (fermeture partielle du lot total - en parties - 5 parties unitaires).

Dans ma compréhension, par exemple, le lot 2.58. Je divise par 5, le résultat est 0.51 lot pour fermer 4 parties et la cinquième partie est 0.54 lot.

Quelle est la meilleure façon de représenter cela dans le code ? Quelle fonction mathématique prend le reste de la division pour fermer 0,54 ?

 
Roman Shiredchenko:

Collègues, bonne journée à tous - intuitivement je comprends la solution, j'aimerais avoir votre avis.

Quelle est la meilleure façon d'attribuer les parties du lot pour leur fermeture ultérieure (fermeture partielle du lot total - en parties - 5 parties unitaires).

Dans ma compréhension, par exemple, le lot 2.58. Je divise par 5, le résultat est 0.51 lot pour fermer 4 parties et la cinquième partie est 0.54 lot.

Quelle est la meilleure façon de représenter cela dans le code ? Quelle fonction prend le reste de la division pour fermer 0,54 ?

Et si vous lisiez la documentation ?