Erreurs, bugs, questions - page 1742
![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
L'aide indique :
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'autorisation d'autres types est vérifiée à l'aide des propriétés SYMBOL_FILLING_FOK et SYMBOL_FILLING_IOC.
Mais pas toujours. Ainsi, sur les comptes Robo, "Return" ne fonctionne pas, ni sur les comptes Pro, ni sur les comptes ECN.
Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading
Bugs, bugs, questions
fxsaber, 2016.10.20 08:24
SB sur tous les serveurs de trading//| Get the property value "ORDER_TYPE_FILLING" |
//+------------------------------------------------------------------+
ENUM_ORDER_TYPE_FILLING COrderInfo::TypeFilling(void) const
{
return((ENUM_ORDER_TYPE_FILLING)OrderGetInteger(ORDER_TYPE_FILLING));
}
TOUJOURS dans le testeur retourneENUM_ORDER_TYPE_FILLING::ORDER_FILLING_RETURN.
C'est pourquoi, si vous définissez le remplissage dans OrderModify via COrderInfo::TypeFilling(), le même RoboForexEU-MetaTrader 5 affichera une erreur logique [Unsupported filling mode]. Cependant, cette erreur ne se produit pas dans MetaQuotes-Demo - le serveur du développeur est mal configuré ?
L'aide indique :
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'autorisation d'autres types est vérifiée à l'aide des propriétés SYMBOL_FILLING_FOK et SYMBOL_FILLING_IOC.
Mais pas toujours. Par exemple, "Return" ne fonctionne pas sur les comptes Robo, ni sur les comptes Pro, ni sur les comptes ECN.
Je soupçonne que le paramètre "Retour" est par défaut sur tous les serveurs de commerce (au moins FxPro a répondu ainsi).
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading
Modes de remplissage des serveurs
Karputov Vladimir, 2016.10.14 19:18
Mode de remplissage "Retour" :
Retourner à
Pas d'identification
Ce mode est utilisé pour les ordres au marché (Achat et Vente), les ordres à cours limité et les ordres stop-limite et uniquement dans les modes "Exécution au marché" et "Exécution en bourse". En cas d'exécution partielle, un ordre au marché ou à cours limité avec un volume résiduel n'est pas supprimé, mais reste en vigueur.
Voici la réponse de la société de courtage concernantle mode "retour".
Notre expert MT5 a confirmé avec Metaquotes que le retour est utilisé par défaut, et qu'il est appliqué lorsque vous ne choisissez rien sur le remplissage.
)
En d'autres termes, c'est une sorte de talon.On soupçonne que le paramètre de remplissage "Retour" est le paramètre par défaut de tous les serveurs de négociation (du moins, FxPro a répondu comme tel).
En d'autres termes, c'est une sorte de talon.Dans certaines entreprises (en particulier MT5 a été lancé récemment), il est nécessaire de spécifier clairement le type de remplissage - si vous ne le spécifiez pas, il y aura une erreur.
Bien que, dans Robo, le serveur renvoie vrai pour la vérification "Retour", mais en fait, ce type de remplissage ne fonctionne pas. En bref, c'est un désordre total avec ces remplissages.
{
public:
virtual int f()
{
Print(__FUNCSIG__);
return(0);
}
};
class B : public A
{
public:
virtual int f()
{
Print(__FUNCSIG__);
return(0);
}
};
void OnStart()
{
// A* b = new B;
B* b = new B;
((A*)b).f();
delete b;
}
Est-ce que je comprends bien que si le virtuel en descendant est surchargé, le virtuel de base ne peut jamais être atteint ? C'est-à-dire qu'il n'y a aucun moyen d'appeler A::f depuis b.
Presque. En C++, l'entrée suivante est autorisée :
b.A::f();
Mais vous ne pouvez pas faire ça ici. Donc, uniquement et exclusivement par béquille :
{
public:
virtual int f()
{
Print(__FUNCSIG__);
return(0);
}
int f1()
{
return A::f();
}
};
Presque. En C++, l'entrée suivante est autorisée :
b.A::f();
Alors je ne comprends pas pourquoi ça marche en C++. Après tout, un virtual surchargé dans la table des méthodes virtuelles devrait être complètement surchargé. Et il ne devrait y avoir aucune trace de la base.
Mais il est impossible de le faire ici. C'est pourquoi elle n'est que par béquille :
{
public:
virtual int f()
{
Print(__FUNCSIG__);
return(0);
}
int f1()
{
return A::f();
}
};
Après tout, le virtuel surchargé dans le tableau des méthodes virtuelles devrait être complètement surchargé. Et il ne devrait y avoir aucune trace de la méthode de base.
Si le type est explicitement spécifié, la méthode est appelée directement, sans utiliser la table des fonctions virtuelles.
De cette façon, même une fonction purement virtuelle peut être appelée si elle possède un corps.
Alors A* b = new B ; ne fonctionnera pas.
Dans ce cas, vous avez besoin d'une autre béquille : déplacez les internes de la fonction dans la classe de base vers une méthode non virtuelle et appelez-la à l'intérieur de la méthode virtuelle. Nous pourrions alors appeler explicitement les méthodes non virtuelles de la classe de base et de l'héritier.
Si le type est explicitement spécifié, la méthode est appelée directement, sans utiliser la table des fonctions virtuelles.
Même une fonction purement virtuelle peut être appelée de cette manière si elle possède un corps.
Dans ce cas, nous avons besoin d'une autre béquille, qui consisterait à déplacer les internes de la fonction vers une méthode non virtuelle de la classe de base et à l'appeler à l'intérieur de la méthode virtuelle. Ensuite, vous pouvez appeler explicitement la méthode non virtuelle à partir de la base et du descendant.