任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 767

 
tuner:

我没有马上注意到这个答案。好吧,说实话,我不太明白你说的没有混淆是什么意思。

你说的 "无论什么时候,StringToTime()都会计算已过的秒数 " 是什么意思

该函数实质上是完全取一个左旋的日期(我相信本地PC的日期是左旋的),并将经纪人的服务器的当前时间与之相比较,为什么会不重要?

从上面的截图来看,评论说你本地电脑上的时间比经纪人的时间早1小时,也就是说,格林威治标准时间的转变更大。如果少了X个小时,那就很关键了,就像我周五写的那个案例。

至于交易时间的结束。我想对于StringToTime() 函数来说,经纪人何时结束交易日或一周应该不重要

我没有其他解释。

如果现在是莫斯科的11:40,那么从1970年1月1日到现在的时间 已经过去了XXX秒。

例如,当伦敦的时间是11:40时,秒数将与现在莫斯科的时间相同......这只是因为伦敦的1970年1月1日比现在的时间晚了很多。它不是输入的时间,而只是秒数。

试着自己写一个公式来计算自1970年1月1日00:00:00以来的秒数。

在短时间内,你可以使用这个公式。从当前月份开始通过6*24*60*60+11*60*60+59*60+你所看的时钟上的当前秒值。

 

当然,这种比较是基于70年以来的秒数,但这个秒数考虑到了一切--日期和时间。

我只举一个例子,这基本上是对我最近遇到的一个问题的简化。

任务:考虑到字符串变量 "21:30",计算周五交易结束的时间(日期时间)。

最初我有这样一个解决方案。

datetime EndTrading;

if(TimeDayOfWeek(TimeCurrent())==5)     // если сейчас пятница, например возьмем сегодняшний день, первый тик 2014.11.07 00:00
  EndTrading=StringToTime("21:30");     // подразумевается что тут должно быть время пятницы...

if(TimeDayOfWeek(TimeCurrent())==5)     // если настала пятница
  if(TimeCurrent()>EndTrading)          // и время удовлетворяет условию
    Print("Настала пятница и текущее время больше чем 21:30");

现在的噱头是:代码中指定的打印将在周五弹出,但不是在21:30之后,而是在第一个钩的00:00。

因为当我的经纪人的服务器得到星期五的时候,在我的本地电脑上仍然是星期四,时移是不同的。

在测试器中,一切正常,印刷品将在周五21:30后如期发行。这不是令人困惑吗?

 
tuner:

当然,这种比较是基于70年以来的秒数,但这个秒数考虑到了一切--日期和时间。

我只举一个例子,这基本上是对我最近遇到的一个问题的简化。

任务:考虑到字符串变量 "21:30",计算周五交易结束的时间(日期时间)。

最初我有这样一个解决方案。

现在的噱头是:代码中指定的打印将在周五弹出,但不是在21:30之后,而是在第一个钩的00:00。

因为当我的经纪人的服务器得到星期五的时候,在我的本地电脑上仍然是星期四,时移是不同的。

在测试器中,一切正常,印刷品将在周五21:30后如期发行。这不是令人困惑吗?

当然,这很让人困惑。这只是你头脑中的混乱。TimeToString("21:30")将给出从21:30:00到第二天21:29:59的当前日期。我将纠正你代码中的注释。

datetime EndTrading;

if(TimeDayOfWeek(TimeCurrent())==5)     // если сейчас пятница, от текущего времени. Наступит когда по времени сервера будет 00:00
  EndTrading=StringToTime("21:30");     // А тут в 00:00 устанавливается четверг 21:30 потому, что это время пятницы ещё далеко.

if(TimeDayOfWeek(TimeCurrent())==5)     // если настала пятница
  if(TimeCurrent()>EndTrading)          // А тут условие если(текущее время больше чем четверг 21:30)
   {
    Print("EndTrading = ", TimeToString(EndTrading)); // Посмотри что будет напечатано.
   }


而这段代码将正确工作

if(TimeDayOfWeek(TimeCurrent()) == 5 && TimeCurrent() >= StringToTime("21:30"))
Print("Настала пятница и текущее время больше чем 21:30");
 
ikatsko:
同一台笔记本电脑上有两个MT4终端:一个是小数点后4位,一个是小数点后5位。在同一时间,第一台的流量是105/0 kb,第二台是3450/0 kb。第一个是CPU密集型6%,第二个是39%。问题是什么?这甚至是一种规范吗?
是的。
 

冯小刚

将我电脑上的日期改为2000年。

运行了这个脚本。

input string time="21:30";

Comment("TimeCurrent() = ",TimeCurrent(),"\n",
"TimeLocal() = ",TimeLocal(),"\n",
"StringToTime(",time,") = ",StringToTime(time));

并得到了这个。

因此,StringToTime()从本地计算机获取日期。

 
tuner:

冯小刚

把我电脑上的日期改成了2000年。

运行了这个脚本。

并得到了这个。

因此,StringToTime()从本地计算机获取日期

那又怎样?让它从月球上取下来,只要你设置 "从和到 "的时间经过XXX秒,这个整数我们与所需时间的01.01.1970的秒数进行比较。

你最好检查一下这一行

if(TimeDayOfWeek(TimeCurrent()) == 5 && TimeCurrent() >= StringToTime("21:30"))

你在哪里出了问题。今天是星期五。

 
AlexeyVik:

你最好检查一下那条线

你在哪里出了问题。今天是星期五。

我检查了一下,如果本地计算机的日期比经纪人的日期低,那么打印机就在那里。

但如果本地计算机的日期比经纪人的高,就没有打印机。

即时间已过,即 "11:30"。

在第一种情况下,TimeCurrent() 与2014.11.06 11:30 相比,在第二种情况与2014.11.0811:30 相比。

PS更正了突出显示的

if(TimeDayOfWeek(TimeCurrent())==5)      // если сейчас пятница, от текущего времени. Наступит когда по времени сервера будет 00:00
   EndTrading=StringToTime("21:30");     // А тут в 00:00 устанавливается четверг 21:30 потому, что это время пятницы ещё далеко.

第一行很清楚,第二行的评论却不清楚。

周五已经到来,为何还远在天边?毕竟,第二行只有在星期五的时候才会执行。

 
tuner:

我已经检查过了,如果本地电脑的日期比经纪人的日期低,那么打印机就在那里。

而如果本地计算机上的日期高于经纪人的日期,那么就没有打印机了。

即时间已过,即 "11:30"。

在第一种情况下,TimeCurrent()与2014.11.06 11:30 相比,在第二种情况与2014.11.0811:30 相比。

PS更正了突出显示的


我这里的本地时间 比服务器时间大1小时。

这个脚本

   datetime time_begin;
    time_begin = StringToTime("21:30");
    Comment("Текущее локальное время ", TimeLocal(), " ", TimeToString(TimeLocal(), TIME_DATE|TIME_SECONDS), "\n"
          , "Текущее время сервера    ", TimeCurrent(), " ", TimeToString(TimeCurrent(), TIME_DATE|TIME_SECONDS), "\n"
          , "Сегодня 21:30 по TimeLocal будет через    ", time_begin-TimeLocal(), " секунд или ", 
           TimeToString(time_begin-TimeLocal(), TIME_MINUTES|TIME_SECONDS), "\n"
          , "Сегодня 21:30 по TimeCurrent будет через ", time_begin-TimeCurrent(), " секунд или ", 
           TimeToString(time_begin-TimeCurrent(), TIME_MINUTES|TIME_SECONDS), "\n"
          );


输出以下数值。

首先,从1970年1月1日到指定时间所经过的秒数,然后以我们习惯的形式显示时间。


在此基础上,请解释这些价值观让你感到困惑的地方?


是的,在我的第二条评论中,我想的是别的东西。

 
TheXpe
TheXpert:
да.
谢谢你。简洁是人才的姐妹!
 

你好。

有一个这样的任务。(无法将其附加到勾上)

如果一个挂单 触发了{那么...}。

在我的EA中,我使用Terminal.mqh来计算订单。

终端 // Mas_Tip[0] 打开购买

// 如果买入订单的数量增加了1

如果(Mas_Tip[0]+1)

{

功能

}

一切正常。但它在每一个下一个刻度上都会被触发。

如何将此案附在蜱虫上?然后比较前一个tick和当前tick的值。

原因: