统计订单各信息与时间日期之一 .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"));
}
示例效果图
|
|