Comment coder ? - page 257

 

Vérifiez les fonctions de temps dans l'aide de Metatrader, puis essayez quelque chose comme ceci

si (TimeHour(Time[0]) TradeHourStop)

{

Comment("Trading suspendu - en dehors des heures de négociation") ;

return(false) ;

}

où TimeHourStart et stop sont des variables externes que vous définissez. Le return(false) ; quittera la fonction start sans autre traitement.

Bonne chance,

 

Merci pour cette réponse rapide, Tzuman.

Malheureusement, ma programmation MT4 est limitée à un constructeur d'EA en ligne pour le moment.

Mais c'est exactement ce que je cherchais !

 

Comment coder la configuration de la couleur du texte et de la taille de la police des commentaires .

Bonjour à tous,

Je travaille sur un EA et je ne suis qu'un programmeur débutant...

Et j'ai une question en général comment coder la taille de la police et la couleur du texte des commentaires et les rendre configurables par l'utilisateur. Quelles variables externes dois-je créer ? Et comment dois-je le programmer ?

Je sais comment utiliser la fonction commentaire, par exemple comme ceci :

if(TextOnScreen == true) Comment("Ce texte apparaît à l'écran ") ;

Mais comment le programmer pour que l'utilisateur puisse changer la taille de la police du texte qui apparaît à l'écran et aussi comment changer la couleur de ce texte en modifiant le paramètre dans les options de l'EA ?

Quelqu'un peut-il m'aider avec quelques lignes de code ? Je vous en serais très reconnaissant.

Merci beaucoup.

Johan

 
korthouj:
Bonjour à tous,

Je travaille sur un EA et je ne suis qu'un programmeur débutant...

Et j'ai une question en général comment coder la taille de la police et la couleur du texte des commentaires et les rendre configurables par l'utilisateur. Quelles variables externes dois-je créer ? Et comment dois-je le programmer ?

Je sais comment utiliser la fonction commentaire, par exemple comme ceci :

if(TextOnScreen == true) Comment("Ce texte apparaît à l'écran ") ;

Mais comment le programmer pour que l'utilisateur puisse changer la taille de la police du texte qui apparaît à l'écran et aussi comment changer la couleur de ce texte en modifiant le paramètre dans les options de l'EA ?

Quelqu'un peut-il m'aider avec quelques lignes de code ? Je vous en serais très reconnaissant.

Merci beaucoup.

Johan

Vous devez utiliser des objets graphiques comme par exemple des étiquettes. Comment faire cela - vous pouvez facilement lire dans le manuel.

 
korthouj:
Bonjour à tous,

Je travaille sur un EA et je ne suis qu'un programmeur débutant...

Et j'ai une question en général comment coder la taille de la police et la couleur du texte des commentaires et les rendre configurables par l'utilisateur. Quelles variables externes dois-je créer ? Et comment dois-je le programmer ?

Je sais comment utiliser la fonction commentaire, par exemple comme ceci :

if(TextOnScreen == true) Comment("Ce texte apparaît à l'écran ") ;

Mais comment le programmer pour que l'utilisateur puisse changer la taille de la police du texte qui apparaît à l'écran et aussi comment changer la couleur de ce texte en modifiant le paramètre dans les options de l'EA ?

Quelqu'un peut-il m'aider avec quelques lignes de code ? Je vous en serais très reconnaissant.

Merci beaucoup.

Johan

Johan,

Étudiez l'indicateur ci-joint.

Une partie du code est destinée à l'utilisation d'un modèle.

Je l'ai découvert à la dure lorsque le texte d'une paire est apparu sur le graphique d'une autre paire à cause du modèle.

Si plus de lignes de texte sont nécessaires, vous devriez être capable de le découvrir.

Sinon, postez à nouveau votre message et je vous montrerai un exemple avec plusieurs lignes.

Robert

Dossiers :
 

pourquoi l'ordre de fermeture échoue et comment limiter l'ordre n.o. ?

Je suis un débutant dans MQL4, je viens de tester un EA de moi-même, mais il semble qu'il ne pouvait pas fermer l'ordre, et il ouvrirait un ordre dans chaque barre jusqu'à ce que freemargin devienne 0, puis il forcerait l'arrêt de tous les ordres. Je ne sais pas comment limiter le nombre d'ordres ouverts. Qui peut me dire, merci beaucoup !

Le code est le suivant :

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

//| Moving Average.mq4 |

//| Copyright ?2005, MetaQuotes Software Corp. |

//| TeamWox Groupware / MetaQuotes Software Corp. |

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

#define MAGICMA 20110309

extern double Lots = 1 ;

extern double MaximumRisk = 0.02 ;

extern double DecreaseFactor = 10 ;

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

//| Calculer les positions ouvertes |

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

int CalculateCurrentOrders(string symbol)

{

int buys=0,sells=0 ;

//----

for(int i=0;i<OrdersTotal();i++)

{

si(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break ;

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)

{

if(OrderType()==OP_BUY) achète++ ;

si(OrderType()==OP_SELL) vend++ ;

}

}

//---- retourner le volume des commandes

if(buys>0) return(buys) ;

sinon return(sells) ;

}

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

//| Calcul de la taille de lot optimale |

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

double LotsOptimized()

{

double lot=Lots ;

int orders=HistoryTotal() ; // total des ordres historiques

int losses=0 ; // nombre d'ordres avec pertes sans pause

//---- sélectionner la taille du lot

lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/100.0,1) ;

Print(MarketInfo(Symbol(), MODE_LOTSIZE)) ;

Print(MarketInfo(Symbol(), MODE_MINLOT)) ;

Print(MarketInfo(Symbol(), MODE_LOTSTEP)) ;

Print(MarketInfo(Symbol(), MODE_MAXLOT)) ;

//---- calculer le nombre d'ordres de pertes sans pause

if(FacteurDeDiminution>0)

{

for(int i=ordres-1;i>=0;i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Erreur dans l'historique !") ; break ; }

if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue ;

//----

si(OrderProfit()>0) break ;

si(OrderProfit()<0) pertes++ ;

}

if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1) ;

//C'est une conception technique intelligente, mais les pertes représentent des pertes de profit, et non de l'argent, ce qui peut poser des problèmes.

//modifiez-les comme suit : accountfreemargin()-orderprofit()

}

//---- retourner la taille du lot

si(lot<1) lot=1 ;

return(lot) ;

}

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

//| Vérifier les conditions d'un ordre ouvert |

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

void CheckForOpen()

{

double m1,m2,m3,m4,ticket1,ticket2 ;

int res ;

//---- trading seulement pour les premiers tiks de la nouvelle barre

if(Volume[0]>1) return ;

//---- obtenir la moyenne mobile

m1=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0) ;

m2=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,0) ;

m3=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1) ;

m4=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,1) ;

//---- conditions de vente

si (m1<m3-0.0002)

{

ticket1=OrderSend(Symbol(),OP_SELL,1,Bid,5,Ask+105*Point,0, "Mon ordre #1",MAGICMA,0,Red) ;

retour ;

}

si (m2<m4-0.0001)

{

ticket2=OrderSend(Symbol(),OP_SELL,1,Bid,5,Ask+105*Point,0, "Mon ordre #2",MAGICMA,0,Yellow) ;

retour ;

}

//---- conditions d'achat

si ( m1>m3+0.0002)

{

ticket1=OrderSend(Symbol(),OP_BUY,1,Ask,5,Bid-105*Point,0, "Mon ordre #1",MAGICMA,0,Blue) ;

retour ;

}

si (m2>m4+0.0001)

{

ticket2=OrderSend(Symbol(),OP_BUY,1,Ask,5,Bid-105*Point,0, "Mon ordre #2",MAGICMA,0,Vert) ;

retour ;

}

//----

}

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

//| Vérifier les conditions d'ordre de fermeture |

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

void CheckForClose()

{

double m1,m2,m3,m4 ;

//---- trading seulement pour les premiers tiks de la nouvelle barre

if(Volume[0]>1) return ;

//---- obtenir la moyenne mobile

m1=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0) ;

m2=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,0) ;

m3=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1) ;

m4=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,1) ;

//----

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break ;

if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue ;

//---- vérifier le type d'ordre

if(OrderType()==OP_BUY))

{

if(m1<m3+0.0002)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;

pause ;

}

si(m2<m4+0.0001)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,White) ;

break ;

}

}

si(OrderType()==OP_SELL))

{

if(m1>m3-0.0002)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Tan) ;

break ;

}

si(m2<m4-0.0001)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Salmon) ;

pause ;

}

}

}

//----

}

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

//| Fonction de démarrage |

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

void start()

{

//---- vérifier l'historique et les transactions

if(Bars<55 || IsTradeAllowed()==false) return ;

//---- calculer les ordres ouverts par symbole courant

if(CalculateCurrentOrders(Symbol())==0) CheckForOpen() ;

sinon CheckForClose() ;

//----

}

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

 

Détecter la version de Windows

Est-ce que quelqu'un connaît un moyen facile de savoir quelle version de Windows MT4 fonctionne en utilisant simplement un appel API de Windows.

Quelqu'un peut-il me dire comment faire fonctionner ceci :

#import "kernel32.dll" (en anglais)

int GWINAPI GetVersionEA(_inout LPOSVERSIONINFO lpVersionInfo) ;

#import

Fonction GetVersionEx (Windows)

Merci

 

Besoin d'aide. Petit ajustement à mon EA CCI Divergence

J'ai un EA CCI Divergence qui utilise un indicateur CCI Divergence personnalisé dans le dossier Indicateurs de MT4 pour déterminer quand placer une transaction.

Ce que je veux faire, c'est utiliser un indicateur de divergence Stochastics personnalisé (que je possède) à la place.

Je ne sais pas comment modifier le code de l'EA pour le diriger vers l'indicateur de divergence stochastique dans le dossier des indicateurs.

Dans les entrées de l'EA je pense que je dois remplacer :

extern int CCI_Period = 10 ;

par

extern int Stoch_K = 5 ;

extern int Stoch_D = 3 ;

extern int Stoch_Slowing = 3 ;

Dans la partie principale du code, j'ai trouvé la zone qui pointe vers l'indicateur CCI Divergence personnalisé dans le dossier Indicateurs :

dUp = iCustom(Symbol(), 0, "CCI_Divergence_Indicator", "", CCI_Period, 9, "", false, false, false, 0, 2) ;

dDn = iCustom(Symbol(), 0, "CCI_Divergence_Indicator", "", CCI_Period, 9, "", false, false, false, 1, 2) ;

Je sais que je dois remplacer "CCI_Divergence_Indicator" par "Stochastics_Divergence_Indicator", qui est le nom de l'indicateur de divergence stochastique personnalisé dans le dossier Indicateurs. Et je dois supprimer le CCI_Period et 9.

Mais je ne sais pas comment ajouter le Stoch_K, Stoch_D, et Stoch_Slowing à cette partie du code.

J'ai essayé de les modifier moi-même, mais l'EA ne s'ouvre pas.

Quelqu'un sait-il comment coder cette partie du code pour que l'indicateur de divergence stochastique puisse remplacer l'indicateur de divergence cci ?

J'ai payé un programmeur pour créer l'ea, mais il est très occupé par les projets d'autres clients. Donc, quand il s'agit de changements mineurs / correctifs, il n'a pas le temps de le faire pour moi - du moins pas tout de suite. C'est pourquoi je pose la question ici.

L'indicateur de divergence CCI a beaucoup trop de faux signaux. L'indicateur de divergence Stochastics est bien meilleur. C'est pourquoi je veux faire le changement.

Merci d'avance.

 

A l'aide s'il vous plaît

J'ai une ligne de code qui m'alertera lorsque le prix d'une barre (que ce soit 1m 5m 189m) bouge de 200 pips DANS UNE BARRE. Mais je n'arrive pas à trouver comment le configurer pour qu'il n'alerte QUE dans une direction spécifique. voici...

if(High[0]-Low[0]>200*Point)PlaySound("Alert.wav") ; //Cela fonctionne bien.

Mais je veux pouvoir faire la distinction entre une hausse de 200 points et une baisse de 200 points. J'ai lu, j'ai demandé dans les forums, j'ai été dans les salles de chat, et je me suis rendu fou pendant 3 jours. J'en ai assez, s'il vous plaît, pour l'amour de Dieu, aidez-moi.

 
if(High[0]-Low[0]>200*Point && Close[0]>Open[0])PlaySound("Up.wav");

if(High[0]-Low[0]>200*Point && Close[0]<Open[0])PlaySound("Down.wav");[/CODE]

Actually, you should rather look at highs and lows of two last bars and compare close to close, to ensure gaps are included, too:

[CODE]if(Mathmax(High[0],High[1])-Mathmin(Low[0],Low[1])>200*Point && Close[0]>Close[1])PlaySound("Up.wav");

if(Mathmax(High[0],High[1])-Mathmin(Low[0],Low[1])>200*Point && Close[0]<Close[1])PlaySound("Down.wav");