Errori, bug, domande - pagina 2616

 
Igor Makanu:

Capisco, cioè si risolve il perenne problema dello scambio di dati tra terminali

No. È necessario ricevere i dati dal Tester da cui viene eseguito l'Expert Advisor. So come farlo nel 90% dei casi.

 
fxsaber:

Ho bisogno che un EA in esecuzione sull'agente sia in grado di ottenere l'handle del terminale da cui è stato inviato per essere eseguito nell'agente.

Non posso dire di Agents. non ho controllato, ma l'handle del terminale può essere recuperato tramite PID, come previsto:

#define    READ_CONTROL   0x00020000
#define    bInheritHandle true

#include <WinAPI\processthreadsapi.mqh>
int OnInit()
  {
   uint process_id = GetCurrentProcessId();
   Print("process_id = ",process_id);
   HANDLE handle = OpenProcess(READ_CONTROL,bInheritHandle,process_id);	// https://docs.microsoft.com/ru-ru/windows/win32/api/processthreadsapi/nf-processthreadsapi-openprocess?redirectedfrom=MSDN
   Print("handle = ",handle);
   return(INIT_SUCCEEDED);
  }

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) process_id = 9280

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) handle = 2276

Ho controllato il PID in Task Manager ed è lo stesso


 
Igor Makanu:

Non posso dire degli agenti, non ho controllato, ma l'handle del terminale, come ho supposto, può essere ottenuto tramite PID:

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) process_id = 9280

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) handle = 2276

Controllato il PID nel task manager corrisponde

Questo codice è buono per il servizio, ma non per Expert Advisor su Agent.

 
Igor Makanu:

Non posso dire degli agenti, non ho controllato, ma l'handle del terminale, come ho supposto, può essere ottenuto tramite PID:

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) process_id = 9280

2019.12.09 21:05:36.259 tst_Wapi (EURUSD,H1) handle = 2276

Ho controllato il PID in Task Manager ed è lo stesso

Risolto il problema, grazie.

 
Potete dirmi per favore, in metatrader5 nella cartella MQL5/logs vengono salvati i log degli ultimi 7 giorni. Questo è cambiato da qualche parte nelle impostazioni o è un bug del terminale?
 

Ecco 2 suggerimenti.

1- Fare un'opzione (pulsante) per fermare l'ottimizzazione e passare all'ottimizzazione in avanti.

Cioè, doveva essere una calcolatrice veloce. Ma conta e conta. E sono interessato anche in avanti, devo aspettare.

A volte ho bisogno di contare un po' più a lungo, e a volte ho bisogno di renderlo breve.

Ho bisogno di 2 pulsanti - prolungare l'ottimizzazione e fermare l'ottimizzazione, con transizione in avanti.

2- Le barre degli strumenti sono scivolate di nuovo in 2 livelli! Mia figlia era piccola, una volta ha detto "scivola e scivola - scivola!"...).

Anche qui, i pannelli continuano a scivolare dentro e fuori la 2a fila. Già stufo di spostarli all'indietro (nella stessa fila). Fatelo già riparare! Quanto spazio viene sprecato!

 

Controllate voi stessi il seguente bug. L'applicazione ha uno speciale indicatore minimalista il cui unico compito è quello di leggere lo stato del tasto "capslock". Viene visualizzato nel log e nel commento.

La sequenza delle azioni è la seguente.

  1. Compila l'indicatore, mettilo sul grafico e assicurati che venga stampato 0 ("capslock" non è abilitato).
  2. Passare a ME, abilitare il CapsLock e ricompilare. Torna al terminale. Controllate i registri per assicurarvi che il vecchio indicatore sia stato scaricato e che quello nuovo sia stato caricato. Tuttavia, lo stato "CapsLock" è ancora restituito come 0.
  3. Se rimuoviamo l'indicatore dal grafico e lo carichiamo di nuovo, il capslock viene riconosciuto normalmente - visualizza 1.

Qual è il miracolo? Quando si riavvia per compilazione alcune variabili d'ambiente non vengono pulite o qualcos'altro?

File:
CapsLock.mq5  1 kb
 
Stanislav Korotky:

Controllate voi stessi il seguente bug. L'applicazione ha uno speciale indicatore minimalista il cui unico compito è quello di leggere lo stato del tasto "capslock". Viene visualizzato nel log e nel commento.

La sequenza delle azioni è la seguente.

  1. Compila l'indicatore, mettilo sul grafico e assicurati che venga stampato 0 ("capslock" non è abilitato).
  2. Passare a ME, abilitare il CapsLock e ricompilare. Torna al terminale. Controllate i registri per assicurarvi che il vecchio indicatore sia stato scaricato e che quello nuovo sia stato caricato. Tuttavia, lo stato "CapsLock" è ancora restituito come 0.
  3. Se rimuoviamo l'indicatore dal grafico e lo carichiamo di nuovo, il capslock viene riconosciuto normalmente - visualizza 1.

Qual è il miracolo? Quando si riavvia per compilazione alcune variabili d'ambiente non vengono pulite o qualcos'altro?

E se è così?

void OnDeinit(const int reason)
{
  if (ind != INVALID_HANDLE)
  {
    IndicatorRelease(ind);
  }
}
 
Vitaly Muzichenko:

Che ne dite di questo?

Cosa c'entra questo? Non creo un indicatore dal codice MQL. È incardinato sul grafico manualmente. Ne ho bisogno affinché nel processo di sviluppo, quando la ricompilazione dei programmi avviene frequentemente, questi non perdano la loro funzionalità a causa di errori con il contesto/ambiente di sistema salvato. In questo momento, dopo aver ricompilato, devo disinstallare e reinstallare un induttore per fargli prendere lo stato attuale della tastiera.

 
Stanislav Korotky:

Quando si riavvia la compilazione, alcune variabili d'ambiente non vengono cancellate o qualcosa del genere?

Sì, questo è un bug. Indicatore o EA - non fa alcuna differenza.