- [ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5.
- Comment verrouiller/chiffrer l'EA ?
- Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6.
Je suis très novice dans le codage de mql4, et j'ai terminé mon premier EA. Mon seul problème est que je n'arrive pas à ouvrir des positions sur plus d'une paire. Dans la section EA sur le terminal à côté de journal, il envoie un flux de l'erreur, invalid ticket for orderclose function, même si l'EA ouvre et ferme des trades très bien sur une paire. Quelqu'un pourrait-il me donner un coup de main ?
Comment voulez-vous que nous le sachions si vous ne montrez pas votre code ni votre journal des erreurs ?
Si vous voulez que nous vous aidions, vous devez nous montrer votre code ainsi que les erreurs qu'il provoque (les résultats dans le journal). Il serait également utile de savoir sur quelles paires de devises et sur quelles périodes vous effectuez vos tests, lorsque nous examinerons votre code.
Veuillez également noter que sur MetaTrader 4, vous ne pouvez tester qu'une seule devise à la fois dans le testeur de stratégie. Si votre EA négocie plusieurs devises simultanément à partir d'un seul graphique, vous ne pourrez pas le tester dans le testeur de stratégie - uniquement sur un compte réel ou de démonstration !
Matt_Townsend: même si l'EA ouvre et ferme des transactions sans problème sur une paire. | C'est pourquoi je recommande Ne pas trader plusieurs devises dans un EA
|
Veuillez modifier votre message et utiliser le bouton SRC pour ajouter votre code ! Ne vous contentez pas de copier/coller le texte standard, car il est difficile à lire. Je suis sûr que vous pouvez voir dans d'autres fils de discussion comment cela doit être fait. Veuillez utiliser le bouton SRC pour poster votre code.
EDIT : Comme demandé auparavant - . .. Il serait également utile de savoir sur quelles paires de devises et sur quelles échelles de temps vous effectuez vos tests ...
EDIT2 : Comme demandé précédemment- ... ainsi que les erreurs qu'il donne (les résultats dans le journal) ...
Veuillez modifier votre message et utiliser le bouton SRC pour ajouter votre code ! Ne vous contentez pas de copier/coller le texte standard, car il est difficile à lire. Je suis sûr que vous pouvez voir dans d'autres fils de discussion comment cela doit être fait. Veuillez utiliser le bouton SRC pour poster votre code.
//| Simple Moving Average Crossover Strategy.mq4 |
//| Matthew Townsend |
//+------------------------------------------------------------------+
#property version "1.05"
#property strict
//---
//---Inputs
extern double Lots =0.01;
extern int FastMA =5;
input int FastMAMode =MODE_EMA;
extern int SlowMA =8;
input int SlowMAMode =MODE_SMA;
//+----------------------------------------+
//|undesirables |
//+----------------------------------------+
int init()
{
//----
//----
return(0);
}
int deinit()
{
//----
//----
return(0);
}
//+---------------------------------------------+
//|System start |
//+---------------------------------------------+
int start()
{
double fastma, slowma;
int ticket, total;
//---define Ma's
fastma = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,0);
slowma = iMA(NULL,0,8,0,MODE_SMA,PRICE_CLOSE,0);
total = OrdersTotal();
//---Start operations
if(total < 1)
{
if(fastma > slowma)
{
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,0,"",0,0,Blue);
if(ticket > 0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Buy order opened : ", OrderOpenPrice());
}
else
Print("Error opening order : ", GetLastError());
return(0);
}
if(fastma < slowma)
{
ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,10,0,0,"",0,0,Red);
if(ticket > 0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Sell order opened : ", OrderOpenPrice());
}
else
Print("Error opening order : ", GetLastError());
return(0);
}
return(0);
}
bool ans;
if(OrderType()==OP_BUY)
{
while(fastma < slowma)
{
ans = OrderClose(OrderTicket(),Lots,Bid,10,clrNONE);
if(ticket < 1)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Buy order closed : ", OrderClosePrice());
}
else
Print("Error closing order : ", GetLastError());
return(0);
}
}
if(OrderType()==OP_SELL)
{
while(fastma > slowma)
{
ans = OrderClose(OrderTicket(),Lots,Ask,10,clrNONE);
if(ticket < 1)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Sell order closed : ", OrderClosePrice());
}
else
Print("Error closing order : ", GetLastError());
return(0);
}
}
return(0);
}
//+-----------------------------------------------------------------------------------+
Je vous ai demandé de MODIFIER votre message précédent, et non d'en ajouter un nouveau, afin de ne pas allonger le fil de discussion !
J'ai testé sur une période d'une heure, EURUSD et GBPUSD d'une heure.
...
ans = OrderClose(OrderTicket(),Lots,Bid,10,clrNONE);
...
ans = OrderClose(OrderTicket(),Lots,Ask,10,clrNONE);
...
Vous ne vérifiez pas correctement le résultat de l'opération de fermeture.
En termes de logique, il y a plusieurs problèmes avec votre EA, mais en l'état actuel des choses, il fonctionne sans aucune erreur de mon côté dans le Strategy Tester, donc veuillez fournir la liste des erreurs que vous obtenez !
Il y a déjà deux avertissements du compilateur pour le code suivant :
...
ans = OrderClose(OrderTicket(),Lots,Bid,10,clrNONE);
...
ans = OrderClose(OrderTicket(),Lots,Ask,10,clrNONE);
...
Vous ne vérifiez pas correctement le résultat de l'opération de fermeture.
En termes de logique, il y a plusieurs problèmes avec votre EA, mais en l'état actuel des choses, il fonctionne sans aucune erreur de mon côté, donc veuillez fournir la liste des erreurs que vous obtenez !
La seule erreur que j'ai reçue de l'EA est unticket invalide pour la fonction orderclose, avec un numéro à côté. J'aimerais montrer le journal actuel, mais sur le deuxième graphique avec l'EA en cours d'exécution, il ne fait rien, car normalement il devrait essayer d'ouvrir une transaction immédiatement. Si, et quand le journal commence à se remplir avec l'erreur, comment dois-je faire pour vous montrer le journal réel ?
Sélectionnez les lignes en question avec Click, Ctrl-Click ou Shift-Click (opération standard de Windows), puis faites un clic droit sur la sélection et choisissez "Copy" !
EDIT : En ce qui concerne le code, vous utilisez l'OrderSelect, mais vous supposez toujours qu'il fonctionne à chaque fois. Et quand cela ne fonctionne pas, vous continuez à utiliser les fonctions détaillées de l'ordre comme OrderTicket() dans votre clôture, qui pourrait échouer si l'OrderSelect() initial échoue aussi. Comme je l'ai dit, vous avez de nombreux problèmes de logique dans votre code !
bool ans;
//You do not select an order
{
while(fastma < slowma) //Use if not while
{
ans = OrderClose(OrderTicket(),Lots,Bid,10,clrNONE);
if(ticket < 1) //ticket is a local variable and has not been assigned a value
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Buy order closed : ", OrderClosePrice());
}
else
Print("Error closing order : ", GetLastError());
return(0);
}
}
La seule erreur que j'ai reçue de l'EA est unticket invalide pour la fonction orderclose, avec un numéro à côté. J'aimerais montrer le journal actuel, mais sur le deuxième graphique avec l'EA en cours d'exécution, il ne fait rien, car normalement il devrait essayer d'ouvrir une transaction immédiatement. Si, et quand le journal commence à se remplir avec l'erreur, comment pourrais-je vous montrer le journal réel ?
Une autre note très importante concernant l'utilisation de votre EA sur de multiples paires de devises ou cadres temporels.
Votre code n'utilise pas la sélection du "Magic Number" et ne vérifie pas le symbole (ni le "Magic number") utilisé lors de la vérification des ordres ouverts dans l'historique. Donc, en substance, votre EA ne fonctionnera pas correctement, ni avec lui-même ni avec d'autres EA.
En l'état actuel des choses, vous ne pouvez utiliser cet EA que seul, sans aucun autre EA en cours d'exécution, même pas lui-même sur un autre graphique !
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation