Введение Генетический алгоритм (ГА) относится к эвристическим алгоритмам (ЭА), который даёт приемлемое решение задачи в большинстве практически значимых случаев, однако при этом правильность решения математически не доказана и применяют чаще всего для задач, аналитическое решение которых весьма затруднительно или вовсе невозможно. Классическим...
我明白,但不幸的是,mql5很难理解。我同意fxsaber的意见,我认为使用4更容易,对于优化和其他东西,我们应该使用5。总的来说,我想知道是否有谁在没有OOP实践的情况下掌握了mql5?当然,在C++4之后是不相关的,尽管我可能是错的。
这两种语言是绝对相同的。既不多也不少。而OOP(每个人都被它吓到了)在两者中是 完全一样的。 你不知道吗?你是否在互联网上读过恐怖的故事,在YouTube上看了那些 "播种美好、智慧和永恒 "的博主?他们巧妙地胡说八道,故意把人们从MQL5中吓跑。
我急于让大家失望--两种语言完全相同。无论是在易于理解方面,还是在OOP的特点和存在方面。
但MQL5有更多的可能性。
我把那个西班牙人送到你那里--好吧,吓吓他。让他成为一个指标 - 我没有时间。它是用英语写的。如果有什么事,我会解释。但是......你会明白的。
我不记得阿特姆的答案了,我也不打算去寻找它。他文章中的所有代码都是多终端或两个版本,为mql5和mql4。我在mql4上检查了这些版本,一切工作正常,通过停止或采取检测关闭,没有错误。
是的,这些文章很难理解,但如果你不比我大,那是值得的。而我,作为一个程序员,已经老得令人发指了。
另一种变体更简单,但速度会慢很多。将订单票据写成一个数组,通过这个数组,选择订单并检查订单关闭的时间。如果它高于零,意味着订单已经关闭。如果一个平仓订单的注释包含字母 "sl",这意味着该订单是用止损来平仓的。如果该订单被关闭,它将从数组中删除。或者,在阵列完成后,它被重新填入剩余的未结订单。想象力一般都在飞。
你选择哪个选项取决于你。并阅读我关于科瓦列夫教科书的一些帖子。是教科书建议写int start(),而较新的mql4要求void OnTick()。
关于指标和脚本,请参考文件。顺便说一下,在更新的mql4中写指标要比Sergey写这个教程时容易得多。
非常感谢你。你的信息对我来说非常有价值。特别是关于start()函数。
我不记得阿特姆的答案,我也不会去找,我可以猜到他可能会回答什么。 ......
以下是我的答案。明确指出需要做什么。
关于交易、自动交易系统和交易策略测试的论坛
新手对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论
Artyom Trishkin, 2020.04.28 08:22
这是一个简单的解释:你需要监控订单 和头寸的数量,并与之前的状态进行比较。如果我们在前一个tick上有12个位置,而在当前tick上有8个位置,我们就有4个位置的变化。相应地,我们应该以最后四个(按收盘时间计算)头寸来了解它们的情况。
但是,从所附的写有 "神迹 "的代码来看,你真的不需要用文字来解释。但它在这里是为了帮助,而不是为/为写。
非常感谢你。你的信息对我来说非常有价值。特别是关于start()函数
而你的代码除了在严格规定的时间内开出两个卖出头寸,并在允许的情况下打印出开出最后一个头寸的时间外,还做了什么?就这样了。使用未初始化的变量,会导致代码的行为出现 "奇迹",还有非常非常老的start()处理程序,这些处理程序是从布满灰尘的架子上拉下来的,上面有多年的蜘蛛网,在市场上(有一天你想卖东西)用古老的处理程序永远不会错过验证器--它会说程序类型错误。
谢谢你的意见。在英镑/美元对上,我在测试时发现了一个价格行为模式。这种带有小幅修正的模式,以及小幅回撤的模式,平衡图自2008年以来不断向上引导,直到目前。正如我所说,平衡图的修正和缩减并不大,但它们可以持续几个月。
我开始测试这种模式的不同变体,并为此诉诸于优化。但事实证明,同时使用几个参数进行优化需要大量的时间。就我而言,这花了大约一年时间。遗传算法 并不适合我。
后来我想到,在正确制定的代码、Pront()函数和Excel表格的帮助下,可以更快地进行测试和优化。
下面的代码只是尝试编写这样的代码。我将进一步改进这个代码。但我遇到了一个我缺乏知识来解决的问题。
请不要对我和我的代码进行评判,非常严重....。我是一个初学者,才刚刚开始了解编码的基本知识,其他的就很少了。但我冷静地接受批评,特别是对建设性的批评不以为然.....。
谢谢你的帮助。
如果两个或更多的订单在同一时刻被止损或止盈平仓,程序只在最后一个订单在此时刻平仓后打印Print()。我需要在每个订单关闭后打印()。我不知道如何实现这一点。但如果我看到必要的代码,我就会立即理解并记住它。
下面是我的问题的一个例子。
好东西是在编辑器中创建我们需要的东西,一个EA,一个脚本,一个指标,编辑器将创建一个具有正确字段的模板。
是的,我注意到这些正确的字段,即新功能而不是START。但我并没有太注意它们,而是像以前一样用START进行测试。
我不知道在哪里可以看到关于MQL4最新更新的更多细节。我非常喜欢科瓦廖夫的书,因为所有的信息都是有逻辑的,容易理解。而且它足够详细,可以了解所有必要的细节。我想知道为什么他没有为MQL5写同样的教科书。
两种绝对相同的语言。既不多也不少。而OOP(每个人都被它吓到了)在两者中是 完全一样的。 你不知道吗?你是否在互联网上读过恐怖的故事,在YouTube上看了那些 "播种美好、智慧和永恒 "的博主?他们巧妙地胡说八道,故意把人们从MQL5中吓跑。
我急于让大家失望--两种语言完全相同。无论是在易于理解方面,还是在OOP的特点和存在方面。
但MQL5有更多的可能性。
是的,我注意到那些正确的字段,即新功能而不是START。但我没有太注意它们,所以我像以前一样用START进行测试。
我不知道在哪里可以看到关于MQL4最新更新的更多细节。我非常喜欢科瓦廖夫的书,因为所有的信息都是有逻辑的,容易理解。而且它足够详细,可以了解所有必要的细节。我想知道为什么他没有为MQL5写同样的教科书。
谢谢你的参与。
...
下面的代码只是尝试编写这样的代码。我将在未来完善这个代码。但我遇到了一个我缺乏知识来解决的问题。
请不要对我和我的代码进行评判,非常严重....。我是一个初学者,才刚刚开始了解编码的基本知识,其他的就很少了。但我冷静地接受批评,特别是对建设性的批评不以为然.....。
谢谢你的帮助。
如果两个或更多的订单在同一时刻被止损或止盈平仓,程序只在最后一个订单在此时刻平仓后打印Print()。我需要在每个订单关闭后打印()。我不知道如何实现这一点。但如果我看到必要的代码,我就会立即理解并记住它。
下面是我的问题的一个例子。
我已经回复了你。
用语言来解释:你需要监控订单 和头寸的数量,并将其与之前的状态进行比较。如果我们在前一个tick上有12个头寸,在当前tick上有8个头寸,我们就有4个头寸的变化。相应地,我们应该把最后四个(按收盘时间)的头寸拿出来,看看它们发生了什么。
你采取清单上的最后一个订单。
而你首先需要找出订单列表的状态有多大变化。你以前有12个,现在有8个--这是一个4个订单的变化。相应地,你需要打印所有四个订单。而且你总是只打印列表中的最新订单。
我怎么知道变化有多大?当我们运行EA时,我们需要将订单的数量写进一个变量,例如int last_total。然后,在每个刻度上,将OrdersTotal()与last_total进行比较。如果它们不平等,那就是一种变化。将OrdersTotal()和last_total之间的差异写入一个变量,例如num_changes,并将OrdersTotal()的新状态保存到last_total。
这里可能有一些微妙之处,例如,当一个挂单被触发时。但是现在,你应该先做你需要做的事情。
知道了挂单的数量,你就可以在历史上查找它们。但是,您也可以限制对历史订单列表的监控--对历史订单列表做上述所有工作,而不是对市场订单列表。过去和现在的区别--这是你需要分析的订单量。你总是只分析列表中的最后一个订单。
然而,这不能保证历史列表中的最后一个订单是最后一个关闭的订单。这也是一个必须考虑的细微差别。但随后。