Questions des débutants MQL5 MT5 MetaTrader 5 - page 404
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
J'ai commencé à écrire un wrapper pour les fonctions d'ouverture et de modification des ordres (je pensais que cela réglerait mes problèmes de retour de valeurs de ces opérateurs) mais il y a le même problème.
Expliquez quel est le problème (peu importe ce que j'écris, il y a toujours un problème avec le retour des valeurs de OrderSend, OrderSelex et ModifyOrder)
Code d'habillage .
int start()
{
si (signal == 1)
{
OrderSendX(Symbol(),OP_BUY,0.1,Ask,0,500,500,"123",123,0,Red);
}
retour(0) ;
}
//-----------------------------------------------
int OrderSendX (string symbol,int cmd, double volume,double price,int slippage,double stoploss,double takeprofit,string comment,
int magic,datetime expiration,couleur arrow_color)
{
int err=GetLastError() ;
err = 0 ;
bool exit_loop = false ;
int ticket = -1 ;
int Retry = 10 ;
int cnt = 0 ;
if(cmd == OP_BUY || cmd == OP_SELL) //vérifier le type d'ordre à ouvrir
{
while(!exit_loop)
{
ticket = OrderSend(symbol,cmd,volume,price,slippage,stoploss,takeprofit,comment,magic,expiration,arrow_color) ;
err = GetLastError() ;
switch(err)
{
cas ERR_NO_ERROR :
exit_loop = true ;
pause ;
{ cas ERR_SERVER_BUSY :
cas ERR_NO_CONNECTION :
cas ERR_INVALID_PRICE :
cas ERR_BROKER_BUSY :
cas ERR_TRADE_CONTEXT_BUSY :
cnt++ ;
pause ;
cas ERR_PRICE_CHANGED :
cas ERR_OFF_QUOTES :
cas ERR_REQUOTE :
RefreshRates() ;
continuer ;
par défaut :
exit_loop = true ;
pause ;
}
si(cnt>Retry)
exit_loop = true ;
si(!exit_loop)
{
Sleep(1000) ;
RefreshRates() ;
}
sinon
{
si(err !=ERR_NO_ERROR)
{
Print("Erreur : " + err) ;
}
}
si (err ==ERR_NO_ERROR)
{
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) ;
retour(ticket) ;
}
Print("Erreur d'ouverture d'ordre après" + cnt + "tentatives") ;
retour (-1) ;
}
}
}
J'ai commencé à écrire un wrapper pour les fonctions d'ouverture et de modification des ordres (je pensais que cela réglerait mes problèmes de retour de valeurs de ces opérateurs) mais il y a le même problème.
Expliquez-moi quel est le problème (peu importe ce que j'ai écrit, j'ai toujours des problèmes avec le retour des valeurs de OrderSend, OrderSelex et ModifyOrder).
https://docs.mql4.com/ru/trading/ordermodify
OrderModify() retourne oui , non
Personne ne peut l'expliquer.
Essayons un autre exemple au lieu de me copier 100 fois l'aide.
Je vais utiliser un exemple pour comprendre les corrections.
{
SL=NormaliserDouble(Bid-TrailingStop*Point,Digits) ;
si(OrderStopLoss()!=SL)
OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0) ;
}
ne pas insérer
"""ticket """= OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0) ; chaque fois que c'est correct ?
Et merci à tous ceux qui ont essayé de m'expliquer.
Malheureusement, je ne comprends pas comment désigner une variable à une variable qui est prédéfinie comme une fonction.
Et merci à tous ceux qui ont essayé de m'expliquer.
Malheureusement, je ne comprends pas comment désigner une variable à une variable qui est prédéfinie comme une fonction.
CherLeanid. Apprenez à lire l'aide et à travailler avec les erreurs et les avertissements. Si vous n'apprenez pas à le faire, vous ne pourrez même pas programmer correctement. Ce sont les éléments de base. Avez-vous essayé de traduire ce qui est écrit dans les avertissements ? Comprenez-vous la signification des fonctions qui "doivent être vérifiées" ? L'aide décrit un exemple correct de manipulation de ces fonctions. Par exemple, OrderModify(). Regardez l'aide :
Valeur de retour
Elle renvoie true si la fonction se termine avec succès ou false en cas d'erreur. Pour obtenir des informations sur l'erreur, vous devez appeler la fonctionGetLastError().
et suit ensuite un exemple :
Comme vous pouvez le constater, la valeur de retour de la fonction est traitée dans l'opérateur if-else. La variable res est nécessaire "pour la beauté" pour une raison. C'est le résultat de l'exécution d'une fonction commerciale ! La fonction dont dépend votre argent ! Par conséquent, pour traiter correctement toutes les variantes possibles (le traitement dans cet exemple n'est pas fourni), nous avons besoin de la variable res et du code d'erreur renvoyé par la fonction GetLastError(). Les développeurs ont intentionnellement inclus des avertissements pour ne pas oublier qu'il existe des fonctions "importantes" pour faire attention au traitement des valeurs ! Notez également que si la valeur n'est pas vérifiée, il n'y aura pas d'erreur ! C'est-à-dire que dans ce cas, la fonction fonctionnera telle quelle, mais si une situation anormale se produit, elle ne sera pas traitée. La liste des situations non standard correspond aux codes de retour de la fonction GetLastError().
J'espère que c'est plus clair de cette façon.
J'ai commencé à écrire un wrapper pour les fonctions d'ouverture et de modification des commandes (je pensais que cela réglerait mon problème de retour de valeurs à partir de ces opérateurs) mais le même problème se pose.
Et dans ce cas, nous n'avons pas besoin d'écrire un wrapper. Cela ne résoudra pas le problème de l'avertissement concernant la vérification de la valeur de retour ! Regardez les exemples de ces fonctions et faites de même !
Comme indiqué dans la référence donne une erreur.
Je l'ai écrit comme ça et c'est bien.
if(OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0))
{
Print("La modification a réussi.") ;
}
else Print("Erreur de modification de la commande.") ;
Insérer le code correctement dans les messages :Insérer le code correctement dans le forum
Pourquoi le chalutage ne fonctionne-t-il pas pour vendre ? Il fonctionne pour acheter !
Aucune erreur ou avertissement, sur la compilation génétique.
Voici le code :