程序库: JSON Serialization and Deserialization (native MQL) - 页 8 123456789101112131415...18 新评论 Andrey Salnikov 2017.11.23 12:05 #71 o_o:该库可在 MQL4 和 MQL5 中运行如果您能提供使用 MQL 网络资源的实际工作案例,我们将不胜感激。)下午好!感谢您提供的库!我使用您的库来监控连接到加密货币矿池的计算机的工作。矿池(它的网站)在响应状态查询时给出了以下形式的响应:/* {"status":"OK", "data":[ {"worker":"rigma1","lastSeen":1511432055,"currentHashrate":2746.6666666666665,"validShares":103,"invalidShares":0,"staleShares":null}, {"worker":"riga2","lastSeen":1511432068,"currentHashrate":3040,"validShares":114,"invalidShares":1,"staleShares":null}, {"worker":"riga3","lastSeen":1511432057,"currentHashrate":2426.6666666666665,"validShares":91,"invalidShares":0,"staleShares":null}, {"worker":"riga4","lastSeen":1511432055,"currentHashrate":2266.6666666666665,"validShares":85,"invalidShares":0,"staleShares":null}, {"worker":"riga5","lastSeen":1511432061,"currentHashrate":2666.6666666666665,"validShares":100,"invalidShares":0,"staleShares":null}, {"worker":"riga6","lastSeen":1511432050,"currentHashrate":2293.3333333333335,"validShares":86,"invalidShares":0,"staleShares":null}, {"worker":"riga7","lastSeen":1511432069,"currentHashrate":1013.3333333333334,"validShares":38,"invalidShares":0,"staleShares":null}]} */RIGA1、RIGA2 等。- 这些都是计算机,我们需要监控它们的 "currentHashrate "是否低于阈值。代码非常简单:void Fly_API_Monitor() { int res=0; string url; string cook=""; string ref=""; string res_header=""; char result[]; char data[]; string strRes=""; // Тут вписывается свой кошелек string wallet="t1L8S ............"; ResetLastError(); url="https://api-zcash.flypool.org/miner/" + wallet + "/workers/monitor"; res=WebRequest("GET", url, cook, ref, 5000, data,0, result, res_header); strRes=CharArrayToString(result,CP_ACP); if (res !=-1) { //Print("No error"); //Print(strRes); CJAVal dataM; dataM.Deserialize(strRes); string stat=dataM["status"].ToStr(); int i=0; for(i=0; i< ArraySize(dataM["data"].m_e); i++) { Print(dataM["data"].m_e[i]["worker"].ToStr()+" 桥速:"+ dataM["data"].m_e[i]["currentHashrate"].ToStr()); } } else { Print("错误"+IntegerToString(GetLastError())); Print(strRes); } } 输出如下riga7 Hashrate: 826.6666riga6 Hashrate: 2293.333riga5 Hashrate: 3200.riga4 桥速: 1866.666riga3 桥速: 2800riga2 Hashrate: 2853.333.riga1 Hashrate: 2933.333 Daniil Kurmyshev 2017.12.25 13:42 #72 通常在发布任何产品或代码之前,都应该对其进行剖析,但在这种情况下,由于该库是免费的,因此没有必要抱怨,如果不这样做,该库的运行速度会非常慢:было: virtual CJAVal* AddBase(const CJAVal &item) { int c=ArraySize(m_e); ArrayResize(m_e, c+1); m_e[c]=item; m_e[c].m_parent=GetPointer(this); return GetPointer(m_e[c]); } // 添加 virtual CJAVal* NewBase() { int c=ArraySize(m_e); ArrayResize(m_e, c+1); return GetPointer(m_e[c]); } // 添加 стало: virtual CJAVal* AddBase(const CJAVal &item) { int c=ArraySize(m_e); ArrayResize(m_e, c+1, 50000); m_e[c]=item; m_e[c].m_parent=GetPointer(this); return GetPointer(m_e[c]); } // 添加 virtual CJAVal* NewBase() { int c=ArraySize(m_e); ArrayResize(m_e, c+1, 50000); return GetPointer(m_e[c]); } // 添加否则,这就是之前的情况(该屏幕上的网络请求本身耗时 16,718,439,其余所有处理过程耗时均为 16,718,439):和调整后的情况(箭头显示的是同一个网络请求):速度提高了近 20 倍。 --- 2017.12.25 14:23 #73 Daniil Kurmyshev:为什么是 50,000?而不是 2000 万或 10 万?--您使用的是哪种测试数据? Daniil Kurmyshev 2017.12.25 16:25 #74 在数据上,总共需要 10000 - 30000 个数据,因此我选择了 50000 个预留数据),但早些时候我曾在数组中使用过大约 280 个值的这个库,在这个版本中,500 个就足够了,50000 个肯定是那些系统资源允许的人使用的。 --- 2017.12.25 18:00 #75 根据文档,保留参数只是减少了内存重新分配的次数请使用参数 100(1000,10000)检查您的测试样本在这种情况下,剖析屏幕上的速度提升情况如何 Daniil Kurmyshev 2017.12.28 18:15 #76 o_o:根据文档,保留参数只是减少了内存重新分配的次数请使用参数 100(1000,10000)检查您的测试样本剖析屏幕上的速度增益是多少?是的,就是这样,我个人找到了重新分配的最佳参数,现在所有函数中最长的是反序列化......,但原则上是明确的,虽然按照我的理解,在这个库中,一切都是通过搜索和最大通用性的方法实现的,但我仍然认为在反序列化的其他地方有一个细微差别可以优化....。我附上了剖析截图,内存重新分配参数为 5000。 --- 2018.01.02 12:54 #77 1.12在ArrayResize 中设置第 100 步 附加的文件: JAson.mqh 31 kb Renat Fatkhullin 2018.01.03 04:52 #78 请注意,剖析器是 针对未优化的代码工作的。因此,在经过很好的优化后,在发行版中重新编译时,瓶颈将进入完全不同的区域。我们稍后将尝试在剖析器中使用半发布优化。这里有很多问题。 [删除] 2018.02.07 14:42 #79 您好,感谢您提供这个本地 MQL 和快速库,如果能提供一份文档会更有帮助,特别是在处理 JSON 数组和对象时,如何从中提取数据: 假设:[[0.88678,true],[0.88668,false]] 如何在反序列化 后将其映射为 MQL 类型? Delta.800 2018.02.20 18:12 #80 亲爱的专家们请帮助我理解这个库。(我还不擅长面向对象编程,所以我无法理解库本身的代码和专门介绍 BTC-E 交易所的文章。这就是为什么我需要一个简单的例子,就像 #58 中的例子一样)。 我需要解析 WEX.NZ 交易所的两个公共 api。 https://wex.nz/api/3/info { "server_time": 1519120845, "pairs": { "btc_usd": { "decimal_places": 3, "min_price": 0.1, "max_price": 500000, "min_amount": 0.001, "hidden": 0, "fee": 0.2 }, "btc_rur": { ... 从这里,我需要将所有可用的货币对(btc_usd、btc_rur......)放入一个数组(只有货币对名称,没有参数,我可以通过已知名称获取参数......)。 https://wex.nz/api/3/depth/btc_usd { "btc_usd": { "asks": [ [ 11550, 0.00998 ], [ 11559.9, 0.01731136 ], ... ] ], "bids": [ [ 11506.031, 1.756 ], [ 11506.03, 1.23 ], ... ] ] } } 并从这里到两个数组(asks 和 bids),以获得订单的价格和价值。 如蒙帮助,我将不胜感激!..!在此先表示感谢! 123456789101112131415...18 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
该库可在 MQL4 和 MQL5 中运行
如果您能提供使用 MQL 网络资源的实际工作案例,我们将不胜感激。)
下午好!
感谢您提供的库!
我使用您的库来监控连接到加密货币矿池的计算机的工作。
矿池(它的网站)在响应状态查询时给出了以下形式的响应:
/* {"status":"OK", "data":[ {"worker":"rigma1","lastSeen":1511432055,"currentHashrate":2746.6666666666665,"validShares":103,"invalidShares":0,"staleShares":null}, {"worker":"riga2","lastSeen":1511432068,"currentHashrate":3040,"validShares":114,"invalidShares":1,"staleShares":null}, {"worker":"riga3","lastSeen":1511432057,"currentHashrate":2426.6666666666665,"validShares":91,"invalidShares":0,"staleShares":null}, {"worker":"riga4","lastSeen":1511432055,"currentHashrate":2266.6666666666665,"validShares":85,"invalidShares":0,"staleShares":null}, {"worker":"riga5","lastSeen":1511432061,"currentHashrate":2666.6666666666665,"validShares":100,"invalidShares":0,"staleShares":null}, {"worker":"riga6","lastSeen":1511432050,"currentHashrate":2293.3333333333335,"validShares":86,"invalidShares":0,"staleShares":null}, {"worker":"riga7","lastSeen":1511432069,"currentHashrate":1013.3333333333334,"validShares":38,"invalidShares":0,"staleShares":null}]} */RIGA1、RIGA2 等。- 这些都是计算机,我们需要监控它们的 "currentHashrate "是否低于阈值。
代码非常简单:
输出如下
riga7 Hashrate: 826.6666
riga6 Hashrate: 2293.333
riga5 Hashrate: 3200.
riga4 桥速: 1866.666
riga3 桥速: 2800
riga2 Hashrate: 2853.333.
riga1 Hashrate: 2933.333
通常在发布任何产品或代码之前,都应该对其进行剖析,但在这种情况下,由于该库是免费的,因此没有必要抱怨,如果不这样做,该库的运行速度会非常慢:
否则,这就是之前的情况(该屏幕上的网络请求本身耗时 16,718,439,其余所有处理过程耗时均为 16,718,439):
和调整后的情况(箭头显示的是同一个网络请求):
速度提高了近 20 倍。
为什么是 50,000?
而不是 2000 万或 10 万?
--
您使用的是哪种测试数据?
在数据上,总共需要 10000 - 30000 个数据,因此我选择了 50000 个预留数据),但早些时候我曾在数组中使用过大约 280 个值的这个库,在这个版本中,500 个就足够了,50000 个肯定是那些系统资源允许的人使用的。
根据文档,保留参数只是减少了内存重新分配的次数
请使用参数 100(1000,10000)检查您的测试样本
在这种情况下,剖析屏幕上的速度提升情况如何
根据文档,保留参数只是减少了内存重新分配的次数
请使用参数 100(1000,10000)检查您的测试样本
剖析屏幕上的速度增益是多少?
是的,就是这样,我个人找到了重新分配的最佳参数,现在所有函数中最长的是反序列化......,但原则上是明确的,虽然按照我的理解,在这个库中,一切都是通过搜索和最大通用性的方法实现的,但我仍然认为在反序列化的其他地方有一个细微差别可以优化....。我附上了剖析截图,内存重新分配参数为 5000。
1.12
在ArrayResize 中设置第 100 步
假设:
如何在反序列化 后将其映射为 MQL 类型?
亲爱的专家们请帮助我理解这个库。(我还不擅长面向对象编程,所以我无法理解库本身的代码和专门介绍 BTC-E 交易所的文章。这就是为什么我需要一个简单的例子,就像 #58 中的例子一样)。
我需要解析 WEX.NZ 交易所的两个公共 api。
https://wex.nz/api/3/info
{ "server_time": 1519120845, "pairs": { "btc_usd": { "decimal_places": 3, "min_price": 0.1, "max_price": 500000, "min_amount": 0.001, "hidden": 0, "fee": 0.2 }, "btc_rur": { ...从这里,我需要将所有可用的货币对(btc_usd、btc_rur......)放入一个数组(只有货币对名称,没有参数,我可以通过已知名称获取参数......)。
https://wex.nz/api/3/depth/btc_usd
{ "btc_usd": { "asks": [ [ 11550, 0.00998 ], [ 11559.9, 0.01731136 ], ... ] ], "bids": [ [ 11506.031, 1.756 ], [ 11506.03, 1.23 ], ... ] ] } }并从这里到两个数组(asks 和 bids),以获得订单的价格和价值。
如蒙帮助,我将不胜感激!..!在此先表示感谢!