[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 98

 

Kim有一个功能。

//+------------------------------------------------------------------+
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    hb - часы времени начала торговли                                       |
//|    mb - минуты времени начала торговли                                     |
//|    he - часы времени окончания торговли                                    |
//|    me - минуты времени окончания торговли                                  |
//+----------------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0, int mb=0, int he=0, int me=0) {
  datetime db, de;           // Время начала и окончания работы
  int      hc;               // Часы текущего времени торгового сервера

  db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+hb+":"+mb);
  de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+he+":"+me);
  hc=TimeHour(TimeCurrent());
  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  }

  if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);
} 

我有两个问题。

1. 为什么它要把时间 一下子翻译成字符串,然后再把字符串翻译成时间?

2. 为什么在函数中出现这个条件?

  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  }

因为检查下面的时间...就在这里。

if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);

而在函数参数中,时间变量不是日期 类型,而是int 类型,不知为何......

 
哈,我想出来了。问题是,我正在编辑的文件是昨天从一个U盘上打开的。文本是打开的,一切都很好,但我今天没有插上闪存盘。我不明白我想编译什么,我有文本,但我就是没办法进入编辑。男人,它发生了。
 
hoz:

Kim有一个功能。

我有两个问题。

1. 为什么它要把时间一下子翻译成字符串,然后再把字符串翻译成时间?

2. 为什么在函数中出现这个条件?

因为检查下面的时间...就在这里。

而在函数参数中,时间变量不是日期 类型,而是int 类型,不知为何......


1.用函数参数中指定的值替换时间中的当前小时和分钟值

我会这样做的。

db=TimeCurrent()-TimeCurrent()%86400+hb*3600+mb*60;

2.按日增加正确的开始或结束日期

datetime和int本质上是一样的,参数不是完整的日期,而只是小时和分钟的数量。

 
MikeM:


2.对于按天计算的开始或结束日期的额外修正

为什么?我们需要限制EA的交易时间。而我们对从交易时间结束交易时间开始 的时间并不感兴趣,因为EA在这段时间内并不进行交易!我不明白什么是NONSENSES...

麦克米

datetime和int本质上是一样的,参数不是完整的日期,而只是小时和分钟的数量。

但时间必须是时间,怎么会没有区别呢?
 
hoz:


但时间必须是时间,怎么可能没有差别?


时间是一个数字,而且是一个完整的数字。
 
Vinin:

时间是一个数字,而且是一个整数。


我明白我对时间的意思--它不是一个日期,这就是为什么它被声明为一个数字。但是呢。

  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  }

我见过很多变种,但我从未见过这样的东西......这在某种程度上是很奇怪的。此外,这里没有循环,减去和加上贸易的开始和结束的时间。我不明白这一点。

事实上,我们在上面得到了dbde 贸易的开始和结束时间。所以,这块可以擦掉,然后我们再检查时间。

  if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);

编写额外代码的意义何在?请解释这一点。这其实是不符合逻辑的。

 
hoz:


如果我们不使用分钟,我们可能会简化它。 我理解我们对时间的意思--它不是日期,我们宣布日期。怎么样。

我见过很多变体,但我从未见过这样的东西......不知为何,这很奇怪。此外,这里没有循环,减去和加上贸易的开始和结束的时间。我不明白这一点。

事实上,我们在上面得到了dbde 贸易的开始和结束时间。所以,这块可以擦掉,然后我们再检查时间。

编写额外代码的意义何在?请解释这一点。这其实是不符合逻辑的。


每个人都可以自由地做他自己的事情。伊戈尔是这样做的。我以不同的方式来做。

以及你得到的是加号还是减号。所以,这取决于交易的时间。例如,如何将交易从21小时安排到5小时。

如果不使用会议记录,一切就会简单得多。

 
Vinin:


每个人都可以自由地用自己的方式来做。伊戈尔是这样做的。我正在以不同的方式做事情。

而且不管是正数还是负数。所以这取决于交易的时间。例如,如何组织晚上9点到5点之间的交易。

而且,这些代码是多余的。这并不重要。

如果不使用会议记录,一切就会简单得多。


使交易时间从21.00到23.59,然后从00.01到5.00。

还有其他选择吗?

 
hoz:


将交易时间定为21.00至23.59,然后是00.01至5.00

还有其他选择吗?

如果你写if(Hour() >= 21 || Hour() < 5),就会从21.00到4.59。
 
borilunad:
如果你写if(Hour() >= 21 || Hour() < 5),就会从21.00到4.59。

这很奇怪。它跳过了午夜,完全没有考虑到这一点?