MQL4 Ajouter un indicateur au graphique depuis l'EA - page 5

 

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

MQL4 Ajouter un indicateur au graphique depuis l'EA

Alain Verleyen, 2016.02.13 11:39

#import "user32.dll"
int RegisterWindowMessageW(string MessageName);
int PostMessageW(int hwnd,int msg,int wparam,uchar &Name[]);
#import

#define  INDICATOR_NAME "Indicator_name"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void StartCustomIndicator(int hWnd,string IndicatorName,bool AutomaticallyAcceptDefaults=false)
  {
   uchar name2[];
   StringToCharArray(IndicatorName,name2,0,StringLen(IndicatorName));

   int MessageNumber=RegisterWindowMessageW("MetaTrader4_Internal_Message");
   int r=PostMessageW(hWnd,MessageNumber,15,name2);
   Sleep(10);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
// In my code where I launch the indicator
   int hWnd=WindowHandle(Symbol(),0);
   StartCustomIndicator(hWnd,INDICATOR_NAME);

   return(INIT_SUCCEEDED);
  }

Bonjour tout le monde

le code ci-dessus fonctionne dans un Expert ,comment utiliser des codes ci-dessus dans un Indicateur ?

s'il vous plaît aidez.

 
Est-il possible dans MT4 de supprimer l'indicateur du graphique en utilisant l'EA ? Un certain code peut être écrit dans la fonction OnDenit().
 
Abdul Manan:
Est-il possible dans MT4 de supprimer l'indicateur du graphique en utilisant l'EA ? Un certain code peut être écrit dans la fonction OnDenit().

Supprime un indicateur avec un nom spécifié de la fenêtre graphique spécifiée. La commande est ajoutée à la file d'attente des messages du graphique et n'est exécutée qu'après le traitement de toutes les commandes précédentes.

boolChartIndicatorDelete(
longchart_id,// id du graphique
intsub_window,// numéro de la sous-fenêtre
const stringindicator_shortname// nom court de l'indicateur
) ;

Paramètres

chart_id

[in] ID du graphique. 0 indique le graphique actuel.

sub_window

[in] Numéro de la sous-fenêtre du graphique. 0 désigne la sous-fenêtre du graphique principal.

const indicator_shortname

[Le nom court de l'indicateur qui est défini dans lapropriété INDICATOR_SHORTNAME avec la fonctionIndicatorSetString(). Pour obtenir le nom court d'un indicateur, utilisez la fonctionChartIndicatorName().

Valeur de retour

Renvoie true si la commande a été ajoutée à la file d'attente du graphique, sinon false. Pour obtenir desdétails sur les erreurs, utilisez la fonctionGetLastError().

ChartIndicatorDelete - 图表操作 - MQL4参考
ChartIndicatorDelete - 图表操作 - MQL4参考
  • docs.mql4.com
Removes an indicator with a specified name from the specified chart window. The command is added to chart message queue and executed only after all previous commands have been processed. If the short name of an indicator is not set explicitly, then the name of the file containing the source code of the indicator will be specified during...
 
Alain Verleyen:
Y a-t-il un moyen d'attacher l'indicateur automatiquement sur le graphique de l'EA lors du backtest?
 
int OnInit()
  {
//---
// In my code where I launch the indicator
   int hWnd=WindowHandle(Symbol(),0);
   StartCustomIndicator(hWnd,INDICATOR_NAME);

   return(INIT_SUCCEEDED);
  }


This code work, but only in OnInit section. If i try transfer it to section CHARTEVENT_OBJECT_CLICK for launch with key, nothing happend. Can you help me ?
 
Bonjour, je n'arrive pas à charger 2 indicateurs à partir d'un EA en utilisant le même code.
 
Ce fil de discussion m'a été d'une aide précieuse, mais il ne m'a pas permis d'atteindre mon but. Consultez ce fil de discussion (https://www.forexfactory.com/showthread.php?p=12764287#) qui reprend le dialogue là où il s'est arrêté.
 
Kray:

Bonjour à tous,

Je voudrais remercier Georgiy Liashchenko, et je voudrais partager ma version améliorée de son code qui ajoute l'indicateur directement dans le graphique avecAutomaticallyAcceptDefaults (quand il est sur "true").

J'espère que cela aidera certaines personnes qui ont besoin d'insérer des indicateurs à partir de l'expert.

Note : Cela fonctionne pour les indicateurs personnalisés, sinon changez le nom de la fenêtre.

Note2 : N'utilisez pas d'indicateurs avec plus de 15 caractères (avant le ".ex4").

Bonjour, j'ai obtenu ceci

Impossible d'appeler 'user32.dll::RegisterWindowMessageW', 'user32.dll' n'est pas chargé.

Quelqu'un peut-il m'aider ?


 
Alain Verleyen:

Je n'ai pas ce problème (avec le code que j'ai posté).

Vérifiez que hWnd est différent de 0.

Vous pouvez également essayer d'augmenter la valeur de sleep à 50 ou 100.

Cher Alain ,

J'ai utilisé votre code pour ajouter un indicateur à tous les graphiques ouverts, mais il n'a été ajouté qu'au graphique sur lequel je lance l'EA.

Voici le code, pouvez-vous s'il vous plaît modifier votre code pour ajouter le même indicateur à tous les graphiques ouverts ?

Merci de m'aider.

BTW (je l'ai essayé comme EA et aussi comme script, les deux ont ajouté l'indicateur à un seul graphique) :)

Salutations,



#Importation de "user32.dll".

int RegisterWindowMessageW(string MessageName) ;

int PostMessageW(int hwnd,int msg,int wparam,uchar &Name[]) ;

#import


#define INDICATOR_NAME "CCI_FILTER6C" (nom de l'indicateur)


int NOS ;

string suffix="" ;

string symbol[30] ;

long chartid[30] ;


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

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

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


int OnStart()

{

NOS=10 ;

suffixe="c" ;

symbol[0] = "AUDCAD" + suffixe ;

symbol[1] = "AUDCHF" + suffixe ;

symbol[2] = "AUDJPY" + suffixe ;

symbole[3] = "AUDNZD" + suffixe ;

symbol[4] = "AUDUSD" + suffixe ;

symbol[5] = "CADJPY" + suffixe ;

symbole[6] = "CHFJPY" + suffixe ;

symbol[7] = "EURAUD" + suffixe ;

symbole[8] = "EURCAD" + suffixe ;

symbole[9] = "EURCHF" + suffixe ;

for(int is=0;is<NOS;is++)

{

int hWnd=WindowHandle(symbol[is],PERIOD_M30) ;

StartCustomIndicator(hWnd,INDICATOR_NAME) ;

}

return(0) ;

}

void StartCustomIndicator(int hWnd,string IndicatorName,bool AutomaticallyAcceptDefaults=true)

{

uchar nom2[] ;

StringToCharArray(IndicatorName,name2,0,StringLen(IndicatorName)) ;


int MessageNumber=RegisterWindowMessageW("MetaTrader4_Internal_Message") ;

int r=PostMessageW(hWnd,MessageNumber,15,name2) ;

Sleep(100) ;

}

 
Abdul Manan:
Bonjour, je n'arrive pas à charger 2 indicateurs à partir d'un EA en utilisant le même code.

Je cherche aussi ceci - quelqu'un a-t-il trouvé comment ajouter plusieurs indicateurs à partir du même EA ?


Je veux ajouter 2https://docs.mql4.com/indicators/ima à partir du même EA.


merci