包括周末在内的计数条 - 页 3

 
Igor Makanu:

复杂的是,日期之间有一个以秒为单位的时间(datetime)--这足以计算出其中24小时的整日数,每小时60分钟,每分钟60秒,.... google来帮助

如果我们说的是一种扭曲的计数方式,你可以这样做。

你可以像你建议的那样,计算每个条形图并找出当前和前一个条形图之间是否有一个周末....,一般来说,在这里,使任务复杂化的可能性受限于欲望))))。

我们应该首先假设时间间隔在0:0开始和结束。

 
Dmitry Fedoseev:

我们必须先假设时间间隔在0:0开始和结束。

在我的例子中,这个假设是不需要的,但我们需要假设计算是在一个日历年内。

第一个帖子里有一个解决方案,另外,在 "只有来自kimiw的有用的代码,我想我已经看到了 "这个话题里应该有另一个解决方案。

 
Igor Makanu:

在我的例子中,这个假设是不需要的,但我们需要假设计算是在一个日历年内。

第一篇文章中的解决方案,作为一个选项--在这个主题中应该有另一个解决方案 只有KimIV的有用代码,我想我看到了

需要计算的不仅仅是天数,还有工作日或周末。

 
Dmitry Fedoseev:

需要计算的不仅仅是天数,还有工作日或周末。

这很难说,问题的措辞是模糊的。

forex2030

你如何知道各点之间有多少个周末,例如在D1上,然后把它们加到所需的条上?

如果按照你的措辞,那么在循环中复制CopyTime() 日线并分析周末,但如何处理周末?- 它说它要添加它们?
 
Igor Makanu:

这很难说,问题的措辞是模糊的。

...

歧义在哪里:"你如何找出 例如D1上各点之间有多少产出,以便将它们加入所需的条形图中?"

为什么需要这样做是另一个问题。

 
int WorkingDays(datetime startDate,datetime endDate){

   int d=int((endDate-startDate)/86400);
   
   int m[7,7]={
   {0, 0,1,2,3,4,5}, // воскр
   {0, 1,2,3,4,5,5}, // понед
   {0, 1,2,3,4,4,4}, // вторн
   {0, 1,2,3,3,3,4}, // среда
   {0, 1,2,2,2,3,4}, // четв
   {0, 1,1,1,2,3,4}, // пятн
   {0, 0,0,1,2,3,4}  // субб
   };

   return (d/7)*5+m[(int)TimeDayOfWeek(startDate)][d%7];
}

似乎检查过了,似乎很好。检查一下,如果你不是太懒的话。

 
Dmitry Fedoseev:

歧义在哪里:" 你怎么知道 在例如D1的 点之间有多少输出,以便你能把它们加到你想要的条上?"

为什么会有这样的需要是另一个问题。

我想,如果我们再聊几个小时,我们就会开始评估这个问题,两个酒吧之间可以有多少输出....。而且肯定总是有一种对应关系,即在星期一到来之前是星期天?

)))))

通过减去日期时间来纠正天数的计算,我认为这段代码对所有情况都有效。

input datetime d_start = D'2020.01.01 12:30:27';
input datetime d_stop  = D'2020.02.01';

//+------------------------------------------------------------------+
void OnStart()
{
   const int day_in_sec = 24 * 60 * 60;
   datetime d_corect1 = d_start - d_start % day_in_sec;
   datetime d_corect2 = d_stop - d_stop % day_in_sec;
   int result = (int)((d_corect2 - d_corect1) / day_in_sec);
   printf("всего %i дней ", result);
}
//+------------------------------------------------------------------+
 
forex2030:

按日期

对于第一点,我补充说,酒吧

然后计算这些日期之间的条数

int  Bars( 
   string           symbol_name,     // имя символа 
   ENUM_TIMEFRAMES  timeframe,       // период 
   datetime         start_time,      // с какой даты 
   datetime         stop_time        // по какую дату 
   );
你得到的数量少于你设定的条数。你设定的条数和你得到的条数之间的差异是休息日的数量。因此,我们可以得到任何周期的条数,甚至是一分钟周期的条数。只要仔细检查一下这个函数返回了多少个条形。两条外杠或其中一条都将被考虑。我不太记得了,但似乎这两个人都被考虑在内。
 
Alexey Viktorov:

然后计算这些日期之间的条数

你得到的数量少于给定的条数。给出的条数和收到的条数之间的差额就是休息天数。因此,我们可以得到任何周期的条数,甚至是一分钟周期的条数。只要仔细检查一下这个函数返回了多少个条形。两条外杠或其中一条都将被考虑。我不太记得了,但似乎这两个人都被考虑在内。

谈一谈还没有酒吧的日期。

 

为了以防万一,我将添加一个例子--它计算出缺了多少个小节

input datetime d_start = D'2020.01.01 12:30:27';
input datetime d_stop  = D'2020.02.01';

//+------------------------------------------------------------------+
void OnStart()
{
   const int day_in_sec = 24 * 60 * 60;
   datetime d_corect1 = d_start - d_start % day_in_sec;
   datetime d_corect2 = d_stop - d_stop % day_in_sec;
   int result = (int)((d_corect2 - d_corect1) / day_in_sec);
   printf("всего %i дней ", result);
   datetime t_arr[];
   int allbarD1 = CopyTime(_Symbol, PERIOD_D1, d_start, d_stop, t_arr);
   if(allbarD1 < 0)
   {
      printf("Error CopyTime() func № %i", GetLastError());
      return;
   }
   printf("Всего выходных % i дней", result - allbarD1);
}
//+------------------------------------------------------------------+