设为首页 收藏本站 切换语言

MT4进阶到MT5速成之路 获取账户交易历史单

| 发表于 2022-11-16 10:46:37 | 显示全部楼层 |复制链接

MQL5语言提供了多种函数获取历史订单,下面先分享一种,另一种之后补充。

下面函数的功能是获取账户下本币种的所有历史单子的盈亏。

  1. double GetProfitHis(datetime t)
  2.   {
  3.    double res=0;
  4. //--- 请求交易历史记录
  5.    HistorySelect(0,TimeCurrent());
  6. //--- 创建物件
  7.    uint     total=HistoryDealsTotal();
  8.    ulong    ticket=0;
  9.    double   price;
  10.    double   profit;
  11.    double   comdt;
  12.    double   swap;
  13.    double   fee;
  14.    datetime time;
  15.    string   symbol;
  16.    long     type;
  17.    long     entry;
  18. //--- 所有交易
  19.    for(uint i=0; i<total; i++)
  20.      {
  21.       //--- 尽力获得交易报价
  22.       if((ticket=HistoryDealGetTicket(i))>0)
  23.         {
  24.          //--- 获得交易属性
  25.          price =HistoryDealGetDouble(ticket,DEAL_PRICE);
  26.          time  =(datetime)HistoryDealGetInteger(ticket,DEAL_TIME);
  27.          symbol=HistoryDealGetString(ticket,DEAL_SYMBOL);
  28.          type  =HistoryDealGetInteger(ticket,DEAL_TYPE);
  29.          entry =HistoryDealGetInteger(ticket,DEAL_ENTRY);
  30.          profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
  31.          comdt=HistoryDealGetDouble(ticket,DEAL_COMMISSION);
  32.          swap=HistoryDealGetDouble(ticket,DEAL_SWAP);
  33.          fee=HistoryDealGetDouble(ticket,DEAL_FEE);
  34.          
  35.          //--- 只对当前交易品种
  36.          if(price && time && symbol==Symbol())
  37.            {
  38.             res+=profit+comdt+swap+fee;
  39.            }
  40.         }
  41.      }
  42.    return res;
  43.   }
  44. 如果要获取当前持仓单的盈亏呢?下面提供函数。
  45. double GetProfit(datetime t)
  46.   {
  47.    double res=0;
  48.    for(int i=0; i<PositionsTotal(); i++)
  49.      {
  50.       ulong ticket=PositionGetTicket(i);
  51.       string ordsymbol = PositionGetString(POSITION_SYMBOL);
  52.       long ordmagic = PositionGetInteger(POSITION_MAGIC);
  53.       long ordtype = PositionGetInteger(POSITION_TYPE);
  54.       double profit=PositionGetDouble(POSITION_PROFIT);
  55.       double swap=PositionGetDouble(POSITION_SWAP);
  56.       if(ordsymbol==Symbol() && PositionGetInteger(POSITION_MAGIC)==magic)
  57.         {
  58.          if(ordtype==POSITION_TYPE_BUY)
  59.            {
  60.             res+=profit+swap;
  61.            }
  62.          if(ordtype==POSITION_TYPE_SELL)
  63.            {
  64.             res+=profit+swap;
  65.            }
  66.         }
  67.      }
  68.    return res;
  69.   }
  70. //+------------------------------------------------------------------+
复制代码
如果有帮助,就支持一下我呗
举报

评论 使用道具

热门主题

精彩评论2

qwe11
CCC
| 发表于 2022-11-16 11:06:27 | 显示全部楼层
看不懂,,,
举报

点赞 评论 使用道具

daerwushen
DD
| 发表于 2022-12-23 08:46:26 | 显示全部楼层
帮助文件里的
举报

点赞 评论 使用道具

发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册

天眼云VPS
简体中文
繁體中文
English(英语)
日本語(日语)
Deutsch(德语)
Русский язык(俄语)
بالعربية(阿拉伯语)
Türkçe(土耳其语)
Português(葡萄牙语)
ภาษาไทย(泰国语)
한어(朝鲜语/韩语)
Français(法语)