新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1740 1...173317341735173617371738173917401741174217431744174517461747...1953 新评论 Artyom Trishkin 2021.11.11 14:54 #17391 Maxim Kuznetsov #:不要告诉人们该怎么做。你必须记住你的数据并与之一起工作 马克西姆,在这种情况下,你不需要记住什么。只看之前的平仓位置要安全得多。 你不需要做任何关于记忆数据和在异常情况下恢复数据的事情。如果终端被关闭,位置数据就会丢失。因此,在记忆它们的时候,你应该立即考虑它们快速有效恢复的可能性。 (在评论中记住一个订单不会被说成是一个可靠的解决方案--它意味着依赖经纪人/交易商的意愿)。 有趣的是,无论如何,它都会从某个地方读取这些数据。因此,直接从源头上阅读不是更容易吗? Aleksei Stepanenko 2021.11.11 15:54 #17392 Sergey Zhukov #:我如何强制编译器为MT4而不是MT5编译? #ifdef __MQL4__ #else #endif Maxim Kuznetsov 2021.11.11 17:42 #17393 Artyom Trishkin #:马克西姆,在这种情况下,你不需要在任何地方背诵任何东西。只看过去的平仓情况要安全得多。你不需要做任何记忆数据的事情,然后在紧急情况下恢复它。如果终端被关闭,位置数据就会丢失。因此,在记忆它们的时候,你应该立即考虑它们快速有效恢复的可能性。(在评论中记住一个订单不会被说成是一个可靠的解决方案--这将意味着依赖经纪人/交易商的意愿)。有趣的是,无论如何,它都会从某个地方读取这些数据。因此,直接从源头上阅读不是更容易吗? 然后是 "为什么OnTimer不适合几秒钟或OnTick疯狂地错过":-) 在初始化时恢复一次状态(通过从文件或浏览历史/环境中读取),仅此而已......最后一个订单连同其特征被存储在一个变量中,并且总是已知的。 Artyom Trishkin 2021.11.11 19:46 #17394 Maxim Kuznetsov #:然后,"为什么OnTimer在几秒钟内不适合,或者OnTick疯狂地错过 "的主题随之而来 :-)初始化时,恢复一次状态(通过从文件中读取或通过历史/环境查看),仅此而已......最后的订单连同其特征被存储在一个变量中,并且总是已知的。 为了知道最后一个位置是如何关闭的,你需要找到它。毕竟,当它是开放的,没有办法记录和记住它是如何关闭的,因为它仍然是开放的。 可以存储最后一次开仓的票据,并利用它来确定如何平仓,但 ...当对一个头寸进行操作时,当它处于开放状态时,其票据会发生变化。因此,我们必须实现一个功能来重写改变的票据。所有这些都使代码复杂化。 我只建议寻找最后的平仓。而且它在重启EA时结合搜索所有头寸,在关闭新头寸时只读取一个头寸的数据。 毕竟,我希望每个人都明白,我们不需要在所有的历史位置上循环,而只需要在最后一个位置上循环。也就是说,我们只记住一个循环索引的变量--它的当前值,我们从这个变量的值开始新的循环(当历史订单的数量增加时),而不是从零开始。这个变量的值在专家顾问开始和重新启动时,以及在关闭一个新头寸时被写入OnInit()。即,这样我们就避免了写入和读取位置数据的必要性,并与驱动器一起工作。 我认为这种方法是最有利可图的,因为 1.你只需要记住循环索引的值 2。只在必要的时刻,使用其索引直接访问一个封闭的订单来获取数据。 3.你不需要创建一个读/写函数 4.它在工作和写作上都比较快。 而且,是的,我同意你需要了解你的所有数据--我自己就这样做。但了解他们对项目和自己都有好处,是可取的。 Ivan Butko 2021.11.12 00:23 #17395 Ivan Butko #:谢谢你提供的信息!如果你有时间,请回答如何解决: 在N个蜡烛前的历史上,设置了两个不同方向的目标:Close[N]+50*Point 和 Close[N]-50*Point。 然后有一个条件,即价格应该达到其中一个目标(如果(High[i]>Close[N]+50*Point)或(如果(Low[i]<Close[N]-50*Point) 当条件得到满足时,从Close[N] 到High[i]的距离被写进x[high]=High[i]数组。 然后在任何时候都会随机抛给任何一个图形。 而当通过Print(x[high]) 检查时,10个值中有1-2个显示小于50!一个有12个,另一个有49个。虽然,严格说来是+50*点。8-9个是正确的(超过50),1-2个是不正常的。这不是通过测试器,而是用真实的图表,我放置了一个专家顾问(没有任何交易功能),但用上述的它与历史记录一起工作,显示不正确的结果。,数值越大,这种错误就越少。我想这可能是传播的干扰,但是......。我认为在MT4中不存在历史价差 解决了。 Ivan Butko 2021.11.12 06:28 #17396 我是否必须在OnTimer()中添加RefreshRates(),还是默认情况下计时器会自行更新? Aliaksandr Hryshyn 2021.11.12 06:34 #17397 Ivan Butko #:我是否必须在OnTimer()中添加RefreshRates(),还是默认情况下计时器会自行更新? 它并不 Ivan Butko 2021.11.12 06:37 #17398 Aliaksandr Hryshyn #: 不更新 谢谢你 JRandomTrader 2021.11.12 11:43 #17399 Artyom Trishkin #:要想知道最后一个位置是如何关闭的,你必须找到它。只要它是开放的,就没有办法记录和记住它是如何关闭的--它仍然是开放的。可以存储最后一次开仓的票据,并使用它来确定如何关闭,但 ...当对一个头寸进行操作时,当它处于开放状态时,其票据会发生变化。因此,我们必须实现一个功能来重写改变的票据。所有这些都使代码复杂化。我只建议寻找最后的平仓。而且它在重启EA时结合搜索所有头寸,在关闭新头寸时只读取一个头寸的数据。毕竟,我希望每个人都明白,我们不需要在所有的历史位置上循环,而只需要在最后一个位置上循环。也就是说,我们只记住一个循环索引的变量--它的当前值,我们从这个变量的值开始新的循环(当历史订单的数量增加时),而不是从零开始。这个变量的值在专家顾问开始和重新启动时,以及在关闭一个新头寸时被写入OnInit()。即,这样我们就避免了写入和读取位置数据的必要性,并与驱动器一起工作。 我认为这种方法是最有利可图的,因为1.你只需要记住循环索引的值 2。只在必要的时刻,使用其索引直接访问一个封闭的订单来获取数据。 3.你不需要创建一个读/写函数 4.它在工作和写作上都比较快。而且,是的,我同意你需要了解你的所有数据--我自己就这样做。但了解它们最好是对项目和自己有利。我没有注意到仓位的票据会改变,而它是开放的。它通常等于第一笔订单的票据,它打开了这个位置。 最后一个关闭--如果在该符号上有不止一个EA交易,再加上手动交易怎么办? Artyom Trishkin 2021.11.12 12:01 #17400 JRandomTrader #:我没有注意到一个仓位的票据在开仓时发生了变化。它通常与建立头寸的第一笔订单的票据相同。 最后一次关闭--但如果在该符号上有不止一个EA交易,再加上手动交易怎么办? 补仓或部分平仓,票面就不一样了。我们必须确定哪张票源于哪张票,并重写记得的那张票。然而,不清楚我们说的是哪个平台--两者略有不同,但你仍然需要保持跟踪。 属于该EA的 "最后一个关闭的 "就是这个意思。 1...173317341735173617371738173917401741174217431744174517461747...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
不要告诉人们该怎么做。
你必须记住你的数据并与之一起工作
马克西姆,在这种情况下,你不需要记住什么。只看之前的平仓位置要安全得多。
你不需要做任何关于记忆数据和在异常情况下恢复数据的事情。如果终端被关闭,位置数据就会丢失。因此,在记忆它们的时候,你应该立即考虑它们快速有效恢复的可能性。
(在评论中记住一个订单不会被说成是一个可靠的解决方案--它意味着依赖经纪人/交易商的意愿)。
有趣的是,无论如何,它都会从某个地方读取这些数据。因此,直接从源头上阅读不是更容易吗?
我如何强制编译器为MT4而不是MT5编译?
马克西姆,在这种情况下,你不需要在任何地方背诵任何东西。只看过去的平仓情况要安全得多。
你不需要做任何记忆数据的事情,然后在紧急情况下恢复它。如果终端被关闭,位置数据就会丢失。因此,在记忆它们的时候,你应该立即考虑它们快速有效恢复的可能性。
(在评论中记住一个订单不会被说成是一个可靠的解决方案--这将意味着依赖经纪人/交易商的意愿)。
有趣的是,无论如何,它都会从某个地方读取这些数据。因此,直接从源头上阅读不是更容易吗?
然后是 "为什么OnTimer不适合几秒钟或OnTick疯狂地错过":-)
在初始化时恢复一次状态(通过从文件或浏览历史/环境中读取),仅此而已......最后一个订单连同其特征被存储在一个变量中,并且总是已知的。
然后,"为什么OnTimer在几秒钟内不适合,或者OnTick疯狂地错过 "的主题随之而来 :-)
初始化时,恢复一次状态(通过从文件中读取或通过历史/环境查看),仅此而已......最后的订单连同其特征被存储在一个变量中,并且总是已知的。
为了知道最后一个位置是如何关闭的,你需要找到它。毕竟,当它是开放的,没有办法记录和记住它是如何关闭的,因为它仍然是开放的。
可以存储最后一次开仓的票据,并利用它来确定如何平仓,但 ...当对一个头寸进行操作时,当它处于开放状态时,其票据会发生变化。因此,我们必须实现一个功能来重写改变的票据。所有这些都使代码复杂化。
我只建议寻找最后的平仓。而且它在重启EA时结合搜索所有头寸,在关闭新头寸时只读取一个头寸的数据。
毕竟,我希望每个人都明白,我们不需要在所有的历史位置上循环,而只需要在最后一个位置上循环。也就是说,我们只记住一个循环索引的变量--它的当前值,我们从这个变量的值开始新的循环(当历史订单的数量增加时),而不是从零开始。这个变量的值在专家顾问开始和重新启动时,以及在关闭一个新头寸时被写入OnInit()。即,这样我们就避免了写入和读取位置数据的必要性,并与驱动器一起工作。
我认为这种方法是最有利可图的,因为
1.你只需要记住循环索引的值
2。只在必要的时刻,使用其索引直接访问一个封闭的订单来获取数据。
3.你不需要创建一个读/写函数
4.它在工作和写作上都比较快。
而且,是的,我同意你需要了解你的所有数据--我自己就这样做。但了解他们对项目和自己都有好处,是可取的。
谢谢你提供的信息!
如果你有时间,请回答如何解决:
在N个蜡烛前的历史上,设置了两个不同方向的目标:Close[N]+50*Point 和 Close[N]-50*Point。
然后有一个条件,即价格应该达到其中一个目标(如果(High[i]>Close[N]+50*Point)或(如果(Low[i]<Close[N]-50*Point)
当条件得到满足时,从Close[N] 到High[i]的距离被写进x[high]=High[i]数组。
然后在任何时候都会随机抛给任何一个图形。
而当通过Print(x[high]) 检查时,10个值中有1-2个显示小于50!一个有12个,另一个有49个。虽然,严格说来是+50*点。8-9个是正确的(超过50),1-2个是不正常的。这不是通过测试器,而是用真实的图表,我放置了一个专家顾问(没有任何交易功能),但用上述的它与历史记录一起工作,显示不正确的结果。
,数值越大,这种错误就越少。我想这可能是传播的干扰,但是......。我认为在MT4中不存在历史价差
解决了。
不更新
谢谢你
要想知道最后一个位置是如何关闭的,你必须找到它。只要它是开放的,就没有办法记录和记住它是如何关闭的--它仍然是开放的。
可以存储最后一次开仓的票据,并使用它来确定如何关闭,但 ...当对一个头寸进行操作时,当它处于开放状态时,其票据会发生变化。因此,我们必须实现一个功能来重写改变的票据。所有这些都使代码复杂化。
我只建议寻找最后的平仓。而且它在重启EA时结合搜索所有头寸,在关闭新头寸时只读取一个头寸的数据。
毕竟,我希望每个人都明白,我们不需要在所有的历史位置上循环,而只需要在最后一个位置上循环。也就是说,我们只记住一个循环索引的变量--它的当前值,我们从这个变量的值开始新的循环(当历史订单的数量增加时),而不是从零开始。这个变量的值在专家顾问开始和重新启动时,以及在关闭一个新头寸时被写入OnInit()。即,这样我们就避免了写入和读取位置数据的必要性,并与驱动器一起工作。
我认为这种方法是最有利可图的,因为
1.你只需要记住循环索引的值
2。只在必要的时刻,使用其索引直接访问一个封闭的订单来获取数据。
3.你不需要创建一个读/写函数
4.它在工作和写作上都比较快。
而且,是的,我同意你需要了解你的所有数据--我自己就这样做。但了解它们最好是对项目和自己有利。
我没有注意到仓位的票据会改变,而它是开放的。它通常等于第一笔订单的票据,它打开了这个位置。
最后一个关闭--如果在该符号上有不止一个EA交易,再加上手动交易怎么办?我没有注意到一个仓位的票据在开仓时发生了变化。它通常与建立头寸的第一笔订单的票据相同。
最后一次关闭--但如果在该符号上有不止一个EA交易,再加上手动交易怎么办?补仓或部分平仓,票面就不一样了。我们必须确定哪张票源于哪张票,并重写记得的那张票。然而,不清楚我们说的是哪个平台--两者略有不同,但你仍然需要保持跟踪。
属于该EA的 "最后一个关闭的 "就是这个意思。