Aide au codage - page 188

 

Salut mladen ou n'importe qui,

j'ai remarqué que la plateforme mt4 a quelques indicateurs par défaut (bien que certains soient répétés dans la partie indicateurs personnalisés,), mais le code je pense n'est pas exactement le même, comment récupérer ou voir le code de ces indicateurs par défaut, merci beaucoup de m'informer.

 
kenwa:
Bonjour mladen ou n'importe qui, j'ai remarqué que la plateforme mt4 a quelques indicateurs par défaut (bien que certains soient répétés dans la partie indicateurs personnalisés,), mais le code je pense n'est pas exactement le même, comment récupérer ou voir le code de ces indicateurs par défaut, merci beaucoup de m'informer.

Vous ne pouvez pas

Ce sont des indicateurs intégrés (exécutés directement par le terminal).

 

il semble que ces indicateurs intégrés soient meilleurs que ceux de la session d'indicateurs personnalisés en fonction, il n'y a vraiment aucun moyen de connaître leur code ?

 

Quelqu'un m'a demandé comment j'utilisais le cadrage temporel multiple à partir d'un seul fichier (lorsqu'il n'est pas possible d'appeler les fonctions intégrées).

Voici un exemple simple et quelques explications à ce sujet

_____________________________

L'indicateur ci-joint se comporte comme 3 indicateurs en un et dans le code vous trouverez des commentaires sur ce qui est fait et quand. J'espère que cela aidera certaines personnes à comprendre comment on peut créer un indicateur multi-trames temporelles correct dans un seul fichier (qui, entre autres choses, calculera toujours le nombre correct de barres, sans supposer combien de barres dans la trame temporelle cible ont été modifiées).

Ainsi, ce simple indicateur multi time frame à fichier unique peut facilement être utilisé comme modèle pour les indicateurs multi time frame.

Dossiers :
 

Salut mladen,

savez-vous s'il est possible et comment faire iStochasticOnArray ? un modèle ou une formule pour le faire ? merci pour l'information.

 
kenwa:
Bonjour mladen, savez-vous s'il est possible et comment faire iStochasticOnArray ? un modèle ou une formule pour le faire ? merci pour l'information.

kenwa

Il n'existe pas de fonction intégrée. Dans ces messages, vous pouvez voir comment une fonction pour faire cela peut être écrite et comment elle peut être utilisée : https://www.mql5.com/en/forum/177239/page34

 

bonjour mladen :

un peu profond pour moi

par exemple, double iStoch(double priceR, double priceH, double priceL, int period, int slowing, int i, int instanceNo=0) est-ce un double dans un double ? est-ce que cette méthode peut réduire l'occupation du tampon d'indexation dans le mq4 ?

Je trouve cette fonction un peu étrange :

stoch = iStoch(rsi,rsi,rsi,StoPeriod,StoSlowing,i) ;

merci de m'éclairer.

 
mladen:
Je ne sais pas pourquoi il n'accepte pas l'autre fichier wav.

Si vous l'avez modifié dans le code, il devrait l'accepter.

Pour le répéter 5 fois, il faudrait le mettre en boucle, mais cela peut poser des problèmes (si le fichier son est trop long).

Voici le code que j'ai utilisé (je connais très peu le codage pour savoir comment faire des boucles) :

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

#property copyright "https://www.forex-tsd.com"

#property link "https://www.forex-tsd.com"

#property indicator_chart_window

//-----------------------------------------------------------------

extern int alertsForNotOlderThan = 300 ;

extern int alertsForMagicNumber = 0 ;

extern string alertsForSymbol = "" ;

extern bool alertsOn = true ;

extern bool alertsSound = true ;

extern bool alertsMessage = true ;

bool externe alertsNotification = false ;

extern bool alertsEmail = false ;

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

int tickets[] ;

bool alerted[] ;

string symboles[] ;

int types[] ;

int times[] ;

int init() { return(0) ; }

int deinit() { return(0) ; }

int start()

{

//

//

// collecte les données pour les commandes

//

//

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

{

if (!OrderSelect(i,SELECT_BY_POS)) continue ;

si (alertsForSymbol != "" && alertsForSymbol!=OrderSymbol()) continue ;

si (alertsForMagicNumber != 0 && alertsForMagicNumber!=OrderMagicNumber()) continue ;

si (alertsForNotOlderThan < (TimeCurrent()-OrderOpenTime())) continue ;

//

//

//

//

//

for (int k=ArraySize(tickets) ; k>0 ; k--)

si (OrderTicket()==tickets[k-1]) break ;

si (k==0)

{

int size = ArraySize(tickets)+1 ;

ArrayResize(tickets,size) ; tickets = OrderTicket() ;

ArrayResize(alerted,size) ; alerted = false ;

ArrayResize(symboles,size) ; symboles = OrderSymbol() ;

ArrayResize(types ,size) ; types = OrderType() ;

ArrayResize(times ,size) ; times = OrderOpenTime() ;

}

}

//

//

// vérifier si un ordre a besoin d'être alerté pour

//

//

for (i=ArraySize(tickets)-1 ; i>=0 ; i--)

{

string type = "" ;

if (!alerted)

{

alerté = vrai ;

switch (types)

{

case OP_BUY : type = "buy" ; break ;

case OP_SELL : type = "sell" ; break ;

case OP_BUYSTOP : type = "buy stop" ; break ;

case OP_BUYLIMIT : type = "limite d'achat" ; break ;

case OP_SELLSTOP : type = "sell stop" ; break ;

case OP_SELLLIMIT : type = "limite de vente" ; break ;

}

doAlert(type+" ouvert à : "+TimeToStr(times,TIME_DATE|TIME_SECONDS)+" pour "+symboles) ;

}

}

return(0) ;

}

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

void doAlert(string doWhat)

{

string message ;

message = doWhat ;

if (alertsMessage) Alert(message) ;

if (alertsEmail) SendMail(StringConcatenate(Symbol()," order alerts "),message) ;

if (alertsNotification) SendNotification("alertes de commande "+message) ;

if (alertsSound) PlaySound("hallelujah.wav") ;

}

mais il ne fait que sonner l'alerte normale lorsqu'il est déclenché.

Réflexion : si je ne parviens pas à modifier le PlaySound, pourriez-vous coder dans une boucle qui rejouerait une courte alerte régulière toutes les 1 seconde pendant 10 fois ? - En tout cas, cela ferait beaucoup plus pour me réveiller qu'une seule alerte sonore régulière....

Merci.

 
person77:
Voici le code que j'ai utilisé (je connais très peu le codage pour savoir comment faire des boucles) :

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

#property copyright "https://www.forex-tsd.com"

#property link "https://www.forex-tsd.com"

#property indicator_chart_window

//-----------------------------------------------------------------

extern int alertsForNotOlderThan = 300 ;

extern int alertsForMagicNumber = 0 ;

extern string alertsForSymbol = "" ;

extern bool alertsOn = true ;

extern bool alertsSound = true ;

extern bool alertsMessage = true ;

bool externe alertsNotification = false ;

extern bool alertsEmail = false ;

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

int tickets[] ;

bool alerted[] ;

string symboles[] ;

int types[] ;

int times[] ;

int init() { return(0) ; }

int deinit() { return(0) ; }

int start()

{

//

//

// collecte les données pour les commandes

//

//

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

{

if (!OrderSelect(i,SELECT_BY_POS)) continue ;

si (alertsForSymbol != "" && alertsForSymbol!=OrderSymbol()) continue ;

si (alertsForMagicNumber != 0 && alertsForMagicNumber!=OrderMagicNumber()) continue ;

si (alertsForNotOlderThan < (TimeCurrent()-OrderOpenTime())) continue ;

//

//

//

//

//

for (int k=ArraySize(tickets) ; k>0 ; k--)

si (OrderTicket()==tickets[k-1]) break ;

si (k==0)

{

int size = ArraySize(tickets)+1 ;

ArrayResize(tickets,size) ; tickets = OrderTicket() ;

ArrayResize(alerted,size) ; alerted = false ;

ArrayResize(symboles,size) ; symboles = OrderSymbol() ;

ArrayResize(types ,size) ; types = OrderType() ;

ArrayResize(times ,size) ; times = OrderOpenTime() ;

}

}

//

//

// vérifier si un ordre a besoin d'être alerté pour

//

//

for (i=ArraySize(tickets)-1 ; i>=0 ; i--)

{

string type = "" ;

if (!alerted)

{

alerté = vrai ;

switch (types)

{

case OP_BUY : type = "buy" ; break ;

case OP_SELL : type = "sell" ; break ;

case OP_BUYSTOP : type = "buy stop" ; break ;

case OP_BUYLIMIT : type = "limite d'achat" ; break ;

case OP_SELLSTOP : type = "sell stop" ; break ;

case OP_SELLLIMIT : type = "limite de vente" ; break ;

}

doAlert(type+" ouvert à : "+TimeToStr(times,TIME_DATE|TIME_SECONDS)+" pour "+symboles) ;

}

}

return(0) ;

}

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

void doAlert(string doWhat)

{

string message ;

message = doWhat ;

if (alertsMessage) Alert(message) ;

if (alertsEmail) SendMail(StringConcatenate(Symbol()," order alerts "),message) ;

if (alertsNotification) SendNotification("alertes de commande "+message) ;

if (alertsSound) PlaySound("hallelujah.wav") ;

}

mais il ne fait que sonner l'alerte normale lorsqu'il est déclenché.

Réflexion : si je ne parviens pas à modifier le PlaySound, pourriez-vous coder dans une boucle qui rejouerait une courte alerte régulière toutes les 1 seconde pendant 10 fois ? - En tout cas, cela me réveillerait beaucoup plus qu'une simple alerte sonore...

Merci.

Personne77,

Ce qui fonctionnait pour cela, c'est d'aller sur un graphique ouvert, puis d'aller dans outils/options/événements, puis sur l'alerte de changer simplement le wav. pour celui que vous voulez, mais je n'ai pas fait cela depuis un moment, donc je ne suis pas sûr que cela fonctionne encore, et assurez-vous que le fichier wav que vous utilisez est dans le dossier sons.

Dossiers :
alert.png  99 kb
 

mrtools - merci : cela a bien fonctionné !