文章目录
- MQL交易参数转化为json的意义
- MQL交易参数转化为json的代码实现
- MqlTradeRequest 结构体转化为JSON
- JSON解析为MqlTradeRequest 结构体
MQL交易参数转化为json的意义
MQL交易参数转化为JSON的好处是可以方便地在不同的系统之间进行数据传输和交互。
- 易于阅读和编写:JSON使用简洁文本格式的键值对表示数据,易于理解和编写。支持嵌套结构,可以表示复杂的数据关系,交易参数的内容可以更加清晰地呈现给开发人员、分析师和其他相关人员。
- 跨平台兼容性:JSON是一种通用的数据格式,几乎所有的编程语言都支持JSON的解析和生成。这意味着可以在不同的系统和平台之间无缝地传输和解析数据。
- 数据结构灵活性:JSON支持数组和对象的嵌套,可以表示复杂的数据结构。这使得JSON非常适合表示多层次的数据关系,例如树形结构或者图形结构。
- 数据体积小:相比于其他数据交换格式,如XML,JSON的数据体积更小。这对于网络传输和存储来说是非常有利的,可以减少带宽和存储空间的消耗。
- 易于与Web API集成:JSON是Web API中最常用的数据格式之一。大多数Web API都支持JSON作为数据的传输格式,因此将MQL交易参数转化为JSON可以方便地与Web API进行交互。
综上所述,将MQL交易参数转化为JSON可以提供更好的数据交互和传输的灵活性、可读性和兼容性。
MQL交易参数转化为json的代码实现
MqlTradeRequest 结构体转化为JSON
#include <Json.mqh>string ConverToJson(const MqlTradeRequest &request) {JSONNode *js = new JSONNode();js["action"] = (int)request.action;js["comment"] = request.comment;js["deviation"] = (long)request.deviation;js["expiration"] = IntegerToString(request.expiration, 10, '0');js["magic"] = (long)request.magic;js["order_id"] = (long)request.order;js["position_id"] = (long)request.position;js["opposite_position_id"] = (long)request.position_by;js["price"] = request.price;js["stop_loss"] = request.sl;js["stop_limit"] = request.stoplimit;js["symbol"] = request.symbol;js["take_profit"] = request.tp;js["type"] = (int)request.type;js["fill_type"] = (int)request.type_filling;js["expiration_type"] = (int)request.type_time;js["volume"] = request.volume;delete js;js = NULL;return js.Serialize();
}
JSON解析为MqlTradeRequest 结构体
int ConverToJson(const string json, MqlTradeRequest &request) {JSONNode *js = new JSONNode();if (!js.Deserialize(json)) {return -1;}request.Action = (ENUM_TRADE_REQUEST_ACTIONS)js["action"].ToInteger();request.Comment = js["comment"].ToString();request.Expiration = (datetime)js["expiration"].ToInteger();request.Magic = js["magic"].ToInteger();request.Order = js["order"].ToInteger();request.Price = js["price"].ToDouble();request.StopLoss = js["stop_loss"].ToDouble();request.StopLimit = js["stop_limit"].ToDouble();request.Symbol = js["symbol"].ToString();request.TakeProfit = js["take_profit"].ToDouble();request.Type = (ENUM_ORDER_TYPE)js["type"].ToInteger();request.TypeFilling = (ENUM_ORDER_TYPE_FILLING)js["fill_type"].ToInteger();request.TypeTime = (ENUM_ORDER_TYPE_TIME)js["expiration_type"].ToInteger();request.Volume = js["volume"].ToDouble();delete js;js = NULL;return 0;
}