FMIC: No! On the forum, you will find that many users have shown that the "Bars" method is very old and unreliable because the number of bars can be changed by the "Options" for charts or it can be constant when the maximum number of bars per chart has been reached. So, it is wrong to use it. Use either "Time[0]" or if you want it to be compatible with MQL5 as well, use "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )". Please see my example.
谢谢你的建议,这是我的代码的一个非常简单的版本,这不是我真正的代码,但我希望这能更清楚。
正如我所说,这不是真正的代码,寻找模式等只是一个例子。我开这个话题的原因是DetectExistingPattern()函数
我已经给你提供了如何在OnTick() 的第一次运行中运行代码的示例代码,所以现在相应地更新你的代码帖,使你的DetectExistingPattern()在OnTick() 的第一次调用中运行,而不是在OnInit() 中。
另外,你不能用 "Bars "来检测一个新条。这是不正确的。你应该使用 "Time[0]"或 "SeriesInfoInteger( _Symbol, _Period,SERIES_LASTBAR_DATE)"。下面是一个例子。
我已经给你提供了如何在OnTick() 的第一次运行中运行代码的示例代码,所以现在相应地更新你的代码帖,使你的DetectExistingPattern()在OnTick() 的第一次调用中运行,而不是在OnInit()。
另外,你不能用 "Bars "来检测一个新条。这是不正确的。你应该使用 "Time[0]"或 "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )"。这里有一个例子。
谢谢 @FMIC,我添加了简单的代码,因为@jjc要求这样做。顺便说一下,我是从我的记忆中学习使用Bars 的,每个人都是这样写的,所以我也这样做了。为什么它是错的?它是否可以不正常地工作?
ps:我使用metatrader 4,所以是mql4,对吗?
谢谢@FMIC,我添加了简单的代码,因为@jjc要求这样做。顺便说一下,我是从我的记忆中学习使用Bars的,大家都是这样写的,所以我也是这样做的。为什么它是错的?它是否可以不正常地工作?
ps:我使用metatrader 4,所以是mql4,对吗?
FMIC:
No! On the forum, you will find that many users have shown that the "Bars" method is very old and unreliable because the number of bars can be changed by the "Options" for charts or it can be constant when the maximum number of bars per chart has been reached. So, it is wrong to use it. Use either "Time[0]" or if you want it to be compatible with MQL5 as well, use "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )". Please see my example.
正如我所说,这不是真正的代码,寻找模式等只是一个例子。我开这个话题的原因是DetectExistingPattern()函数
回到你最初的问题上...在这个例子中,一个选择是你改变你的CheckTrendPattern()函数,这样它就可以被告知从一个特定的条形开始。你不使用1-10条的固定范围,而是使用1-10条的偏移,从指定的起点开始。
当没有现有的订单,而你想检查当前是否符合模式,那么你就使用CheckTrendPattern(0)而不是CheckTrendPattern()。
当启动时,如果你有一个现有的订单,那么你可以寻找触发它的模式,如下所示。这与我一开始提出的建议相同:你得到相当于现有订单的开仓时间 的条形指数,然后从那里开始向后寻找。
然而,正如FMIC所说,最好是在第一次调用OnTick()时做这个检查,而不是在OnInit()时。我自己建议这样做的原因与 "耽误初始化 "无关。相反,我担心的是,当MT4重新启动时,EA已经连接到图表上,你还没有100%可靠地从经纪人那里获得订单列表或更新的条形历史。
你可能想记住的另一个考虑因素是以下情况,所有这些都发生在一个条形图所覆盖的时间内。
您可能想检查已关闭的订单和未关闭的订单,以防止这种情况。
回到你最初的问题...在这个例子中,一个选择是你改变你的CheckTrendPattern()函数,这样它就可以被告知从一个特定的柱子开始。你不使用1-10条的固定范围,而是使用1-10条的偏移,从指定的起点开始。
当没有现有的订单,而你想检查当前是否满足模式,那么你就使用CheckTrendPattern(0)而不是CheckTrendPattern()。
当启动时,如果你有一个现有的订单,那么你可以寻找触发该订单的模式,如下所示。这与我一开始提出的建议相同:你得到相当于现有订单开仓时间的条形索引,然后从那里开始向后寻找。 然而,正如FMIC所说,最好是在第一次调用OnTick()时进行这种检查,而不是在OnInit()时。我自己建议这样做的原因与 "耽误初始化 "无关。相反,我担心的是,当MT4重新启动时,EA已经连接到图表上,你还没有100%可靠地从经纪人那里获得订单列表或更新的条形历史。
你可能想记住的另一个考虑因素是以下情况,所有这些都发生在一个条形图所覆盖的时间内。
现在我更清楚为什么我应该在OnInit中这样做了,当然可靠性是最重要的一点,我没有想到你的考虑警告。这部分真的很重要,我可能会开出多余的订单,也许很少,但有可能。我必须以某种方式处理这个问题。真的非常感谢你。
@WHRoeder 你的新条形检查控件是如此简单和漂亮。我把你的方法加入了我的代码中,谢谢你。
大家好。
正如@FMIC所建议的,我写了一个指标,可以找到我的模式,给出一个信号,还有一些数据,将用于我的订单(我可能在不同的价格下开多个订单)。现在我想在我的EA中使用它,但我有一个问题,实际上我需要你的经验。当我从我的指标中得到一个信号时,我将打开一个订单或下一个订单(卖出限价或买入限价等),如果我的MT4由于任何原因崩溃,当我重新打开它时,我如何能找到打开的订单是属于我的指标中的哪个信号。我怎样才能使这个订单和指标转变 相匹配?
谢谢。
是的,你可以使用iBarShift(),就像jjc 在之前的帖子中向你解释的那样,然后通过iCustom() 函数引用你的指标数据。