程序库: TypeToBytes - 页 5 1234567 新评论 fxsaber 2017.05.23 00:11 #41 fxsaber: 结果相同的两行ArrayCompare(Array1, Array2) == 0 _R(Array1) == Array2 fxsaber 2017.07.11 15:40 #42 // 读/写简单结构的私有字段 #include <TypeToBytes.mqh> template <typename T> struct STRUCT { private: T Data; // 私有领域 public: T GetData( void ) const { return(this.Data); } }; void OnStart() { STRUCT<int> Struct = {0}; _W(Struct) = 2; // 写访问私人字段 Print(Struct.GetData()); // 确保它是 Print(_R(Struct)[0]); // 读取访问私人字段 } fxsaber 2017.07.17 23:37 #43 该库规定了一个容器类,可将变量和任何其他简单类型的数组存储在给定类型的数组中。// 使用容器的示例 #include <TypeToBytes.mqh> #define PRINT(A) Print(#A + " = " + (string)(A)); void OnStart() { // 示例中的任意数据 string Str[] = {"123", "Hello World!"}; double Num = 5; MqlTick Tick = {0}; Tick.bid = 1.23456; CONTAINER<long> Container; // 创建一个容器--所有内容都将存储在一个简单类型的数组中(示例中选择了长数组) // 用不同的数据填充容器 Container[0] = Str; Container[1] = Num; Container[2] = Tick; ArrayPrint(Container.Data); // 输出容器存储所有数据的数组内容 // 打印容器中存储的数据类型 for (int i = 0; i < Container.GetAmount(); i++) PRINT(Container[i].GetType()) // 让我们获取数据本身 string Str2[]; Container[0].Get(Str2); // 得到数组 ArrayPrint(Str2); PRINT(Container[1].Get<double>()) // 我们得到了一个数字 PRINT(Container[2].Get<MqlTick>().bid) // 我们得到了结构 Container[1] = "Replace"; // 用索引替换数据 // 验证已进行替换 PRINT(Container[1].GetType()) PRINT(Container[1].Get<string>()) } fxsaber 2017.07.19 12:16 #44 fxsaber: 该库包含一个容器类,可将变量和任何其他简单类型的数组存储在给定类型的数组中。在Report-bible 中的实际应用示例发送包含不同数据的帧 string Str; REPORT::ToString(Str); double Balance[]; REPORT::GetBalanceHistory(Balance); #ifdef __TYPETOBYTES__ CONTAINER<uchar> Container; Container[0] = Str; // 将报告字符串放入容器中 Container[1] = Balance; // 还在容器中添加了余额变化历史记录的双数组 ::FrameAdd(NULL, 0, ::AccountInfoDouble(ACCOUNT_BALANCE), Container.Data); // 发送一个包含字符串报告和余额数组的框架 #else // __typetobytes__接收包含不同数据的帧 CONTAINER<uchar> Container; while (::FrameNext(Pass, Name, ID, Value, Container.Data)) { string Str; Container[0].Get(Str); // 从框架中获取报告字符串 double Balance[]; Container[1].Get(Balance); // 从帧中获取相应的双数组 // ..... Report 2017.07.19fxsaberwww.mql5.com Библиотека для MetaTrader 4/5, которая позволяет формировать отчеты по истории торгов. fxsaber 2017.08.23 14:11 #45 容器应用的另一个例子 关于交易、自动交易系统和测试交易策略的论坛 来自 MQL5 MT5 MetaTrader 5 初学者的问题 fxsaber, 2017.08.23 14:10 您需要使用框架模式将代理数据写入一个文件。// 将代理数据(包括云代理)记录到一个文件中的示例 input int Range = 0; void OnTick() { // .... } // 仅在单次运行或帧模式下打开文件。 const int handle = ((MQLInfoInteger(MQL_TESTER) && !MQLInfoInteger(MQL_OPTIMIZATION)) || MQLInfoInteger(MQL_FRAME_MODE)) ? FileOpen(__FILE__, FILE_WRITE | FILE_TXT) : INVALID_HANDLE; // 数据准备 void GetData( string &Str, MqlTick &Ticks[], double &Balance ) { Str = "Hello World!"; CopyTicks(_Symbol, Ticks, COPY_TICKS_ALL, 0, 2); // 最后两个刻度(示例) Balance = AccountInfoDouble(ACCOUNT_BALANCE); } // 写入数据 void SaveData( const string &Str, const MqlTick &Ticks[], const double Balance ) { FileWrite(handle, Str); for (int i = 0; i < ArraySize(Ticks); i++) FileWrite(handle, Ticks[i].bid); FileWrite(handle, Balance); } void OnTesterDeinit() { if (handle != INVALID_HANDLE) FileClose(handle); ChartClose(); } #include <TypeToBytes.mqh> //https://www.mql5.com/zh/code/16280 double OnTester() { string Str; MqlTick Ticks[]; double Balance; GetData(Str, Ticks, Balance); // 准备记录数据 if (MQLInfoInteger(MQL_OPTIMIZATION)) // 优化 { CONTAINER<uchar> Container; //https://www.mql5.com/ru/forum/95447/page4#comment_5464205 Container[0] = Str; Container[1] = Ticks; Container[2] = Balance; FrameAdd(NULL, 0, 0, Container.Data); // 从代理向终端发送数据 } else // 单次运行 { if (handle != INVALID_HANDLE) SaveData(Str, Ticks, Balance); // 数据将写入代理的 MQL5\Files 文件夹(而不是终端) FileClose(handle); } return(0); } void OnTesterPass() { if (handle != INVALID_HANDLE) { ulong Pass; string Name; long ID; double Value; CONTAINER<uchar> Container; //https://www.mql5.com/ru/forum/95447/page4#comment_5464205 while (FrameNext(Pass, Name, ID, Value, Container.Data)) { string Str; MqlTick Ticks[]; double Balance; // 接收到来自代理的数据 Container[0].Get(Str); Container[1].Get(Ticks); Container[2].Get(Balance); // FileWrite(handle, Pass); // 如果要写入段落编号 SaveData(Str, Ticks, Balance); // 数据将写入终端(而不是代理)的 MQL5\Files 文件夹 } } } fxsaber 2017.10.10 08:03 #46 标准数据编码示例(红色 - 库的使用) 交易、自动交易系统和交易策略测试论坛 新版 MetaTrader 5 build 1640:创建和测试自己的金融工具 fxsaber, 2017.10.10 07:51 // 对 MqlRates 数据和打包/拆包速度的挤压程度 #include <TypeToBytes.mqh> //https://www.mql5.com/zh/code/16280 #define TOSTRING(A) #A + " = " + (string)(A) + "\n" void OnStart() { MqlRates Rates[]; uchar Tmp[]; const int Amount = CopyRates(_Symbol, PERIOD_CURRENT, 0, Bars(_Symbol, PERIOD_CURRENT), Rates) * sizeof(MqlRates); //存档 const ulong StartTime1 = GetMicrosecondCount(); const int AmountZIP = CryptEncode(CRYPT_ARCH_ZIP, _R(Rates).Bytes, Tmp, Tmp); Print(TOSTRING(Amount) + TOSTRING(AmountZIP) + TOSTRING((double)Amount / AmountZIP) + TOSTRING(GetMicrosecondCount() - StartTime1)); uchar Tmp2[]; //解压缩 const ulong StartTime2 = GetMicrosecondCount(); CryptDecode(CRYPT_ARCH_ZIP, Tmp, Tmp2, Tmp2); Print(TOSTRING(GetMicrosecondCount() - StartTime2)); Print(TOSTRING(_R(Rates) == Tmp2)); //数据是否匹配? } fxsaber 2018.03.31 09:24 #47 使用程序库将任何数据输入/读取到字符串中// 通过自定义事件 传递任意数据的跨平台示例 #include <fxsaber\HistoryTicks\Data_String.mqh> //https://www.mql5.com/zh/code/20298 // 打印任意数据 template <typename T> bool MyPrint( const T &Value ) { T Array[1]; Array[0] = Value; ArrayPrint(Array, _Digits, NULL, 0, WHOLE_ARRAY, ARRAYPRINT_HEADER | ARRAYPRINT_ALIGN); return(true); } void OnChartEvent( const int id, const long &lparam, const double&, const string &sparam ) { // 打印获得的数据 if ((id == CHARTEVENT_CUSTOM) && (lparam ? MyPrint(DATA_STRING::FromString<MqlDateTime>(sparam)) // 得到了 MqlDateTime : !MyPrint(DATA_STRING::FromString<MqlTick>(sparam)))) // 得到了 MqlTick ExpertRemove(); // 退出示例 } void OnInit() { MqlTick Tick; MqlDateTime DateTime; // 填入数值 SymbolInfoTick(_Symbol, Tick); TimeCurrent(DateTime); // 传递 EventChartCustom(0, 0, 0, 0, DATA_STRING::ToString(Tick)); // 传递的 MqlTick EventChartCustom(0, 0, 1, 0, DATA_STRING::ToString(DateTime)); // 传入 MqlDateTime } fxsaber 2019.02.18 16:49 #48 一个简单的使用示例 交易、自动交易系统和交易策略测试论坛 Beta 版 MetaTrader 5 1995 版本:经济日历、作为服务的 MQL5 程序和 R 语言 API fxsaber, 2019.02.18 16:36#include <TypeToBytes.mqh> //https://www.mql5.com/zh/code/16280 int StringToShortArray2( const string Str, ushort &Array[], const int = 0, const int = 0 ) { const int Size = ArrayResize(Array, StringLen(Str)); for (int i = 0; i < Size; i++) _W(Array[i]) = Str[i]; return(Size); } Aleksei Beliakov 2019.06.26 10:17 #49 你好,它正在工作。struct Message { int cnt; bool res; int ter; }; #include <Exchange_Data.mqh> #define AMOUNT 100 EXCHANGE_DATA<Message>ExchangeTicks(AMOUNT,true); //+------------------------------------------------------------------+ //| 自定义指示器初始化函数 //+------------------------------------------------------------------+ int OnInit() { //--- 指示器缓冲区映射 static Message Ticks[1]; Ticks[0].cnt=1; Ticks[0].res=true; Ticks[0].ter=1; ExchangeTicks.DataSave(Ticks); //--- return(INIT_SUCCEEDED); }它是这样工作的struct Message { int cnt; bool res; int ter; string str; }; #include <Exchange_Data.mqh> #define AMOUNT 1000 EXCHANGE_DATA<Message>ExchangeTicks(AMOUNT,true); //+------------------------------------------------------------------+ //| 自定义指示器初始化函数 //+------------------------------------------------------------------+ int OnInit() { //--- 指示器缓冲区映射 static Message Ticks[1]; Ticks[0].cnt=1; Ticks[0].res=true; Ticks[0].ter=1; Ticks[0].str = "SDf"; ExchangeTicks.DataSave(Ticks); //--- return(INIT_SUCCEEDED); } 我从这里下载了 MT4https://www.mql5.com/ru/forum/5905/page11#comment_6134460 fxsaber 2019.06.27 13:16 #50 Aleksei Beliakov:就是这样。 #define DEFINE_STRING(A) \ struct STRING##A \ { \ private: \ short Array[A]; \ \ public: \ void operator =( const string Str ) \ { \ ::StringToShortArray(Str, this.Array); \ \ return; \ } \ \ string operator []( const int = 0 ) const \ { \ return(::ShortArrayToString(this.Array)); \ } \ }; DEFINE_STRING(128) // 类似于字符串,最多有 128 个字符。 #undef DEFINE_STRING struct Message { int cnt; bool res; int ter; STRING128 str; }; 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
结果相同的两行
该库包含一个容器类,可将变量和任何其他简单类型的数组存储在给定类型的数组中。
在Report-bible 中的实际应用示例
发送包含不同数据的帧
接收包含不同数据的帧
关于交易、自动交易系统和测试交易策略的论坛
来自 MQL5 MT5 MetaTrader 5 初学者的问题
fxsaber, 2017.08.23 14:10
您需要使用框架模式将代理数据写入一个文件。
交易、自动交易系统和交易策略测试论坛
新版 MetaTrader 5 build 1640:创建和测试自己的金融工具
fxsaber, 2017.10.10 07:51
交易、自动交易系统和交易策略测试论坛
Beta 版 MetaTrader 5 1995 版本:经济日历、作为服务的 MQL5 程序和 R 语言 API
fxsaber, 2019.02.18 16:36
你好,它正在工作。
它是这样工作的
我从这里下载了 MT4
https://www.mql5.com/ru/forum/5905/page11#comment_6134460就是这样。