有没有办法使用 MQL4 通过网络请求发送多维数组?

Is there a way to send a multi dimensional array via a web request with MQL4?

我已经使用原生 WebRequest() 函数处理 POST 数据。

通常我 post 使用下面这些行的数据

// ********** 

char dataUpdatePost[]; 
char dataUpdateResult[];
string dataUpdateStr = "dataUpdateFlag=YES&orderNumber=" + orderNumber + "&profit=" + profit + "&profitPips=" + profitPips + "&cookie=" + sessionID;

ArrayResize(dataUpdatePost, StringToCharArray(dat[0,1], dataUpdatePost, 0, WHOLE_ARRAY, CP_UTF8) - 1);

ResetLastError();

int updateDataRes = WebRequest( "POST", 
                                "http://service.jumpinvestor.com/",
                                "",
                                NULL,
                                1,
                                dataUpdatePost,
                                0,
                                dataUpdateResult,
                                dataUpdateHeaders
                                );
// **********  

而且效果很好...

但是我想发送这样的数组。

string dat[3][10]; 

MQL4中有没有办法通过WebRequest()发送?

提前谢谢你。

是的,有

通用方法是编写特定于域的包装器,
它将提供从 string dat[3][10] 数组单元格到字符串的转换。


恰到好处的设计 = 特定领域 SER/DES 包装器:

MQL4 / python-AI/ML 分布式处理网格计算中有以下简单的消息传递语法显示了一种可能的方式 ( 当然, 可能是 二进制高效包,但性能或消息大小开销都不是问题,因为 CPU-bound AI/ML 进程代表主要延迟因素)

A "JUST-ENOUGH-DESIGN"

MINIMALISTIC
SERialiser       on MT4   side: fast, CPU/RAM efficient, loss-less
DESerialiser     on .recv side: fast & unambiguous binary/ASCII DES-erialisation

HERE: SER-ialiser
         - byte-aligns data in ASCII uchar-s
         - adds Section + EoLN separators
         - adds Item + ValItem separators
         - sends plain ASCII string across the network ---> (ref. ROWs below)

+------------------------------------------------------------------------------------------ aSectionSEPARATOR ( no CrLf ambiguity in MT4/UNICODE string / StringSplit( string, ushort, ... ) )
|                +----------------------------------+----------------------------------+--- aLevTpSlSEPARATOR { ... o ... o ... o ... }[0..3]
|               0|                                 1|                                2 |  3
|                |                                  |                     +------------|--- aValItemSEPARATOR { ... | ... | ... | ... }[0..2,3]
|                |                                  |                     |            |
|           0:1:2|   :     :           :            |   :     :           v            |+-- expEoLN_SEPARATOR
|            : : |  0:    1:          2:           3|   :     :           :            ||
v            : : v   :     :           :            v  0:    1:          2:          3 vv
/\/\/\/\/\/\/:\:/|\/\:/\/\/:\/\/\/\/\/\:/\/\/\/\/\/\|/\/:\/\/\:/\/\/\/\/\/|\/\/\/\/\/\/|*
_  1192.39001|+| o--^| 1.52|    4.57070|    3.00752 o--v| 0.31|    1.80752|    5.77070 o*
_  1186.39001|+| o--^| 1.31|    4.09104|    3.11518 o--v| 0.36|    1.91518|    5.29104 o*

甚至可以发送 JSON 兼容的 "rich-format-wrapped" 数据...

这样 WebRequest() 可以发送 JSON-类似格式的字符串到您想要的远程处理。


无论如何

享受 MQL4 个世界。

JSON: 最好的方法是将数组转换(序列化)为 JSON 字符串,然后将其发送过来,使用 WebRequest()。 JSON 是一种被广泛接受的格式,您的网络应用程序很可能能够开箱即用地解析(反序列化)它们。

缺点是你需要为它写一个序列化程序。
到目前为止,我只遇到过一个 MQL4 序列化程序:
https://www.mql5.com/en/code/11134

祝你好运!