MetaTrader 4 Build 529测试版发布,带有新的编译器 - 页 27

 
Barbarian:

你可能没有看我上面的帖子,我在上面描述了现在使用MT4测试版的写法。在nix`中,所有的工作都完全在自己的沙盒中进行,只有root用户把普通的程序和分配的权限给其他用户使用。那里的意识形态完全不同,尽管它似乎与微软相似。顺便说一句,我不介意测试版在X:\Users\xxx\AppData\Roaming\MetaQuotes\Terminal\中写入用户设置,我介意以下几点。

1.它创建了一个子目录X:\Users\xxx\AppData\Roaming\MetaQuotes\Terminal\B5589D10299052C8D921603EBD1F9752\,直到你到达那里你才知道它的名字,此外它每次更新都会改变它的名字。

2.这个路径不仅用于编写用户设置,也用于可执行文件--指标、专家顾问、脚本等,总之,所有你不会让一个陌生人进入你的电脑,即使是用不同的用户名。虽然这当然可以在以后避免,但代价是什么呢?

我最害怕的是第一项,因为使用读/写文件,使用这些操作的代码将变得更加复杂。


我读了,我完全同意你的观点。我所写的--在终端配置路径也不失为一个好主意。有时,分享设置、文件、EA是很有用的。有时不是。
 
Antonsan:

我用西班牙语写作。我还用谷歌进行翻译。

英语的翻译和俄语的翻译一样糟糕。

这个指标是为EA准备的,只画了几个柱子。
改变时间框架,我观察到,有时指标经常在屏幕上重复出现。
有时,它似乎运行了几次,并正确地画了线,其他时候,它们似乎是在历史上排列的相同的副本。

这在历史上有三个相同的副本,但为了减少截图,只看到两个。

它发生在终端下载其他TF的历史记录时。

你应该在指标初始化后清除整个缓冲区。或者画出所有的条形图。

 
ALXIMIKS:


我已经描述了我的想法(通过将现在插入过去,同时发明未来来改变图表),如果不是很清楚,那么,唉........

如果你能建议另一种方法,在负数条上画出需要的东西,在正数条上画出足够的数值,我将会很高兴。

在哪里放什么并不重要。重要的是应该得出什么结果。

如果你需要一个过去和未来的切片,你需要一个缓冲区和SetIndexShift为未来的必要条数(它是从过去借来的)。

如果只需要未来--同样是一个缓冲区,SetIndexShift( bars ),并且只填充 "bar "值。

如果你完全需要过去(关键,甚至最左边的条形图都应该被填满)和一部分未来,那么就需要2个缓冲区,每个缓冲区都是自己的。

一般来说,我看不出有什么问题。

 

现在,以字符串形式声明的外部参数丢失值的问题得到了修复。谢谢

下一个问题是关于iCustom()的调用。如果被调用的指标包含字符串参数,会发生以下错误。


"_master "的代码。

#property indicator_chart_window
#property indicator_buffers 1

extern string TestString = "whatever value that we want initially set";

double firstBuffer[];

int OnInit() { SetIndexBuffer(0,firstBuffer); return(0); }
int deinit() {                                return(0); }
int start ()
{
   firstBuffer[0] = iCustom(NULL,0,"_slave","",0,0);
   Comment(firstBuffer[0]);
   return(0);
}

"_slave "的代码。

#property indicator_chart_window
#property indicator_buffers 1

extern string TestString = "whatever value that we want initially set";

double firstBuffer[];

int OnInit() { SetIndexBuffer(0,firstBuffer); return(0); }
int deinit() {                                return(0); }
int start()
{
   firstBuffer[0] = 1;
   return(0);
}

当参数不是字符串类型时,会发生不同的错误

当它被声明为整数时,它一次又一次地重新加载"_slave "实例(如在参数类型错误的情况下)。

"_master integer "的代码(在iCustom()调用中使用一个整数类型的参数。

#property indicator_chart_window
#property indicator_buffers 1

double firstBuffer[];

int OnInit() { SetIndexBuffer(0,firstBuffer); return(0); }
int deinit() {                                return(0); }
int start ()
{
   firstBuffer[0] = iCustom(NULL,0,"_slave integer",(int)0,0,0);
   Comment(firstBuffer[0]);
   return(0);
}

而"_slave integer "的代码:

#property indicator_chart_window
#property indicator_buffers 1

extern int dummy = 0;

double firstBuffer[];

int OnInit() { SetIndexBuffer(0,firstBuffer); return(0); }
int deinit() {                                return(0); }
int start()
{
   firstBuffer[0] = 1;
   return(0);
}

当被调用的指标中的参数被声明为双倍时,它可以正常工作。

 

我认为终端一定有问题,不能正确地清除数据存储器,或者有其他你不知道的问题。

如果这些情况可能发生在专家身上,肯定会收到错误的数据。

这更像是一个圣诞树的绘画程序。

 
mladen:

当被调用的指标中的参数被声明为双倍时,它可以正常工作。


我们会尽快检查。谢谢你
 
Antonsan:

我用西班牙语写作。我还用谷歌进行翻译。

英语的翻译和俄语的翻译一样糟糕。

这个指标是为EA准备的,只画了几个柱子。
改变时间框架,我观察到,有时指标经常在屏幕上重复出现。
有时,它似乎运行了几次,并正确地画了线,其他时候,它们似乎是在历史上排列的相同的副本。

这在历史上有三个相同的副本,但为了减少截图,只看到两个。

你好!用西班牙文写吧!"。Se lo traduciré al ruso!祝福你!"。
 
Antonsan:

我认为终端一定有问题,不能正确地清除数据存储器,或者有其他你不知道的问题。

如果这些情况可能发生在专家身上,肯定会收到错误的数据。

这更像是一个圣诞树的绘画程序。

终端不应该清除你的缓冲区。只需在指标启动后初始化一次。
 
stringo:

已更正

还更正了第1和第2项

第3点,我们正在调试器上工作。

对于第4、5点,我们需要知道如何进行繁殖。一步一步来。这是不可以随心所欲地复制的。

谢谢你的反馈。代码发送到Servicedesk,#880536。
 

文档错误。

datetime iVolume

应该是

双倍 iVolume