MQL语言实现JSON协议库

文章目录

    • 一、MQL语言实现JSON协议的意义
    • 二、定义JSON数据枚举类型
      • 简单数据类型
      • 复杂数据类型
      • 枚举数据类型
      • 定义类变量
      • 清理与赋值方法
      • 构造与析构方法
      • 重载运算符
      • 添加与设置方法
      • 序列化与反序列方法

一、MQL语言实现JSON协议的意义

  1. 数据交互:JSON是一种轻量级的数据交换格式,广泛应用于Web开发和API接口。通过在MQL语言中实现JSON协议,可以方便地与其他系统进行数据交互,例如获取外部数据源的实时行情信息或将交易结果以JSON格式返回给其他系统。

  2. 数据解析:许多外部数据源或API接口返回的数据都是以JSON格式进行传输。通过在MQL语言中实现JSON协议,可以方便地解析和处理这些数据,提取所需的信息并进行相应的处理。

  3. 数据存储:将数据以JSON格式进行存储可以更加灵活和可扩展。通过在MQL语言中实现JSON协议,可以将交易记录、策略参数等数据以JSON格式进行存储,方便后续的读取和处理。

总之,通过在MQL语言中实现JSON协议,可以实现与其他系统的数据交互、方便地解析外部数据和灵活存储数据等功能,提高策略开发和交易执行的灵活性和效率。

二、定义JSON数据枚举类型

简单数据类型

  • 字符串(string):由双引号括起来的Unicode字符序列。
  • 数字(number):整数或浮点数。
  • 布尔值(boolean):true或false。
  • 空(null):表示空值。

复杂数据类型

  • 数组(Array):由方括号括起来的有序值的集合。
  • 对象(Object):由花括号括起来的无序键值对的集合。

枚举数据类型

//+------------------------------------------------------------------+
//| 枚举 JSON 类型                                                   |
//+------------------------------------------------------------------+
enum ENUM_JSON_TYPE
{JSON_TYPE_UNDEF,  // 未定义类型JSON_TYPE_NULL,   // 空值类型JSON_TYPE_BOOL,   // 布尔类型JSON_TYPE_INT,    // 整型类型JSON_TYPE_DBL,    // 浮点类型JSON_TYPE_STR,    // 字符串类型JSON_TYPE_ARRAY,  // 数组类型JSON_TYPE_OBJ     // 对象类型
};

定义类变量

//+------------------------------------------------------------------+
//| 类 CJAVal                                                        |
//+------------------------------------------------------------------+
class CJAVal 
{public:CJAVal         m_children[];   // 子节点数组string         m_key;          // 键名string         l_key;          // 保存反序列化键CJAVal        *m_parent;       // 父节点// 类型及对应的值ENUM_JSON_TYPE m_type;         // 类型bool           bool_v;         // 布尔值long           int_v;          // 整型值double         dbl_v;          // 浮点值int            dbl_precision;  // 浮点值精度string         str_v;          // 字符串值static int     code_page;      // 代码页 
};

清理与赋值方法

        // 清理virtual void    Clear(ENUM_JSON_TYPE jt=JSON_TYPE_UNDEF, bool save_key=false);// 复制virtual void    CopyArr(const CJAVal &a);virtual void    CopyData(const CJAVal &a);virtual bool    Copy(const CJAVal &a);

构造与析构方法

        // 构造函数CJAVal();CJAVal(CJAVal *parent, ENUM_JSON_TYPE type);CJAVal(ENUM_JSON_TYPE t, string str);CJAVal(const int v);CJAVal(const long v);CJAVal(const double v, int precision=-100);CJAVal(const bool v);CJAVal(const CJAVal &a);// 析构函数~CJAVal();

重载运算符

        // 数组下标读取virtual CJAVal *operator[](string key);virtual CJAVal *operator[](int i);// 重载 "=" 运算符void   operator=(const CJAVal &a);void   operator=(const int v);void   operator=(const long v);void   operator=(const double v);void   operator=(const bool v);void   operator=(string v);// 重载 "==" 运算符bool   operator==(const int v)    {return int_v == v; }bool   operator==(const long v)   { return int_v == v; }bool   operator==(const double v) { return dbl_v == v; }bool   operator==(const bool v)   { return bool_v == v; }bool   operator==(string v)       { return str_v == v; }// 重载 "!=" 运算符bool   operator!=(const int v)    { return int_v != v; }bool   operator!=(const long v)   { return int_v != v; }bool   operator!=(const double v) { return dbl_v != v; }bool   operator!=(const bool v)   { return bool_v != v; }bool   operator!=(string v)       { return str_v != v; }

添加与设置方法

        // 设置方法virtual void   Set(const CJAVal &a);virtual void   Set(const CJAVal &list[]);// 添加方法virtual CJAVal *AddBase(const CJAVal &item);virtual CJAVal *Add(const CJAVal& item);virtual CJAVal *Add(const int v);virtual CJAVal *Add(const long v);virtual CJAVal *Add(const double v, int precision=-2);virtual CJAVal *Add(const bool v);virtual CJAVal *Add(string v);

序列化与反序列方法

        // 序列化和反序列化virtual void    Serialize(string &json, bool is_key=false, bool use_comma=false);virtual string  Serialize();virtual bool    Deserialize(char &json[], int len, int &i);virtual bool    ExtrStr(char &json[], int len, int &i);virtual bool    Deserialize(string json, int acp=CP_ACP);virtual bool    Deserialize(char &json[], int acp=CP_ACP);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/696839.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2024软件测试面试必会技能】Postman(1): postman的介绍和安装

Postman的介绍 Postman 是一款谷歌开发的接口测试工具,使API的调试与测试更加便捷。 它提供功能强大的 Web API & HTTP 请求调试。它能够发送任何类型的HTTP 请求 (GET, HEAD, POST, PUT..),附带任何数量的参数 headers。 postman是一款支持http协议的接口调试…

【PTA|函数题|期末复习】指针

目录 6-1 计算两数的和与差(5分) 函数接口定义: 裁判测试程序样例: 输入样例: 输出样例: 代码 6-2 拆分实数的整数与小数部分 (5分) 函数接口定义: 裁判测试程序样例: 输入…

springboot整合mybatisPlus超级详细

springboot整合mybatis-plus超级详细 一、环境二、springboot整合myBatisPlus2.1新建2.2 添加Mybatis-plus和mysql依赖2.3 修改配置文件2.4 新建包和文件2.5 新建表2.6 创建实体类2.7 创建Mapper接口2.8 创建Service接口2.9 创建Service实现类2.10 增删改查 MyBatis-Plus&#…

C# Onnx 使用onnxruntime部署实时视频帧插值

目录 介绍 效果 模型信息 项目 代码 下载 C# Onnx 使用onnxruntime部署实时视频帧插值 介绍 github地址:https://github.com/google-research/frame-interpolation FILM: Frame Interpolation for Large Motion, In ECCV 2022. The official Tensorflow 2…

四.QT5工具安装和环境变量的配置

1.以管理员身份运行安装包 2.登录qt账号,点击【next】 3.选中同意 4.选择安装目录,注意不能有中文和空格 5.勾选 64位 mingw。点击【next】,等待安装完成 6.配置环境变量

[07] 组件注册

目录 Vue.js 组件局部注册全局注册 Vue.js 组件 组件(Component)是 Vue.js 最强大的功能之一。 组件可以扩展 HTML 元素,封装可重用的代码。 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都…

为什么很多人选用QT开发,有哪些应用实例?

在软件开发领域,Qt框架作为一种跨平台的C应用程序开发框架,近年来受到越来越多开发者的青睐。这主要得益于其卓越的跨平台性能、丰富的功能库、开发效率以及社区支持。以下将通过详实的分析,从不同角度探讨为什么很多人改用QT开发&#xff0c…

低代码开发:学校低成本数字化转型的新引擎

随着科技的飞速发展,数字化转型已经成为教育行业的一大趋势。然而,对于许多学校来说,高昂的数字化改造成本成为了一道难以逾越的门槛。本文将探讨如何通过低代码开发,以低成本实现学校数字化转型,为教育行业注入新活力…

力扣热题100_子串_560_和为 K 的子数组

文章目录 题目链接解题思路解题代码 题目链接 560.和为 K 的子数组 解题思路 1.定义变量count(计算个数,返回值)为0、n(当前nums长度)、preSums(利用利用defaultdict的特性,当presum-k不存在…

list.stream().forEach()和list.forEach()的区别

list.stream().forEach() 和 list.forEach() 在 Java 中都是用于遍历集合元素的方法,但它们在使用场景和功能上有所不同: list.forEach(): 是从 Java 8 开始引入到 java.util.List 接口的标准方法。直接对列表进行迭代,它采用内部…

力扣645. 错误的集合(排序,哈希表)

Problem: 645. 错误的集合 文章目录 题目描述思路复杂度Code 题目描述 思路 1.排序 1.对nums数组按从小到大的顺序排序; 2.遍历数组时若判断两个相邻的元素则找到重复元素; 3.记录一个整形变量prev一次置换当前位置元素并与其作差,若差等于2着说明缺失的…

Mysql索引操作

1、索引语法 2、慢查询日志 慢查询日志记录了所有执行时间超过指定参数( long_query_time ,单位:秒,默认 10 秒)的所有 SQL 语句的日志。 MySQL 的慢查询日志默认没有开启,我们可以查看一下系统变量 slo…

MySQL数据库备份与还原批处理脚本

数据库备份文件,例如保存为:dump_msyql.bat REM 数据库备份 echo offREM 激活延迟环境变量扩展,防止变量赋值丢失 setlocal enabledelayedexpansionREM 获取当天时间 set today%date:~8,2%REM 大前天,当天-3天,小于10…

包装类日期日历类

一(Date类): 在JDK的java.util包中,提供了Date类用于表示日期和时间,精确到毫秒。随着JDK版本的不断升级和发展,Date类中的大部分构造方法和普通方法都已经不推荐使用。在JDK8中,Date类只有2个构造方法可以使用&#x…

【LeetCode】升级打怪之路 Day 02:有序数组平方 滑动窗口法

今日题目: 977. 有序数组的平方 | LeetCode209. 长度最小的子数组 | LeetCode76. 最小覆盖子串 | LeetCode59. 螺旋矩阵 II | LeetCode 目录 今日总结Problem 1:有序数组平方 ⭐⭐⭐Problem 2:滑动窗口法 【必会】LeetCode 209. 长度最小的子…

怎样提取WPS文档的目录?

怎样提取WPS文档的目录(智能识别目录)? 1. 将你的WPS文档打开,菜单:文件:输出为PDF,另存为(.pdf) 2. PyPDF2 从PDF文件中提取目录 运行 python pdf_read_dir.py 你的PDF文件 或者 java : pd…

【2024软件测试面试必会技能】Appium自动化(5):元素定位工具

常用元素定位工具使用 uiautomatorviewer定位工具: 元素定位主要用来获取元素信息,获取元素信息后才能用appium提供的相关API去识别和操作元素。 谷歌在AndroidSDK中,提供了元素定位工具uiautomatorviewer,该工具可在android-s…

系统学习Python——装饰器:类装饰器-[跟踪对象接口:基础知识]

分类目录:《系统学习Python》总目录 文章《系统学习Python——装饰器:类装饰器-[单例类:基础知识]》的单例示例阐明了如何使用类装饰器来管理一个类的所有实例。类装饰器的另一个常用场景是为每个生成的实例扩展接口。类装饰器基本上可以在实…

三opencv源码解压及环境变量配置

1.双击opencv-3.4.6-vc14-vc15.exe 2.选择解压的路径,点击【extract】 3.设计环境变量

从零学习Linux操作系统第二十七部分 shell脚本中的变量

一、什么是变量 变量的定义 定义本身 变量就是内存一片区域的地址 变量存在的意义 命令无法操作一直变化的目标 用一串固定的字符来表示不固定的目标可以解决此问题 二、变量的类型及命名规范 环境级别 export A1 在环境关闭后变量失效 退出后 关闭 用户级别&#xff…