Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 342
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
Voici le fichier .cpp du projet, jetez-y un coup d'œil et après quelques recherches sur Google et Yandex, je n'ai rien trouvé de bien compliqué, c'est généralement compréhensible. Cela semble même simple.
Mais comment cela fonctionne-t-il ? Je ne suis pas sûr de savoir comment faire référence à ce ddl - à partir du code de l'EA ? Comment ? D'abord, cela ressemble à ceci #include <GetIntValue>.
2. Lors de l'appel de la dll, il n'est pas nécessaire de garder le studio allumé, n'est-ce pas ? Comment est-ce exécuté ?
Veuillez montrer l'exemple le plus simple d'appel de cette dll à partir du code mql.
Je ne comprends pas ici...
La taille du lot doit augmenter de manière exponentielle (avec le multiplicateur 2) si un deuxième ordre unidirectionnel est ouvert.
Voici le résultat.
puis comme ceci
vous obtenez un résultat comme celui-ci
Alors c'est tout.
Merci, j'ai compris l'idée... J'ai tout compris.
A quoi sert cette ligne ?
datetime o;
Voici une autre question : j'ai un ordre de suivi. Quand un ordre unidirectionnel est ouvert, tout fonctionne bien, s'il y en a plus, cela ne fonctionne pas pour une raison quelconque. Pourquoi ?
{
for(int i = 0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
{
if(Bid - OrderOpenPrice() > TrailingStop*Point)
{
if (OrderStopLoss() < Bid - (TrailingStop + TrailingStep)*Point)
{
SL = NormalizeDouble(Bid - TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0);
}
}
}
if (OrderType() == OP_SELL)
{
if(OrderOpenPrice() - Ask > TrailingStop*Point)
{
if (OrderStopLoss() > Ask + (TrailingStop+ TrailingStep)*Point)
{
SL = NormalizeDouble (Ask+TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify (OrderTicket(), OrderOpenPrice(), SL,0,0);
}
}
}
}
}
}
}
Voici le fichier .cpp du projet, jetez-y un coup d'œil et après quelques recherches sur Google et Yandex, je n'ai rien trouvé de bien compliqué, c'est généralement compréhensible. Cela semble même simple.
Mais comment cela fonctionne-t-il ? Je ne suis pas sûr de savoir comment faire référence à ce ddl - à partir du code de l'EA ? Comment ? D'abord, cela ressemble à ceci #include <GetIntValue>.
C'est à peu près comme ça. Pour le faire fonctionner, vous devez compiler la dll et la placer dans le dossier experts/libraries (lisez l'aide et le tutoriel, c'est détaillé là).
2. Lors de l'appel de la dll, il n'est pas nécessaire de garder le studio allumé, n'est-ce pas ? Comment est-ce exécuté ?
J'ai une autre question : j'ai un ordre de suivi. Quand un ordre unidirectionnel est ouvert, tout fonctionne bien, s'il y en a plus, cela ne fonctionne pas pour une raison quelconque. Pourquoi ?
{
for(int i = 0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
{
if(Bid - OrderOpenPrice() > TrailingStop*Point)
{
if (OrderStopLoss() < Bid - (TrailingStop + TrailingStep)*Point)
{
SL = NormalizeDouble(Bid - TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0);
}
}
}
if (OrderType() == OP_SELL)
{
if(OrderOpenPrice() - Ask > TrailingStop*Point)
{
if (OrderStopLoss() > Ask + (TrailingStop+ TrailingStep)*Point)
{
SL = NormalizeDouble (Ask+TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify (OrderTicket(), OrderOpenPrice(), SL,0,0);
}
}
}
}
}
}
}
Parce que vous devez passer des paramètres dans la fonction, essayez ceci
bool IfProfTrail=false ; // A utiliser uniquement pour les positions rentables - mode Breakeven
int TrailingStop=0 ; // Distance de traînage = 0 - minimum autorisé
int TrailingStep=1 ; // Pas de distance de traînage
Merci beaucoup !
Je comprends maintenant quel est le problème.
Pour l'achat, j'ai utilisé :
Pour autant que je sache, l'achat se fait à la demande, mais iClose(Symbol(),Period(),0) prend les prix à la demande. Cela peut être la raison de l'erreur.
Mais ici la question se pose, car l'EA n'est pas un EA basé sur les Pips, le prix était dans la zone d'achat depuis longtemps et mis à jour avec chaque tick.Maintenant, j'utilise la combinaison suivante :
Pourquoi le commerce ne s'ouvre-t-il pas ? Il s'avère que l'EA s'arrête sur l'erreur et ne voit pas de mouvement de prix supplémentaire ?
J'ai pris le modèle de mon conseiller expert sur https://c.mql5.com/mql4/book/mq4/experts/tradingexpert.mq4.
À votre avis, dois-je ajouter à la fonction de traitement des erreurs dans cet EA une vérification des erreurs 129 et 138 ?
Si oui, comment faire ?
Au minimum, vous devez disposer de votre propre fonction d'ouverture des positions/de définition des ordres qui traitera toutes les erreurs. C'est ici que vous devez obtenir les derniers prix.
Je n'ai pas regardé d'ébauches. Mais je dirai que l'EA doit gérer toutes les erreurs renvoyées par le serveur. Et ce n'est pas suffisant. Il doit pouvoir reprendre ses positions après toute situation inattendue sans perte de fonctionnalité et sans défaillance de l'algorithme, et poursuivre son travail comme si rien d'extraordinaire ne s'était produit.
Vous devriez au moins avoir votre propre fonction d'ouverture des positions/de définition des ordres qui gère toutes les erreurs. C'est là que vous devez trouver les derniers prix.
Je n'ai pas regardé les plans. Mais je dirai que vous devez gérer toutes les erreurs renvoyées par le serveur dans votre EA. Et ce n'est pas suffisant. Il doit pouvoir reprendre ses positions après toute situation imprévue, sans perte de fonctionnalité, sans défaillance de son algorithme, et poursuivre son travail comme si rien d'extraordinaire ne s'était produit.
Le modèle est tiré d'un manuel scolaire. Je ne suis pas très doué pour les fonctions de gestion des erreurs.
A l'ouverture de l'ordre, il y a RefreshRates() ; (j'ai remplacé les Bids et Asks par Market Info comme suggéré).
Et une fonction de gestion des erreurs :
Je voulais demander. Je voudrais demander : puis-je y ajouter une autre ligne de l'erreur 129 ?