Time()的问题 - 页 2

 

这也是不行的...

Day() == 1 || Day() == 2 || Day() == 3 || Day() == 4 

RaptorUK已经在上面回复你,提到了TimeDayOfWeek()。Day()TimeDayOfWeek()DayOfWeek() 的区别是(仔细阅读这些内容)

int Day() =返回当前月份的日期,即最后已知的服务器时间的月份。

int DayOfWeek() = 返回最后已知服务器时间的当前零基星期(0-星期日、1、2、3、4、5、6)。

int TimeDayOfWeek(datetime Time) =返回指定日期的基于零的星期(0表示星期日,1,2,3,4,5,6)。


所以Day() = 1可以是周一到周日的任何一天

BTW,今天是5月31日,Day()函数将返回31(日期),而DayOfWeek()将返回4(星期四)。

明天是6月1日,Day()函数将返回1(Date),而DayOfWeek()函数将返回5(Friday)。

用这个作为脚本。

Alert ("TimeDay of local time ",TimeDayOfWeek(TimeLocal())," and TimeDay of server time ",TimeDayOfWeek(TimeCurrent()));
Alert ("Day () is ",Day()," and DayOfWeek is ", DayOfWeek ());
 
toCFx:

LOL!

我开始认为,MT4中大部分基于 "时间 "的功能都存在严重缺陷。

我的意思是,如果我把我所有的仓位控制逻辑重置为像这样平凡的东西。TimeHour(TimeCurrent()) == 23 &&TimeHour(TimeCurrent()) == 59,而我却无法关闭任何一笔交易(EA根本无视这段代码!),那么我会说,MT4在这些类型的功能方面有一些需要纠正的问题。

你不觉得如果MQL4基于时间的功能 有这些严重的缺陷,别人可能早就注意到了吗?

也许你可以试着先纠正你有缺陷的代码,然后再声称这些函数有缺陷。

在你的结束标准中,试着改变。

TimeHour(TimeCurrent()) == 23 &&TimeHour(TimeCurrent()) == 59

到。

if(TimeHour(TimeCurrent()) == 23 &&TimeMinute(TimeCurrent()) == 59)

toCFx

这段代码再简单不过了!我指示EA在00:00和00:05之间开启这该死的交易。这不是什么难事。一个六岁的孩子都能写出这样的代码。这里又是如此。[b]TimeHour(TimeCurrent()) == 00 &&TimeHour(TimeCurrent()) <= 05[/b]。

另外,你也可以试着纠正一下,lol

改变。

TimeHour(TimeCurrent()) == 00 && TimeHour(TimeCurrent()) <= 05

到。

如果(TimeHour(TimeCurrent()) == 0 &&TimeMinute(TimeCurrent()) <= 5)

 

亲爱的CFx。

我为我的咆哮道歉。我今天心情不好。我想我们有另一个论坛者可能必须重新安装他的电脑,因为他没有完全读懂我的回复。

1.如果你想在周一和周四之间关闭交易,都在23:57,周五21:57

   if (
       (DayOfWeek () >= 1 && DayOfWeek() <= 4 && TimeHour(TimeCurrent()) >= 23 && TimeMinute(TimeCurrent()) >= 57)
       || (DayOfWeek() == 5                   && TimeHour(TimeCurrent()) >= 21 && TimeMinute(TimeCurrent()) >= 57)
      )
      {
      // close it
      }

而你可以修改同样的代码来进行开仓交易。

阅读这个关于测试https://www.mql5.com/en/articles/1512


2.这很重要:你提到了 "工具"。 如果你能详细说明你所说的 "工具 "是什么意思--在这里提到它的名字就可以了。我们只使用MetaEditor。这里有很多论坛成员使用一些在线工具,并让我们修复错误。你必须告诉我们是什么问题,因为你的代码可能充满了错误--例如,你的逻辑是正确的,但你使用了错误的mql4函数。

... who uses a tool for helping me build EAs. That tool allows the use of some MQL structure, but it does not execute on explicit MQL functions. It simply takes MQL code, evaluates whether the MQL based condition is true/false, and then executes a custom function such as OpenBuy, OpenSell, CloseBuy, CloseSell, DeletePendingBuy, DeletePendingSell, etc. But, it does not run MQL code explicitly. For example, you can(not) use the Print or Comment function to get something to appear on the chart window of MT4 (just one example).


3.在我看来,你很喜欢写长篇大论,对此我无能为力,只是请记住这一点。

这是我的第一篇帖子。首先,请注意(e)我不是一个MQL开发者。

这样你就不会感到尴尬了,特别是在你说了......

我不是MQL的开发者,但我真的很擅长开发逻辑结构,当我感觉到一个系统性的问题 时,我可以发现 它。

我们总是在这里提供帮助,甚至包括阅读你的长文。

这是你的--非常长的--第一篇帖子。

你好,MQL4社区!

这是我的第一篇帖子。首先,请注意,我不是一个MQL的开发者。 我是一个交易员,使用一个工具来帮助我建立EA。 该工具允许使用一些MQL结构,但它不执行明确的MQL函数。它只是接受MQL代码,评估基于MQL的条件是否为真/假,然后执行自定义函数,如OpenBuy, OpenSell, CloseBuy, CloseSell, DeletePendingBuy, DeletePendingSell,等等。但是,它不会明确地运行MQL代码。例如,你可以使用打印或评论功能,让一些东西出现在MT4的图表窗口(只是一个例子)。

所以,我对MQL有一点了解,这刚好让我能够使用我用来建立EA的开发工具。到目前为止,我已经使用该工具建立了10个EA,由于非盈利性而放弃了其中的7个,这比我以前在Excel中建立交易系统时的成功原型率要好30%左右。我通常预计10个想法中的7-8个不会像预期的那样有利可图,剩下2-3个设计的利润足以开始优化过程。好了,关于我和我的工作方式就说到这里。

这是我的问题,我希望我来到了正确的地方寻求帮助

我正在运行这段代码[b]来关闭交易:[/b] 。

Day() == 1 || Day() == 2 || Day() == 3 || Day() == 4 && TimeHour(TimeCurrent() ) >=23 && TimeMinute(TimeCurrent() ) >=57 || Day() == 5 && TimeHour(TimeCurrent() ) >=21 && TimeMinute(TimeCurrent() ) >=57

注意:问题是,所有的交易在周一到周四都保持开放,直到23:57。另外,所有的交易在周五保持开放,直到21:57。


我也在通过MQL块运行这段代码[b]来打开交易:[/b]

TimeHour(TimeCurrent()) == 00 && TimeMinute(TimeCurrent()) <= 05

注意:唯一在00:00和00:05之间打开的交易,是回测的第一笔交易,当点击测试者开始按钮。该交易正好在00:00打开。然而,在本周晚些时候,其他交易都没有在00:00和00:05之间打开。

综上所述。

- 在点击测试者开始按钮后,有一笔交易在00:00点开盘。
- 随后在23:57(周一至周四)或21:57(周五)没有交易被关闭。
- 在00:00至00:05之间,没有任何交易随后被打开。

上面显示的所有时间都有充足的可用tick流量。因此,在Tester使用的数据中没有任何空白。

希望能得到任何帮助。为什么这些交易不能在编码的时间关闭?从周一到周五,00:00到00:05之间总是有交易信号,为什么没有交易被执行?

谢谢您的帮助!
cfx

 
   if( DayOfWeek()<1 || DayOfWeek()>5 || TimeMinute(TimeCurrent()) < 57 )
      return(0);
   else if( TimeHour(TimeCurrent()) >= 23  || ( DayOfWeek() == 5 && TimeHour(TimeCurrent()) >= 21) ){
     //Close
   }
 
CFx:

我没有为这种目的使用过Print语句。

为什么不呢?在MetaEditor中打开你的代码,添加一些Print函数 来告诉你正在发生的事情 . .

MT4没有调试器,所以我们唯一可用的工具之一是Print ...... 另一个是Comment。......仅此而已。

 
RaptorUK:

为什么不呢?在MetaEditor中打开你的代码,添加一些Print函数来告诉你正在发生的事情 . .

MT4没有调试器,所以我们唯一可用的工具之一是打印 ...... 另一个是评论。......仅此而已。


我也经常使用Alert() 来达到这个目的。
 

工具。告诉我们工具的情况,不要尴尬,我从RaptorUK、dabbler和SDC那天的评论中学到了。所以,请告诉我们。

:D

 
SDC:

我也经常使用Alert() 来达到这个目的。
我没有......所以我忘了......谢谢你的纠正:-)
 
onewithzachy:

大笑。你才是那个不真实的人。你的这个代码...

......永远不会返回真实。

你才是那个需要进一步发展 "你的 "逻辑结构的人。

并构建这个......


也许你应该试着阅读OP。 它清楚地告诉你,我不是一个MQL开发者。 此外,能够在逻辑上构建一种编程语言,和能够在逻辑上构建一个持续盈利的交易系统,两者之间有巨大的(巨大的)区别。 不幸的是,在这个行业中,你会发现网上有很多程序员,他们对研究、设计、架构、构建、工程、整合和实施一个智能交易系统所需要的东西没有一点头绪,而这个系统在任何市场条件下(牛市、熊市和过渡期)都能真正发挥作用。 所以,我理解你无法理解我的出发点。 我已经建立了那个智能交易系统,而且是用Excel做的(所有的东西)。

在过去的3.27年里,它一直在全职的基础上持续盈利,同时在过去的7年里,在兼职的基础上产生了远远好于平均水平的结果,同时它还在设计、构建和优化中--这是一个完全集成的、决策支持的交易系统,是由100%的定制指标框架输入设计的。 我的系统中没有50多年前的标准指标,因为整个系统中使用的每一个指标都来自于我通过多年的研究和测试从头开始创建的新设计和指标概念。 我唯一要做的事,就是把它写成一本书。

所以,在设计有效的交易系统方面,我猜你可能已经很久没有在这个论坛上看到我这样的人了--如果有的话。 你知道谁创造了一个新的指标设计类别? 我说的不是拿一个现有的指标设计,对它进行调整并给它起一个新的名字--那叫推进当前一代的指标。 我说的是一种基于市场理论的全新指标概念,而这种理论还没有被大规模地公开讨论过? 它们被称为[b]Delta Differential Class Indicators[/b],它们不是基于你以前见过的任何传统市场理论,我向你保证这一事实。

我对MQL的兴趣在于发现D2类指标在较低的时间框架内是否有价值,因为它们的原型系统只使用日、周、月和年条数据,每24小时产生一个(1个)交易信号,在过去3.27年中,对指定目标的准确率一直在91%到99%之间。 这大约是850多个交易信号,目标准确率在91-99%之间,目标范围在每24小时17-67点之间(核心中值)。

目前的原型不是自动化的,对于MQL来说,它太复杂了,无法处理。 OOP,将是它的最佳环境,但我一直忙于其他事情,没有足够的时间坐下来学习C或C++。

这个测试,是一个POC,旨在找出我的一些指标设计是否可以在日线时间框架下很好地运行。 如果我可以找到使用我的设计实现较低时间框架自动化的技术理由,那么我就可以证明我需要花时间学习OOP,并将原型变成一个独立的专有Windows交易应用程序(在任何情况下都不出售)。

交易员进行交易。 程序员,编程。 我还不是一个程序员............。

 
onewithzachy:

这也是不行的...

RaptorUK已经在上面回复你,提到了TimeDayOfWeek()。Day()TimeDayOfWeek()DayOfWeek() 的区别是(仔细阅读这些内容)

int Day() =返回当前月份的日期,即最后已知的服务器时间的月份。

int DayOfWeek() = 返回最后已知服务器时间的当前零基星期(0-星期日、1、2、3、4、5、6)。

int TimeDayOfWeek(datetime Time) =返回指定日期的基于零的星期(0表示星期日,1,2,3,4,5,6)。


所以Day() = 1可以是周一到周日的任何一天

BTW,今天是5月31日,Day()函数将返回31(日期),而DayOfWeek()将返回4(星期四)。

明天是6月1日,Day()函数将返回1(Date),而DayOfWeek()函数将返回5(Friday)。

用这个作为脚本。


我已经使用了DayOfWeek(),正如我的一个帖子中所示,它仍然没有正常工作。