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
Je suis nouveau sur mq4 et j'essaie de créer un affichage à l'écran lorsqu'il y a un croisement de MACD. Voici mon code mais les alertes apparaissent toutes les quelques minutes.
Comment puis-je le coder pour qu'il n'affiche les alertes qu'une fois par heure ? Ou une alerte par barre ?
int start()
{
string MACD1="" ;
couleur colt9 ;
double MACDM_S10 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_MAIN, 0) ;
double MACDS_S10 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_SIGNAL,0) ;
double MACDM_S11 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_MAIN, 1) ;
double MACDS_S11 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_SIGNAL,1) ;
if ((MACDM_S11 < MACDS_S11 && MACDM_S10 < MACDS_S10)) { MACD1="IN UPTREND" ; colt9=LimeGreen ; }
if ((MACDM_S11 > MACDS_S11 && MACDM_S10 > MACDS_S10)) { MACD1="IN DOWNTREND" ; colt9=Red ; }
if ((MACDM_S11 > MACDS_S11 && MACDM_S10 < MACDS_S10)) { MACD1="NOUVEAU CROISEMENT HAUT" ; colt9=LimeGreen ; }
if ((MACDM_S11 MACDS_S10)) { MACD1="NEW DOWN CROSSING" ; colt9=Red ; }
chaîne MACD2="" ;
couleur colt14 ;
double MACDM_L10 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_MAIN, 0) ;
double MACDS_L10 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_SIGNAL,0) ;
double MACDM_L11 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_MAIN, 1) ;
double MACDS_L11 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_SIGNAL,1) ;
if ((MACDM_L11 < MACDS_L11 && MACDM_L10 < MACDS_L10)) { MACD2="IN UPTREND" ; colt14=LimeGreen ; }
if ((MACDM_L11 > MACDS_L11 && MACDM_L10 > MACDS_L10)) { MACD2="IN DOWNTREND" ; colt14=Red ; }
if ((MACDM_L11 > MACDS_L11 && MACDM_L10 < MACDS_L10)) { MACD2="NOUVEAU CROISEMENT HAUT" ; colt14=LimeGreen ; }
if ((MACDM_L11 MACDS_L10)) { MACD2="NEW DOWN CROSSING" ; colt14=Red ; }
if(MACD1=="NEW UP CROSSING"&&MACD2=="IN UPTREND")
Alert(Symbol()," - ", "H1 :"," MACD MAIN UPTREND MOVEMENT"," at ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS)) ;
if(MACD1=="NEW DOWN CROSSING"&&MACD2=="IN DOWNTREND")
Alert(Symbol()," - ", "H1 :"," MACD MAIN DOWNTREND MOVEMENT"," at ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS)) ;
if(MACD2=="NEW UP CROSSING"&&MACD1=="IN UPTREND")
Alert(Symbol()," - ", "H1 :"," MACD, MAIN TREND CHANGE TO UPTREND"," at ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS)) ;
if(MACD2=="NEW DOWN CROSSING"&&MACD1=="IN DOWNTREND")
Alert(Symbol()," - ", "H1 :"," MACD, MAIN TREND CHANGE TO DOWNTREND"," at ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS)) ;
return(0) ;
}Essayer d'UTILISER Minute()==1 ; dans la condition
Tendance Alexcud pour modifier
if (MaH11v < MaH1pr1v){H11v = " V " ; co11v = Rouge ; u1x5v = 0 ; d1x5v = 1;}
if (MaH11v > MaH1pr1v){H11v = " /\\ " ; co11v = Blue ; u1x5v = 1 ; d1x5v = 0;}
if (MaH11v == MaH1pr1v){H11v = " 0 " ; co11v = Green ; u1x5v = 0 ; d1x5v = 0;}
Bonjour à tous, j'essaie de modifier le trend alexcud (ci-joint).
je veux seulement 2 signaux haut et bas au lieu de 3 avec "0"...
pour que le calcul soit plus précis...
Une idée ?
Quelqu'un peut-il m'aider à comprendre ces lignes de programmation ? En anglais simple
Il s'agit d'un EA qui démarre quelque chose après la fin d'une barre.
Le code est le suivant :
datetime timeprev=0 ;
// Ne s'exécute qu'une fois par barre terminée
if(timeprev==Time[0]) return(0) ;
timeprev = Time[0] ;
Si je regarde le manuel de MQ4, Time[0] sert à extraire l'heure d'ouverture de la barre [0]. Il est indiqué en secondes à partir du 1er janvier 1970.
Je ne comprends pas comment cela fonctionne. D'abord nous avons "timeprev=0".
Puis la ligne suivante "if (timeprev==Time[0]) return(0).
Quelle est la valeur de Time[0] à ce moment-là ? Comment se fait-il qu'il puisse devenir 0 (la valeur de "timeprev") ?
La ligne suivante est "timeprev=Time[0]".
Comment se fait-il que la ligne entière fait que l'EA ne fait rien jusqu'à ce qu'une barre soit terminée ?
Essayez d'UTILISER Minute()==1 ; dans la condition
Cela déclenchera toujours chaque tick dans la première minute de chaque barre. Cela peut réduire considérablement le nombre, mais il y aura toujours plusieurs alertes.
La meilleure chose à faire est de définir une variable globale (ou un objet) et de la définir sur le Time[] de la dernière barre.
if (Time[0]!=lastTime) {
... alert, whatever...
lastTime=Time[0];
}
Bonjour,
Je ne peux pas éviter l'erreur 1 de OrderModify : elle apparaît toujours même en essayant de contrôler que les données avant de modifier sont différentes ! J'ai aussi essayé de doubler la normalisation... sans succès...
Voici le code :
if (Bid-OrderOpenPrice() >= VPoint*BreakEvenAtProfit)
{
si (OrderStopLoss() != OrderOpenPrice() + BreakEvenShift*VPoint)
{
Vresult = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+ BreakEvenShift*VPoint,OrderTakeProfit(),0,Green) ;
Des suggestions ?
Merci.Vérification rapide... assurez-vous que vous ne définissez pas une distance de seuil de rentabilité trop courte. Comparez-le à MarketInfo(Symbol(),MODE_STOPLEVEL) pour vous assurer qu'il est suffisamment grand.
Quel est l'objectif de VPoint ? Si ce nombre est faux, cela va tout gâcher. Le "Point" en lui-même sera toujours correct. Si ce nombre est faux, cela peut certainement être la cause du problème. Par exemple, il est accidentellement égal ou inférieur à la valeur réelle de POINT.
Question de codage SIMPLE
OrderSelect(5555, SELECT_BY_TICKET) ;
RefreshRates() ;
si (Ask >= (OrderOpenPrice()+ (5 * Point)) && OrderLots() == 2 && (OrderType() == OP_BUY)) {
OrderClose(5555,1,Ask,10,Red) ; }
si (Bid <= (OrderOpenPrice()- (5 * Point)) && OrderLots() == 2 && (OrderType() == OP_SELL)) {
OrderClose(5555,1,Bid,10,Blue) ; }
J'essaie encore d'apprendre...
Est-ce que cela fonctionnerait pour fermer la moitié (2 lots à 1) d'une position lorsque le prix est à 5 pips du prix d'ouverture?
MERCI !!!!!!
Ça a l'air d'aller. Mais c'est un peu désordonné. Vous pourriez également utiliser OrderProfit en fonction de ce que vous voulez réellement obtenir.
Lux
PS : J'ai oublié de mentionner qu'il faut faire attention aux courtiers à 5 décimales. Tout doit être multiplié par 10, donc dans votre exemple, 5 serait 50. Bonne chance !
Cela semble correct. Mais c'est un peu compliqué. Vous pourriez également utiliser OrderProfit en fonction de ce que vous voulez réellement réaliser.
Lux
PS : J'ai oublié de mentionner qu'il faut faire attention aux courtiers à 5 décimales. Tout doit être multiplié par 10, donc dans votre exemple, 5 équivaut à 50. Bonne chance !Merci LUX
Le problème est que je l'ai fait tourner juste pour déboguer sur un graphique 1 minute GBP/USD avec Windsor direct et il ne ferme pas 1 lot quand il atteint les 5 pips donc je ne sais pas ce qui se passe.
AUSSI,
J'essaie de fermer un achat et d'ouvrir immédiatement une vente et cela ne va pas bien non plus.
Ça marche et puis ça ne marche pas...
J'aimerais que cela soit beaucoup plus facile à programmer.
if (*******************) {
RefreshRates() ;
OrderSelect(5555,SELECT_BY_TICKET) ;
si (OrdersTotal() > 0 && OrderType()==OP_BUY) {OrderClose(5555, OrderLots(), Bid, Slippage, MediumSeaGreen) ;
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");}
Sleep(1500) ;
RefreshRates() ;
si (OrdersTotal() ==0) Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 10, 0, 0, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink) ;
if(Ticket<0)Print("OrderSend failed with error #",GetLastError()) ;
}
Débogage des indicateurs
Je suis nouveau dans ce langage et j'essaie d'écrire un indicateur. J'ai des problèmes car il n'y a pas de débogueur. J'ai essayé d'utiliser la fonction Print() mais rien n'est imprimé. En utilisant Alert() j'obtiens ZERO comme sortie pour le buffer[1] . Quelqu'un peut-il m'expliquer ceci s'il vous plaît ? Comment puis-je utiliser Print() et Alert() pour déboguer sans obtenir tous les ZEROs. Si quelqu'un a une idée, faites-le moi savoir. Merci beaucoup.
tigger.longtail@gmail.com
ExtMapBuffer1 = iMA(NULL,0,ExtParam1,0,MODE_EMA,PRICE_CLOSE,i) ;
ExtMapBuffer2 = iMA(NULL,0,ExtParam2,0,MODE_EMA,PRICE_CLOSE,i) ;
CurrentBar = Time ;
if( ExtMapBuffer1 >= ExtMapBuffer2 && CurrentBar == Time && Flag == 0)
{
Alert("ExtMapBuffer1 =", ExtMapBuffer1," Short is Above. ",Hour()," Minute ",Minute()) ;
Alert("ExtMapBuffer2 =", ExtMapBuffer2," Short is Above. ",Hour()," Minute ",Minute()) ;
Print("ExtMapBuffer1 = ", ExtMapBuffer1) ;
Print("ExtMapBuffer2 = ", ExtMapBuffer2) ;
pas moyen de toute façon