TMGM

0.16 Point
. 欧元点差

0.32 Point
. 黄金点差

[编程笔记] 统计订单各信息与时间日期之一

[复制链接]
admin 发表于 2016-8-26 02:11:24 | 显示全部楼层 |阅读模式
查看: 1910|回复: 0
统计订单各信息与时间日期之一 .mq4
源码下载:
密码:
游客,如果您要查看本帖隐藏内容请回复




//--- 统计订单各信息与时间日期之一
#property indicator_chart_window
//--
void start()
  {
//---统计时间限制  
  datetime d0, d1, d2, d3, d4, d5, d6, d7, d8;
//d0等于当前,d1等于前一天,d2等于前两天,d3等于前三天,d4等于前四天,d5等于本周,d6等于本月,d7等于本级,d8等于本年
  d0=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
  while (TimeDayOfWeek(d0)<1 || TimeDayOfWeek(d0)>5) d0-=24*60*60;
  d1=d0-24*60*60;
  while (TimeDayOfWeek(d1)<1 || TimeDayOfWeek(d1)>5) d1-=24*60*60;
  d2=d1-24*60*60;
  while (TimeDayOfWeek(d2)<1 || TimeDayOfWeek(d2)>5) d2-=24*60*60;
  d3=d2-24*60*60;
  while (TimeDayOfWeek(d3)<1 || TimeDayOfWeek(d3)>5) d3-=24*60*60;
  d4=d3-24*60*60;
  while (TimeDayOfWeek(d4)<1 || TimeDayOfWeek(d4)>5) d4-=24*60*60;
  d5=DateOfMonday();
  d6=StrToTime(Year()+"."+Month()+".01");
  d7=DateBeginQuarter();
  d8=StrToTime(Year()+".01.01");

  //---统计市价订单赢亏金额【全部市价单】含库存费,税金,手续费
  double tBSP=GetProfitFromDateInCurrencyBSP("", -1, -1, d0);  
  //---统计当天平仓订单手数
  double Lots=GetProfitFromDateInCurrencyLots("", -1, -1, d0);//d0等于统计当头已平仓手数;如果d0==0,则表示全部手数
  //---统计历史全部订单手数
  double AllLots=GetProfitFromDateInCurrencyLots("", -1, -1, 0);//d0等于统计当头已平仓手数;如果d0==0,则表示全部手数

  if(Ask>Bid)
    {
     Alert("市价赢亏金额="+DoubleToStr(tBSP, 2)+"当天平仓订单手数="+DoubleToStr(Lots, 2)+"历史全部订单手数="+DoubleToStr(AllLots, 2));
    }
  }

//===========统计市价订单金额赢亏金额【全部市价单】(含库存费,税金,手续费)
double GetProfitFromDateInCurrencyBSP(string sy="", int op=-1, int mn=-1, datetime dt=0)
{
  double p=0;
  int    i, k=OrdersTotal();//统计持仓订单

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {  //统计持仓订单
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (dt>OrderCloseTime()) {  //dt>订单平仓时间为持仓订单
              p+=OrderProfit()+OrderCommission()+OrderSwap();
            }
          }
        }
      }
    }
  }
  return(p);
}

//===========统计历史订单手数
double GetProfitFromDateInCurrencyLots(string sy="", int op=-1, int mn=-1, datetime dt=0)
{
  double p=0;
  int    i, k=OrdersHistoryTotal();//统计历史订单

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {  //统计历史订单
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (dt<OrderCloseTime()) {  //dt<订单平仓时间为历史订单
              p+=OrderLots();
            }
          }
        }
      }
    }
  }
  return(p);
}

//----统计一周日期
datetime DateOfMonday(int no=0) {
  datetime dt=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));

  while (TimeDayOfWeek(dt)!=1) dt-=24*60*60;
  dt+=no*7*24*60*60;

  return(dt);
}

//---统计一季度日期
datetime DateBeginQuarter(int nk=0) {
  int ye=Year()-MathFloor(nk/4);
  nk=MathMod(nk, 4);
  int mo=Month()-MathMod(Month()+2, 3)+3*nk;
  if (mo<1) {
    mo+=12;
    ye--;
  }
  if (mo>12) {
    mo-=12;
    ye++;
  }
  return(StrToTime(ye+"."+mo+".01"));
}

lh32103.jpg
示例效果图



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ| 小黑屋|手机版|Archiver|【领汇网】

GMT+8, 2025-7-18 00:53 , Processed in 1.086128 second(s), 28 queries .

【领汇网】© 小小网站领汇人生点滴.           ICP证:粤ICP备15007435号

© 2019-2020 Tksug.com.版权所有  DZ! X32

快速回复 返回顶部 返回列表