Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 576

 

Salve.

Potete dirmi per favore se è possibile copiare il testo dall'EA agli appunti, per esempio, per condizione, il testo dell'allerta.

Se sì, come fare?

 
mila.com:

Salve.

Potete dirmi per favore se è possibile copiare il testo dall'EA agli appunti, per esempio, per condizione, il testo dell'allerta.

Se sì, come fare?

No. Lavorare con gli appunti è una funzione di sistema (Windows API). In MQL5 non c'è un accesso diretto a WinAPI. E perché lavorare con gli appunti? Dopo tutto, state generando voi stessi il messaggio - significa che avete il testo sorgente del messaggio.
 
Karputov Vladimir:
No. Lavorare con gli appunti è una funzione di sistema (Windows API). In MQL5 non c'è un accesso diretto a WinAPI. E perché dovreste lavorare con gli appunti? Dopo tutto, siete voi stessi a generare il messaggio - quindi avete il testo sorgente del messaggio.

Sì, il codice sorgente è lì, ma mi serve, per una certa condizione, negli appunti.

Scusa, non ho specificato, ho bisogno dell'implementazione in MQL4.

È possibile aprire gli appunti in qualche modo usando #import "user32.dll"?

 
mila.com:

Sì, il codice sorgente è lì, ma mi serve, per una certa condizione, negli appunti.

Scusa, non ho specificato, ho bisogno dell'implementazione in MQL4.

Forse puoi aprire gli appunti in qualche modo usando #import "user32.dll"?

È ora di scrivere in MQL5. Usare dll è il top dell'incoscienza.

Da quanto ho capito, vuoi leggere le informazioni da un programma di terzi. Poi usa la scrittura su un file, in una directory comune a tutti i terminali client \Terminal\Common\Files. Già da questa directory è possibile leggere il file con un programma di terze parti.

 
Karputov Vladimir:

È giunto il momento di scrivere in MQL5. Usare un dll è il massimo della follia.

Da quanto ho capito, vuoi leggere informazioni da un programma di terzi. Poi usa la scrittura su un file, in una directory comune a tutti i terminali client \Terminal\Common\Files. Da quella directory potete leggere il file con un programma di terze parti.

Grazie per le raccomandazioni, ma ora ho bisogno di copiare il testo negli appunti dal programma MQL4.

 
Karputov Vladimir:

Prendiamoli in ordine. Ecco il modello:

Allegate il grafico e uno screenshot del grafico nello studio, così come le voci delle schede "Log" e "Advisors" (se vi appaiono).

Ciao !!!

Ho riavviato la piattaforma MT5 per cominciare. Compilato il tuo modello. Il risultato della compilazione è mostrato qui sotto. Ho dovuto buttare via gli screenshot a causa del grande volume

Un EA è apparso nel navigatore:

Ha lanciato l'EA sul grafico e ha permesso il trading in 3 posti:

Ho l'icona EA sul grafico invece di una faccina sorridente

Ecco un estratto dal log 2016.05.11 12:44:47.139 Expert Expert Test (GBPUSD,H1) caricato con successo

Di seguito è riportato il contenuto del messaggio sul caricamento dell'EA:

CO 0 10:35:45.020 Terminale Alpari Limited MT5 x64 build 1325 avviato
HD 0 10:35:45.020 Terminale Windows 8.1 (PC basato su x64), IE 11.00, UAC, Intel Core i5-2320 @ 3.00GHz, RAM: 2209 / 4078 Mb, HDD: 45023 / 149999 Mb, GMT+03:00
ND 0 10:35:45.020 Terminale C:\Users\Boris\AppData\Roaming\MetaQuotes\Terminal\73D45AFCBD5653CAF29C407A081F030C
LI 0 10:35:47.200 Rete '50016841': autorizzato su Alpari-Ltd-MT5 via mt5.nl.3 (ping: 57.34 ms)
NG 0 10:35:47.200 Rete '50016841': precedente autorizzazione riuscita eseguita da 79.172.69.175 il 2016.05.10 23:47:58
FK 0 10:35:47.617 Rete '50016841': terminale sincronizzato con Alpari Limited
RM 0 10:35:47.617 Rete '50016841': il trading è stato abilitato - modalità netting
OH 0 10:35:48.253 Rete '50016841': scansione della rete per i punti di accesso
CL 0 10:35:51.446 Rete '50016841': scansione della rete terminata
ND 1 12:00:49.011 Rete '50016841': connessione a Alpari-Ltd-MT5 persa
MR 0 12:01:08.842 Rete '50016841': autorizzato su Alpari-Ltd-MT5 attraverso mt5.nl.3 (ping: 56.41 ms)
HR 0 12:01:08.842 Rete '50016841': precedente autorizzazione riuscita eseguita da 79.172.69.175 il 2016.05.11 10:35:52
PQ 0 12:01:08.907 Rete '50016841': terminale sincronizzato con Alpari Limited
PH 0 12:01:08.907 Rete '50016841': il trading è stato abilitato - modalità netting
KL 0 12:41:45.169 Expert Advisor Test (GBPUSD,H1) caricato con successo

Per favore, dategli un'occhiata. Forse troverete la causa. Sono perplesso, forse è un problema con la costruzione?

Grazie!!!



Grazie per l'aiuto !!!

 
Boris.45:

Ciao !!!

Ho riavviato la piattaforma MT5 per cominciare. Compilato il tuo modello. Il risultato della compilazione è mostrato qui sotto. Ho dovuto buttare via gli screenshot a causa del grande volume

Un EA è apparso nel navigatore:

Ha lanciato l'EA sul grafico e ha permesso il trading in 3 posti:

Ho l'icona EA sul grafico invece di una faccina sorridente

Ecco un estratto dal log 2016.05.11 12:44:47.139 Expert Expert Test (GBPUSD,H1) caricato con successo

Di seguito è riportato il contenuto del messaggio sul caricamento dell'EA:

CO 0 10:35:45.020 Terminale Alpari Limited MT5 x64 build 1325 avviato
HD 0 10:35:45.020 Terminale Windows 8.1 (PC basato su x64), IE 11.00, UAC, Intel Core i5-2320 @ 3.00GHz, RAM: 2209 / 4078 Mb, HDD: 45023 / 149999 Mb, GMT+03:00
ND 0 10:35:45.020 Terminale C:\Users\Boris\AppData\Roaming\MetaQuotes\Terminal\73D45AFCBD5653CAF29C407A081F030C
LI 0 10:35:47.200 Rete '50016841': autorizzato su Alpari-Ltd-MT5 via mt5.nl.3 (ping: 57.34 ms)
NG 0 10:35:47.200 Rete '50016841': precedente autorizzazione riuscita eseguita da 79.172.69.175 il 2016.05.10 23:47:58
FK 0 10:35:47.617 Rete '50016841': terminale sincronizzato con Alpari Limited
RM 0 10:35:47.617 Rete '50016841': il trading è stato abilitato - modalità netting
OH 0 10:35:48.253 Rete '50016841': scansione della rete per i punti di accesso
CL 0 10:35:51.446 Rete '50016841': scansione della rete terminata
ND 1 12:00:49.011 Rete '50016841': connessione ad Alpari-Ltd-MT5 persa
MR 0 12:01:08.842 Rete '50016841': autorizzato su Alpari-Ltd-MT5 attraverso mt5.nl.3 (ping: 56.41 ms)
HR 0 12:01:08.842 Rete '50016841': precedente autorizzazione riuscita eseguita da 79.172.69.175 il 2016.05.11 10:35:52
PQ 0 12:01:08.907 Rete '50016841': terminale sincronizzato con Alpari Limited
PH 0 12:01:08.907 Rete '50016841': il trading è stato abilitato - modalità netting
KL 0 12:41:45.169 Expert Advisor Test (GBPUSD,H1) caricato con successo

Per favore, dategli un'occhiata. Forse troverete la causa. Sono perplesso, forse è un problema con la costruzione?

Grazie!!!



Grazie per l'aiuto !!!

Installare il terminale sopra quello difettoso. Può essere curato.
 
Karputov Vladimir:

È giunto il momento di scrivere in MQL5. Usare un dll è il massimo della follia.

Da quanto ho capito, vuoi leggere informazioni da un programma di terzi. Poi usa la scrittura su un file, in una directory comune a tutti i terminali client \Terminal\Common\Files. Già da questa directory è possibile leggere il file con un programma di terze parti.

Se fosse "il massimo della follia", sarebbe vietato.

WinAPI estende notevolmente le capacità di MQL. E si può fare qualcosa di stupido anche senza dll.

Ed ecco un esempio di passaggio di una stringa negli appunti:

#define  CF_UNICODETEXT 13
#define  GHND 0x0042

#import "User32.dll"
   int OpenClipboard( uint );
   int EmptyClipboard();
   int CloseClipboard();
   uint SetClipboardData( uint uFormat, uint hMem );
#import "Kernel32.dll"
   uint GlobalAlloc( uint uFlags, uint dwBytes );
   uint GlobalLock( uint hMem );
   int GlobalUnlock( uint hMem );
#import "msvcrt.dll"
   uint memcpy( uint dest, string src, uint count );
#import

string str = "АБВГД";

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   uint hwnd = (uint)ChartGetInteger( 0, CHART_WINDOW_HANDLE );
   
   int strSize = StringLen( str ) * 2 + 2;  // Получаем размер строки в байтах
   
   if( OpenClipboard( hwnd ) )    // Открываем буфер
   {
      EmptyClipboard();           // Очищаем буфер
      
      uint hMem = GlobalAlloc( GHND, strSize ); // Выделяем память
      uint pMem = GlobalLock( hMem );    // Получаем адрес выделенной памяти
      memcpy( pMem, str, strSize );     // Копируем строку в память
      GlobalUnlock( hMem );
   
      SetClipboardData( CF_UNICODETEXT, hMem );  // Передаём память со строкой в буфер
      
      CloseClipboard();  // Закрываем буфер
   }
}
 
Artyom Trishkin:


Artem, dimmi, se inserisco tutto questo da sotto la funzione On Start nella funzione On Tick, lo script verrà eseguito allo stesso modo, solo su ogni tick, giusto?

O qualcosa deve essere cambiato?

Dal momento che le candele precedenti, tranne quella attuale, non cambiano su ogni tick, quindi, suppongo, dovremmo aggiungere una condizione per controllarla una volta, per esempio 1 - 2 secondi prima della chiusura della candela attuale? O non ha senso e possiamo lasciare il controllo su ogni spunta?

 
Andrey Koldorkin:

Artem, dimmi, se inserisco tutto questo da sotto la funzione On Start nella funzione On Tick, lo script verrà eseguito allo stesso modo, solo su ogni tick, giusto?

O qualcosa deve essere cambiato?

Dal momento che le candele precedenti, tranne quella attuale, non cambiano su ogni tick, quindi, suppongo, dovremmo aggiungere una condizione per controllarla una volta, per esempio 1 - 2 secondi prima della chiusura della candela attuale? O non ha senso e possiamo lasciare il controllo su ogni spunta?

Bene, formerei tutto in una funzione e la chiamerei quando ne ho bisogno - ad ogni tick (se è ragionevole e necessario), o all'apertura di una nuova candela - una volta all'ora, per esempio, se lavoriamo con H1.