Erreurs, bugs, questions - page 2100

 
Slava:

Vous avez perçu la différence entre une commande synchrone et une commande asynchrone.

Ouais...
Mais les observations montrent que ces fonctions sont assez synchrones dans leur asynchronie. :)
Ok, je vais formuler ma question différemment pour les développeurs : Y a-t-il une opportunité (ou un désir) de changer ces fonctions asynchrones en fonctions synchrones ?
 
fxsaber:

Pourriez-vous fournir une liste des fonctions asynchrones.

Si je comprends bien, les fonctions Object et Chart (quelles autres ?) sont toutes asynchrones. La raison pour laquelle ChartGet fonctionne plus rapidement que ChartXY n'est pas très claire ?

Elles sont aussi terriblement lentes, c'est juste que le but de mon algorithme "rapide" est de calculer une opportunité de ne pas appeler les fonctions graphiques et de s'en passer. Et dès que vous "saisissez" le graphique dans mon exemple et commencez à le déplacer de gauche à droite, toute la vitesse est perdue car les fonctions du graphique commencent à être appliquées en raison de l'occurrence d'un événement.
CHARTEVENT_CHART_CHANGE
 

Bonjour, j'ai commencé à étudier MQL5 à partir dehttps://www.mql5.com/ru/articles/100. J'ai lancé le code et j'ai reçu l'erreur 4756. L'erreur ne s'est pas améliorée après avoir consulté la documentation. Ok, je pense que je vais commencer par des fonctions simples (Alerte/Imprimer...). L'une des fonctions les plus importantes est OrderSend. J'ai commencé à chercher dans le forum/documentation sur la façon d'utiliser OrderSend. J'ai trouvé cet articlehttps://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions et j' ai trouvé le code pour ouvrir une position d'achat. J'ai obtenu l'erreur 4756 et le retcode 10030. J'ai compris que 10030 - c'est la propriété OrderSend, mais je n'ai pas compris comment cette propriété doit être utilisée (j'ai regardé le code de quelqu'un d'autre) et à quoi elle sert principalement. Puis j'ai ouverthttps://www.mql5.com/ru/docs/trading/ordersend, copié le code, l'ai exécuté, il a bien fonctionné.
Mais je ne comprends toujours pas pourquoi l'erreur 4756 apparaît et comment s'en débarrasser, ainsi que de la 10030.

J'ai regardé le code entre

void OnTick(){
      //--- объявление и инициализация запроса и результата
      MqlTradeRequest request={0};
      MqlTradeResult  result={0};
      //--- параметры запроса
      request.action   =TRADE_ACTION_DEAL;                     // тип торговой операции
      request.symbol   =Symbol();                              // символ
      request.volume   =0.1;                                   // объем в 0.1 лот
      request.type     =ORDER_TYPE_BUY;                        // тип ордера
      request.price    =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // цена для открытия
      request.deviation=5;                                     // допустимое отклонение от цены
      request.magic    =EXPERT_MAGIC;                          // MagicNumber ордера
      //--- отправка запроса
      if(!OrderSend(request,result))
         PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки
         Alert(GetLastError());
      //--- информация об операции
      PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
   }

et celui-ci.

uint SendRandomPendingOrder(long const magic_number) 
  { 
//--- готовим запрос 
   MqlTradeRequest request={0}; 
   request.action=TRADE_ACTION_PENDING;         // установка отложенного ордера 
   request.magic=magic_number;                  // ORDER_MAGIC 
   request.symbol=_Symbol;                      // инструмент 
   request.volume=0.1;                          // объем в 0.1 лот 
   request.sl=0;                                // Stop Loss не указан 
   request.tp=0;                                // Take Profit не указан    
//--- сформируем тип ордера 
   request.type=GetRandomType();                // тип ордера 
//---сформируем цену для отложенного ордера 
   request.price=GetRandomPrice(request.type);  // цена для открытия 
//--- отправим торговый приказ 
   MqlTradeResult result={0}; 
   OrderSend(request,result); 
//--- выведем в лог ответ сервера   
   Print(__FUNCTION__,":",result.comment); 
   if(result.retcode==10016) Print(result.bid,result.ask,result.price); 
//--- вернем код ответа торгового сервера 
   return result.retcode; 
  } 

Ils me semblent presque identiques, je ne vois pas où ces erreurs apparaissent (4756 et 10030). Veuillez pointer du doigt et expliquer.

 
damirqa:

Bonjour ! J'ai commencé à étudier le MQL5 à partir dehttps://www.mql5.com/ru/articles/100. J'ai lancé le code et j'ai reçu l'erreur 4756. J'ai donc pensé commencer par le plus simple (Alerte/Imprimer...). L'une des fonctions les plus importantes est OrderSend. J'ai commencé à chercher dans le forum/documentation sur la façon d'utiliser OrderSend. J'ai trouvé cet articlehttps://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions et j' ai trouvé le code pour ouvrir une position d'achat. J'ai obtenu l'erreur 4756 et le retcode 10030. J'ai compris que 10030 - c'est la propriété OrderSend, mais je n'ai pas compris comment cette propriété doit être utilisée (j'ai regardé le code de quelqu'un d'autre) et à quoi elle sert principalement. Puis j'ai ouverthttps://www.mql5.com/ru/docs/trading/ordersend, copié le code, lancé, tout va bien, ça a marché.
Mais je ne comprends toujours pas pourquoi l'erreur 4756 apparaît et comment s'en débarrasser, ainsi que de la 10030.

J'ai regardé le code entre

et celui-ci.

Ils me semblent presque identiques, je ne vois pas où ces erreurs apparaissent (4756 et 10030). Veuillez pointer du doigt et expliquer


Utilisez la classe de transaction CTrade - de cette façon, vous êtes assuré de faire le moins d'erreurs possible.

Exemple d'envoi d'un ordre de transaction pour ouvrir un achat :

//+------------------------------------------------------------------+
//|                                                     Open Buy.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
//---
#include <Trade\Trade.mqh>
CTrade         m_trade;                      // trading object
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   m_trade.Buy(1.0); // open Buy position, volume 1.0 lot
  }
//+------------------------------------------------------------------+
Dossiers :
Open_Buy.mq5  2 kb
 
Vladimir Karputov:

Utilisez la classe de commerce CTrade pour vous assurer que vous faites le moins d'erreurs possible.

Exemple d'envoi d'un ordre de transaction pour ouvrir un Achat :


CTrade - s'agit-il d'une classe universelle ? C'est-à-dire qu'il peut remplacer tout autre code ?

 
damirqa:

CTrade - s'agit-il d'une classe universelle ? Est-il possible de remplacer un autre code par celui-ci ?


CTrade est fourni avec le terminal dans labibliothèque standard->Trade Classes->CTrade.

 
damirqa:

Ils me semblent presque identiques, je ne vois pas où ces erreurs apparaissent (4756 et 10030). Veuillez pointer du doigt et expliquer

https://www.mql5.com/ru/search#!keyword=Unsupported%20filling%20mode

Поиск - MQL5.community
Поиск - MQL5.community
  • www.mql5.com
Поиск выполняется с учетом морфологии и без учета регистра. Все буквы, независимо от того, как они введены, будут рассматриваться как строчные. По умолчанию наш поиск показывает страницы...
 

Un exemple de kodobase


Il existe plusieurs façons d'introduire du code dans ME

  1. Chargez-la directement à partir de ME. C'est probablement pratique pour certaines personnes. Mais pour moi, pas du tout.
  2. Téléchargez le fichier sur le disque, copiez-le dans le dossier MQL5 et ouvrez-le dans ME. Le plus souvent, j'utilise ce moyen peu pratique.
  3. Appuyez sur le bouton "view" et copiez (copie - CTRL+A et CTRL+C) et copiez le code vers ME (CTRL+V). Le moyen le plus rapide et le plus pratique.
Est-il raisonnable de rendre le bouton "copier" comme indiqué dans la capture d'écran ?

 

Dans le testeur MT5, l'objet OBJ_EDIT "Input field" ne permet pas d'éditer une valeur dans celui-ci. Est-ce conçu de cette façon ou est-ce un bug ?

Dans les terminaux et dans le testeur MT4, il est éditable, mais dans le testeur MT5, il ne l'est pas, la valeur saisie par programme lors de la création de l'objet disparaît.

 
damirqa:

Bonjour, j'ai commencé à étudier MQL5 depuishttps://www.mql5.com/ru/articles/100. J'ai lancé le code et j'ai obtenu l'erreur 4756. J'ai regardé dans la documentation et ce n'était pas mieux. Je pensais commencer par quelque chose de simple (Alerte/Imprimer...). L'une des fonctions les plus importantes est OrderSend. J'ai commencé à chercher dans le forum/documentation sur la façon d'utiliser OrderSend. J'ai trouvé cet articlehttps://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions et j' ai trouvé le code pour ouvrir une position d'achat. J'ai obtenu l'erreur 4756 et le retcode 10030. J'ai compris que 10030 - c'est la propriété OrderSend, mais je n'ai pas compris comment cette propriété doit être utilisée (j'ai regardé le code de quelqu'un d'autre) et à quoi elle sert principalement. Puis j'ai ouverthttps://www.mql5.com/ru/docs/trading/ordersend, copié le code, l'ai exécuté, il a bien fonctionné.
Mais je ne comprends toujours pas pourquoi l'erreur 4756 apparaît et comment s'en débarrasser, ainsi que de la 10030.

J'ai regardé le code entre

et celui-ci.

Ils me semblent presque identiques, je ne vois pas où ces erreurs apparaissent (4756 et 10030). Montrez-nous du doigt et expliquez-nous, s'il vous plaît.

Un champ de la structure n'est pas rempli. Et ce n'est pas suffisant, mais ce n'est pas une telle erreur.

Exécution instantanée

Un ordre de transaction pour ouvrir une position en mode d'exécution instantanée (le mode de négociation à des prix en continu). 9 champs sont obligatoires :

  • action
  • symbole
  • volume
  • prix
  • sl
  • tp
  • déviation
  • type
  • type_filling

Vous pouvez également spécifier des champs de magie et de commentaires.

Exécution du marché

Un ordre de transaction pour ouvrir une position dans le mode d'exécution du marché. Il faut spécifier 5 champs :

  • action
  • symbole
  • volume
  • type
  • type_filling

Vous pouvez également spécifier des champs de magie et de commentaires.


Raison: