文章 "在亚洲市场进行夜间交易: 如何保持盈利"

 

新文章 在亚洲市场进行夜间交易: 如何保持盈利已发布:

这篇文章处理的是夜间交易的概念,以及使用 MQL5 来实现它们的交易策略。我们会进行测试并得出相应的结论。

在所有描述的例子中,我们可以看到在亚洲市场时段价格只在小范围内变化,看起来市场显示出“不确定性”。这样的变化可以认为是平盘。

我们可以看到在黄色长方形上的上下边界,它们在其中限制了价格波动的通道,很容易在已经形成的图表上画出一个通道,但是在实时中,我们不知道价格将会如何变化,而动荡性还是个问题。所以,我们应当怎样做呢?

我想可以通过使用布林带趋势指标来解决这个问题,因为它在平盘市场上可以显示出好的信号。

图 3. 在 EURUSD M30 上使用布林带

图 3. 在 EURUSD M30 上使用布林带

作者:Dmitriy Zabudskiy

 
//--- 输入参数
input int      order_time=0;                        // 订单开放时间

这两个测试器的问题都在于无法优化日期时间。因此才会出现这种被迫的丑陋。

我们早就应该解决这个问题了。


ZY OnTesterInit 可以帮助解决日期时间问题,但不是每个人都能做到。

 

如果能在终端中知道经纪商的轮班时间,至少是相对于格林尼治标准时间的轮班时间,那就更好了。更准确地说,应该在终端中写明每个经纪商的时间。还有测试结果。但测试结果已经给出了,还有什么轮班时间呢?我不知道。

请求TimeGMT() 很好,但还不够。而且它也没有提供测试所需的任何信息。我们需要的是经纪人相对于格林尼治标准时间的准确时间偏移。

 
fxsaber:

这两个测试器的问题都在于无法优化日期时间。因此出现了这种被迫的丑陋现象。

我们早就应该解决这个问题了。

这里指的并不是日期时间--看:

if(time_now_str.hour==order_time && work==true && work_day==true)
只是作者在变量名方面有问题
 
ANG3110:

如果能在终端中知道经纪商的轮班时间,至少是相对于格林尼治标准时间的轮班时间,那就更好了。更准确地说,应该在终端中写明每个经纪商的时间。还有测试结果。但测试结果已经给出了,还有什么轮班时间呢?我不知道。

请求TimeGMT() 很好,但还不够。而且它也没有提供任何可以考虑测试的信息。我们需要的是经纪人相对于格林尼治标准时间的时移。

在 MT5 的优化模式 下很容易确定 TimeGMT,只需运行一次 - 您应该考虑一下。

 
Andrey F. Zelinsky:

这不是日期时间--请看:

只是作者在变量名方面有问题

我忏悔,我只读到了文章的引文部分。但日期时间问题确实存在。时间不仅应该通过 MQL 来优化,而且从人性化角度来说,也应该通过图形用户界面来优化。

 
fxsaber:

在 MT5 的优化模式 下,确定 TimeGMT 并不难,只需考虑一次运行即可。

但如果其他人给出了测试结果呢?无法确定。
 
ANG3110:
如果其他人得到了检测结果怎么办?那就说不准了

是的,报告中没有提到这一点。这就是自定义报告强大的原因。尤其是在 MT5 中。

 

也许不用

//+------------------------------------------------------------------+
//| 专家勾选功能|
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   time_now_var=TimeCurrent(time_now_str);// 当前时间

   switch(time_now_str.day_of_week)
     {
      case 1: if(mon==false){work_day=false;}
      else {work_day=true;}
      break;
      case 2: if(tue==false){work_day=false;}
      else {work_day=true;}
      break;
      case 3: if(wen==false){work_day=false;}
      else {work_day=true;}
      break;
      case 4: if(thu==false){work_day=false;}
      else {work_day=true;}
      break;
      case 5: if(fri==false){work_day=false;}
      else {work_day=true;}
      break;
     }

使用更简单的

//+------------------------------------------------------------------+
//| 专家勾选功能|
//+------------------------------------------------------------------+
void OnTick()
  {
   time_now_var=TimeCurrent(time_now_str);// 当前时间

   switch(time_now_str.day_of_week)
     {
      case 1: work_day=mon; break;
      case 2: work_day=tue; break;
      case 3: work_day=wen; break;
      case 4: work_day=thu; break;
      case 5: work_day=fri; break;
     }
...

正如人们常说的,这不是针对个人,只是一种愚蠢的习惯--当我看到一些效率低下的代码时,我无法视而不见。
我没有进一步研究代码。

 
Eugene Myzrov:

也许不用

使用更简单的

正如人们常说的,这不是针对个人,只是一种愚蠢的习惯--当我看到一些效率低下的代码时,我无法视而不见。
我没有进一步研究代码。

谢谢您的评论。这个习惯很好,我自己有时也会这么做.....。

您的例子:

//+------------------------------------------------------------------+
//| 专家勾选功能|
//+------------------------------------------------------------------+
void OnTick()
  {
   time_now_var=TimeCurrent(time_now_str);// 当前时间

   switch(time_now_str.day_of_week)
     {
      case 1: work_day=mon; break;
      case 2: work_day=tue; break;
      case 3: work_day=wen; break;
      case 4: work_day=thu; break;
      case 5: work_day=fri; break;
     }
...

老实说,我不太明白,需要补充...因为在 "智能交易系统 "的输入变量中,您需要工作的星期被标记为 "true",如果您不需要在这一天工作,则标记为 "false"。

而变量 "work_day "会以 "true "或 "false "的形式发送答案。在你的例子中,变量变成了 "字符串 "类型,因此你必须再次进行比较。

因此,我支持代码优化,尽管在本 EA 中,这并不是优先事项。

这段代码是可以优化的:

//+------------------------------------------------------------------+
//| 专家勾选功能|
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   time_now_var=TimeCurrent(time_now_str);// 当前时间

   work_day=true;

   switch(time_now_str.day_of_week)
     {
      case 1: if(mon==false){work_day=false;}
      break;
      case 2: if(tue==false){work_day=false;}
      break;
      case 3: if(wen==false){work_day=false;}
      break;
      case 4: if(thu==false){work_day=false;}
      break;
      case 5: if(fri==false){work_day=false;}
      break;
     }

代码量会减少,但工作速度不会降低......

也许您可以在函数中实现循环,这样代码量可能会减少,但处理速度会延长。

您也可以修改输入参数,然后修改代码,或许可以简化代码。

 
Dmitriy Zabudskiy: 感谢您的评论。这是个好习惯,我自己有时也这么做....。您的例子:老实说,我不太明白,需要补充...因为在 "智能交易系统 "的输入变量中,需要工作的星期被标记为 "true",如果不需要工作,则标记为 "false"。而变量 "work_day "会以 "true "或 "false "的形式发送答案。在你的示例中,变量变成了 "字符串 "类型,因此你必须再次进行比较。因此,我支持代码优化,尽管在这个 EA 中,这并不是一个优先事项。这段代码是可以优化的。代码量会减少,但速度不会......也许您可以在函数中实现一个循环,这样代码量可能会减少,但处理速度会延长。您可以再多做一些工作,以某种方式改变输入参数,这样就可以改变代码,或许还可以简化代码。
   work_day=false;
   switch(time_now_str.day_of_week)
     {
      case 1: if (mon) work_day=true; break;
      case 2: if (tue) work_day=true; break;
      case 3: if (wen) work_day=true; break;
      case 4: if (thu) work_day=true; break;
      case 5: if (fri) work_day=true; break;
     }


您也可以提供这样的代码。但如果去掉 "else "操作符,源代码就只简化了一半。如果把 "if "运算符也去掉,只剩下 5 个赋值运算符,就会得到最佳变体。这就是建议的最佳变体。

switch(time_now_str.day_of_week)
     {
      case 1: work_day=mon; break;
      case 2: work_day=tue; break;
      case 3: work_day=wen; break;
      case 4: work_day=thu; break;
      case 5: work_day=fri; break;
     default: work_day=false; // в субботу и воскресенье не торгуем...
     }

但我完全不明白的是,变量会变成 "字符串 "类型