EaCode小胖李 发表于 2022-12-26 12:14:10

HistoryProfitsAmount()历史订单的盈利金额统计,可以按照月、周、天进行统计

函数名称
doubleHistoryProfitsAmount(string SymbolX,int OrderTypeX,int MagicX,string PeriodX,string OrderTimeX,bool HoldX,int ShiftX)
函数介绍

HistoryProfitsAmount()获得历史订单的盈利金额。可以根据品种、订单类型、魔术码、时间周期、订单时间等进行筛选。

//举例:打印出本周多单的盈利金额。
Print(HistoryProfitsAmount(Symbol(),OP_BUY,MAGIC,"week","close",0));

参数介绍

SymbolX:订单筛选的交易品种,一般设置当前品种即可,也就是Symbol();“-1”代表不筛选交易品种。
OrderTypeX:订单筛选的订单类型,0代表多单,1代表空单。OP_BUY是常量0,OP_SELL是常量1。-1代表不筛选订单类型。
MagicX:订单的魔术码,你的EA的魔术码是多少,这里填上即可。
PeriodX:时间周期,"month"代表统计本月的盈利金额,"week"代表统计本周的盈利金额,"day"代表统计当天的盈利金额。
OrderTimeX:"open"代表以开仓时间进行计算,"close"代表以平仓时间进行计算。
HoldX:为false,就不统计当前持仓的盈利金额;true,统计当前持仓的盈利金额。
ShiftX:时间周期偏移,0代表当周期(比如:当天)的统计金额;1代表上周期(比如:昨天);2代表上周期(比如:大昨天);

函数定义

注意:本人发布的函数均为实战开发所用,低价或免费发布并不赚钱,仅限懂编程的朋友使用,不提供指导,因为人工成本巨贵,感谢朋友们海涵。doubleHistoryProfitsAmount(string SymbolX,int OrderTypeX,int MagicX,string PeriodX,string OrderTimeX,bool HoldX,int ShiftX)
{

   double Profits=0;
   double NowProfits=0;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS,MODE_HISTORY))
         if((OrderSymbol()==SymbolX ||SymbolX=="-1")&& (OrderMagicNumber()==MagicX || MagicX==-1)&&(OrderType()==OrderTypeX || OrderTypeX==-1))
         {
            if(PeriodX=="month")
            {
               if(OrderTimeX=="open")
                  if(OrderOpenTime()> (TimeCurrent()/(PERIOD_MN1*60)-ShiftX)*(PERIOD_MN1*60) && (ShiftX>0?(OrderOpenTime()< (TimeCurrent()/(PERIOD_MN1*60)-ShiftX+1)*(PERIOD_MN1*60)):true))
                     Profits=Profits+OrderProfit()+OrderSwap()+OrderCommission();
               if(OrderTimeX=="close")
                  if(OrderCloseTime()> (TimeCurrent()/(PERIOD_MN1*60)-ShiftX)*(PERIOD_MN1*60) && (ShiftX>0?(OrderCloseTime()< (TimeCurrent()/(PERIOD_MN1*60)-ShiftX+1)*(PERIOD_MN1*60)):true))
                     Profits=Profits+OrderProfit()+OrderSwap()+OrderCommission();
            }
            if(PeriodX=="week")
            {
               if(OrderTimeX=="open")
                  if(OrderOpenTime()> (TimeCurrent()/(PERIOD_W1*60)-ShiftX)*(PERIOD_W1*60) && (ShiftX>0?(OrderOpenTime()< (TimeCurrent()/(PERIOD_W1*60)-ShiftX+1)*(PERIOD_W1*60)):true))
                     Profits=Profits+OrderProfit()+OrderSwap()+OrderCommission();
               if(OrderTimeX=="close")
                  if(OrderCloseTime()> (TimeCurrent()/(PERIOD_W1*60)-ShiftX)*(PERIOD_W1*60) && (ShiftX>0?(OrderCloseTime()< (TimeCurrent()/(PERIOD_W1*60)-ShiftX+1)*(PERIOD_W1*60)):true))
                     Profits=Profits+OrderProfit()+OrderSwap()+OrderCommission();
            }
            if(PeriodX=="day")
            {

               if(OrderTimeX=="open")
                  if(OrderOpenTime()> (TimeCurrent()/(PERIOD_D1*60)-ShiftX)*(PERIOD_D1*60) && (ShiftX>0?(OrderOpenTime()< (TimeCurrent()/(PERIOD_D1*60)-ShiftX+1)*(PERIOD_D1*60)):true))
                     Profits=Profits+OrderProfit()+OrderSwap()+OrderCommission();
               if(OrderTimeX=="close")
                  if(OrderCloseTime()> (TimeCurrent()/(PERIOD_D1*60)-ShiftX)*(PERIOD_D1*60) && (ShiftX>0?(OrderCloseTime()< (TimeCurrent()/(PERIOD_D1*60)-ShiftX+1)*(PERIOD_D1*60)):true))
                     Profits=Profits+OrderProfit()+OrderSwap()+OrderCommission();
            }
            if(PeriodX=="-1")
            {
               Profits=Profits+OrderProfit()+OrderSwap()+OrderCommission();

            }
         }

   }
   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS))
         if((OrderSymbol()==SymbolX ||SymbolX=="-1")&& (OrderMagicNumber()==MagicX || MagicX==-1)&&(OrderType()==OrderTypeX || OrderTypeX==-1))
            NowProfits+=OrderProfit()+OrderSwap()+OrderCommission();
   if(HoldX)
      Profits=Profits+NowProfits;
   return(Profits);

}








daerwushen 发表于 2022-12-26 14:51:41

[发呆]好贵啊

hanbin618 发表于 2024-9-23 21:50:32

历史订单的盈利金额统计

shllwk 发表于 2024-10-16 10:46:49

学习中学习   谢谢分享
页: [1]
查看完整版本: HistoryProfitsAmount()历史订单的盈利金额统计,可以按照月、周、天进行统计