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

 
Alexey Viktorov #:

我不是在争论。"灰色的是在这个帖子的图片中显示的。


如果没有原始材料,这些是


嗯,我说的是 "这些"。当我出现溢出,指标不显示时,我没有看你提到的帖子中的截图所显示的菜单中的内容。在这里我不能说什么,我不能确定。

但是,如果指标不在导航器中,但它们在文件夹中,这意味着新的指标不会显示在导航器中,直到一些旧的指标被从文件夹中删除。

在那里,我们做了这些。我不是唯一的人。

 

我想规避手动调整动态数组大小的必要性,只需将其指定为一个指标缓冲区。但我无法摆脱ArrayResize(),就好像它是一个动态的指示器缓冲阵列,其大小应该由终端本身监控,而且不应该手动调整。

https://www.mql5.com/ru/docs/series/bufferdirection。

Индикаторный буфер представляет из себя динамический массив типа double, размером которого управляет клиентский терминал с тем, чтобы он всегда соответствовал количеству баров, на которых индикатор рассчитывается. Обычный динамический массив типа double назначается в качестве индикаторного буфера с помощью функции SetIndexBuffer(). Для индикаторных буферов не требуется задавать размер с помощью функции ArrayResize(), исполняющая система терминала сама позаботится об этом.

我们去https://www.mql5.com/ru/docs/array/arrayisdynamic, 运行代码,突然发现。

2022.01.24 21:25:27.543 t (NZDUSD,D1) 3.检查指示器缓冲区。

2022.01.24 21:25:27.543 t (NZDUSD,D1) 内存释放前大小=7278

2022.01.24 21:25:27.543 t (NZDUSD,D1)这是动态阵列 = 无

2022.01.24 21:25:27.543 t (NZDUSD,D1) 内存释放后大小=0

在同一时间。

double ExtBuff[];      // индикаторный буфер
SetIndexBuffer(0,ExtBuff);

我看了看书--我看到一个无花果。还是我们一直都被欺骗了?

或者,也许它只动态一次(在第一次初始化时),然后就这样了?

 
x572intraday #:

我无法摆脱ArrayResize(),它应该是一个动态的指标缓冲数组,其大小应该由终端本身监控,而且应该不需要手动调整大小。

https://www.mql5.com/ru/docs/series/bufferdirection。

我们去https://www.mql5.com/ru/docs/array/arrayisdynamic, 运行代码,突然发现。

同时,它。

我看了看书--我看到一个无花果。还是我们一直都被欺骗了?

或者,也许它只动态一次(在第一次初始化时),然后就这样了?

22:23:17.002 Dynamic EURCAD,H1: +============================+

0 22:23:17.002 动态EURCAD,H1: 1.检查一个动态数组。

0 22:23:17.002 Dynamic EURCAD,H1: Size before memory release = 100

0 22:23:17.002 Dynamic EURCAD,H1: This is Dynamic Array = Yes

0 22:23:17.002 Dynamic EURCAD,H1: 内存释放后的大小=0

0 22:23:17.002 动态EURCAD,H1: 2.静态阵列检查。

0 22:23:17.002 Dynamic EURCAD,H1: Size before memory free = 100

0 22:23:17.002 Dynamic EURCAD,H1: This is dynamic array = None

0 22:23:17.002 Dynamic EURCAD,H1: 内存释放后的大小=0

0 22:23:17.002 动态EURCAD,H1: 3.检查指示器缓冲区。

0 22:23:17.002 Dynamic EURCAD,H1: 释放内存前的大小=2725

0 22:23:17.002 Dynamic EURCAD,H1:This is dynamic array = Yes

0 22:23:17.002 Dynamic EURCAD,H1: Size after memory release = 0

0 22:23:24.754 Dynamic EURCAD,H1: uninit reason 1

0 22:23:24.758 自定义指标Dynamic EURCAD,H1:移除

这是在4。

 
x572intraday #:

我想规避手动调整动态数组大小的必要性,只需将其指定为一个指标缓冲区。但我无法摆脱ArrayResize(),就好像它是一个动态的指示器缓冲阵列,其大小应该由终端本身监控,而且不应该手动调整。

https://www.mql5.com/ru/docs/series/bufferdirection。

我们去https://www.mql5.com/ru/docs/array/arrayisdynamic, 运行代码,突然发现。

同时,它。

我看了看书--我看到一个无花果。还是我们一直都被愚弄了?

或者,也许它是一次性的动态(在第一次初始化时),然后就这样了?

是的,那么就是这样了 :-)

...在SetIndexBuffer之后,不可能使用ArrayResize,从程序的角度来看,数组是静态的,有一个预定义的(外部控制的)大小。

 
Alekseu Fedotov #:

22:23:17.002 Dynamic EURCAD,H1: +============================+

0 22:23:17.002 动态EURCAD,H1: 1.检查一个动态数组。

0 22:23:17.002 Dynamic EURCAD,H1: Size before memory release = 100

0 22:23:17.002 Dynamic EURCAD,H1: This is Dynamic Array = Yes

0 22:23:17.002 Dynamic EURCAD,H1: 内存释放后的大小=0

0 22:23:17.002 动态EURCAD,H1: 2.静态阵列检查。

0 22:23:17.002 Dynamic EURCAD,H1: Size before memory free = 100

0 22:23:17.002 Dynamic EURCAD,H1: This is dynamic array = None

0 22:23:17.002 Dynamic EURCAD,H1: 内存释放后的大小=0

0 22:23:17.002 动态EURCAD,H1: 3.检查指示器缓冲区。

0 22:23:17.002 Dynamic EURCAD,H1: 释放内存前的大小=2725

0 22:23:17.002 Dynamic EURCAD,H1:This is dynamic array = Yes

0 22:23:17.002 Dynamic EURCAD,H1: Size after memory release = 0

0 22:23:24.754 Dynamic EURCAD,H1: uninit reason 1

0 22:23:24.758 自定义指标Dynamic EURCAD,H1:移除

这是在4。

太棒了!这到底是什么魔法?我刚刚检查了EURCAD,H1 - 同样没有。

那么4是什么呢?这个例子中只有三个点。

 
x572intraday #:

太棒了!这到底是什么魔法?刚刚检查了EURCAD,H1--又是 "不"。

而4是什么?这个例子中只有三个点。

MT4终端

 
x572intraday #:

太棒了!这到底是什么魔法?刚刚检查了EURCAD,H1--又是 "不"。

而4是什么?这个例子中只有三个点。

0 23:33:06.088 测试(EURUSD,D1) +============================+

0 23:33:06.088 test (EURUSD,D1) 1.检查动态阵列。

0 23:33:06.088 test (EURUSD,D1) 内存释放前大小=100

0 23:33:06.088 test (EURUSD,D1) This is a dynamic array = Yes

0 23:33:06.088 test (EURUSD,D1) 内存释放后大小=0

0 23:33:06.088 测试(EURUSD,D1) 2.静态阵列测试。

0 23:33:06.088 test (EURUSD,D1) 释放内存前的大小=100

0 23:33:06.088 test (EURUSD,D1) 这是一个动态数组 = None

0 23:33:06.088 test (EURUSD,D1) 内存释放后大小=100

0 23:33:06.088 test (EURUSD,D1) 3. 检查指标缓冲区。

0 23:33:06.088 test (EURUSD,D1) 释放内存前的大小 = 1054

0 23:33:06.088 test (EURUSD,D1) This is dynamic array = None

0 23:33:06.088 test (EURUSD,D1) 内存释放后大小=0


终端MT5,没有想法。

 
x572intraday #:

我想规避手动调整动态数组大小的必要性,只需将其指定为一个指标缓冲区。但我无法摆脱ArrayResize(),就好像它是一个动态的指示器缓冲阵列,其大小应该由终端本身监控,而且不应该手动调整。

https://www.mql5.com/ru/docs/series/bufferdirection。

我们去https://www.mql5.com/ru/docs/array/arrayisdynamic, 运行代码,突然发现。

同时,它。

我看了看书--我看到一个无花果。还是我们一直都被欺骗了?

或者,也许它只动态一次(在第一次初始化时),然后就这样了?

缓冲区阵列是动态的。在MQL中,动态数组有对象的迹象,就我在使用它们时的理解而言(如在超高级语言中)。但是如果你把一个动态数组声明为一个缓冲区(使用SetIndexBuffer),这个区域的内存将成为保留区。这就是为什么大多数标准函数不能改变其大小。我有时使用对象数组作为指标缓冲区。如果我这样做,这种数组的内存会在对象的析构器中被释放。因此,应用程序(或对象) 本身释放指标缓冲区内存是允许的。但这并不意味着数组可以在指标的操作过程中被释放。一切都应该明智地进行。

 

下午

我想写一个专家顾问,当我测试它时,发生了一件奇怪的事情,你能告诉我吗?

我有一个函数

CalcAngleTrend(NormalizeDouble((a[0]-a[1]), MA_DIGITS));

double CalcAngleTrend(double d)
 {
  double a = (double) ((atan(d*pow(10,_Digits-2)))*(180/M_PI)*coefAngle);
Print("d: ", d);
  return(NormalizeDouble(a, ANGLE_DIGITS));
 }

什么情况,我在图表上启动一个EA实例运行,并在同一图表上以调试模式运行第二个EA,MT4
函数的输入数据是相同的,但输出数据是不同的!!? 我只是不明白一些事情,似乎...(

Это выдает запущеный вариант:

2022.01.25 15:01:12.880 USDJPY,M5: d: 0.0014887
2022.01.25 15:01:12.880 USDJPY,M5: d: -0.0060861
2022.01.25 15:01:12.880 USDJPY,M5: Angle Slow: +1.70580000
2022.01.25 15:01:12.880 USDJPY,M5: Angle Fast: -6.96560000

это в режиме отладки:

2022.01.25 15:01:14.330 USDJPY,M5: d: 0.0014887
2022.01.25 15:01:14.330 USDJPY,M5: d: -0.0060861
2022.01.25 15:01:14.330 USDJPY,M5: Angle Slow: +4.26450000
2022.01.25 15:01:14.330 USDJPY,M5: Angle Fast: -17.41390000

建议我从哪方面去挖掘信息!!。

PS:计算出的差额正好是输出的2.5倍
 
Владимир Казаков 写一个专家顾问,当我测试它时,发生了一件奇怪的事情,你能告诉我吗?

我有一个函数

什么情况,我在图表上启动一个EA实例运行,并在同一图表上以调试模式运行第二个EA,MT4
函数的输入数据是相同的,但输出数据是不同的!!? 我只是不明白一些东西,似乎...(

你能告诉我从哪方面去挖掘信息吗?

PS:计算出的差额正好是输出的2.5倍

这都是关于计算角度的公式。在代码中可以看到,对于它的计算只使用了一个坐标和一些系数,其目的不清楚。这是什么?请详细说明你是用什么数据来计算这个角度的。