1分钟OHLC与每个tick的对比--结果相反

 

我在测试每格或1分钟OHLC时得到完全相反的结果。EA和输入参数完全相同,但在1分钟OHLC的情况下,我得到50000的利润,而在每格我得到-7000的损失。

这种情况发生在许多货币对的测试中,测试时间为2年0811-0813。

有人遇到过同样的问题吗?我不明白这里的问题是什么,当我进行真正的资金交易时,我应该怎么做。

以下是两张图

1分钟OHLC

1 分钟 OHLC

每一个刻度

每一个刻度

 

如果没有任何信息,你的EA是如何决定买入/卖出的,这很难回答。

我们在市场上看到很多情况下,一个柱子有很大的尺寸(例如在重要的 新闻上)。

因此,测试者为这样的一个条形产生了多达11个点。根据你的逻辑,它的行为非常不同(仅在测试中)。

如果你把你的EA用在真实的资金上,我很肯定它将会更糟糕,因为这样的大棒在一分钟内可能有200个刻度。

我假设你的逻辑是在当前的条形图上操作的,你应该用上一个条形图的值来尝试你的逻辑。

祝福你

乌韦

 
ugo58:

如果没有任何信息,你的EA是如何决定买入/卖出的,这很难回答。

我们在市场上看到很多情况下,一个柱子有很大的尺寸(例如在重要的新闻上)。

因此,测试者为这样的一个条形产生了多达11个点。根据你的逻辑,它的行为非常不同(仅在测试中)。

如果你把你的EA用在真实的资金上,我很肯定它将会更糟糕,因为这样的大棒在一分钟内可能有200个刻度。

我假设你的逻辑是在当前的条形图上操作的,你应该用上一个条形图的值来尝试你的逻辑。

祝福你

乌韦

我现在发送了一个只在一个柱子中 "打勾 "的技巧。你只需把这个逻辑放在勾股的开头。如果条形图不是新的,则退出...

你认为在哪些情况下,这一招可能很有效?

   //--- Let's first check if a new bar has come!         
   if(CopyTime(_Symbol, _Period, 0, 1, m_currentBarTime) > 0) 
     {
      if(m_previousBarTime != m_currentBarTime[0])
        {
         m_isNewBar = true;
         m_previousBarTime = m_currentBarTime[0];
        }
     }
   else
     {
      Alert("Error copying historical data, error: ", GetLastError());
      return;
     }
     
   if(!m_isNewBar) return;

你有什么建议来解决这些额外的跳动?有什么文章可以解释这个问题吗?谢谢你。

 
laplacianlab:

我现在发送了一个只在一个条形图中 "打勾 "的技巧。你只需把这个逻辑放在tick的开头。如果条形图不是新的,则退出...

你认为在哪些情况下,这个技巧可以很好地发挥作用?

你有什么建议来解决这些额外的跳动?有什么文章可以解释这个问题吗?谢谢你。

你说的 "解决那些额外的刻度线 "是什么意思?
 
ugo58:

如果没有任何信息,你的EA是如何决定买入/卖出的,这很难回答。

我们在市场上看到很多情况下,一个柱子有很大的尺寸(例如在重要的新闻上)。

因此,测试者为这样的一个条形产生了多达11个点。根据你的逻辑,它的行为非常不同(仅在测试中)。

如果你把你的EA用在真实的资金上,我很肯定它将会更糟糕,因为这样的大棒在一分钟内可能有200个刻度。

我假设你的逻辑是在当前的条形图上操作的,你应该用前一个条形图的值试试你的逻辑。

祝福你

乌韦

你好。

使用maVal[1](其中maVal包含移动平均值,并且数组被设置为系列)而不是maVal[0]是什么意思?

或者检查条件是否在上一栏中得到了验证,然后在这一栏的开盘时进入?

以下是我非常简单的EA的部分代码

 triggerLong=maVal[1]-diff;
 triggerShort=maVal[1]+diff; 

......
.......

Buy_Condition_1=(now_ask<triggerLong);
Sell_Condition_1=(now_bid>triggerShort);

Exit_long_Condition=(closeAtCross? now_ask>=maVal[1]:false) || Sell_Condition_1;
Exit_short_Condition=(closeAtCross? now_bid<=maVal[1]:false) || Buy_Condition_1;

无论我使用maVal[1]还是maVal[0],情况都没有太大变化,ohcl仍然有利可图,而每个tick 则没有。

谢谢

 
ugo58:

如果没有任何信息,你的EA是如何决定买入/卖出的,这很难回答。

我们在市场上看到很多情况下,一个柱子有很大的尺寸(例如在重要的新闻上)。

因此,测试者为这样的一个条形产生了多达11个点。根据你的逻辑,它的行为非常不同(仅在测试中)。

如果你把你的EA用在真实的资金上,我很肯定它将会更糟糕,因为这样的大柱子在一分钟内可能有200个刻度。

我假设你的逻辑是在当前的条形图上操作的,你应该用前一个条形图的值试试你的逻辑。

祝福你

乌韦

这不是真的,测试器可以产生超过11个点的数值。请看这个帖子
 
angevoyageur:
你说的 "解决那些额外的刻度 "是什么意思?

我完全同意ugo58的观点。大的条形图可以触发OnTick事件很多次,而小的条形图触发的次数要少很多。

这可能会对您的自动交易策略 产生影响,所以我们的开发人员必须寻找解决方案,以减轻您的OnTick事件可能在每个条形图中被执行很多次的事实。

我认为我之前发送的只是一个解决方案。 ugo50提出了另一个解决方案:在最近的条形图中运行你的OnTick逻辑。不管怎么说,如果你想在当前条上运行你的OnTick逻辑,也许你可以使用与我之前发送的类似的东西。

我们正试图实现类似OnBar事件的东西。

你对此有何看法?

 
michelino:

嗨。

你的意思是使用前一交易日的数值? 使用maVal[1](其中maVal包含移动平均数值,并且数组被设置为系列)而不是maVal[0]?

或者检查条件是否在上一栏中得到了验证,然后在这一栏的开盘时进入?

以下是我非常简单的EA的部分代码

无论我使用maVal[1]还是maVal[0],情况都没有太大变化,ohcl仍然有利可图,而每个tick则没有。

谢谢

如果你的代码使用maVal[1]或maVal[0],或者在一般情况下,如果你只在闭合栏或开放栏或在一个栏内工作,显然有很大区别。

在最后一种情况下,你需要使用Every tick 模式,所有其他模式都不合适。

 
angevoyageur:
这不是真的,测试器可以产生比11个点多得多的东西。请看这个帖子

谢谢。哦,好吧。我不得不重新学习的事情之一。)


正如我所说,这取决于你的逻辑。

有很多方法可以解决这些问题,maVal[1]是其中一个比较容易的解决方案,因为移动平均线在每个柱子上的变化可能不会那么快(取决于周期长度和平滑方法)。

这可能是不同的,例如,如果你依赖于一系列条形的高点和低点。

 
谢谢你的分享...很好
 
也许这个链接也是有用的,https://www.mql5.com/en/articles/159
"New Bar" Event Handler
"New Bar" Event Handler
  • 2010.10.11
  • Konstantin Gruzdev
  • www.mql5.com
MQL5 programming language is capable of solving problems on a brand new level. Even those tasks, that already have such solutions, thanks to object oriented programming can rise to a higher level. In this article we take a specially simple example of checking new bar on a chart, that was transformed into rather powerful and versatile tool. What tool? Find out in this article.