![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
stevenpun Pour cela, le plus simple serait d'ajouter un tampon "direction de la pente" à cet indicateur ou d'utiliser un autre MACD qui a déjà cette pente résolue dans un tampon.
Que diriez-vous de ce https://www.mql5.com/en/forum/178018/page67
Mais le problème est de savoir ce que je dois mettre dans le code, j'ai cherché sur Google de nombreuses ea mais je n'ai pas réussi à trouver d'exemple.
S'il vous plaît me montrer un exemple, merci de m'aider.
Que pensez-vous de ceci https://www.mql5.com/en/forum/178018/page67
Mais le problème est de savoir ce que je dois mettre dans le code, j'ai cherché sur Google de nombreuses ea mais je n'ai pas réussi à trouver un exemple.
Veuillez me montrer un exemple, merci de votre aide.stevenpun
Ce serait un bon exemple à utiliser.
Lisez le tampon "couleurs" et lorsque la valeur de celui-ci passe de -1 à 1, c'est un signal d'achat, et lorsque la valeur passe de 1 à -1, c'est un signal de vente (le "de" est la valeur précédente du tampon couleurs et le "à" est la valeur actuelle, ou si vous voulez travailler avec des barres fermées uniquement, le "de" est 2 barres plus tôt et le "à" est 1 barre plus tôt).
Bonjour,
Je suis nouveau ici. Je voudrais mettre à jour un objet rectangle, mais je ne sais pas comment. Le code ci-dessous que j'ai utilisé pour créer des rectangles d'objets, si les EMAs se croisent. Ces rectangles doivent se terminer si le prix retrace et le touche. Comment faire ?
Merci d'avance.
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 clrLime
#property indicator_width1 2
#property indicator_color2 clrMagenta
#property indicator_width2 2
extern int EMA1 = 3;
extern int EMA2 = 21;
extern int EMA3 = 63;
extern double arrowDistance = 0.0003;
extern color upRectColor = clrYellow;
extern color dnRectColor = clrDodgerBlue;
extern color touchRectColor = clrDarkGray;
//---
extern double rectHigh = 0.0001;
extern int rectDays = 3;
extern int bars_limit = 2000;
extern bool showRectangle = true;
double upArrow[];
double dnArrow[];
double prev2EMA1, prev2EMA2, prev2EMA3;
double prevEMA1, prevEMA2, prevEMA3;
double curEMA1, curEMA2, curEMA3;
double prevOpenPrc, prevClosePrc, prevLowPrc, prevHighPrc;
string objRectName;
string rectArray[];
string indiName = "Emac";
int rectValidity = 0;
int arrayMaxAmounts = 99999;
int arrayCurAmount = 0;
int arrayLastAmount = 0;
//+------------------------------------------------------------------+
//| INIT() |
//+------------------------------------------------------------------+
int init() {
if (Period() != PERIOD_H1) {
Alert("Use only @ TF: H1");
return(0);
}
ArrayResize(rectArray,arrayMaxAmounts,arrayMaxAmounts);
IndicatorBuffers(2);
SetIndexBuffer(0,upArrow);
SetIndexBuffer(1,dnArrow);
SetIndexStyle(0,DRAW_ARROW);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(0,233);
SetIndexArrow(1,234);
SetIndexEmptyValue(0,0.0);
SetIndexEmptyValue(1,0.0);
SetIndexLabel(0,"Up");
SetIndexLabel(1,"Dn");
return(0);
}
//+------------------------------------------------------------------+
//| DEINIT() |
//+------------------------------------------------------------------+
int deinit() {
int k=0;
while (k<ObjectsTotal()) {
string objname = ObjectName(k);
if (StringSubstr(objname,0,StringLen("Emac")) == "Emac")
ObjectDelete(objname);
else
k++;
}
return(0);
}
//+------------------------------------------------------------------+
//| START() |
//+------------------------------------------------------------------+
int start() {
if (Period() != PERIOD_H1) {
Alert("Use only @ TF: H1");
return(0);
}
int limit,i,k;
int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---
if (limit>bars_limit-1 && bars_limit!=0) limit=bars_limit-1;
if (Bars<EMA1 || Bars<EMA2 || Bars0 && bars_limit0 && bars_limit0 && bars_limit<EMA3)) {
Alert("Adjust limit settings or put more bars on your chart!");
return(0);
}
//---
for (i=0; i<limit; i++) {
prev2EMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i+2);
prev2EMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i+2);
prev2EMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i+2);
prevEMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i+1);
prevEMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i+1);
prevEMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i+1);
curEMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i);
curEMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i);
curEMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i);
prevOpenPrc = iOpen(NULL,0,i+1);
prevClosePrc = iClose(NULL,0,i+1);
prevLowPrc = iLow(NULL,0,i+1);
prevHighPrc = iHigh(NULL,0,i+1);
rectValidity = rectDays*86400;
if ( (prev2EMA1=prevEMA2)&&(curEMA1>curEMA2)&&(prevEMA2>=prevEMA3)&&(curEMA2>curEMA3) ) { // up
upArrow = prevLowPrc - arrowDistance;
if (showRectangle == true) {
//----------------------- Draw Rectangle ----------------------
objRectName = StringConcatenate(indiName,"_",FuncPeriodToStr(Period()),"_",DoubleToStr(Time,0));
if (ObjectFind(objRectName) == -1) { // not exists
ObjectCreate(objRectName, OBJ_RECTANGLE, 0,Time,prevLowPrc,Time+rectValidity,prevLowPrc+rectHigh);
ObjectSet(objRectName, OBJPROP_COLOR, upRectColor);
ObjectSet(objRectName, OBJPROP_WIDTH, 0);
ObjectSet(objRectName, OBJPROP_STYLE, STYLE_SOLID);
//--- put information to Array ---
arrayCurAmount = ArraySize(rectArray);
rectArray[arrayCurAmount] = StringConcatenate(objRectName,"$up$",Time,"$",prevClosePrc,"$0"); // 0=new, not yet touched
} // if
} // if
} // if
if ( (prev2EMA1>prev2EMA2)&&(prevEMA1<=prevEMA2)&&(curEMA1<curEMA2)&&(prevEMA2<=prevEMA3)&&(curEMA2<curEMA3) ) { // down
dnArrow = prevHighPrc + arrowDistance;
if (showRectangle == true) {
//----------------------- Draw Rectangle ----------------------
objRectName = StringConcatenate(indiName,"_",FuncPeriodToStr(Period()),"_",DoubleToStr(Time,0));
if (ObjectFind(objRectName) == -1) { // not exists
ObjectCreate(objRectName, OBJ_RECTANGLE, 0, Time,prevHighPrc,Time+rectValidity,prevHighPrc-rectHigh);
ObjectSet(objRectName, OBJPROP_COLOR, dnRectColor);
ObjectSet(objRectName, OBJPROP_WIDTH, 0);
ObjectSet(objRectName, OBJPROP_STYLE, STYLE_SOLID);
//--- put information to Array ---
arrayCurAmount = ArraySize(rectArray);
rectArray[arrayCurAmount] = StringConcatenate(objRectName,"$dn$",Time,"$",prevClosePrc,"$0"); // 0=new, not yet touched
} // if
} // if
} // if
} // for
//----------------------- Edit Rectangle, change time2 & color, if price touched ----------------------
return(0);
} // start
//+------------------------------------------------------------------+
void DelObjects(string id) {
int ot1=ObjectsTotal();
while(ot1>=0) {
if (StringFind(ObjectName(ot1),id,0)>-1) {
ObjectDelete(ObjectName(ot1));
}
ot1--;
}
return;
}
//+------------------------------------------------------------------+
string FuncPeriodToStr(int thePeriod) {
switch(thePeriod) {
case 1: return("M1");
case 5: return("M5");
case 15: return("M15");
case 30: return("M30");
case 60: return("H1");
case 240: return("H4");
case 1440: return("D1");
case 10080: return("W1");
case 43200: return("MN1");
default: return("MN1");
}
}
//+------------------------------------------------------------------+
Comment communiquer entre deux ou plusieurs EE ?
Le newBie essaie de développer ceci à MT4 build 670. Aide ~
Télécharger le robot de trading 'Three Moving Averages' (Expert Advisor) pour MetaTrader 5 dans MetaTrader Market?
J'aime cela parce que j'aime K.I.S.S. (keep it simple stupid).
Je suis un débutant et j'aimerais développer ceci.
(1. version_01)
Lorsqu'il fonctionne, il place la position immédiatement dès que l'EA est activé.
C'est comme de l'ingénierie inverse à partir de .ex5 pour créer .mq4.
(2. version_02)
Sur le même graphique, visualisez les R & S hebdomadaires qui seront trouvés à partir de Zig-Zag.
(3. version_03)
Ajouter une logique,
--- ne pas entrer au-dessus ou en dessous de 20pips de la ligne de tendance.
Libérer la position, à 20 pips de la ligne de tendance hebdomadaire.
Votre aide sera appréciée ~
Merci d'avance ~
cosmiclifeform, c'est drôle, je n'ai pas réussi à faire backtester l'EA Nice Trader depuis, donc je n'ai pas pu l'optimiser, je l'ai fait sur alpari demo et ista forex, le même.... il continue à me donner des résultats vides. pouvez-vous me dire les astuces que vous utilisez pour backtester.
Bonjour Mastercash,
J'ai pu télécharger et exécuter l'EA NiceTrader dans le Strategy Tester sans problème.
J'ai simplement utilisé les paramètres par défaut et n'ai rien changé... et je n'ai reçu aucun message d'erreur.
Je n'ai pas essayé de l'exécuter en temps réel sur ma démo... mais cet EA fonctionne bien avec le Strategy Tester. Voir le graphique ci-joint...
Recevez-vous des messages d'erreur dans le journal ou d'autres indices expliquant pourquoi il ne fonctionne pas pour vous ?
J'espère que cela vous aidera,
Robert
cosmiclifeform, c'est drôle que je n'ai pas pu obtenir le Nice TraderEA pour backtester depuis lors, donc je n'ai pas pu l'optimiser, j'ai fait cela sur alpari demo et ista forex, le même.... il continue à me donner un résultat vide. pouvez-vous s'il vous plaît me dire les conseils que vous utilisez pour backtester.
Bonjour Mastercash,
J'ai exécuté l'EA sur un compte de démonstration FXDD... et je n'ai rien fait de spécial... j'ai simplement exécuté l'EA dans le testeur de stratégie avec les paramètres par défaut.
J'aimerais pouvoir vous aider davantage... mais sans indices spécifiques à rechercher (journaux d'erreurs, captures d'écran et autres conditions), il sera impossible de savoir pourquoi vous obtenez des résultats vides.
Tout ce que je peux vous recommander est...
Essayez d'abord un bon EA dans le testeur, dont vous savez qu'il fonctionne bien.
Cela vous permettra de vérifier que vos comptes de démonstration et vos procédures sont corrects.
Obtenez d'abord la confiance que tout fonctionne comme il se doit.
Ensuite, essayez votre Nice TraderEA... et notez exactement ce qui se passe. Même un écran vide devrait avoir des logs à vérifier.
Essayez d'ajouter des instructions PRINT et COMMENTAIRES partout... puis vérifiez à nouveau vos journaux... à la fois dans l'onglet EA et dans l'onglet Journal...
Vos COMMENTAIRES s'afficheront également à l'écran... vous devriez donc voir si votre EA fonctionne ou non.
L'essentiel pour obtenir une bonne aide au codage...
est de fournir le plus d'indices possible sur ce qui se passe avec votre EA...
Continuez à essayer tout ce qui est possible... et faites-nous part des résultats.
Prenez soin de vous,
Robert
Comment communiquer entre deux ou plusieurs EA ?
Si vous voulez dire qu'il existe une fonction ou un ensemble de fonctions dédiées à cela, alors la réponse est qu'il n'y en a pas.
J'ai vu un certain nombre de tentatives et jusqu'à présent, aucune de ces méthodes ne fonctionne dans toutes les situations. Sauf une. Mais l'une d'entre elles a été inventée par moi et comme l'idée est si simple que je ne peux toujours pas croire que personne n'y ait pensé (elle permet même la communication entre des EA qui ne sont pas du tout au même endroit et n'utilise aucune API pour cela), je garde cette solution pour moi (dans ce cas, j'attends de voir si quelqu'un pense à la même chose).
Essayez simplement de penser en dehors des limites prévues.
Si tu veux dire qu'il existe une fonction ou un ensemble de fonctions dédiées à cela, alors la réponse est qu'il n'y en a pas.
J'ai vu plusieurs tentatives et jusqu'à présent, aucune de ces méthodes ne fonctionne dans toutes les situations. Sauf une. Mais l'une d'entre elles a été inventée par moi et comme l'idée est si simple que je ne peux toujours pas croire que personne n'y ait pensé (elle permet même la communication entre des EA qui ne sont pas du tout au même endroit et n'utilise aucune API pour cela), je garde cette solution pour moi (dans ce cas, j'attends de voir si quelqu'un pense à la même chose).
Essayez simplement de penser en dehors des limites prévues.Je sais ce que vous voulez dire : les idées valent parfois beaucoup plus que la façon dont elles sont réalisées par la suite. Merci
Bonjour,
cher mladen, j'ai une petite demande à vous faire - pourriez-vous désactiver toutes les informations que l'indicateur ci-joint affiche dans le coin supérieur gauche ?
merci d'avance ;-)