帮助新手 - 日期和时间功能

 

你好。

我是这里的新手,所以我需要一些帮助。

我有一个EA,在周日开市时交易。这个EA的问题是,它在一周内也进行交易,我不希望这样。

我希望它能像这样工作。

Extern int StartDay="sunday"

Extern int StartTime="23:00"

extern int StopDay="Monday"

extern int StopTime="15:00"

如果day="sunday "并且市场是开放的(在sunday 23:00和monday 15:00之间只能有一笔交易,如果我们的交易因为TP或SL而被关闭,则没有新的交易)。

{

开始交易(我已经有一些代码)

}

我怎样才能在MQL中做到这一点?

 

检查时间[0]。

使用帮助中的日期和时间函数 的那些函数

 
// SEE IF THIS WORK FOR YOU..... (I'VE NOT TESTED IT....)



int start()
{
  bool sunday_cond = ( TimeDayofWeek(TimeCurrent())>=0) && (Hour()>=23);
  bool monday_cond = ( TimeDayofWeek(TimeCurrent())<=1) && (Hour()<=15); 
  if( sunday_cond  || monday_cond )
      go_trading();

}
 
abstract_mind:
  bool sunday_cond = ( TimeDayofWeek(TimeCurrent())>=0) && (Hour()>=23);
  bool monday_cond = ( TimeDayofWeek(TimeCurrent())<=1) && (Hour()<=15); 
  if( sunday_cond  || monday_cond )

我不确定这是否正确。sunday_cond "在一周的每一天,从晚上11点到午夜都是真的。因此,因为代码做的 sunday_cond monday_cond,所以它有可能在每天晚上11点之后进行交易。此外,"monday_cond "在周日到下午3点之前都会被满足。这不太可能,但在某些时区,这也可能属于交易时间。更重要的是,Hour() <= 15在下午3:59之前都是真的,而不是在下午3:00之前。


但就EagleEye需要做的事情而言,这个原则显然是正确的:检查时间,以及使用DayOfWeek()或TimeDayOfWeek()检查星期 几。

 
jjc:

我不确定这是否正确。sunday_cond "在一周的每一天,从晚上11点到午夜都是真的。因此,因为代码做的 sunday_cond monday_cond,所以它有可能在每天晚上11点之后进行交易。此外,"monday_cond "在周日到下午3点之前都会被满足。这不太可能,但在某些时区,这也可能属于交易时间。更重要的是,Hour() <= 15在下午3:59之前都是真的,而不是在下午3:00之前。


但就EagleEye需要做的事情而言,这个原则显然是正确的:检查时间,以及使用DayOfWeek()或TimeDayOfWeek()检查星期几。



你是对的。这应该是可行的。

  bool sunday_cond = ( TimeDayofWeek(TimeCurrent())==0) && (Hour()>=23);
  bool monday_cond = ( TimeDayofWeek(TimeCurrent())==1) && (Hour()<=15);
  if( sunday_cond  || monday_cond )
go_trading();
 

谢谢大家。


我将尝试这个方法,并让你们知道它是否有效。

 

only one trade can be open between sunday 23:00 and monday 15:00

上述代码应该从周日23:00到周一15:59(Hour()<=15)进行交易,而不是15:00(Hour()<15)。

此外,你还需要有在允许的时间段内只开一个交易的代码。

 
sunday_cond和monday_cond应该是什么类型? int?
 

我不确定我是否理解你这部分的意思,WHRoeder。星期一15:59 (Hour()<=15),而不是15:00 (Hour()<15)?

是的,我也需要这样的代码。希望有人能提供给我。

 
EagleEye:

是的,我也需要这个代码。希望有人能提供给我。

这是一个有点不寻常的问题,因为如果你在当前的交易窗口中已经开了一个交易,你就不想再进行新的交易,即使该交易现在已经关闭。这个论坛上的大多数讨论都只关注检查当前是否有一笔交易正在进行(这也是一个经常出现的话题)。


从本质上讲,在检查已关闭的交易方面,你有三个选择。


  1. 当打开一个新的交易时,在一个变量中存储当前时间。当考虑进行新的交易时,检查存储的最后一笔交易的时间是否不在当前交易窗口内。
  2. 如上所述,但在MT4的全局变量中存储最后一笔交易时间。
  3. 扫描MT4交易列表,寻找在当前交易窗口中开启的已关闭交易。


这些选项大致按复杂程度排列(也按性能倒序排列,即3是迄今为止最慢的,尽管它们之间的速度差异在现实生活中不太可能造成问题)。


然而,这些选项也是按复原力的顺序排列的。


  1. 如果最后交易时间被存储在一个变量中(在内存中),那么如果MT4重新启动或您的EA因任何其他原因被重新加载,该值将丢失。换句话说,如果EA被重新加载,那么它就有可能在同一个交易窗口中多次交易。
  2. 如果时间被存储在MT4全局变量中,那么它的记录应该在EA重新加载后仍然有效。但是,如果交易必须匆忙转移到新的电脑上,那么最后一次交易时间的记录就会丢失(除非有MT4的gvariables.dat文件的备份)。
  3. 扫描MT4交易列表是唯一在灾难恢复方面具有适当弹性的选择:你可以从另一台电脑上的MT4副本登录到经纪人账户,启动EA,并保证它不会进行错误的额外交易。


 

// 办法_1

  bool sunday_cond = ( TimeDayofWeek(TimeCurrent())==0) && (Hour()>=23);
  bool monday_cond = ( TimeDayofWeek(TimeCurrent())==1) && (Hour()<=15);
  if( sunday_cond  || monday_cond )
if(OrdersTotal()==0)
go_trading();



// 办法2

  bool sunday_cond = ( TimeDayofWeek(TimeCurrent())==0) && (Hour()>=23);
  bool monday_cond = ( TimeDayofWeek(TimeCurrent())==1) && (Hour()<=15);
  if( sunday_cond  || monday_cond )
{
if(number_of_longs()==0) // Count the longs from both "trade context" and history for the period in qestion. There is code for counting open longs/shorts in the forum
go_trading_longs();
if(number_of_shorts()==0)
go_trading_shorts();

}