错误、漏洞、问题 - 页 1343 1...133613371338133913401341134213431344134513461347134813491350...3184 新评论 StrategyTester 2015.08.14 03:35 #13421 StrategyTester:你好。关于MT5及其测试仪的问题。我有一个自编的多货币专家顾问,它调用一个 自编的多货币指标,计算两个货币对之间的一些比率。在测试和调试过程中,我发现了一个问题:在终端中,在某个时刻,"A "行高于 "B "行,而在策略测试器中,在同一时刻,在相同的指标设置下,在可视化打开的情况下,"A "行低于 "B "行。总的来说:终端中的指标线的外观与策略测试器中的指标线有根本性的不同。问题:这是MT5测试仪的故障还是代码中的错误?让我澄清一下:我看到的是指标的重绘。 StrategyTester 2015.08.14 04:18 #13422 Karputov Vladimir: 指示器总是以它在终端的方式绘制。也许在测试器中,你需要尝试几种模式(所有刻度线、数学价格等等)。 我尝试了 "所有点"、"M1上的OHLC"、"仅开盘价"。结果是一样的--指标被重新划定。选项"数学计算"未被激活,不可用。 Vladimir Karputov 2015.08.14 05:34 #13423 StrategyTester: 尝试了 "所有点"、"M1上的OHLC"、"仅开盘价"。结果是一样的--指标重绘。选项"数学计算"未被激活,不可用。 在这种情况下,请向我提供代码。 Alexey Navoykov 2015.08.14 13:27 #13424 向开发者提问:在什么情况下,符号的历史被认为是不同步的,即SeriesInfoInteger(symbol, period,SERIES_SYNCHRONIZED)返回错误?问题是,我偶尔会遇到这样的情况:在所有的时间段里,某个符号都会返回错误的数值,即使这个符号有历史记录(Bars和其他函数返回非零值)。 原因是什么? Alexey Navoykov 2015.08.14 13:54 #13425 也有这样一个问题。当通过CopyTime、CopyClose 等读取指标中几个符号/时间段的历史记录时,指标经常闪动。这不是渲染的结果(没有重新计算条形图),而只是整个图像消失了几分之一秒,然后又出现了。 有时不是几分之一秒,而是整整几秒。 通常在图表滚动时观察到。如果请求的时间序列较小,则不会出现这种问题。我想听听开发商的意见,这可能与此有关。 StrategyTester 2015.08.15 12:14 #13426 Karputov Vladimir: 在这种情况下,请提供代码。我在此附上终端和测试器的差异说明以及指标的代码。//+------------------------------------------------------------------+ //| Indicator1_6test.mq5 | //+------------------------------------------------------------------+ #property copyright "" #property link "" #property version "1.6" #property indicator_separate_window #property indicator_separate_window #property indicator_buffers 2 #property indicator_plots 2 #property indicator_color1 SkyBlue #property indicator_color2 Yellow #property indicator_type1 DRAW_LINE #property indicator_type2 DRAW_LINE //--- enum TT{_close=0,_open=1,_high=2,_low=3}; //--- input string activ1="GBPUSD",activ2="EURUSD"; input TT PriceType=_close; input int Len=100; //--- double ratio[],avr[];string NN[]={"rr1","rr2","aa1","aa2"}; //--- void setv(int i,double v){ObjectSetDouble(0,NN[i],OBJPROP_PRICE,v);} //--- int OnInit() { SetIndexBuffer(0,ratio); PlotIndexSetString(0,PLOT_LABEL,"Ratio"); SetIndexBuffer(1,avr); PlotIndexSetString(1,PLOT_LABEL,"Avr"); ArraySetAsSeries(ratio,1); ArraySetAsSeries(avr,1); for(int i=0;i<4;i++)ObjectCreate(0,NN[i],22,0,0,0); return(INIT_SUCCEEDED); } //--- int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int limit=0;double zz[4]; if(prev_calculated==0){limit=MathMin(Bars(activ1,0),Bars(activ2,0));limit--;} else limit=rates_total-prev_calculated; if(limit==0)limit=1; double Price1[],Price2[]; ArraySetAsSeries(Price1,1); ArraySetAsSeries(Price2,1); getV(Price1,Price2,limit); for(int i=0;i<limit;i++){if(Price1[i]>0&&Price2[i]>0)ratio[i]=Price1[i]/Price2[i];else ratio[i]=ratio[i+1];} double sred=0,sum=0; for(int i=0;i<limit;i++) { sred=0; avr[i]=SimpleMA(i,Len,ratio); for(int j=i;j<i+Len;j++) { if(j>=ArraySize(ratio))break; if(ratio[j]==0||ratio[j]==EMPTY_VALUE){sred=0;break;} sred=1; } } if(prev_calculated!=0)for(int i=0;i<10;i++)if(ratio[i]==0)ratio[i]=ratio[i+1]; zz[0]=ratio[1];zz[1]=ratio[2]; zz[2]=avr[1];zz[3]=avr[2]; for(int i=0;i<4;i++)setv(i,zz[i]); return(rates_total); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void getV(double&Price1[],double&Price2[],int limit) { if(PriceType==_close){CopyClose(activ1,PERIOD_CURRENT,0,limit,Price1);CopyClose(activ2,PERIOD_CURRENT,0,limit,Price2);} if(PriceType==_open){CopyOpen(activ1,PERIOD_CURRENT,0,limit,Price1);CopyOpen(activ2,PERIOD_CURRENT,0,limit,Price2);} if(PriceType==_high){CopyHigh(activ1,PERIOD_CURRENT,0,limit,Price1);CopyHigh(activ2,PERIOD_CURRENT,0,limit,Price2);} if(PriceType==_low){CopyLow(activ1,PERIOD_CURRENT,0,limit,Price1);CopyLow(activ2,PERIOD_CURRENT,0,limit,Price2);} } //--- double SimpleMA(const int position,const int period,const double &price[]) { //--- double result=0.0; //--- check position //--- calculate value if(position+period+1>ArraySize(price))return(0); for(int i=0; i<period; i++) result+=price[position+i]; result/=period; return(result); } //--- Vladimir Pastushak 2015.08.15 12:30 #13427 一般来说,用函数 Copy有其他问题。 我发现当这个函数被调用时,它可以 "冻结 "EA,我用大量的符号写了一个程序,并对每个符号的过去3天的历史进行了计算。我曾经有一段时间,所有的东西都会挂起几分钟,我几乎没有发现是复制功能的问题。 这个功能可以安全地处理150-200个符号,然后挂起,在不同的符号上挂起......悬挂时间从5秒到2-3分钟不等...。 Renat Fatkhullin 2015.08.15 12:36 #13428 EAs中的复制功能是同步的,如果没有数据,则期望进行分页。 Vladimir Karputov 2015.08.15 12:49 #13429 StrategyTester:我在此附上终端和测试器的不同之处的图示,以及指标的代码。该函数中存在一个错误。//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void getV(double&Price1[],double&Price2[],int limit) { if(PriceType==_close) { CopyClose(activ1,PERIOD_CURRENT,0,limit,Price1); CopyClose(activ2,PERIOD_CURRENT,0,limit,Price2); } if(PriceType==_open) { CopyOpen(activ1,PERIOD_CURRENT,0,limit,Price1); CopyOpen(activ2,PERIOD_CURRENT,0,limit,Price2); } if(PriceType==_high) { CopyHigh(activ1,PERIOD_CURRENT,0,limit,Price1); CopyHigh(activ2,PERIOD_CURRENT,0,limit,Price2); } if(PriceType==_low) { CopyLow(activ1,PERIOD_CURRENT,0,limit,Price1); CopyLow(activ2,PERIOD_CURRENT,0,limit,Price2); } }你正试图匆忙地复制另一个符号的数据。你不应该这样做。数据必须首先被下载、准备和检查...以下是描述:数据访问的组织 StrategyTester 2015.08.15 13:09 #13430 Karputov Vladimir:该函数中存在一个错误。你正试图匆忙地复制另一个角色的数据。这不是做这件事的方法。数据必须首先被加载,准备,确保...以下是描述:组织数据访问 谢谢你的提示。我会看看的。 1...133613371338133913401341134213431344134513461347134813491350...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你好。
关于MT5及其测试仪的问题。
我有一个自编的多货币专家顾问,它调用一个 自编的多货币指标,计算两个货币对之间的一些比率。在测试和调试过程中,我发现了一个问题:在终端中,在某个时刻,"A "行高于 "B "行,而在策略测试器中,在同一时刻,在相同的指标设置下,在可视化打开的情况下,"A "行低于 "B "行。总的来说:终端中的指标线的外观与策略测试器中的指标线有根本性的不同。问题:这是MT5测试仪的故障还是代码中的错误?
让我澄清一下:我看到的是指标的重绘。
指示器总是以它在终端的方式绘制。也许在测试器中,你需要尝试几种模式(所有刻度线、数学价格等等)。
尝试了 "所有点"、"M1上的OHLC"、"仅开盘价"。结果是一样的--指标重绘。选项"数学计算"未被激活,不可用。
向开发者提问:在什么情况下,符号的历史被认为是不同步的,即SeriesInfoInteger(symbol, period,SERIES_SYNCHRONIZED)返回错误?
问题是,我偶尔会遇到这样的情况:在所有的时间段里,某个符号都会返回错误的数值,即使这个符号有历史记录(Bars和其他函数返回非零值)。 原因是什么?
也有这样一个问题。当通过CopyTime、CopyClose 等读取指标中几个符号/时间段的历史记录时,指标经常闪动。这不是渲染的结果(没有重新计算条形图),而只是整个图像消失了几分之一秒,然后又出现了。 有时不是几分之一秒,而是整整几秒。 通常在图表滚动时观察到。如果请求的时间序列较小,则不会出现这种问题。
我想听听开发商的意见,这可能与此有关。
在这种情况下,请提供代码。
我在此附上终端和测试器的差异说明以及指标的代码。
一般来说,用函数
Copy有其他问题。
我发现当这个函数被调用时,它可以 "冻结 "EA,我用大量的符号写了一个程序,并对每个符号的过去3天的历史进行了计算。
我曾经有一段时间,所有的东西都会挂起几分钟,我几乎没有发现是复制功能的问题。 这个功能可以安全地处理150-200个符号,然后挂起,在不同的符号上挂起......
悬挂时间从5秒到2-3分钟不等...。
我在此附上终端和测试器的不同之处的图示,以及指标的代码。
该函数中存在一个错误。
你正试图匆忙地复制另一个符号的数据。你不应该这样做。数据必须首先被下载、准备和检查...以下是描述:数据访问的组织
该函数中存在一个错误。
你正试图匆忙地复制另一个角色的数据。这不是做这件事的方法。数据必须首先被加载,准备,确保...以下是描述:组织数据访问