[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 242

 
MaxZ:

Bonjour.

Question : OrderSend() peut-il retourner une valeur de "0", ou inférieure à "-1" après exécution ? Quelqu'un a-t-il déjà rencontré un tel problème ? Ou bien les informations données dans la "documentation" sont-elles correctes ?

P.S. : je travaille comme télépathe, à la recherche d'une erreur dans le code de quelqu'un d'autre...

Hai !

Pourquoi pas ? Si une commande n'est pas ouverte en raison d'une requote, par exemple.

Pour cela, il existe une boucle pour l'ouverture réelle des ordres, par exemple, telle que celle-ci : le nombre de tentatives d'ouverture avec traitement des erreurs :

int NumberOfTry = 25;
//+------------------------------------------------------------------+
//| Установка ордера                                                 |
//+------------------------------------------------------------------+

void WmOrderSend(string symbol, int cmd, double volume, double price, double stoploss, double takeprofit, string comment, int magic, datetime expiration = 0)
{
   color clr;
   datetime opentime;
   int ticket;
   int error;
  
   comment = WindowExpertName() + " " + GetNameTF(Period()) + " " + comment;
   int msl = MarketInfo(symbol, MODE_STOPLEVEL);
   clr = CLR_NONE;
   if (cmd == OP_BUY)  clr = ColorBuy;
   else if (cmd == OP_SELL)  clr = ColorSell;   
   if ((expiration > 0) && (expiration < TimeCurrent()))   expiration = 0;
  
   for (int try = 1; try <= NumberOfTry; try++)
   {
      if (!IsTesting() && (!IsExpertEnabled() || IsStopped()))      break;   
      while (!IsTradeAllowed())      Sleep(5000);
    
      RefreshRates();
      opentime = TimeCurrent();
      ticket = OrderSend(symbol, cmd, volume, price, SlipPips, stoploss, takeprofit, comment, magic, expiration, clr);
      if (ticket > 0)
         if (UseSound)      {PlaySound("ok.wav"); break;}      
      else
      {
         error = GetLastError();
         if (error == ERR_TRADE_TIMEOUT)
         {
            Sleep(1000*66);
            if (ExistOrders(symbol, cmd, magic, opentime))
            {
               if (UseSound) {PlaySound("ok.wav"); break;}
            }
         }
        
         Print("Error(", error, ") set order: ", ErrorDescription(error), ", try ", try);
         continue;
      }
      
      Print("Error(", error, ") set order: ", ErrorDescription(error), ", try ", try);
      Print("Ask=", Ask, "  Bid=", Bid, "  symbol=", symbol, "  volume=", volume, "  cmd=", GetNameOP(cmd), "  price=", price, "  stoploss=", stoploss, "  takeprofit=", stoploss, "  magic=", magic);
      if ((error == ERR_COMMON_ERROR) || (error == ERR_ACCOUNT_DISABLED) || (error == ERR_INVALID_ACCOUNT) || (error == ERR_TRADE_DISABLED))
        {
         IsExpertFailed = true;
         break;
        }      
      if ((error == ERR_SERVER_BUSY) || (ERR_INVALID_TRADE_VOLUME) || (error == ERR_MARKET_CLOSED))
        {
         Sleep(1000*300); 
         break;
        }      
      if ((error == ERR_TOO_FREQUENT_REQUESTS) || (error == ERR_TOO_MANY_REQUESTS))    Sleep(1000*100);      
      if ((error == ERR_ORDER_LOCKED) || (error == ERR_LONG_POSITIONS_ONLY_ALLOWED) || (error == ERR_TRADE_TOO_MANY_ORDERS))      break;      
      if (error == ERR_TRADE_CONTEXT_BUSY) while (IsTradeContextBusy()) Sleep(1000*11);
      
      if (error == ERR_TRADE_EXPIRATION_DENIED )  {expiration = 0; continue;}      
      if ((error != ERR_PRICE_CHANGED) && (error != ERR_REQUOTE))  Sleep(1000*7.7);
   }      
}
 
Roman.:

Hai !

Eh bien, pourquoi pas ? Si, par exemple, un ordre n'est pas ouvert sur une requote...

Salut Roman.

Parce que normalement la fonction OrderSend() renvoie "-1" en cas d'erreur... Pas "0" et certainement pas moins de "-1". Mais quand même, peut-être que Quelqu'un a eu des précédents ?

 
MaxZ:

Salut Roman.

Parce que normalement, OrderSend() renvoie "-1" en cas d'erreur... Pas "0" et certainement pas moins de "-1". Mais quand même, peut-être que Quelqu'un avait des précédents ?

Au fait, c'est un sujet intéressant sur les erreurs. J'ai appris que si 0 (zéro) est renvoyé, il n'y a pas d'erreur et l'ordre est accepté par le courtier. Si elle n'est pas acceptée, une erreur est renvoyée, mais elle est supérieure à zéro. Dans la description de l'opérateur OrderSend(), il y a un enregistrement "...ou -1 en cas d'échec". Mais quel type d'erreur devrait-il y avoir pour que le courtier renvoie -1 ? Quelqu'un le sait-il ?
 
MaxZ:

Salut Roman.

Parce que normalement, OrderSend() renvoie "-1" en cas d'erreur... Pas "0" et certainement pas moins de "-1". Mais quand même, peut-être que Quelqu'un a eu des précédents ?


Il faudrait échanger une cuisine CONCRETE si la fonction Ordersend() renvoie "0", et encore moins < -1. :-)
 
paladin80:
Au fait, un sujet intéressant sur les erreurs. J'ai appris que si 0 (zéro) est renvoyé, il n'y a pas d'erreur et l'ordre est accepté par le courtier. Si elle n'est pas acceptée, une erreur est renvoyée, mais elle est supérieure à zéro.
La fonction GetLastError() renvoie-t-elle 0 ? Ou vous écrivez sur la fonction OrderSend() ?


paladin80:
Dans la description de l'opérateur OrderSend(), il y a une note "...ou -1 en cas d'échec". Mais quel type d'erreur devrait-il y avoir pour que le courtier renvoie -1? Quelqu'un le sait-il ?

OrderSend() renvoie "-1". Et le type d'erreur doit être vérifié avec la fonction GetLastError() ! Ne confondez pas les deux... Il y a un code d'erreur "1" qui signifie "Pas d'erreur, mais résultat inconnu"... Je n'ai pas rencontré d'erreur avec le code "-1" et je ne pense pas qu'il y en ait une ! :D

 
MaxZ:
La fonction GetLastError() renvoie-t-elle 0 ? Ou bien écrivez-vous sur la fonction OrderSend() ?


OrderSend() renvoie "-1". Et le type d'erreur devrait être vérifié avec GetLastError() !!! Ne confondez pas les deux... Il y a un code d'erreur "1", qui signifie "Pas d'erreur, mais résultat inconnu"... Je n'ai pas rencontré d'erreur avec le code "-1" et je ne pense pas qu'il y en ait une ! :D


Peut-être que j'ai vraiment pu me tromper. Une fois de plus, j'ai lu attentivement les informations sur OrderSend et les erreurs. Probablement, le point est que si le courtier a accepté la commande, il renvoie le numéro du billet et GetLastError de cette opération indiquera 0. S'il ne l'a pas fait, il indiquera -1 et GetLasError indiquera le numéro d'erreur supérieur à zéro.
 

Bon après-midi. Pouvez-vous me dire où je peux obtenir period_converter avec une fonction qui me permet de définir le point de référence. Par exemple, j'ai besoin de faire un graphique D2 de D1, quand je commence YYY.MMM.DDD HH.MM et à partir de cette date il commence à convertir les bougies.

J'ai trouvé quelque chose de similaire (même sur ce forum), mais pour une raison quelconque ne veut pas commencer à convertir à partir de nombres pairs (commence avec impair et tout) mai me dire ce qu'il faut changer dans le code ou le changer vous-même. Je vous en serais très reconnaissant. Voici ce que j'ai trouvé.

Dossiers :
 
Bonjour, puis-je changer l'intervalle de temps de l'indicateur ? Peut-on changer de période sur la plateforme dans la fenêtre ?
 

Chers tous

Je suis nouveau sur le marché des changes et j'aimerais demander quelques conseils aux gourous locaux.

Je travaille avec le terminal MT4.

Lorsque vous travaillez avec un graphique pour une paire de devises, il est pratique de changer d'échelle : "М1", "М5", ......

Ainsi, sur M1, il affiche l'historique des 38 dernières heures sous forme d'environ 2000 chandeliers, tandis que sur M5, il s'agit de 270 heures mais également d'environ 2000 chandeliers.

Dans le premier cas, l'horizon temporel d'une bougie sera de 60s, et dans le second cas, il sera de 470s. Peut-on extraire l'historique sur 270 heures (ou plus) avec des chandeliers de 60 secondes ?

Merci d'avance

 
paladin80:
J'ai peut-être dû me tromper. Une fois de plus, j'ai lu attentivement les informations sur OrderSend et les erreurs. Peut-être, le fait est que si le courtier a accepté la commande, il renvoie le numéro du billet et GetLastError de cette opération indiquera 0. S'il n'a pas accepté, il indiquera -1 et GetLasError indiquera le numéro d'erreur supérieur à zéro.

Maintenant, tu as raison... Parce que je suis un peu confus par votre réponse ! :)))


Mais ma question demeure. OrderSend() peut-il retourner "0" ou une valeur inférieure à "-1" ?


J'ai demandé d'envoyer un fichier journal... Mais ils ne veulent pas me l'envoyer. J'aurais compris quel était le problème depuis longtemps. Pendant ce temps, j'ai continué à téléporter ! ;))) Mais que se passe-t-il si la fonction OrderSend() présente quelques bizarreries ? DD

Raison: