来自一个 "傻瓜 "的问题 - 页 68

 

x100intraday:

我主要想知道的是:是否可以像价格缓冲区一样直接填充时间缓冲区(不需要借助CopyTime和 其他常规的复制到数组的功能),以及如何填充,如果不能,为什么?

2.是否真的有必要创建另一对缓冲区来存储自1970年开始的秒数,但其类型不是数据时间,而是一些双数长数,例如,在必要的时候通过TimeToString 转换字面字符串 时间格式

1.不可能。"为什么?"- 对开发商而言。

在你的情况下,这是最简单的解决方案 (保证有效。) 既然你提出了关于填充类似于价格的缓冲区的问题。

如果我是我,我会在算法层面上尽量避免这种内存的浪费,在任何情况下,我都不会用有用的数据创建缓冲区,将其填充到3%。

 
MetaDriver:

如果我是我,我会尽量在算法层面上避免这种内存的浪费,而不是用3%的可用数据创建缓冲区。

好了,问题-解释来了:https://www.mql5.com/ru/forum/1111/page529#comment_101059,至少有一个可理解的、并非不可理解的答案,虽然恰恰相反。兴趣很高...
 
x100intraday:

是的,巴达))。

"日期和时间常数..."和"......可表示为一个字面字符串"。

可能表示,也可能不表示......它是用于输入/输出数据的通常日期/时间形式。

此外,我们不能将这种类型的数组与指标缓冲区 联系起来(也没有必要?),我们不能对这种数据类型的数组应用SetIndexBuffer,原因众所周知。

没有任何东西可以阻止数据时间 类型出现在指标缓冲区中(它是可取的)。

而我们没有。

而且是徒劳的)

编译产生的代码。对于带有=EMPTY_VALUE的字符串,我们得到了"常量值的截断"的警告(我们很惊讶),而对于同样的字符串,终端的专家报告中出现了一个错误:"数组超出范围 "(我们终于生气了)。似乎 EMPTY_VALUE 不想装入 datetime 类型 ,而数组的大小仍然为零EMPTY_VALUE改为0,错误消失了,但数组 的大小仍然 为零。

EMPTY_VALUE是双倍的类型。

如果有一个指示器缓冲区就更容易了--我们不需要确定阵列的大小。

另一个奇怪的现象是,ExtUpperBuffer ExtLowerBuffer的大小 是非零的,这意味着它们被填满了,但没有分形出现。为什么会这样呢?

eh,我不知道)。

我感兴趣的主要是:是否可以直接填写类似于价格缓冲区的时间缓冲区(不需要借助于CopyTime和 其他常规函数复制到数组中),如何填写,如果不能,为什么?真的,为了这个目的,我必须创建另一对缓冲区来存储从1970年开始的秒数,但类型不是数据时间,而是一些双数长数,例如,在必要的时候,通过TimeToString 时间格式 转换为字面字符串

datetime 等数据的访问与对价格数据的访问类似。

datetime在本质上与int/long相同。

P.S.:谁懒得复制Fractals.mq5 的代码,就告诉我,你是如何存储计算出的具体时间数据的(不调用内置指标的句柄并与之合作)?

这和整数数据是一样的,int/datetime/long是一样的。

 
Swan:

是的,巴达达))。

没有什么能阻止日期 类型出现在指标缓冲区中(这是很理想的)。

而且是徒劳的)

用指示器缓冲区就更容易了--你不需要确定数组的大小。

那我到底做错了什么?一切都有详细的描述,源代码是标准的、经过时间考验的、最简单的!"。修改是简单而明显的...我在猜测中迷失了自己浑浊的头脑......。当我被什么东西卡住时,我还不如叫一个拿着新月形扳手的汽车修理工......。

那么将日期时间 数组与指标缓冲区 绑定的符文咒语是什么呢?再一次。


设置IndexBuffer

将指定的指标缓冲区绑定到全局声明的一维动态数组,类型为双数。

 
x100intraday:

那我到底做错了什么?毕竟,我已经详细地描述了一切,源代码一般都是标准的、经过时间检验的、最简单的!"。修改是简单而明显的...我迷失在我混浊的头脑的猜测中......当我被什么东西卡住时,我还不如叫一个拿着新月形扳手的汽车修理工......。

那么将日期时间 数组与指标缓冲区绑定的符文咒语是什么呢?再一次。


设置IndexBuffer

将指定的指标缓冲区绑定到一个全局声明的一维动态数组,类型为double。

你不需要这个日期时间。将所有内容写入一个双数组,并在使用前将其转换为日期时间(如果需要)。

基本上,datetime和double之间的唯一区别是在表现形式上。你可以无损地将写成双数的时间转换为数据时间。

两者都是8字节的类型。

 
x100intraday:

那我到底做错了什么?毕竟,我已经详细地描述了一切,源代码一般都是标准的、经过时间检验的、最简单的!"。修改是简单而明显的...我迷失在我混浊的头脑的猜测中......当我被什么东西卡住时,我想要一个拿着新月形扳手的汽车修理工......。

我只能猜测改变后的代码细节...

以及如何使用runic咒语将数据时间 类型的数组绑定 到指标缓冲区?再一次。


设置IndexBuffer

将指定的指标缓冲区绑定到一个全局声明的一维动态数组,类型为double。

Urain 已经回答了。 好吧,为了让编译器不骂人,这样的事情。

double ExtUpperTimeBuffer[];//обьявляем
...
ExtUpperTimeBuffer[xz0]=(double)time[xz1];//присваиваем
...
datetime XZ=(datetime)ExtUpperTimeBuffer[xz2];//юзаем
 

所以...是啊...

没有什么突破性的进展,但可以说是扎下了根。

感谢大家的药用踢球。我可以试一试...

 
x100intraday:

谢谢大家的药踢。

并踢到了好运气 : D
 

有没有库函数array.Add()的内部类似物?

P.S.:如果没有,就给一年的安眠药供应。

 
x100intraday:

有没有库函数array.Add()的内部类似物?

P.S.:如果没有,就给一年的安眠药供应。

为什么不在指标...... 或缓冲区...... 中存储日期?

加入了很多点,否则会出现某种联系。

double time[10];

time[0] = (double) D'3000.12.31 23:59';
time[1] = (double) D'2030.12.31 23:59';

Print(TimeToString((datetime)time[0]));
Print(TimeToString((datetime)time[1]));

一切转换正常,没有错误

Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Основы языка / Типы данных / Вещественные типы (double, float) - Документация по MQL5