Bonjour
J'ai maintenant résolu ce problème. J'ai pu compiler l'EA et j'ai essayé de le backtester. Mais malheureusement, il n'achète ni ne vend rien !
A part cela, il semble fonctionner, voici le journal :
14:16:18 EL1 entrées : Lots=0.1 ; Timeframe=240 ;
14:16:18 ELine GBPUSD,H4 : supprimé
14:16:18 2005.11.14 00:00 ELine GBPUSD,H4 : chargé avec succès.
Et voici le code de l'EA :
//+------------------------------------------------------------------+
//| T1.mq4
//|
//|
//+------------------------------------------------------------------+
extern double Lots = 0.1 ;
extern int Timeframe = 240 ;
string strDirCurrent="none" ;
string strDirPrevious="none" ;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
// vérification de la direction actuelle
if(iCustom(NULL,Timeframe, "ELine",0,0)>iCustom(NULL,Timeframe, "ELine",1,0))
strDirCurrent="long" ;
if(iCustom(NULL,Timeframe, "ELine",0,0)<iCustom(NULL,Timeframe, "ELine",1,0))
strDirCurrent="short" ;
// comparez avec la direction précédente et ouvrez une position s'il y a eu un changement
if(strDirCurrent=="long" && strDirPrevious=="short")
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,50,200, "EABuyOrder",16384,0,Green) ;
if(strDirCurrent=="short" && strDirPrevious=="long")
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,50,200, "EASellOrder",16384,0,Red) ;
strDirPrevious=strDirCurrent ;
}
// la fin.
Toute aide est la bienvenue !
Merci
Eric
Si vous regardez dans le cours de développement sur ce forum, vous trouverez "My_First_EA", un code avec des croisements de MAs.
Je n'ai pas pu obtenir de résultat en testant votre EA et je suis très novice en matière d'EA-Proramming également. Désolé
Merci balue. L'espace dans NULL provient uniquement du copier-coller, dans mon code il est écrit correctement. Et il compile bien (la deuxième version).
Je connais le cours MQL (même si je ne l'ai pas encore entièrement parcouru).
J'ai écrit un EA similaire pour ADX pour le tester et cela fonctionne. Seulement, lorsque j'essaie d'utiliser mon indicateur personnalisé, il ne fonctionne pas.
Veuillez joindre votre indicateur - afin que nous puissions faire un backtesting
Bonjour
Excellent code - j'aimerais bien le backtester - s'il vous plaît, donnez-nous votre Eline personnalisé.
J'ai modifié votre code en profondeur.
/*
* Created by SharpDevelop.
* User: CARDIO
* Date: 1/17/2006
* Time: 4:55 AM
*
*Todo: if there is an ope position - close it- then open in opposite direction.
*
*/
//+------------------------------------------------------------------+
//| T1.mq4
//|
//|
//+------------------------------------------------------------------+
#include
extern double Lots = 0.1;
extern int Timeframe = 240;
string strDirCurrent="none";
string strDirPrevious="none";
int cnt, magicEA;
bool isclosing = false;
double slippage = 3;
int init() {
return(0);
}
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
magicEA = 16384;
// check for current direction
if(iCustom(NULL,Timeframe,"ELine",0,0)>iCustom(NULL,Timeframe,"ELine",1,0))
{
strDirCurrent="long";
}
if(iCustom(NULL,Timeframe,"ELine",0,0)<iCustom(NULL,Timeframe,"ELine",1,0))
{strDirCurrent="short";
}
// compare to previous direction and open a position if there was a change
if(strDirCurrent=="long" && strDirPrevious=="short")
{
//firs close open positions
isclosing = true;
isclosing1();
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,"T1_EA_Buy_Order",16384,0,Green);
return(0);
}
if(strDirCurrent=="short" && strDirPrevious=="long")
{
isclosing = true;
isclosing1();
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,"T1_EA_Sell_Order",16384,0,Red);
return(0);
}
strDirPrevious=strDirCurrent;
return(0);
}
// the end.
void isclosing1(){
//Close all open orders
//todo: get a requote on the prices if error 138 occurs, use refreshrates
//todo: check if the last 3 closes where losers - if so stop the ea
int totalOrders = OrdersTotal();
int numPos = 0;
for(cnt=0; cnt<totalOrders; cnt++) { // scan all orders and positions...
OrderSelect(cnt, SELECT_BY_POS); // the next line will check for ONLY market trades, not entry orders
if(OrderSymbol() == Symbol() && OrderType() <= OP_SELL && OrderMagicNumber() == magicEA) { // only look for this symbol, and only orders from this EA
numPos++;
if(OrderType() == OP_BUY) { // Check for close signal for bought trade
if(isclosing) {
if (OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Violet)) { // Close bought trade
//writetofile("10","Closed buy", OrderTicket());
//prtAlert("Day Trading: Closing BUY order");
} else {
// writetofile("10b","Closed buy fail", ErrorDescription(GetLastError()));
}
}
} else { // Check sold trade for close signal
if(isclosing) {
OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Violet);
//writetofile("10","Closed buy", OrderTicket());
// prtAlert("Day Trading: Closing SELL order");
}else {
//writetofile("10c","Closed sell fail", ErrorDescription(GetLastError()));
}
}
}
}
}
Réparé, j'espère
Les problèmes sont résolus. Essayez ceci.
Nous devons encore travailler sur la gestion de l'argent, etc.
Merci, maintenant j'obtiens ceci :
2006.01.17 18:59:10 2006.01.12 08:20 EL1 : invalid double number as parameter 7 for OrderSend function(nombre double invalide comme paramètre 7 pour la fonction OrderSend)
2006.01.17 18:59:10 2006.01.12 08:10 EL1 : le commentaire de la fonction OrderSend doit être une chaîne de caractères.
2006.01.17 18:59:09 EL1 : chargé correctement
et l'erreur se répète environ un million de fois ;-)
mais je pense que celle-ci est facile à corriger.
J'essaie toujours de réparer - ne quittez pas, je vais poster maintenant.
Toujours en train de réparer
Corrigé - avec un peu de chance
Il vous manquait juste une valeur de take profit (tp) en fait.
Ne voulez-vous pas un tp et un stoploss ?
Bonne chance

- 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
Bonjour
J'essaie de coder un EA très simple mais je ne suis pas un programmeur et je n'ai jamais fait d'EA avant.
J'ai pris l'échantillon MACD de MT4 et j'ai modifié certaines parties et supprimé tout le reste dont je pensais ne pas avoir besoin.
Je suis sûr que mon code est vraiment horrible
Je voudrais que l'EA fonctionne comme ceci :
Mon indicateur personnalisé ELine a deux lignes qui se déplacent par étapes. Parfois l'une est plus haute que l'autre, parfois elles sont identiques.
Lorsqu'une ligne croise l'autre, je voudrais que l'EA prenne une position longue ou une position courte, en fonction de la ligne qui croise le haut.
Il y a toujours une position ouverte, sauf au démarrage de l'EA.
Lorsque j'essaie de le compiler, il dit "if" - point-virgule attendu (20,7).
Ensuite, à l'étape suivante, il devrait toujours fermer une position existante lorsqu'il en ouvre une nouvelle, mais je n'ai pas réussi à le coder jusqu'à présent.
Quelqu'un pourrait-il corriger les erreurs dans mon code et peut-être me dire comment je peux fermer les positions chaque fois que l'EA en ouvre une nouvelle ?
Merci beaucoup !