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

 
-Aleks-:

你是否有一个条目对应于一个酒吧?

是的,它将是3月29日的柱状图上PERIOD_D1 的一个柱状图。

29.03.2017.574391

 

如果日期是这样写的,条形图的设置是正确的

int shift=iBarShift(Symbol(),PERIOD_D1,"29.03.2017");
Range_Buffer[shift]= str_b1;

但如果我这样写,它就不会被设置了

str_dat1= StringSubstr(str,0,10);//

int shift=iBarShift(Symbol(),PERIOD_D1,str_dat1);

Range_Buffer[shift]= str_b1;

日期(str_dat1)被正确打印。

原因何在



 
mila.com:

删除了while循环,我得到的第一行是这样的

请告诉我什么是错的。

我们必须检查我们在str_dat1变量中得到的东西

实际上,iBarShift应该传递一个数据时间类型 的日期,而不是一个字符串。也许它接受一个干净的字符串作为日期,而它不接受一个变量。

最好是将收到的字符串转换为数据时间类型。


ps还有一个完全疯狂的想法,那就是通过编写以下内容来测试它

int shift=iBarShift(Symbol(),PERIOD_D1, (string)str_dat1);

但这纯粹是在指望mql4的可选性。

 
mila.com:

如果日期是这样写的,条形图的设置是正确的

但如果我这样写,它就不会被设置了

日期(str_dat1)被正确打印。

原因 什么




原因是iBarShift()函数 必须传递日期时间变量类型,而你传递的是字符串类型。

datetime  str_dat1=StringToTime(StringSubstr(str,0,10));// это дата
double str_b1=StringToDouble(StringSubstr(str,12,6)); // это значение

int shift=iBarShift(Symbol(),PERIOD_D1,str_dat1);

Range_Buffer[shift]=str_b1;

...

 
Alexey Viktorov:
最好将收到的行转换为数据时间类型。

谢谢你,放了一个条形图。

我有一个问题,如何在文件的所有行上建立一个直方图。

在帮助中 发现,跳到下一行的方法是FileSeek()

但我不知道如何跳到下一行。

 
mila.com:

谢谢你,放了一个条形图。

我有一个问题,如何在文件的所有行上建立一个直方图。

在帮助中 发现,跳到下一行的方法是FileSeek()

但我不知道如何跳到下一行。

到目前为止,只放了一列


帮助 )

如果你在循环之前打开文件,直到最后才关闭它,随着循环的每一次迭代,下一行将被读取。而且你可以在循环结束后关闭文件

FileSeek()不是把指针移到下一行,而是从文件的开头、结尾或当前指针位置开始,移动指定的字节数。

为了正确地移动它,你需要知道一行在写好的文件中占多少个字节。

 
mila.com:

谢谢你,放了一个条形图。

我有一个问题,如何在文件的所有行上建立一个直方图。

在帮助中 发现,跳到下一行的方法是FileSeek()

但我不知道如何跳到下一行。

到目前为止,只放了一列


帮助 )

我给了你一篇文章的链接,其中描述了所有这些的例子。似乎没有读过......
 
Sergey Gritsay:


原因是iBarShift()函数需要传递日期时间变量类型,而你传递的是字符串类型,请尝试这样做

...

谢谢,我会这样做的。

 
Alexey Viktorov:

如果你在循环之前打开了文件并且没有关闭它,那么在循环的每一次迭代中都会读到下一行。而且你可以在循环结束后关闭文件


它是有效的,谢谢你。

 
Artyom Trishkin:
我给了你一篇文章的链接,其中用例子描述了这一切。似乎没有读过......

我读过,但我从未猜到在循环之前打开文件)

可能是没有仔细阅读 )