Erreurs, bugs, questions - page 1453

 

Pour les symboles, la propriété SYMBOL_FILLING_MODE signifie une combinaison de drapeaux - c'est-à-dire qu'elle décrit les modes de remplissage autorisés pour la négociation de ce symbole.

Avez-vous essayé de faire le contrôle comme indiqué dans la documentation ?

В режимах исполнения "По запросу" и "Немедленный" для рыночных ордеров всегда используется политика заполнения Все/Ничего, а для лимитных ордеров - режим "Вернуть". В данном случае, при от отсылке ордеров функциями OrderSend или OrderSendAsync тип заполнения для них можно не указывать.

Dans les modes d'exécution "Par marché" et "Bourse", la politique de remplissage "Retour" est toujours autorisée pour tous les types d'ordres. L'admissibilité des autres types de commande peut être vérifiée à l'aide des propriétés SYMBOL_FILLING_FOK et SYMBOL_FILLING_IOC.

Exemple :

//+------------------------------------------------------------------+
//| vérifie l'admissibilité du mode de remplissage spécifié |
//+------------------------------------------------------------------+
bool IsFillingTypeAllowed(string symbol,int fill_type)
{
//--- obtenir la valeur de la propriété décrivant le mode de remplissage
int filling=(int)SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE) ;
//--- retourner vrai si le mode fill_type est activé
return((filling&fill_type)==fill_type) ;
}


 
Rashid Umarov:

Pour les symboles, la propriété SYMBOL_FILLING_MODE signifie une combinaison de drapeaux - c'est-à-dire qu'elle décrit les modes de remplissage autorisés pour la négociation de ce symbole.

Avez-vous essayé de faire le contrôle comme indiqué dans la documentation ?


La solution suivante a fonctionné

         switch((int)SymbolInfoInteger(Symbol(), SYMBOL_FILLING_MODE))
   {
   case SYMBOL_FILLING_FOK:
      request.type_filling=ORDER_FILLING_FOK;
      break;
   case SYMBOL_FILLING_IOC:
      request.type_filling=ORDER_FILLING_IOC;
      break;
   default:
      request.type_filling=ORDER_FILLING_RETURN;
   }
 
Vladislav Andruschenko:

cette solution a aidé

Si vous lisez l'aide plus attentivement, vous verrez que le cas où les deux modes sont disponibles n'est pas traité - la valeur de SymbolInfoInteger sera(SYMBOL_FILLING_FOK | SYMBOL_FILLING_IOC).
 

Et vous pouvez le vérifier sur le serveur "RoboForex-MetaTrader 5" avec ce code :

//+------------------------------------------------------------------+
//|                                                 Info_FILLING.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property description "Варианты исполнения ордера по объему"
#include<Trade\Trade.mqh>
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
// Все/Ничего     SYMBOL_FILLING_FOK   1
// Все/Частично   SYMBOL_FILLING_IOC   2
// Вернуть        Идентификатор отсутствует
   Print("Все/Ничего: ",IsFillingTypeAllowed(Symbol(),SYMBOL_FILLING_FOK));
   Print("Все/Частично: ",IsFillingTypeAllowed(Symbol(),SYMBOL_FILLING_IOC));
   Print("Вернуть: ",IsFillingTypeAllowed(Symbol(),NULL));

   CTrade oTrade;
   switch((int)SymbolInfoInteger(Symbol(),SYMBOL_FILLING_MODE))
     {
      case SYMBOL_FILLING_FOK:
         Print("ORDER_FILLING_FOK");
         break;
      case SYMBOL_FILLING_IOC:
         Print("ORDER_FILLING_IOC");
         break;
      default:
         Print("ORDER_FILLING_RETURN");
     }
  }
//+------------------------------------------------------------------+ 
//| проверяет разрешенность указанного режима заполнения             | 
//+------------------------------------------------------------------+ 
bool IsFillingTypeAllowed(string symbol,int fill_type)
  {
//--- получим значение свойства, описывающего режим заполнения 
   int filling=(int)SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE);
//--- вернем true, если режим fill_type разрешен 
   return((filling&fill_type)==fill_type);
  }
//+------------------------------------------------------------------+

Et le résultat de l'échange :

2015.12.22 18:13:09.946 Info_FILLING (AUDCAD.m,D1)      Все/Ничего: true
2015.12.22 18:13:09.946 Info_FILLING (AUDCAD.m,D1)      Все/Частично: true
2015.12.22 18:13:09.946 Info_FILLING (AUDCAD.m,D1)      Вернуть: true
2015.12.22 18:13:09.946 Info_FILLING (AUDCAD.m,D1)      ORDER_FILLING_RETURN


Vous pouvez voir que la variante de l'interrupteur ne nous dit pas la vérité. Mais voici un exemple tiré de la documentation qui nous donne une vue d'ensemble.

 

Quel est le problème avec

MarketInfo(Symbol(),MODE_MARGININIT) et SymbolInfoDouble(Symbol(),SYMBOL_MARGIN_INITIAL)

Pourquoi renvoient-ils des zéros ? ????

 
Vladimir Pastushak:

Quel est le problème avec

MarketInfo(Symbol(),MODE_MARGININIT) et SymbolInfoDouble(Symbol(),SYMBOL_MARGIN_INITIAL)

Pourquoi renvoient-ils des zéros ? ?????

Depuis six mois, il y a un problème avec le calcul du montant du prêt. L'information dans l'aide ne correspond pas à l'information sur le site ; l'information dans l'aide et sur le site ne correspond pas à l'information réelle, les développeurs, s'il vous plaît, faites la bonne description.

Calcul de la garantie

Erreurs,MetaTrader 5 MQL5,Ouvert,Démarré : 2015.07.13 16:23,#1259415

Voici un exemple tiré de l'aide de MQL5 :

SYMBOLE_CALC_MODE_FOREX

Mode Forex - calcul des bénéfices et des marges pour le Forex

Marge :Lots*Taille_contrat/Levage

Il s'agit d'une formule permettant de calculer une cotation à l'avance. La cotation à l'envers sera différente pour la croix, et la troisième pour la croix. Le site présente la même erreur.

Ainsi, quel que soit le type de marché, les formules sont assez douteuses...

Et j'ai découvert aujourd'hui que MarketInfo(Symbol(),MODE_MARGININIT) et SymbolInfoDouble(Symbol(),SYMBOL_MARGIN_INITIAL) renvoient des zéros.

Mais sur cette ressource, on trouve aussi des écrits étranges, https://metaquotes5.wordpress.com/2012/08/. D'après ce que j'ai compris, il s'agit du blog MetaQuotes.

What are Expert Magic Numbers?
  • 2012.08.11
  • skebanga
  • metaquotes5.wordpress.com
Expert magic numbers are ids given to a particular expert advisor. Care should be taken to ensure the ids are unique. This is because the magic number is used by the MetaTrader back end to know which expert advisor to send information to. For example, when a trade notification is...
 
Il y a des ennemis tout autour. Personne ne veut de nous, sauf nos femmes le jour de la paie.
 
Алексей Тарабанов:
Il y a des ennemis partout. Personne n'a besoin de nous sauf nos femmes le jour de la paie.

Salutations Alexey

Si vous pouvez réécrire l'indicateur iPulsar sur MT5, veuillez le réécrire dans la base de code.

Merci.


 

Bonjour chers collègues !

Désolé, j'ai fait une bêtise sur le fil principal avant de voir celui-ci.

Veuillez me conseiller sur la façon de résoudre ce problème : MT5 Expert Advisor sur FORTS continue d'afficher l'erreur 10022 : "Invalidorder expiry date in request" lorsque vous placez des ordres BAY_STOP ou SELL_STOP.

La date d'expiration n'est pas importante pour moi, mais je ne trouve aucun paramètre qui permette de fixer l'ordre. Nous n'avons pas ce genre de problème sur le marché des changes. Mon courtier est OPEN. L'erreur se produit dans le testeur.


 
Nikita Solodko:

Bonjour chers collègues !

Désolé, j'ai fait une bêtise sur le fil principal avant de voir celui-ci.

Veuillez me conseiller sur la façon de résoudre ce problème : MT5 Expert Advisor sur FORTS continue d'afficher l'erreur 10022 : "Invalidorder expiry date in request" lorsque vous placez des ordres BAY_STOP ou SELL_STOP.

La date d'expiration n'est pas importante pour moi, mais je ne trouve aucun paramètre qui permette de fixer l'ordre. Nous n'avons pas ce genre de problème sur le marché des changes. Mon courtier est OPEN. L'erreur se produit dans le testeur.


Les drapeaux ORDER_TIME_DAY ( ORDER_TIME_SPECIFIED_DAY, je pense, aussi) sont acceptables. En général, vous pouvez le vérifier. Il existe des fonctions spéciales pour cela. Et vous pouvez utiliser le moteur de recherche. Le sujet est abordé à de nombreuses reprises.