Besoin d'aide pour le codage

 

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 !

Dossiers :
el1.mq4  2 kb
 

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

 

Bonjour,

Lorsque je change NUL L en NULL, je n'obtiens aucune erreur de la copilation.

 

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.

Dossiers :
el1.mq4  4 kb
 

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.

 

Essayez ceci

Je ne teste pas le code - si vous me donnez l'indicateur, je le testerai - en fait, je le testerai très bientôt avec un autre indicateur. J'espère quand même que cela vous aidera.

Dossiers :
el1_1.mq4  5 kb
 

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

Dossiers :
el1_2.mq4  5 kb
Raison: