// If no trade is progress, there is no Position Value to displayif (ObjectFind("PositionValue") > 0)
ObjectDelete("PositionValue");
if (ObjectFind("PipsProfitLoss") > 0)
ObjectDelete("PipsProfitLoss");
if (ObjectFind("CurrentStop") > 0)
ObjectDelete("CurrentStop");
if (ObjectFind("PipsLockedIn") > 0)
ObjectDelete("PipsLockedIn");
if (ObjectFind("ProfitLockedIn") > 0)
ObjectDelete("ProfitLockedIn");
if (GlobalVariableCheck(CurrentPairPercentageRisk))
GlobalVariableDel(CurrentPairPercentageRisk);
这段代码可以捕捉到从关闭的交易中遗留下来的对象,如果它们存在的话。
顺便说一句--不要这样做。
string AcctCurrency = AccountCurrency();
if (AcctCurrency == "")
return(rates_total);
大多数时候,Comment()并不影响图表。
Comment()来检查 coords数据是什么。
当标签向右移动时,它们应该改变,但它们没有。
也就是说,坐标是它们应该有的样子。
标签向右消失了。
坐标是XDISTANCE=225;YDISTANCE=27;CORNER=3。
首先,在图表上加载indi,标签到位。
第二,关闭MT4并重新启动,标签向右移动。
第三,转移Tf后,标签跳回。
这是与角计算相关的锚点有关的问题,一定是B646的一个错误。
这与全局初始化失败有什么关系?
那个B646的问题很严重!
谢谢,我也有同样的问题,对象在deinit时没有被删除。
我在开发一些indi,得到了这些奇怪的结果,然后我看到在对象列表中,它们仍然存在。
我解决了这个问题,可能是用最简单的方法,在start()中使用ObjectDelete()。
是的,把init()改成OnInit(),把deinit()改成OnDeinit(),标签就恢复正常了!谢谢!
然后过了一会儿,就不对了!!。它们仍然在做同样的动作。
不客气,Dadas。不过我不会在启动方法中使用ObjectDelete()。这最好在OnDeInit()中完成。原因是这样的:如果你把代码放在OnStart()或OnCalculate()中,那么每次嘀嗒声响起时都会被执行。这很糟糕,有两个原因。1)它增加了很多操作,占用了你在实时应用程序中不能浪费的时间;2)在大多数情况下这样做是没有意义的--通常只有在图表被取消初始化时才会有意义。只有在价格变化会以某种方式影响你的对象时,你才应该在 "启动 "方法中这样做。作为一个例子,考虑一下这个(这是我打算出售的应用程序的一部分,但分享这个是很酷的 :-) )。
这段代码可以捕捉到从关闭的交易中遗留下来的对象,如果它们存在的话。
顺便说一句--不要这样做。
你误解了这段代码的本意。它的设计是在服务器 "稳定下来 "之前不运行独立的程序。这就是为什么我返回0。这样,在所有需要的信息可用之前,独立代码不会执行。老实说,我还没有使用OnCalculate(),因为我还不需要,但我可以说,你所做的是对灾难的一种邀请。你没有告诉你的程序,"在你有有效的数据之前不要运行这段代码",你只是把东西扔给了风,希望得到最好的结果。说实话,我不知道如果你的代码没有从服务器上获得可靠的信息,它会做什么。经过大量的阅读,他们新的OnCalculate()方法对我来说毫无意义。在我看来,它是在不必要地计算和传递一个负载信息,如果你需要的话,你会自己去做,并且通过不理会你不需要的东西来节省你的计算时间。我不知道他们这样做的目的是什么。
编码愉快!
不客气,Dadas。不过我不会在启动方法中使用ObjectDelete()。这最好在OnDeInit()中完成。原因是这样的:如果你把代码放在OnStart()或OnCalculate()中,那么每次嘀嗒声响起时都会被执行。这很糟糕,有两个原因。1)它增加了很多操作,占用了你在实时应用程序中不能浪费的时间;2)在大多数情况下这样做是没有意义的--通常只有在图表被取消初始化时才会有意义。只有在价格变化会以某种方式影响你的对象时,你才应该在 "启动 "方法中这样做。作为一个例子,考虑一下这个(这是我打算出售的应用程序的一部分,但分享这个是很酷的 :-) )。
这段代码可以捕捉到已关闭的交易中留下的对象,如果它们存在的话。
顺便说一下 - 不要这样做。
你误解了这段代码的本意。它的设计是在服务器 "稳定下来 "之前不运行独立的程序。这就是为什么我返回0。这样,在所有需要的信息可用之前,独立代码不会执行。老实说,我还没有使用OnCalculate(),因为我还不需要,但我可以说,你所做的是对灾难的一种邀请。你没有告诉你的程序,"在你有有效的数据之前不要运行这段代码",你只是把东西扔给了风,希望得到最好的结果。说实话,我不知道如果你的代码没有从服务器上获得可靠的信息,它会做什么。经过大量的阅读,他们新的OnCalculate()方法对我来说毫无意义。在我看来,它是在不必要地计算和传递一个负载信息,如果你需要的话,你会自己去做,并且通过不理会你不需要的东西来节省你的计算时间。我不知道他们这样做的目的是什么。
编码愉快!
再次感谢!
我已经找到了浮动标签的答案。
看起来现在我们必须在代码本身中绑定对象锚点。
https://docs.mql4.com/en/constants/objectconstants/enum_anchorpoint
所以,我必须添加类似以下的东西。
然后用另一行来设置对象。
生活肯定不会变得简单
而这毕竟无济于事!!。
BTW。我告诉你他们想达到什么目的。
他们想阻止尽可能多的人乱用代码。
这必须是尽可能的商业化。
直到最近,几乎任何人都可以用简单的mql4来捣乱。
现在,他们的目标是使一切都商业化!
这个B646是个严重的错误!
他们新的OnCalculate()方法对我来说毫无意义。在我看来,它是在不必要地计算和传递一个负载信息,如果你需要的话,你会自己做,并且通过不理会你不需要的东西来节省你的计算时间。我不知道他们这样做的目的是什么。
编码愉快!
OnCalculate提供了计算指标已经处理了多少条的结果。它取代了旧的IndicatorCounted函数。它还实现了与mql5的兼容,因为系列数组是通过引用传递给它的,而不是老的mql4使用全局系列数组的方式。从编码的角度来看,差别很小。
再次欢迎你,Dadas。我已经忘记了使用ANCHOR属性,尽管我在我的一些作品中使用了它。
SDC,谢谢你的信息。文档并没有真正阐明其目的。我怀疑它的含义可能在从俄语到英语的翻译中丢失了。现在它更有意义了。我假设它不是用来代替OnStart(),而是用来代替IndicatorCounted()。如果能提供一个例子,展示用OnCalculate()替换IndicatorCounted()的 "前 "和 "后 "的情况,这将是对文档的一个很好的补充。我必须回去根据你的解释回顾一下文档,看看这些部分是如何组合起来的。再次感谢。
教授
你用int OnCalculate()来代替int start()。它像start()一样在每个tick 上运行。之前和之后会是这样的。
OnCalculate的正式参数使其更加自成一体,代码员不必依靠调用各种globals,这在OOP圈子里显然是不好的坏代码员,是要被打的。在实践中,使用它们中的任何一个真的没有什么区别。而且OnCalculate和mql5是一样的,所以你可以选择编写兼容的代码。