MultiSort - 排序算法 - MetaTrader 5 库
一个排序器类,用于根据其他数组对数组进行排序。
//+------------------------------------------------------------------+ //| class MultiSort. | //|用法:Sorter 类根据其他数组对一个数组进行排序。 | //+------------------------------------------------------------------+ 模板<类型名T 项目,类型名TKey1,类型名TKey2,类型名T键3>班级多排序 {民众: //--- 按键对项目进行排序的方法 空白 SortBy(TItem& items[], TKey1&keys1[], TKey2&keys2[], TKey3&keys3[], 布尔值 升序1=真的, 布尔值 升序2=真的, 布尔值 升序3=真的); };
排序器会忽略空键数组。
例如,按持仓时间对仓单进行排序(作为唯一的排序键):
//--- 仅按持仓时间对票据进行排序 多排序<长的,日期时间,整数,整数> 分拣机; 整数空的[]; sorter.SortBy(票数,次数,空,空);
这是一个完整的例子
//+------------------------------------------------------------------+ //| MultiSort_demo.mq5 | //| 版权所有 © 2018,阿姆·阿里 | //| https://www.mql5.com/en/users/amrali | //+------------------------------------------------------------------+ #财产版权 “版权所有 © 2018,阿姆·阿里” #财产描述 “多重排序示例 - 按代码对仓单进行排序,然后按开盘时间排序,然后按开盘价格按升序或降序排序。” #财产版本 “1.000” #财产脚本显示输入 #包括<多排序.mqh>//--- 输入变量 输入 布尔值模式_asc_符号=真的; // 符号升序 输入 布尔值mode_asc_times =真的; // 时间升序 输入 布尔值mode_asc_prices =真的; // 价格升序 //--- 全局变量 长的 门票[]= {88806796,90462225,91039722,91200504,90389608,88429143,89452623,91487721,89323610,90439077,89355691,88943822};细绳符号[]= {“美元加元”,“欧元兑瑞郎”,“GBPCHF”,“欧元兑美元”,“欧元兑美元”,“欧元兑瑞郎”,“澳元兑美元”,“欧元兑美元”,“欧元兑美元”,“GBPCHF”,“欧元兑瑞郎”,“澳元兑美元”};日期时间次[]= {D'2020.12.07 09:31:40',D'2020.12.10 09:55:30',D'2020.12.07 03:16:05',D'2020.12.07 03:45:39',D'2020.12.09 14:34:42', D'2020.12.08 14:00:13',D'2020.12.07 12:34:42',D'2020.12.08 17:37:28',D'2020.12.10 02:34:55',D'2020.12.09 12:00:09', D'2020.12.10 17:56:09',D'2020.12.07 08:30:14'};双倍的 价格[]= {1.24428,1.35444,1.37244,1.28973,1.39795,1.39960,1.15292,1.19290,1.11015,1.17936,1.37226,1.34722};//+------------------------------------------------------------------+ //|脚本程序启动函数 | //+------------------------------------------------------------------+ 空白 启动时() { 打印(“--------排序前-----”); 为了(整数我=0;我<数组大小(门票);我++) 打印格式(“%8i | %8s | %8s | %8.5f”,门票[i],符号[i],(细绳)时间[i],价格[i]);//--- 按交易品种、开仓时间和开仓价格对仓单进行排序。 多排序<长的,细绳,日期时间,双倍的> 多排序器; multi_sorter.SortBy(门票, 符号, 次, 价格, 模式_asc_符号, 模式升序次数, 模式_asc_价格); 打印("--------MultiSort.SortBy(门票、符号、时间、价格)-----"); 为了(整数我=0;我<数组大小(门票);我++) 打印格式(“%8i | %8s | %8s | %8.5f”,门票[i],符号[i],(细绳)时间[i],价格[i]); }//+------------------------------------------------------------------+ /* 样本输出 --------排序前-------- 88806796 | 美元兑加元 | 2020.12.07 09:31:40 | 1.24428 90462225 | 欧元兑瑞郎 | 2020.12.10 09:55:30 | 1.35444 91039722 | GBPCHF | 2020.12.07 03:16:05 | 1.37244 91200504 | 欧元兑美元 | 2020.12.07 03:45:39 | 1.28973 90389608 | 欧元兑美元 | 2020.12.09 14:34:42 | 1.39795 88429143 | 欧元兑瑞郎 | 2020.12.08 14:00:13 | 1.39960 89452623 | 澳元兑美元| 2020.12.07 12:34:42 | 1.15292 91487721 | 欧元兑美元 | 2020.12.08 17:37:28 | 1.19290 89323610 | 欧元兑美元 | 2020.12.10 02:34:55 | 1.11015 90439077 | GBPCHF | 2020.12.09 12:00:09 | 1.17936 89355691 | 欧元兑瑞郎 | 2020.12.10 17:56:09 | 1.37226 88943822 | 澳元兑美元| 2020.12.07 08:30:14 | 1.34722 -------MultiSort.SortBy(门票、符号、时间、价格)-------- 88943822 | 澳元兑美元| 2020.12.07 08:30:14 | 1.34722 89452623 | 澳元兑美元| 2020.12.07 12:34:42 | 1.15292 88429143 | 欧元兑瑞郎 | 2020.12.08 14:00:13 | 1.39960 90462225 | 欧元兑瑞郎 | 2020.12.10 09:55:30 | 1.35444 89355691 | 欧元兑瑞郎 | 2020.12.10 17:56:09 | 1.37226 91200504 | 欧元兑美元 | 2020.12.07 03:45:39 | 1.28973 91487721 | 欧元兑美元 | 2020.12.08 17:37:28 | 1.19290 90389608 | 欧元兑美元 | 2020.12.09 14:34:42 | 1.39795 89323610 | 欧元兑美元 | 2020.12.10 02:34:55 | 1.11015 91039722 | GBPCHF | 2020.12.07 03:16:05 | 1.37244 90439077 | GBPCHF | 2020.12.09 12:00:09 | 1.17936 88806796 | 美元兑加元 | 2020.12.07 09:31:40 | 1.24428 */
附件下载
📎 multisort_demo.mq5 (8.17 KB)
📎 multisort.mqh (15.02 KB)
Source: MQL5 #32665
💡 精彩内容推荐
✍️ 楼主最新发布
- •
- •
- •
- •
- •
- •
🔗 您可能感兴趣
- •
- •
- •
- •
- •
- •
🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录
