Discussão do artigo "Trabalhando com as funções de rede ou MySQL sem DLL: Parte II - Programa para monitorar as alterações nas propriedades do sinal"
Esse é um aplicativo legal e prático!
É uma pena que o MQ não colete (ou dê acesso a?) esses dados para todos os sinais. Seria um banco de dados útil.
O resultado final foi uma aplicação legal e prática!
É uma pena que a MQ não colete (ou dê acesso a?) esses dados para todos os sinais. Seria um banco de dados útil.
O que você quer dizer com "não coletam" se o banco de dados é gerado a partir da API deles? Eles não apenas não coletam os dados, como também os distribuem.
Estou mais "satisfeito" com o fato de que agora você pode dispensar a dependência do MySQL e adaptar o projeto ao SQLite incorporado.
- www.mql5.com
O que você quer dizer com "não coletam" se o banco de dados é gerado a partir da API deles? Eles não apenas não coletam, como também fornecem o banco de dados.
Eles não coletam o histórico. Eles fornecem apenas o estado atual.
E é interessante ver, por exemplo, a mudança de posição na classificação ou o número de assinantes ao longo do tempo.
Artigo relacionado: SQLite: trabalho nativo com bancos de dados SQL em MQL5
Agora você pode trabalhar com bancos de dados e operar grandes volumes nativamente em MQL5, dezenas de vezes mais rápido do que com servidores SQL externos. Isso é conseguido por meio da integração perfeita do rápido mecanismo SQLite no subsistema MQL5 e da eliminação completa das operações de rede.
Foi publicado o novo artigo MySQL without applying network functions or using DLLs: part II - Programs to monitor changes in signal properties:.
Autor: Serhii Shevchuk
Tudo isso é bom, mas há um porém!
Ao testar no Testor, o soquete é desligado, pelo que entendi, e os dados não serão redefinidos. E é muito importante usar os dados ao testar produtos.
Isso é muito bom, mas tem um porém!
Ao testar no Testor, o soquete é desligado, pelo que entendi, e os dados não serão redefinidos. E é muito importante usar os dados ao testar produtos.
- www.mql5.com
Eu o implementei em meu EA sem nenhum problema, ele compila perfeitamente, mas às vezes ocorre um erro e o EA fecha.
matriz fora do intervalo em 'MySQLTransaction.mqh' (365,36)
//+------------------------------------------------------------------+
//| Parse received data |
//+------------------------------------------------------------------+
ENUM_TRANSACTION_STATE CMySQLTransaction::Incoming(uchar &data[], uint len)
{
int ptr=0; // index of the current byte in the 'data' buffer
ENUM_TRANSACTION_STATE result=MYSQL_TRANSACTION_IN_PROGRESS; // result of handling accepted data
while(len>0)
{
if(m_packet.total_length==0)
{
//--- If the amount of data in the packet is unknown
while(m_rcv_len<4 && len>0)
{
m_hdr[m_rcv_len] = data[ptr];
m_rcv_len++;
ptr++;
len--;
}
//--- Received the amount of data in the packet
if(m_rcv_len==4)
{
//--- Reset error codes etc.
m_packet.Reset();
m_packet.total_length = reader.TotalLength(m_hdr);
m_packet.number = m_hdr[3];
//--- Length received, reset the counter of length bytes
m_rcv_len = 0;
//--- Highlight the buffer of a specified size
if(ArrayResize(m_packet.data,m_packet.total_length)!=m_packet.total_length)
return MYSQL_TRANSACTION_ERROR; // internal error
}
else // if the amount of data is still not accepted
return MYSQL_TRANSACTION_IN_PROGRESS;
}
//--- Collect packet data
while(len>0 && m_rcv_len<m_packet.total_length)
{
m_packet.data[m_rcv_len] = data[ptr];
m_rcv_len++;
ptr++;
len--;
}
//--- Make sure the package has been collected already
if(m_rcv_len<m_packet.total_length)
return MYSQL_TRANSACTION_IN_PROGRESS;
//--- Handle received MySQL packet
m_packet.index = 0;
m_packet.type = MYSQL_PACKET_NONE;
if(m_packet.total_length>0)
{
if(m_packet.data[0]==0)
{
//--- Ok packet
m_packet.type = MYSQL_PACKET_OK;
m_packet.index++;
m_packet.affected_rows = reader.GetDataFieldLen(&m_packet);
m_packet.last_id = reader.GetDataFieldLen(&m_packet);
m_packet.server_status = reader.Uint16(&m_packet);
m_packet.warnings = reader.Uint16(&m_packet);
if(m_packet.index<m_packet.total_length)
m_packet.message = reader.DfString(&m_packet);
if((result = PacketOkHandler(&m_packet))==MYSQL_TRANSACTION_ERROR)
break;
}
else
if(m_packet.data[0]==0xfe)
{
//--- End Of File packet
m_packet.type = MYSQL_PACKET_EOF;
m_packet.index++;
m_packet.warnings = reader.Uint16(&m_packet);
m_packet.server_status = reader.Uint16(&m_packet);
if((result = PacketEOFHandler(&m_packet))==MYSQL_TRANSACTION_ERROR)
break;
}
else
if(m_packet.data[0]==0xff)
{
//--- Error packet
m_packet.type = MYSQL_PACKET_ERROR;
m_packet.index++;
m_packet.error.code = reader.Uint16(&m_packet);
if((result = PacketErrorHandler(&m_packet))==MYSQL_TRANSACTION_ERROR)
break;
}
else
if(!m_packet.number && m_packet.data[0]==0x0a)
{
//--- Greeting packet
m_packet.type = MYSQL_PACKET_GREETING;
if((result = PacketGreetingHandler(&m_packet))==MYSQL_TRANSACTION_ERROR)
break;
}
else
{
//--- Data packet
m_packet.type = MYSQL_PACKET_DATA;
if((result = PacketDataHandler(&m_packet))==MYSQL_TRANSACTION_ERROR)
break;
}
}
m_rcv_len = 0;
m_packet.total_length = 0;
}
return result;
} Esse erro ocorre mesmo quando o Algotrading está desativado.
Eu o implementei em meu EA sem nenhum problema, ele compila perfeitamente, mas às vezes ocorre um erro e o EA fecha.
matriz fora do intervalo em 'MySQLTransaction.mqh' (365,36)
Esse erro ocorre mesmo quando o Algotrading está desativado.
Estou apenas tentando usar a parte do sistema MySQL, mas continuo recebendo o erro "No database selected" (Nenhum banco de dados selecionado), mesmo que eu emita um comando "use `mytable`".
Você tem alguma ideia de por que isso está acontecendo?
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Novo artigo Trabalhando com as funções de rede ou MySQL sem DLL: Parte II - Programa para monitorar as alterações nas propriedades do sinal foi publicado:
Na parte anterior, nós consideramos a implementação do conector MySQL. Neste artigo, nós consideraremos sua aplicação implementando o serviço para coletar as propriedades do sinal e o programa para visualizar suas alterações ao longo do tempo. O exemplo implementado tem sentido prático se os usuários precisarem observar alterações nas propriedades que não são exibidas na página da web do sinal.
O aplicativo em ação é exibido na Fig. 6.

Fig. 6. O programa para visualizar a dinâmica das propriedades do sinal em açãoAutor: Serhii Shevchuk