新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 590

 

你好!

你能告诉我,如果最后一笔交易是在SL上进行的,那么基于三重指数平均数的EA如何禁止开仓

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 

MQL5
我在正常模式下没有问题,但一旦我开始优化,每次运行都会打印出错误,而且没有 输出。

但问题是,它甚至没有执行这些代码。我在程序周围放了Prints,没有输出,只是每次运行退出时都会出现错误。

为什么 "打印 "不起作用?

 
Roman Sharanov:

MQL5
专家顾问在正常模式下工作没有问题,但是一旦我开始优化,它每次都抱怨说它已经进入了数组边界

但问题是,它甚至没有执行这些代码。我在程序周围放了Prints,没有输出,只是每次运行退出时都会出现错误。

为什么 "打印 "不起作用?

你需要检查阵列的大小。你会看到有一行在数组外有一个输出。在这里,你必须在这一行之前插入Print,在这一行写上数组大小和索引的输出,通过这一行你试图访问数组数据--数组大小和索引将被打印在日志中,然后程序将以错误退出。

但是!在可视模式的测试器中做这一切,而不是在优化器中--在优化器中(和非可视模式的测试器),所有打印机的加速功能都被禁用。

 
Artyom Trishkin:

在到达Print()之前退出阵列之外。

检查阵列的大小。你会看到一个输出在数组之外的行。在这一行之前,必须插入Print,在其中写上数组大小和索引的输出,通过它来访问数组数据--数组大小和索引会被打印到日志中,然后程序会崩溃。

但是!在可视模式下的测试器中进行,而不是在优化器中进行--在优化器中(和非可视模式下的测试器)打印机都被关闭,以加快速度。

这就是问题所在,在视觉上任何参数都可以工作,但在任何优化上都会出界。

 
Roman Sharanov:

这就是问题所在,在视觉上的任何参数都可以工作,但在任何优化上都会出界。

阵列里有什么?我只能猜测,要么阵列中还没有数据,要么它比你想象的要小。程序中是否有对数组大小 的检查?

 
Artyom Trishkin:

阵列里有什么?我只能猜测,要么阵列中还没有数据,要么它比你想象的要小。程序中是否有对数组大小的检查?

最后一个N,我有500,macd值,周期限制是严格限制的,永远不能小于0,大于N,我既调试过,也在纸上算过

 
Roman Sharanov:

最后的N,我有500个,macd值,循环限制是严格限制的,永远不能小于0,大于N,我既调试过,也在纸上数过。

你确定当你访问阵列时它是满的吗?是否有检查数据的可用性以及阵列是否有正确的值?

仅仅因为它写在纸上并被计算出来,并不意味着它与EA收到(没有收到)的东西相符。

 
Artyom Trishkin:

你确定当你访问阵列时,它是满的吗?有没有检查数据是否可用,阵列是否有正确的大小?

写在纸上,计算在纸上,并不意味着它与专家顾问收到(没有收到)的东西相符。

是的,在开始的时候,在所有的操作之前,它是从缓冲区中复制的。

 
如果交易中存在佣金和掉期,计算盈亏平衡价格的通用公式是什么?

有一个简单的公式,适用于5位数的报价和美元的存款

手数x利润(点)=利润(美元)。

如果是买入,而且交易中有掉期和佣金,那么盈亏平衡价格将比开盘价高一点。
(如果没有掉期和佣金,盈亏平衡点就是开盘价)

但如果工具是异国的,或报价是4或2位数,或存款货币 是英镑。上面的公式没有帮助。
是否有一个通用的公式?
 
Roman Sharanov:

是的,在开始的时候,在所有的操作之前,从缓冲区复制的

抄袭。那么复制的东西有多少是被检查过的?

如果你使用的是带平滑功能的指标,它需要比你预期的多几个条形。因此,仅仅因为你复制了并不意味着数据已经被复制并以完整的尺寸提供。

对你来说,检查数组的大小 更容易,如果它没有达到要求的大小,就退出OnTick()。

原因: