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

 
Igor Makanu:

utiliserhttps://www.mql5.com/ru/docs/dateandtime/timecurrent

deuxième version de l'appel de fonction

en général, c'est https://www.mql5.com/ru/docs/dateandtime/timetostruct

Merci beaucoup pour ces informations précieuses.

Je comprends ce qu'est la structure et comment elle fonctionne, mais je n'ai pas encore compris tous les détails.

Je n'ai pas encore pleinement saisi les subtilités qui y sont associées. J'apprends beaucoup mieux la nouvelle matière grâce à des exemples clairs.
Je vous serais très reconnaissant si vous pouviez me montrer comment écrire le code de la condition suivante dans mql5
J'ai déjà appris comment ouvrir un ordre en utilisant la structure


si(Hour()==10)

pour ouvrir une commande.

Vous n'avez pas besoin d'écrire le motif pour ouvrir la commande..... seulement l'écriture de la condition.

Merci encore pour votre aide.

 
Igor Makanu:

doit être la façon dont vous voulez déterminer le prix et l'heure de la barre :

Ou plutôt ce sont les coordonnées du clic de la souris dans les valeurs temps + prix sur le graphique, la barre doit être définie via iBarShift().

Oui, c'est ça, comme on le comprend mieux. Merci)

 
ANDREY:

Merci beaucoup pour ces informations précieuses.

Je comprends ce qu'est la structure et comment elle fonctionne, mais je n'ai pas encore saisi les tenants et les aboutissants...

J'apprends mieux les nouvelles matières avec des exemples. J'apprends beaucoup mieux la nouvelle matière grâce à des exemples clairs.
Je vous serais très reconnaissant si vous pouviez me montrer comment écrire le code de la condition suivante dans mql5
J'ai appris à ouvrir un ordre en utilisant la structure


si(Hour()==10)

pour ouvrir une commande.

Vous n'avez pas besoin d'écrire le motif pour ouvrir la commande..... Juste un enregistrement de l'état.

Merci encore pour votre aide.

MqlDateTime time_now;
TimeCurrent(time_now);
if(time_now.hour==10)
{
//открыть ордер
}
 
Igor Makanu:

Merci beaucoup pour votre aide. Tout est maintenant clair et compréhensible.

 

Bonjour à tous !
J'essaie de passer de mql4 à mql5. J'ai créé un code simple qui ouvre les commandes pour les tester. Dans le testeur, mon EA ouvre des ordres. J'ai placé la fonction Print() au début de la fonction void OnTick() et mon Expert Advisor entrerait dans cette fonction à chaque tick et l'imprimerait à chaque tick du journal. Et au cinquième passage, le conseiller expert ne saisit aucune des fonctions Print() et n'imprime rien dans le journal des immatriculations. La visualisation et l'optimisation sont désactivées dans Expert Advisor.
Veuillez me conseiller sur la manière de modifier le code afin que Print() soit imprimé dans le journal à chaque tick, comme dans l'exemple 4.
Merci d'avance à ceux qui m'aideront.

Voici mon code

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //

//+------------------------------------------------------------------+
void OnTick()
  {
Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
 if(!SymbolInfoTick(_Symbol,latest_price))
   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult);
    }   
     return;
  }

J'ai augmenté le dépôt de l'EA jusqu'à 100 000. Par conséquent, à chaque tick, Print() est imprimé dans le journal..... Mais pas une seule transaction n'a été ouverte.

Mais j'ai besoin qu'il ouvre des offres et que Print() soit imprimé.

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
ANDREY:

Bonjour à tous !
J'essaie de passer de mql4 à mql5. J'ai créé un code simple qui ouvre les commandes pour les tester. Dans le testeur, mon EA ouvre des ordres. J'ai placé la fonction Print() au début de la fonction void OnTick() et mon Expert Advisor entrerait dans cette fonction à chaque tick et l'imprimerait à chaque tick du journal. Et au cinquième passage, le conseiller expert ne saisit aucune des fonctions Print() et n'imprime rien dans le journal des immatriculations. La visualisation et l'optimisation sont désactivées dans Expert Advisor.
Veuillez me conseiller sur la manière de modifier le code afin que Print() soit imprimé dans le journal à chaque tick, comme dans l'exemple 4.
Merci d'avance à ceux qui m'aideront.

Voici mon code

J'ai augmenté le dépôt de l'EA jusqu'à 100 000. En conséquence, à chaque tick, Print() est imprimé dans le journal..... Mais pas une seule transaction n'a été ouverte.

Mais j'ai besoin que les transactions soient ouvertes et que Print() soit imprimé.

Regardez les journaux, regardez ce qui est imprimé, les informations y sont saisies à chaque étape. Très probablement, quelque chose ne va pas avec l'ouverture des ordres et l'EA ne fonctionne pas.

C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\99193835FC75DE8874B99F9A3B93F15E\MQL5\Logs

 
Igor Makanu:

Nous avons déjà discuté de la nécessité d'accéder de manière répétée aux données du terminal à partir de MQL4, puis de OrderSelecthttps://www.mql5.com/ru/forum/342989#comment_16743716.

je pense qu'il est possible de l'utiliser aussi 100500 fois par tick, car la sortie sera augmentée des millions de fois par seconde


plus il y a de symboles dans la fenêtre de surveillance du marché, plus la charge du terminal sera importante, et respectivement, si vous appelez des données à partir d'un grand nombre de symboles différents, vous obtiendrez également des décalages.

c'est-à-dire que si vous utilisez le terminal de manière raisonnable, rien ne se figera - dans la fenêtre de surveillance du marché, il y a dix symboles que vous utilisez


je n'ai pas vérifiécombien de graphiques vous pouvez ouvrir en même temps, mais je pense que si vous limitez l'historique à 1000 barres, alors je pense que le terminal ouvrira probablement deux douzaines de fenêtres de graphiques sans aucun problème.

100

 
Valeriy Yastremskiy:

Regardez les journaux pour voir ce qu'il imprime, il y a des informations enregistrées à chaque étape. Il est fort probable qu'il y ait un problème avec l'ouverture des ordres et que l'EA ne fonctionne pas.

C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\99193835FC75DE8874B99F9A3B93F15E\MQL5\Logs

Merci pour le conseil.

Ça ne marche vraiment pas. C'est écrit.

2020.10.27 06:40:45.311 Tester EURUSD : l'historique des données commence à partir de 2018.01.02 00:00

2020.10.27 06:40:45.312 Core 1 se connectant à 127.0.0.1:3000

2020.10.27 06:40:45.312 Core 1 connecté

2020.10.27 06:40:45.320 Core 1 autorisé (agent build 2650)

2020.10.27 06:40:45.323 Testeur EURUSD,M1 (Alpari-MT5-Demo) : test des experts\GRAAL.ex5 du 2020.09.01 00:00 au 2020.09.03 00:00

2020.10.27 06:40:45.327 Core 1 synchronisation commune terminée

2020.10.27 06:40:45.328 Testeur La qualité de l'historique analysé est de 100%.

2020.10.27 06:40:45.348 Core 1 test experts\GRAAL.ex5 sur EURUSD,M1 thread terminé

2020.10.27 06:40:45.348 Core 1

2020.10.27 06:40:45.348 Core 1 connexion (build 2650)

2020.10.27 06:40:45.348 Core 1 info de compte trouvé avec la devise USD

2020.10.27 06:40:45.348 Core 1 1482 octets de paramètres de test chargés

2020.10.27 06:40:45.348 Core 1 1724 octets de paramètres d'entrée chargés

2020.10.27 06:40:45.348 Core 1 calculer le profit en pips, dépôt initial 10000, effet de levier 1:100

2020.10.27 06:40:45.348 Core 1 initialisé avec succès

2020.10.27 06:40:45.348 Core 1 731 octets de données d'initialisation totales reçues

2020.10.27 06:40:45.348 Core 1 Intel Core i5-6400 @ 2.70GHz, 7883 MB

2020.10.27 06:40:45.348 Core 1 EURUSD : symbole à synchroniser

2020.10.27 06:40:45.348 Core 1 EURUSD : symbole déjà synchronisé, 18 octets reçus

2020.10.27 06:40:45.348 Core 1 EURUSD,M1 : historique mis en cache depuis 2019.01.02 06:00

2020.10.27 06:40:45.348 Core 1 EURUSD,M1 (Alpari-MT5-Demo) : chaque tick généré

2020.10.27 06:40:45.348 Core 1 EURUSD,M1 : le test des experts\GRAAL.ex5 du 2020.09.01 00:00 au 2020.09.03 00:00 a commencé avec les entrées:

2020.10.27 06:40:45.348 Core 1 StopLoss=30

2020.10.27 06:40:45.348 Core 1 TakeProfit=100

2020.10.27 06:40:45.348 Core 1 Lot=0.1

2020.10.27 06:40:45.348 Core 1 solde final 10000.00 pips

2020.10.27 06:40:45.348 Core 1 EURUSD,M1 : 111967 ticks, 2880 barres générées. Test réussi en 0:00:00.019.

2020.10.27 06:40:45.348 Core 1 270 Mb de mémoire utilisée dont 35 Mb de données historiques, 64 Mb de données tick

2020.10.27 06:40:45.348 Core 1 fichier journal "C:\Users\a1960\AppData\Roaming\MetaQuotes\Tester\36A64B8C79A6163D85E6173B54096685\Agent-127.0.0.1-3000\logs\20201027.log" écrit

2020.10.27 06:40:45.371 Core 1 connexion fermée

Je le teste pour une période d'un jour. Cela signifie que le conseiller expert doit ouvrir 1440 ordres. C'est peut-être un problème. Peut-être y a-t-il des limites au nombre d'ordres ouverts en même temps.
Si je l'ai vérifié, c'est peut-être parce que lorsque j'avais 10 000 sur le dépôt de mon EA, il n'a ouvert que 300 ordres et a manqué le reste pour une raison liée à l'argent (comme je l'ai compris à partir des écritures de journal). Plus tard, j'ai augmenté le dépôt d'EA à 100 000 et il n'avait plus le droit de sauter. Et il a arrêté d'ouvrir des commandes.

Mais ensuite j'ai diminué le dépôt de l'EA à 10 000 à nouveau. Cependant, mon conseiller expert n'ouvre toujours rien et écrit toujours les valeurs que j'ai indiquées ci-dessus.

J'ai créé un autre EA. J'y ai téléchargé le même code. J'ai un dépôt de 10 000. J'ai le même problème : je n'ai pas ouvert de commandes.
Veuillez me conseiller sur la manière de faire fonctionner mon EA correctement. Il envoie le même message, sauf que ma ligne jaune surlignée a 271 au lieu de 270 mb
J'ai Windows 10. J'ai un système d'exploitation 64 bits et 8 Go de RAM.
Merci.

 
ANDREY:

Merci pour le conseil.

Ça ne marche vraiment pas. C'est écrit.


2020.10.27 06:40:45.348 Core 1 EURUSD,M1 : 111967 ticks, 2880 barres générées. Test réussi à 0:00:00.019.

2020.10.27 06:40:45.348 Core 1 270 Mb de mémoire utilisée dont 35 Mb de données historiques, 64 Mb de données tick

2020.10.27 06:40:45.348 Core 1 fichier journal "C:\Users\a1960\AppData\Roaming\MetaQuotes\Tester\36A64B8C79A6163D85E6173B54096685\Agent-127.0.0.1-3000\logs\20201027.log" écrit

2020.10.27 06:40:45.371 Core 1 connexion fermée

Je le teste pour une période d'un jour. Cela signifie que le conseiller expert doit ouvrir 1440 ordres. C'est peut-être un problème. Peut-être y a-t-il des limites au nombre d'ordres ouverts simultanément.
Si je l'ai vérifié, c'est peut-être parce que lorsque j'avais 10 000 sur le dépôt de mon EA, il n'a ouvert que 300 ordres et a manqué le reste pour une raison liée à l'argent (comme je l'ai compris à partir des écritures de journal). Plus tard, j'ai augmenté le dépôt d'EA à 100 000 et il n'avait plus le droit de sauter. Et il a arrêté d'ouvrir des commandes.

Mais ensuite j'ai encore réduit le dépôt de l'EA à 10.000. L'EA n'ouvre toujours rien et écrit toujours ce que j'ai indiqué en haut.
Veuillez me conseiller pour que mon EA fonctionne normalement.
J'essaierai toujours de le faire fonctionner comme avant.

S'il y a 1440 ordres par jour, le conseiller expert doit vérifier le début de la minute ou, plus facilement, l'apparition de la barre d'une minute. Et il s'ouvre en ce moment. Vous ne l'avez pas et donc l'EA ouvre une position à chaque tick, ce qui est une condition difficile en soi selon notre symbole à la cotation actuelle. Cette condition peut ne pas être remplie, et les tiques ne seront pas détectées. Et à un moment donné, une erreur critique se produira.

Egalement le type d'exécution de l'ordre (ordre de création d'une position) Tout ou rien.

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //

//+------------------------------------------------------------------+
void OnTick()
  {
Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
 if(!SymbolInfoTick(_Symbol,latest_price))
   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult); // получите (запросите) результаты исполнения / сделки и распечатайте, будет понятней
    }   
     return;
  }
 
int M = TimeMinute(TimeCurrent());
int TimeServer()                                                  
{  
   Print(M, " - Tекущее время сервера");
}

Pouvez-vous me le dire s'il vous plaît !

Pourquoi l'heure du serveur n'est-elle pas mise à jour lorsque de nouveaux ticks arrivent ?

Au moment où l'EA démarre, tout fonctionne comme il se doit, mais ensuite le temps passe, mais la nouvelle valeur de la minute en cours n'entre pas dans la variable.

C'est-à-dire que le Conseiller Expert fonctionne en fonction du nombre obtenu dans la variable int M = TimeMinute(TimeCurrent()) ;

En fait, cette ligne de code provient de la référence et elle ne fonctionne pas.

Par exemple, je le démarre à 12-l'heureactuelle renvoyée par le serveur correspond à l'heure dans la variable, mais ensuite la variable reste à 12, bien qu'il soit déjà 15-20 minutes à l'horloge

Документация по MQL5: Дата и время / TimeCurrent
Документация по MQL5: Дата и время / TimeCurrent
  • www.mql5.com
Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов. В обработчике OnTick() данная функция вернет время пришедшего обрабатываемого тика. В других случаях (например, вызов в обработчиках OnInit(), OnDeinit(), OnTimer() и так далее) это –...