欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

MultiSort - 排序算法 - MetaTrader 5 库

author emer | 389 人阅读 | 0 人评论 |

一个排序器类,用于根据其他数组对数组进行排序。

//+------------------------------------------------------------------+
//| 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小时后评论,即可解锁附件下载
立即登录