MQL4 Aggiungere indicatore al grafico da EA - pagina 3

 
Georgiy Liashchenko:
il sonno ha funzionato, grazie

Sto usando il codice di Alain e funziona nel senso che appare il classico form dell'indicatore che mi chiede di riempire il parametro e poi clicco Ok per attivare l'indicatore ed è simile ad attaccare manualmente l'indicatore. E' possibile automatizzare completamente tutta l'operazione anche le impostazioni dei parametri richiesti? Grazie

 
alessandrovb:

Sto usando il codice di Alain e funziona nel senso che appare il classico form dell'indicatore che mi chiede di riempire il parametro e poi clicco Ok per attivare l'indicatore ed è simile ad attaccare manualmente l'indicatore. E' possibile automatizzare completamente tutta l'operazione anche le impostazioni dei parametri richiesti? Grazie

Devi solo aggiungere del codice per simulare la pressione dei tasti, come fai manualmente.
 
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.

Ciao,

Questo commento a molti aiuti, ho bisogno di un'altra domanda,

Posso bypassare il popup di input e usare il default dell'indicatore? Come codificare?

Posso eliminare l'indicatore dal grafico?

 
Alain Verleyen:

Grazie questo è quello che sto cercando, posso aggiungere il mio indicatore personalizzato, solo un'altra domanda, come scaricarlo?

 
Alain Verleyen:

Congratulazioni, funziona bene.

 
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.


Sto usando il tuo codice, ma ho un problema con il suo nome.

2018.01.11 12:06:15.864 impossibile aprire il file 'C:\............\MQL4\indicators\MACDèõšp.ex4' [123]

2018.01.11 12:04:00.518 cannot open file 'C:\.............\MQL4\indicators\MACD. ex4' [123]

La prima linea viene sollevata quando

   uchar name2[4];

   name2[0]='M'; name2[1]='A'; name2[2]='C'; name2[3]='D';

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

La seconda linea viene sollevata quando

   uchar name2[];

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


Ho cambiato il primo codice e ora funziona!

   uchar name2[5];

   name2[0]='M'; name2[1]='A'; name2[2]='C'; name2[3]='D'; name2[4]=0;

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

Penso che il mio problema riguardi il rilevamento della fine dell'array!
 

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").

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

#define VK_RETURN 13 //ENTER key

void StartCustomIndicator(int hWnd,string IndicatorName,bool AutomaticallyAcceptDefaults=false)
{
   Sleep(100);
   uchar name2[];
   StringToCharArray(IndicatorName,name2,0,StringLen(IndicatorName));
   int MessageNumber=RegisterWindowMessageW("MetaTrader4_Internal_Message");
   int r=PostMessageW(hWnd,MessageNumber,15,name2);
   Sleep(100);
   if(AutomaticallyAcceptDefaults) {
      int ind_settings = FindWindowW(NULL, "Custom Indicator - "+IndicatorName);
      PostMessageW(ind_settings,0x100,VK_RETURN,name2);
   }
}

int OnInit()
{
   int hWnd = WindowHandle(Symbol(), 0);
   StartCustomIndicator(hWnd, "Indicator_name");
   return(INIT_SUCCEEDED);
}

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")

 
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")

Molto bene.


Ho scoperto che utilizzando:

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

Invece di usare:

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

Vi permetterà di utilizzare anche gli indicatori standard, utilizzando il nome dell'indicatore standard.

 

Ricevo un

'name2' - parameter conversion not allowed
messaggio di errore quando cerco di compilarlo!

 

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").

......

if(AutomaticallyAcceptDefaults) {
      int ind_settings = FindWindowW(NULL, "Custom Indicator - "+IndicatorName);
      PostMessageW(ind_settings,0x100,VK_RETURN,name2);


Sto eseguendo MT4 v4.00 Build 1090 (19 maggio 2017).

La funzione PostMessageW causa il crash del mio terminale MT4 quando la uso dall'interno di uno script per posizionare un indicatore.

Ho usato SendMessageW come alternativa per posizionare l'indicatore, ma purtroppo questo significa che non c'è modo di chiudere la finestra di dialogo di configurazione simulando un evento della tastiera e premendo il tasto Invio. Penso che questo possa essere dovuto al fatto che la funzione SendMessageW non ritorna finché la procedura della finestra non ha elaborato il messaggio, il che significa che l'evento della tastiera non può essere elaborato finché la finestra di dialogo non è andata. Questo a sua volta significa che FindWindowW non funzionerà mentre la finestra di dialogo è visualizzata, poiché SendMessageW non tornerà finché la finestra di dialogo non sarà sparita.

Tutto questo è stato un grande esercizio di frustrazione per me. PostMessageW funziona ancora sull'ultima build di MT4? Qualcuno sa come chiudere programmaticamente la finestra di dialogo di configurazione dell'indicatore? Ho consultato altri due thread, ho provato i loro consigli e non ho avuto successo:

https://www.mql5.com/en/forum/155334

https://www.mql5.com/en/forum/115967

Qualcuno può illuminarmi? C'è un modo per far funzionare PostMessageW o per chiudere la finestra di dialogo di configurazione in qualche altro modo?