这是一个很酷很实用的应用!
遗憾的是,MQ 没有为所有信号收集(或提供?这将是一个非常有用的数据库。
最终,一个很酷、很实用的应用程序诞生了!
遗憾的是,MQ 没有收集(或提供)所有信号的这些数据。这将是一个非常有用的数据库。
如果数据库是从他们的API 生成的,那么 "不收集 "是什么意思?他们不仅不收集,而且还赠送。
我更 "高兴 "的是,现在你可以不依赖 MySQL,而是将项目调整为内置 SQLite。
- www.mql5.com
相关文章:SQLite:在 MQL5 中使用 SQL 数据库进行本地工作
现在,在 MQL5 中处理数据库和操作大容量数据的速度比使用外部 SQL 服务器快几十倍。这是通过将快速 SQLite 引擎无缝集成到 MQL5 子系统并完全消除网络操作实现的。
这一切都很好,但有一个问题!
据我所知,在 Testor 中通过插座进行测试时,插座是关闭的,数据不会重置。而在测试产品时,使用数据是非常重要的。
这一切都很好,但有一个问题!
据我所知,在 Testor 中通过插座进行测试时,插座是关闭的,数据不会重置。而在测试产品时,使用数据是非常重要的。
- www.mql5.com
我在我的 EA 中实现了它,没有任何问题,编译非常完美,但有时会出现错误,EA 关闭。
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;
} 即使禁用了 Algotrading,也会发生该错误。
我在我的 EA 中实施了它,没有任何问题,编译得非常好,但有时会出现错误,EA 也会关闭。
MySQLTransaction.mqh 中的数组超出范围 (365,36)
即使禁用了 Algotrading,也会发生该错误。
我只是想使用系统的 MySQL 部分,但却一直收到 "未选择数据库 "的错误提示--即使我发出 "使用 `mytable`"命令也是如此。
你知道为什么会出现这种情况吗?
新文章 应用网络函数,或无需 DLL 的 MySQL:第 II 部分 - 监视信号属性变化的程序已发布:
在前一部分当中,我们研究了 MySQL 连通器的实现。 在本文中,我们将研究如何实现收集信号属性的服务应用,和观察其随时间变化的程序。 如果用户需要观察并未显示在信号网页上的属性变化,则所实现的示例具有重大实际意义。
运行中的应用程序如图例 6 所示。

图例 6. 运行中的查看信号属性动态的程序作者:Serhii Shevchuk