MQL4 Aggiungere indicatore al grafico da EA - pagina 5

 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

MQL4 Aggiungere indicatore al grafico da 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);
  }

Ciao a tutti

il codice di cui sopra funziona in un esperto, come faccio a utilizzare i codici di cui sopra in un indicatore?

Si prega di aiutare.

 
E' possibile in MT4 rimuovere l'indicatore dal grafico utilizzando l'EA? Qualche codice potrebbe essere scritto nella funzione OnDenit().
 
Abdul Manan:
E' possibile in MT4 rimuovere l'indicatore dal grafico usando EA? Qualche codice potrebbe essere scritto nella funzione OnDenit().

Rimuove un indicatore con un nome specificato dalla finestra del grafico specificato. Il comando viene aggiunto alla coda dei messaggi del grafico ed eseguito solo dopo che tutti i comandi precedenti sono stati elaborati.

boolChartIndicatorDelete(
longchart_id,// id del grafico
intsub_window,// numero della sottofinestra
const stringindicator_shortname// nome breve dell'indicatore
);

Parametri

chart_id

[ID del grafico. 0 indica il grafico corrente.

sub_window

[in] Numero della sottofinestra del grafico. 0 denota la sottofinestra del grafico principale.

const indicator_shortname

[in] Il nome breve dell'indicatore che è impostato nellaproprietà INDICATOR_SHORTNAME con la funzioneIndicatorSetString(). Per ottenere il nome breve di un indicatore, utilizzate la funzioneChartIndicatorName().

Valore di ritorno

Restituisce true se il comando è stato aggiunto alla coda del grafico, altrimenti false. Per ottenere idettagli dell'errore utilizzare la funzioneGetLastError().

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:
C'è un modo per attaccare l'indicatore in automatico sul grafico dall'EA quando si fa il 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 ?
 
Ciao, non sono in grado di caricare 2 indicatori da 1 EA usando lo stesso codice.
 
Questo thread è stato tremendamente utile per me, ma non mi ha portato proprio lì - vedi questo thread (https://www.forexfactory.com/showthread.php?p=12764287#) che riprende dove il dialogo qui ha lasciato.
 
Kray:

Ciao a tutti,

Vorrei ringraziare Georgiy Liashchenko, e vorrei condividere la mia versione aggiornata del suo codice che aggiunge l'indicatore direttamente nel grafico conAutomaticallyAcceptDefaults (quando è su "true").

Spero che possa aiutare alcune persone che hanno bisogno di inserire indicatori dall'esperto.

Nota: funziona per gli indicatori personalizzati, altrimenti cambiare il nome delle finestre

Nota2 : Non utilizzare indicatori con più di 15 caratteri (prima del ".ex4")

Ciao, ho ottenuto questo

Impossibile chiamare 'user32.dll::RegisterWindowMessageW', 'user32.dll' non è caricato

Qualcuno può aiutarmi?


 
Alain Verleyen:

Non ho questo problema (con il codice che ho postato).

Controllate che hWnd sia diverso da 0.

Puoi anche provare ad aumentare il valore di sleep a 50 o 100

Caro Alain ,

Ho usato il tuo codice per aggiungere un indicatore a tutti i grafici aperti. ma è stato aggiunto solo al grafico su cui ho eseguito l'EA.

Ecco il codice, puoi per favore modificare il tuo codice per aggiungere lo stesso indicatore a tutti i grafici aperti?

per favore aiutatemi

BTW (ho provato come EA e anche come script, entrambi hanno aggiunto l'indicatore ad un solo grafico) :)

saluti,



#importare "user32.dll"

int RegisterWindowMessageW(string MessageName);

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

#importare


#define INDICATOR_NAME "CCI_FILTER6C"


int NOS ;

suffisso stringa="";

string symbol[30];

long chartid[30];


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

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

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


int OnStart()

{

NOS=10;

suffisso="c";

symbol[0] = "AUDCAD" + suffisso ;

symbol[1] = "AUDCHF" + suffisso ;

symbol[2] = "AUDJPY" + suffisso;

simbolo[3] = "AUDNZD" + suffisso

simbolo[4] = "AUDUSD" + suffisso ;

symbol[5] = "CADJPY" + suffisso ;

simbolo[6] = "CHFJPY" + suffisso

simbolo[7] = "EURAUD" + suffisso ;

symbol[8] = "EURCAD" + suffisso ;

simbolo[9] = "EURCHF" + suffisso;

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 name2[];

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


int MessageNumber=RegisterWindowMessageW("MetaTrader4_Internal_Message");

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

Sleep(100);

}

 
Abdul Manan:
Ciao, non sono in grado di caricare 2 indicatori da 1 EA usando lo stesso codice.

cercando anche questo - qualcuno ha capito come aggiungere più indicatori dallo stesso EA?


Voglio aggiungere 2https://docs.mql4.com/indicators/ima dallo stesso EA


grazie