Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 576

 

Olá.

Pode dizer-me se é possível copiar o texto da EA para a prancheta, por exemplo, por condição, o texto do allert.

Em caso afirmativo, como fazê-lo?

 
mila.com:

Olá.

Pode dizer-me se é possível copiar o texto da EA para a prancheta, por exemplo, por condição, o texto do allert.

Em caso afirmativo, como fazê-lo?

Não. Trabalhar com a área de transferência é uma função do sistema (Windows API). Na MQL5 não há acesso directo ao WinAPI. E porquê trabalhar com a prancheta? Afinal, está a gerar a mensagem você mesmo - significa que tem o texto de origem da mensagem.
 
Karputov Vladimir:
Não. Trabalhar com a área de transferência é uma função do sistema (Windows API). Na MQL5 não há acesso directo ao WinAPI. E porque deve trabalhar com a prancheta? Afinal de contas, é você que está a gerar a mensagem - por isso tem o texto fonte da mensagem.

Sim, o código fonte está lá, mas eu preciso dele, por uma certa condição, na prancheta.

Desculpe, não especifiquei, preciso da implementação na MQL4.

É possível abrir a área de transferência de alguma forma usando #importar "user32.dll"?

 
mila.com:

Sim, o código fonte está lá, mas eu preciso dele, por uma certa condição, na prancheta.

Desculpe, não especifiquei, preciso da implementação na MQL4.

Talvez possa abrir a área de transferência de alguma forma usando #importar "user32.dll"?

É tempo de escrever em MQL5. Usar dll é o topo da imprudência.

Pelo que entendi, pretende ler a informação de um programa de terceiros. Depois utilizar a escrita para um ficheiro, num directório comum de todos os terminais de clientes Ficheiros Comuns. Já a partir deste directório é possível ler o ficheiro com um programa de terceiros.

 
Karputov Vladimir:

É mais que tempo de escrever em MQL5. Utilizar um dll é o cúmulo da loucura.

Pelo que entendi, pretende ler informação de um programa de terceiros. Depois utilizar a escrita para um ficheiro, num directório comum de todos os terminais de clientes Ficheiros Comuns. A partir desse directório, pode ler o ficheiro com um programa de terceiros.

Obrigado pelas recomendações, mas agora preciso de copiar o texto para a prancheta do programa MQL4.

 
Karputov Vladimir:

Vamos tomar em ordem. Aqui está o modelo:

Anexá-lo ao gráfico e uma captura de ecrã do gráfico no estúdio, bem como as entradas dos separadores "Log" e "Advisors" (se lá aparecerem).

Olá !!!

Reiniciei a plataforma MT5 para iniciantes. Compilou o seu modelo. O resultado da compilação é mostrado abaixo. Tive de deitar fora as capturas de ecrã devido ao grande volume

Uma EA apareceu no navegador:

Colocou a EA no gráfico e permitiu o comércio em 3 lugares:

Tem o ícone EA no gráfico em vez de uma cara sorridente

Aqui está um excerto do registo 2016.05.11 12:44:47.139 Expert Test (GBPUSD,H1) carregado com sucesso

Abaixo está o conteúdo da mensagem sobre o carregamento da EA:

CO 0 10:35:45.020 Terminal Alpari Limited MT5 x64 construção 1325 iniciada
HD 0 10:35:45.020 Terminal Windows 8.1 (PC baseado em 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 Terminal C:\Users\Boris\AppData\Roaming\MetaQuotes\Terminal\73D45AFCBD5653CAF29C407A081F030C
LI 0 10:35:47.200 Rede '50016841': autorizada em Alpari-Ltd-MT5 via mt5.nl.3 (ping: 57.34 ms)
NG 0 10:35:47.200 Rede '50016841': autorização prévia bem sucedida realizada a partir de 79.172.69.175 em 2016.05.10 23:47:58
FK 0 10:35:47.617 Rede '50016841': terminal sincronizado com Alpari Limited
RM 0 10:35:47.617 Rede '50016841': o comércio foi activado - modo de rede
OH 0 10:35:48.253 Rede '50016841': rede de digitalização para pontos de acesso
CL 0 10:35:51.446 Rede '50016841': rede de digitalização terminada
ND 1 12:00:49.011 Rede '50016841': ligação à Alpari-Ltd-MT5 perdida
MR 0 12:01:08.842 Rede '50016841': autorizada em Alpari-Ltd-MT5 até mt5.nl.3 (ping: 56.41 ms)
HR 0 12:01:08.842 Rede '50016841': autorização prévia bem sucedida realizada a partir de 79.172.69.175 em 2016.05.11 10:35:52
PQ 0 12:01:08.907 Rede '50016841': terminal sincronizado com Alpari Limited
PH 0 12:01:08.907 Rede '50016841': o comércio foi activado - modo de rede
KL 0 12:41:45.169 Expert Advisor Test (GBPUSD,H1) carregado com sucesso

Por favor, dêem-lhe uma vista de olhos. Talvez encontre a causa. Estou perplexo, talvez seja um problema com a construção?

Obrigado!!!



Obrigado pela ajuda!!!

 
Boris.45:

Olá !!!

Reiniciei a plataforma MT5 para iniciantes. Compilou o seu modelo. O resultado da compilação é mostrado abaixo. Tive de deitar fora as capturas de ecrã devido ao grande volume

Uma EA apareceu no navegador:

Colocou a EA no gráfico e permitiu o comércio em 3 lugares:

Tem o ícone EA no gráfico em vez de uma cara sorridente

Aqui está um excerto do registo 2016.05.11 12:44:47.139 Expert Test (GBPUSD,H1) carregado com sucesso

Abaixo está o conteúdo da mensagem sobre o carregamento da EA:

CO 0 10:35:45.020 Terminal Alpari Limited MT5 x64 construção 1325 iniciada
HD 0 10:35:45.020 Terminal Windows 8.1 (PC baseado em 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 Terminal C:\Users\Boris\AppData\Roaming\MetaQuotes\Terminal\73D45AFCBD5653CAF29C407A081F030C
LI 0 10:35:47.200 Rede '50016841': autorizada em Alpari-Ltd-MT5 via mt5.nl.3 (ping: 57.34 ms)
NG 0 10:35:47.200 Rede '50016841': autorização prévia bem sucedida realizada a partir de 79.172.69.175 em 2016.05.10 23:47:58
FK 0 10:35:47.617 Rede '50016841': terminal sincronizado com Alpari Limited
RM 0 10:35:47.617 Rede '50016841': o comércio foi activado - modo de rede
OH 0 10:35:48.253 Rede '50016841': rede de digitalização para pontos de acesso
CL 0 10:35:51.446 Rede '50016841': rede de digitalização terminada
ND 1 12:00:49.011 Rede '50016841': ligação à Alpari-Ltd-MT5 perdida
MR 0 12:01:08.842 Rede '50016841': autorizada em Alpari-Ltd-MT5 até mt5.nl.3 (ping: 56.41 ms)
HR 0 12:01:08.842 Rede '50016841': autorização prévia executada com sucesso a partir de 79.172.69.175 em 2016.05.11 10:35:52
PQ 0 12:01:08.907 Rede '50016841': terminal sincronizado com Alpari Limited
PH 0 12:01:08.907 Rede '50016841': o comércio foi activado - modo de rede
KL 0 12:41:45.169 Expert Advisor Test (GBPUSD,H1) carregado com sucesso

Por favor, dêem-lhe uma vista de olhos. Talvez encontre a causa. Estou perplexo, talvez seja um problema com a construção?

Obrigado!!!



Obrigado pela ajuda!!!

Instalar o terminal em cima deste defeituoso. Pode ser curado.
 
Karputov Vladimir:

É mais que tempo de escrever em MQL5. Utilizar um dll é o cúmulo da loucura.

Pelo que entendi, pretende ler informação de um programa de terceiros. Depois utilizar a escrita para um ficheiro, num directório comum de todos os terminais de clientes Ficheiros Comuns. Já a partir deste directório é possível ler o ficheiro com um programa de terceiros.

Se fosse "o cúmulo da loucura", seria proibido.

WinAPI alarga grandemente as capacidades da MQL. E pode fazer algo estúpido mesmo sem dll.

E aqui está um exemplo de passar um fio para a prancheta:

#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, diz-me, se eu inserir tudo isto por baixo da função On Start na função On Tick, o guião será executado da mesma forma, apenas em cada tick, certo?

Ou algo precisa de ser mudado?

Uma vez que os castiçais anteriores, excepto o actual, não mudam em cada carrapato, por isso, suponho que devemos acrescentar uma condição para o verificar uma vez, por exemplo 1 - 2 segundos antes de o castiçal actual fechar? Ou não faz sentido e podemos deixar a verificação em cada carrapato?

 
Andrey Koldorkin:

Artem, diz-me, se eu inserir tudo isto por baixo da função On Start na função On Tick, o guião será executado da mesma forma, apenas em cada tick, certo?

Ou algo precisa de ser mudado?

Uma vez que os castiçais anteriores, excepto o actual, não mudam em todos os sinais, por isso, suponho, devemos acrescentar uma condição para verificar uma vez, por exemplo 1 - 2 segundos antes do próximo castiçal actual fechar? Ou não faz sentido e podemos deixar a verificação em cada carrapato?

Bem, eu formaria tudo isto numa função e chamá-la-ia quando necessitasse - a cada toque (se for razoável e necessário), ou à abertura de uma vela nova - uma vez por hora, por exemplo, se trabalharmos com H1.
Razão: