Demandez ! - page 88

 
 

Merci Ralph, j'ai essayé cela mais cela a donné une autre liste d'erreurs - disant que toutes les variables dans le fichier includes ne sont pas définies - mais elles le sont.

J'essaierai à nouveau pendant le week-end, cela me frustre un peu en ce moment.

@faqcya - Je pense que vous avez raison de le mettre dans un script mais je ne sais pas comment l'appeler à moins d'avoir un shell EA dans lequel le mettre.

Je vais peut-être jeter un coup d'œil aux modèles et voir si je peux l'appeler à partir de ceux-ci ou, mieux encore, le transformer en EA, je le veux tel quel, sans rien faire d'autre.

Merci pour votre aide,

Kevin

ralph.ronnquist:
@pgtips : changez la deuxième ligne pour qu'elle soit uniquement
#define MAGIC 20051120
c'est à dire sans signe égal et sans virgule.
 

Essayer d'apprendre la programmation

Tout d'abord, j'ai lu l'intégralité du cours de Corder's Guru et je l'ai trouvé très intéressant. Je suis arrivé à la conclusion que la seule façon raisonnable de tester une stratégie est d'écrire un programme pour s'assurer qu'elle est parfaitement exacte. Malheureusement, je suis totalement novice en la matière.

J'ai essayé d'écrire un programme de base et je n'arrive même pas à le faire fonctionner. Au moins, je n'obtiens plus d'erreurs mais il ne prend aucune commande. Je suis persévérant et je vais continuer à essayer mais j'apprécierais que quelqu'un qui voit mon erreur m'aide.

Tout ce que j'essaie de faire à ce stade, c'est de suivre le prix le plus bas (CurrentLow) et ensuite, lorsqu'il retrace d'un certain montant (Ret1), de placer un ordre de vente avec un TP du point bas.

Ne riez pas, mais voici ce que j'ai écrit jusqu'à présent :

//---- paramètres d'entrée

extern double TP1=75.0 ;

extern double Ret1=75.0 ;

extern double SL1=150.0 ;

extern double Lots=0.1 ;

//+------------------------------------------------------------------+

//| fonction d'initialisation de l'expert

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| fonction de désinitialisation experte |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| fonction de démarrage expert |

//+------------------------------------------------------------------+

int start()

{

int ticket=0 ;

if(Bars<100)

{

Print("barres inférieures à 100") ;

return(0) ;

}

double CurrentLow,CurrentHigh ;

if(Bid < CurrentLow)

{

CurrentLow = Bid ;

si(Bid > CurrentHigh)

{

CurrentHigh = Bid ;

si(CurrentHigh >= CurrentLow+(Point*Ret1))

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point), "Albatross_v1",757575,0,Green) ;

retour (0) ;

}

return (0) ;

}

return(0) ;

}

}

 
Putz:
Tout d'abord, j'ai lu l'intégralité du cours de Corder's Guru et je l'ai trouvé très intéressant. Je suis arrivé à la conclusion que la seule façon raisonnable de tester une stratégie est d'écrire un programme pour s'assurer qu'elle est parfaitement exacte. Malheureusement, je suis totalement novice en la matière.

J'ai essayé d'écrire un programme de base et je n'arrive même pas à le faire fonctionner. Au moins, je n'obtiens plus d'erreurs mais il ne prend aucune commande. Je suis persévérant et je vais continuer à essayer mais j'apprécierais que quelqu'un qui voit mon erreur m'aide.

Tout ce que j'essaie de faire à ce stade, c'est de suivre le prix le plus bas (CurrentLow) et ensuite, lorsqu'il retrace d'un certain montant (Ret1), de placer un ordre de vente avec un TP du point bas.

Ne riez pas, mais voici ce que j'ai écrit jusqu'à présent :

//---- paramètres d'entrée

extern double TP1=75.0 ;

extern double Ret1=75.0 ;

extern double SL1=150.0 ;

extern double Lots=0.1 ;

//+------------------------------------------------------------------+

//| fonction d'initialisation de l'expert

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| fonction de désinitialisation experte |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| fonction de démarrage expert |

//+------------------------------------------------------------------+

int start()

{

int ticket=0 ;

if(Bars<100)

{

Print("barres inférieures à 100") ;

return(0) ;

}

double CurrentLow,CurrentHigh ;

if(Bid < CurrentLow)

{

CurrentLow = Bid ;

si(Bid > CurrentHigh)

{

CurrentHigh = Bid ;

si(CurrentHigh >= CurrentLow+(Point*Ret1))

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point), "Albatross_v1",757575,0,Green) ;

retour (0) ;

}

return (0) ;

}

return(0) ;

}

}

Il semble erroné de vérifier si Bid > CurrentHigh à l'intérieur de la condition vraie que Bid < CurrentLow ; je pense que vous devriez avoir des tests indépendants comme celui-ci :

double CurrentLow,CurrentHigh;

int start()

{

if(Bid < CurrentLow) CurrentLow = Bid;

if(Bid > CurrentHigh) CurrentHigh = Bid;

if(Bid >= CurrentLow+(Point*Ret1))

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point),"Albatross_v1",757575,0,Green);

return(0);

}

Maintenant, trois remarques :

- Vous devez déclarer CurrentHigh et CurrentLow sur un scoop global, c'est-à-dire en dehors de toute fonction (et start() est une fonction) sinon ces variables seront initialisées à 0 à chaque appel de la fonction.

- Vous n'avez pas besoin de CurrentHigh car elle n'est pas utilisée.

- Vous devez implémenter une certaine logique pour réinitialiser/mettre à jour la valeur de CurrentLow, et probablement pour limiter l'ouverture des ordres à chaque tick au-dessus de CurrentLow+(Point*Ret1)).

 

Bonjour Michel,

Merci beaucoup pour votre réponse rapide et votre aide.

J'ai supprimé CurrentHigh et je comprends maintenant beaucoup mieux. J'ai également défini CurrentLow en haut du programme et maintenant il place réellement des ordres.

J'ai également ajouté un deuxième ordre basé sur un retracement plus important et cela semble fonctionner. Je dois maintenant trouver comment l'empêcher de créer un nouvel ordre à chaque tick, mais je vais y travailler seul pour l'instant, car j'apprendrai mieux ainsi.

Je suis sûr que je reviendrai ici avec d'autres questions.

Merci encore.

Putz

 
Putz:
Bonjour Michel,

Merci beaucoup pour votre réponse rapide et votre aide.

J'ai supprimé CurrentHigh et je comprends maintenant beaucoup mieux. J'ai également défini CurrentLow en haut du programme et maintenant il passe effectivement des ordres.

J'ai également ajouté un deuxième ordre basé sur un retracement plus important et cela semble fonctionner. Je dois maintenant trouver comment l'empêcher de créer un nouvel ordre à chaque tick, mais je vais y travailler seul pour l'instant, car j'apprendrai mieux ainsi.

Je suis sûr que je reviendrai ici avec d'autres questions.

Merci encore.

Putz

N'oubliez pas d'initialiser CurrentLow avec une grande valeur (comme 1000) ; si elle est initialisée avec 0, vous n'aurez jamais un Bid < 0.

 

Quelle langue de programmation dois-je apprendre ?

codersguru:
Bonjour à tous,

J'ai reçu beaucoup de messages privés me demandant de l'aide pour certains morceaux de code.

Ici vous pouvez poster vos questions relatives à MQL4, et je ferai de mon mieux pour y répondre.

Cher codersguru,

Si je souhaite apprendre à écrire des codes MQL4, quel langage de programmation dois-je apprendre ? Visual basic ou C++ ? Merci pour votre réponse.

 

Plus d'aide s'il vous plaît

Bonjour,

Je suis de retour pour plus d'aide. J'ai lu et regardé de nombreux autres EA pour essayer de comprendre, mais je n'arrive toujours pas à le faire fonctionner correctement.

Ce que j'essaie de faire est de placer deux ordres.

1) Vendre 0.1 lot une fois que le prix se retrace par Ret1 (75 pips) avec TP1 (75) et SL1 (150).

2) Vendre 0.2 lot une fois que le prix se sera retiré par Ret2 (150 pips) avec TP1 (75) et SL1 (75).

Sur le long terme, je souhaite qu'un ordre d'achat comme ci-dessus soit placé en fonction de la direction de la tendance. Je n'ai pas encore déterminé quel indicateur je vais utiliser pour déterminer la tendance, mais j'y arriverai à un moment donné.

Voici ce que j'ai actuellement. Il semble placer le premier ordre correctement mais le second ne se déclenche jamais. Toute aide sera très appréciée.

extern string Expert_Name = "Albatross v1" ;

extern int MagicNumber = 757575 ;

extern int Slippage = 3.0 ;

//---- paramètres d'entrée

extern double TP1=75.0 ;

extern double TP2=75.0 ;

extern double Ret1=75.0 ;

extern double Ret2=150.0 ;

double SL1=150.0 ;

extern double SL2=75.0 ;

extern double Lots=0.1 ;

double CurrentLow=1000 ;

//double CurrentHigh=0 ;

int OpenOrders=0,cnt=0 ;

//+------------------------------------------------------------------+

//| Fonction d'initialisation de l'indicateur personnalisé

//+------------------------------------------------------------------+

//int init()

// {

//---- indicateurs

//----

// return(0) ;

// }

//+------------------------------------------------------------------+

//| Fonction personnalisée de désinitialisation des indicateurs |

//+------------------------------------------------------------------+

// int deinit()

// {

//---- TODO : ajoutez votre code ici

//----

// return(0) ;

//+------------------------------------------------------------------+

//| Fonction d'itération de l'indicateur personnalisée |

//+------------------------------------------------------------------+

// int start()

// {

//---- TODO : ajoutez votre code ici

//----

// return(0) ;

// }

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//| fonction d'initialisation de l'expert |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| fonction de désinitialisation experte |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| Vérifier les commandes de position ouverte |

//+------------------------------------------------------------------+

int CheckOpenTrades()

{

int cnt ;

int NumTrades ; // Nombre de transactions d'achat et de vente pour ce symbole

NumTrades = 0 ;

for(cnt=OrdersTotal()-1;cnt>=0;cnt--)

{

OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES) ;

si ( OrderSymbol() != Symbol()) continuez ;

if ( OrderMagicNumber() != MagicNumber) continue ;

if(OrderType() == OP_BUY ) NumTrades++ ;

if(OrderType() == OP_SELL ) NumTrades++ ;

}

return (NumTrades) ;

}

//+------------------------------------------------------------------+

//| fonction de démarrage expert |

//+------------------------------------------------------------------+

int start()

{

int cnt, ticket, total ;

double TP ;

if(Bars<100)

{

Print("barres inférieures à 100") ;

return(0) ;

}

total = CheckOpenTrades() ;

si(total < 1)

{

if(Bid < CurrentLow) CurrentLow = Bid ;

if(Bid >= CurrentLow+(Point*Ret1))

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point), "Albatross_v1",MagicNumber,0,Green) ;

}

if(total < 2)

{

if(Bid >= CurrentLow+(Point*Ret2))

OrderSend(Symbol(),OP_SELL,Lots*2,Bid+(Point*Ret2),3,Bid+(SL2*Point),Bid-(TP2*Point), "Albatross_v1",MagicNumber,0,Green) ;

retour(0) ;

}

}

//+------------------------------------------------------------------+

 

Désolé de vous ennuyer avec cette question

Comment créer un objet qui est rempli d'une couleur ?

Dave

<<<

 

Bonjour à tous, Je suis un codeur et je code depuis longtemps en C++ mais ma connaissance de FX et MQL4 est très basique. Je suis en train de parcourir un EA que quelqu'un a écrit et j'essaie de comprendre le code...

Pouvez-vous m'expliquer en anglais simple ce qu'est le paramètre SHIFT dans la méthode iMA ?

double iMA(string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)

selon l'aide de MT4, c'est "Index de la valeur prise dans le tampon de l'indicateur (décalage par rapport à la barre actuelle du nombre donné de périodes précédentes)". - qu'est-ce qu'un tampon d'indicateur ???

il fait aussi ce qui suit...

int RealTime = 0;

if( UseCompletedBars )

{

if(timeprev==Time[0]){return(0);} timeprev = Time[0];

RealTime = 1;

}

double MA11 = iMA(NULL,0,MA1Periods,0,MA1MethodSelected, MA1ArraySelected,0+RealTime);

double MA12 = iMA(NULL,0,MA1Periods,0,MA1MethodSelected, MA1ArraySelected,1+RealTime);

double MA21 = iMA(NULL,0,MA2Periods,0,MA2MethodSelected, MA2ArraySelected,0+RealTime);

double MA22 = iMA(NULL,0,MA2Periods,0,MA2MethodSelected, MA2ArraySelected,1+RealTime);

if( MA11 > MA21 && MA12 < MA22 ) { EnterLong = True; }

if( MA11 MA22 ) { EnterShort = True; }

qu'est ce que cela renvoie ? puisque je ne connais pas le décalage, je pense que c'est la raison pour laquelle je ne peux pas l'obtenir ...

votre réponse sera très appréciée.

aidez-moi s'il vous plaît.

Raison: