任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 930 1...923924925926927928929930931932933934935936937...1178 新评论 capricornsuper 2015.08.24 03:47 #9291 DiPach , 再次感谢你的帮助。我已经分析了你的例子。对我的启动代码做了一些修改。其结果是这样的。void OnStart() { int awd1[]; ArrayResize(awd1,6,7); for(int i=0;i<=5;i++) { awd1[i]=i+10; Print("awd1[", i, "]=", awd1[i]); } Alert("awd1[0]=", awd1[0], ", awd1[1]=", awd1[1], ", awd1[2]=", awd1[2], ", awd1[3]=", awd1[3], ", awd1[4]=", awd1[4], ", awd1[5]=", awd1[5]); }改变了什么。1.我把包含int awd1[]; 数组声明的一行移到了OnStart()函数中2.增加了ArrayResize(awd1,6,7)函数。3.脚本是有效的。我将尝试得出一些结论。在脚本中,在OnStart()函数中声明数组是正确的。在数组被声明后,必须使用ArrayResize()函数对其大小进行必然的定义,否则编译器将发誓。我的结论是否正确?如果没有,请给出正确的解释。 Dina Paches 2015.08.24 06:29 #9292 silachara:DiPach , 再次感谢你的帮助。我已经分析了你的例子。对我的启动代码做了一些修改。其结果是这样的。改变了什么。1.将包含int awd1[];数组声明的一行移至OnStart()函数内。2.增加了ArrayResize(awd1,6,7)函数。3.脚本是有效的。我将试图得出结论。在脚本中,在OnStart()函数中声明数组是正确的。在数组被声明后,必须使用ArrayResize()函数对其大小进行必要的定义,否则编译器将产生一个错误。我的结论是否正确?如果没有,请给出正确的解释。一般说来,是的。而且它将发挥作用,至少是无声的,但非常好。:)我只说明以下几点。1. 当你声明正常的变量和数组时,我认为你应该考虑这个脚本(或EA/指示器)要做什么,以及这些变量/数组的用途。 你所附的脚本工作流程允许不是在全局程序层面,而是在本地声明变量。也就是说,数组被声明一次。而且,在Start()体中没有必要重复(循环)声明,例如,在 我们开始for()循环之前,以及在for(){}之后 ,我们还需要一些变量声明。因此,数组不是在程序的全局变量层面上声明的,而是在for()循环语句之前 的OnStart()正文中声明的--在这种程序执行方案中是完全可以接受的。在我看来,如果在程序中没有必要在全局变量层面上声明什么,我们最好利用这个机会,在本地声明一切可以声明的东西。2. 至于代码,让我把它说清楚。void OnStart() { int awd1[]; ArrayResize(awd1,6,7); for(int i=0;i<6;i++) { awd1[i]=i+10; Print("awd1[",i,"]=",awd1[i]); } string text=StringConcatenate("awd1[0]=",awd1[0],", awd1[1]=",awd1[1],", awd1[2]=",awd1[2], ", awd1[3]=",awd1[3],", awd1[4]=",awd1[4],", awd1[5]=",awd1[5]); Alert(text); }就是说。你不应该在for中使用<=符号(小于等于)。我的意思是它的位置(i=0;i<=5;i++)。简单地把<(小于)和数字6代替5。for(int i=0;i<6;i++) 这就是5的方式,对于来说是合适的。for(int i=5;i>=0;i--)我记得之前遇到过这样的信息:Stringconcatenate 函数有助于加快长文本的处理。这就是为什么我通常在我的代码中使用它。我也把它加在这里,以备不时之需。P./S.: 还有一个澄清,以防万一,使用ArrayResize()--用于动态 数组。 在这个函数的文档中,有这样的信息:这个函数不能调整动态数组的大小。 Boris 2015.08.24 17:42 #9293 Best_ATS: 为什么我不能添加朋友? 而在生活中,如果不亲自了解一个朋友,从工作中,你如何想象他或她呢? Nauris Zukas 2015.08.25 13:09 #9294 你好!我怎样才能使新的价格先显示出来,而以前的价格降到底部,如此循环?我举了一个例子来说明问题。double NN=0; double NN1=0; double NN2=0; double NN3=0; void OnTick() { //--- if(Ask>NN)NN=Ask; if(NN>NN1)NN1=NN; if(NN1>NN2)NN2=NN1; if(NN2>NN3)NN3=NN2; Comment("" + "1. "+"Buy: "" Max: " + DoubleToStr(NN,5) + "\n" + "2. "+"Buy: "" Max: " + DoubleToStr(NN1,5) + "\n" + "3. "+"Buy: "" Max: " + DoubleToStr(NN2,5) + "\n" + "4. "+"Buy: "" Max: " + DoubleToStr(NN3,5) + "\n" + "------------------------------------------------" ); } TarasBY 2015.08.25 15:22 #9295 abeiks:你好!我怎样才能使新的价格先显示出来,而以前的价格降到底部,如此循环?这将是清楚的做了一个例子。我做了一个例子,有了条件或多或少你可以自己想出来。double bda_Price[4]; void OnTick() { int li_int; //--- if (Ask > bda_Price[0]) { ArrayInitialize (bda_Price, 0.); bda_Price[0] = Ask; double lda_Price[3]; ArrayCopy (lda_Price, bda_Price, 0, 1); for (int li_int = 1; li_int < 4; li_int++) {bda_Price[li_int] = lda_Price[li_int-1];} } string ls_txt; StringInit (ls_txt, 100); for (li_int = 0; li_int < 4; li_int++) {ls_txt = StringConcatenate (ls_txt, (string) li_int, ". Buy: Max: ", DoubleToStr (bda_Price[li_int], Digits), "\n"); ls_txt = StringConcatenate (ls_txt, "------------------------------------------------" ); Comment (ls_txt); //--- } Nauris Zukas 2015.08.25 15:47 #9296 TarasBY:我做了一个例子,你可以或多或少地自己想出这些条款。 谢谢你! capricornsuper 2015.08.25 16:06 #9297 abeiks:你好!我怎样才能使新的价格先显示出来,而以前的价格降到底部,如此循环?为了说清楚,我举了一个例子。这里是一个完全原始的代码。double Price1, Price2, Price3, Price4; void OnTick() { Price4=Price3; Price3=Price2; Price2=Price1; Price1=Ask; Comment(Price1, "\n", Price2, "\n", Price3, "\n", Price4); } Nauris Zukas 2015.08.25 16:31 #9298 silachara:这里有一个完全原始的代码做的。 谢谢你! [Deleted] 2015.08.25 18:06 #9299 大家好。试图用一个简陋的脚本在策略测试器中 打开一个交易订单,失败。int start(){//----int res;double ask=Close[0]+MarketInfo(_Symbol,MODE_SPREAD)*Point;res=OrderSend(Symbol(),OP_BUY,0.1,ask,3,0,0," ,0,0,Blue)。if(res>-1)Alert("Open BUY order with ticket " ,res);//----return(0);}我把脚本放在可视化模式的测试图表上,但交易订单在MT4终端打开。在使用SimpleFXTester_v2.ex4的策略测试器中,我也无法获得未结订单的信息。请帮助我理解这一点。 Alexey Viktorov 2015.08.26 06:09 #9300 kosmos0975:大家好。试图用一个简陋的脚本在策略测试器中打开一个交易订单,失败。int start(){//----int res;double ask=Close[0]+MarketInfo(_Symbol,MODE_SPREAD)*Point;res=OrderSend(Symbol(),OP_BUY,0.1,ask,3,0,0," ,0,0,Blue)。if(res>-1)Alert("Open BUY order with ticket " ,res);//----return(0);}我把脚本放在可视化模式的测试图表上,但交易订单在MT4终端打开。在使用SimpleFXTester_v2.ex4的策略测试器中,我也无法获得未结订单的信息。请帮助我理解这一点。 策略测试器中的脚本不起作用。 1...923924925926927928929930931932933934935936937...1178 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
DiPach , 再次感谢你的帮助。我已经分析了你的例子。对我的启动代码做了一些修改。其结果是这样的。
改变了什么。
1.我把包含int awd1[]; 数组声明的一行移到了OnStart()函数中
2.增加了ArrayResize(awd1,6,7)函数。
3.脚本是有效的。
我将尝试得出一些结论。在脚本中,在OnStart()函数中声明数组是正确的。在数组被声明后,必须使用ArrayResize()函数对其大小进行必然的定义,否则编译器将发誓。我的结论是否正确?如果没有,请给出正确的解释。
DiPach , 再次感谢你的帮助。我已经分析了你的例子。对我的启动代码做了一些修改。其结果是这样的。
改变了什么。
1.将包含int awd1[];数组声明的一行移至OnStart()函数内。
2.增加了ArrayResize(awd1,6,7)函数。
3.脚本是有效的。
我将试图得出结论。在脚本中,在OnStart()函数中声明数组是正确的。在数组被声明后,必须使用ArrayResize()函数对其大小进行必要的定义,否则编译器将产生一个错误。我的结论是否正确?如果没有,请给出正确的解释。
一般说来,是的。而且它将发挥作用,至少是无声的,但非常好。:)
我只说明以下几点。
1. 当你声明正常的变量和数组时,我认为你应该考虑这个脚本(或EA/指示器)要做什么,以及这些变量/数组的用途。
你所附的脚本工作流程允许不是在全局程序层面,而是在本地声明变量。也就是说,数组被声明一次。而且,在Start()体中没有必要重复(循环)声明,例如,在 我们开始for()循环之前,以及在for(){}之后 ,我们还需要一些变量声明。
因此,数组不是在程序的全局变量层面上声明的,而是在for()循环语句之前 的OnStart()正文中声明的--在这种程序执行方案中是完全可以接受的。
在我看来,如果在程序中没有必要在全局变量层面上声明什么,我们最好利用这个机会,在本地声明一切可以声明的东西。
2. 至于代码,让我把它说清楚。
就是说。
这就是5的方式,对于来说是合适的。
P./S.: 还有一个澄清,以防万一,使用ArrayResize()--用于动态 数组。 在这个函数的文档中,有这样的信息:这个函数不能调整动态数组的大小。
为什么我不能添加朋友?
你好!我怎样才能使新的价格先显示出来,而以前的价格降到底部,如此循环?我举了一个例子来说明问题。
你好!我怎样才能使新的价格先显示出来,而以前的价格降到底部,如此循环?这将是清楚的做了一个例子。
我做了一个例子,有了条件或多或少你可以自己想出来。
我做了一个例子,你可以或多或少地自己想出这些条款。
你好!我怎样才能使新的价格先显示出来,而以前的价格降到底部,如此循环?为了说清楚,我举了一个例子。
这里是一个完全原始的代码。
这里有一个完全原始的代码做的。
大家好。试图用一个简陋的脚本在策略测试器中 打开一个交易订单,失败。
int start()
{
//----
int res;
double ask=Close[0]+MarketInfo(_Symbol,MODE_SPREAD)*Point;
res=OrderSend(Symbol(),OP_BUY,0.1,ask,3,0,0," ,0,0,Blue)。
if(res>-1)Alert("Open BUY order with ticket " ,res);
//----
return(0);
}
我把脚本放在可视化模式的测试图表上,但交易订单在MT4终端打开。
在使用SimpleFXTester_v2.ex4的策略测试器中,我也无法获得未结订单的信息。
请帮助我理解这一点。
大家好。试图用一个简陋的脚本在策略测试器中打开一个交易订单,失败。
int start()
{
//----
int res;
double ask=Close[0]+MarketInfo(_Symbol,MODE_SPREAD)*Point;
res=OrderSend(Symbol(),OP_BUY,0.1,ask,3,0,0," ,0,0,Blue)。
if(res>-1)Alert("Open BUY order with ticket " ,res);
//----
return(0);
}
我把脚本放在可视化模式的测试图表上,但交易订单在MT4终端打开。
在使用SimpleFXTester_v2.ex4的策略测试器中,我也无法获得未结订单的信息。
请帮助我理解这一点。