错误、漏洞、问题 - 页 54 1...474849505152535455565758596061...3184 新评论 ddd06 2010.07.19 06:12 #531 如果能给我们大家一个在图表和测试器中运行良好的指标例子就更好了。 我已经改变了我的版本,现在图表上的指标值 与历史值一致,但测试器中的值却不一致。 我做错了什么?#property indicator_separate_window#property indicator_buffers 2#property indicator_plots 2//--- plot Label1#property indicator_label1 "I1"#property indicator_type1 DRAW_LINE#property indicator_color1 Red#property indicator_style1 STYLE_SOLID#property indicator_width1 1//--- plot Label2#property indicator_label2 "I2"#property indicator_type2 DRAW_LINE#property indicator_color2 Green#property indicator_style2 STYLE_SOLID#property indicator_width2 1//--- indicator buffersdouble I1Buffer[];double I2Buffer[];int OnInit() { SetIndexBuffer(0,I1Buffer,INDICATOR_DATA); SetIndexBuffer(1,I2Buffer,INDICATOR_DATA); return(0); }int OnCalculate (const int rates_total, // размер входных таймсерий const int prev_calculated, // обработано баров на предыдущем вызове const datetime& time[], // Time const double& open[], // Open const double& high[], // High const double& low[], // Low const double& close[], // Close const long& tick_volume[], // Tick Volume const long& volume[], // Real Volume const int& spread[]) // Spread { string Symbol_1="EURUSD",Symbol_2="GBPUSD"; if(rates_total<1) return(0); double Arr1[],Arr2[]; int end,rez0,rez1,rez_0,rez_1; datetime ld1[],ld2[]; end=MathMin((int)SeriesInfoInteger(Symbol_1,0,SERIES_BARS_COUNT)-1,(int)SeriesInfoInteger(Symbol_2,0,SERIES_BARS_COUNT)-1); end=MathMin(end,rates_total-prev_calculated+1); rez0=CopyClose(Symbol_1,PERIOD_CURRENT, 0,end, Arr1); rez_0=CopyTime(Symbol_1,PERIOD_CURRENT, 0,end, ld1); if(rez0==-1){Print("Ошибка копирования ",Symbol_1," ",GetLastError()); return(0);} if(rez0!=rez_0){Print("Не сходятся цены с временем",Symbol_1," ",GetLastError()); return(0);} rez1=CopyClose(Symbol_2,PERIOD_CURRENT, 0,end, Arr2); rez_1=CopyTime(Symbol_2,PERIOD_CURRENT, 0,end, ld2); if(rez1==-1){Print("Ошибка копирования ",Symbol_2," ",GetLastError()); return(0);} if(rez1!=rez_1){Print("Не сходятся цены с временем",Symbol_2," ",GetLastError()); return(0);} if(rez1!=rez0){Print("Ошибка Синхронизации"); return(0);} ArraySetAsSeries(Arr1,true); ArraySetAsSeries(Arr2,true); ArraySetAsSeries(ld1,true); ArraySetAsSeries(ld2,true); int li=rates_total-1; I1Buffer[li]=Arr1[0]+0.26; I2Buffer[li]=Arr2[0]; li--; int shift1=0,shift2=0; for(int i=1;i<end-MathMax(shift2,shift1);i++) { if(time[li]==ld1[i+shift1])I1Buffer[li]=Arr1[i+shift1]+0.26; else if(time[li]>ld1[i+shift1]&&i!=0){shift1--;I1Buffer[li]=I1Buffer[li+1];} else if(time[li]<ld1[i+shift1]&&i!=0){shift1++;I1Buffer[li]=I1Buffer[li+1];} if(time[li]==ld2[i+shift2])I2Buffer[li]=Arr2[i+shift2]; else if(time[li]>ld2[i+shift2]&&i!=0){shift2--;I2Buffer[li]=I2Buffer[li+1];} else if(time[li]<ld2[i+shift2]&&i!=0){shift2++;I2Buffer[li]=I2Buffer[li+1];} li--; } return(rates_total); }//+------------------------------------------------------------------+ 和专家顾问int Handle;int bars,i;void OnInit() { Handle=iCustom(NULL,0,"proverka"); }void OnTick() { double buf1[],buf2[]; datetime time[];//--- if(bars==Bars(_Symbol,_Period))return; bars=Bars(_Symbol,_Period); CopyTime(_Symbol,_Period,0,2,time); if(CopyBuffer(Handle,0,0,2,buf1)<0 || CopyBuffer(Handle,1,0,2,buf2)<0) Print("Ошибка копирования значений индикаторных буферов ",GetLastError(),"!!"); if(i>100)return; i++; Print("Время "+TimeToString(time[1],TIME_DATE|TIME_MINUTES)," буф1-",buf1[1]," буф2-",buf2[1]); return; } 附加的文件: proverka.mq5 4 kb prover__1.mq5 1 kb ddd06 2010.07.19 06:18 #532 所以我又回到了我的老路上) 如果你通过测试器获得指标值,它们将与指标值和历史数据不同。 为了检查这一点,让我们从2010年7月1日起在欧元兑美元的M1时段运行prover.mq5,观察日志并查看真实价格。 Кирилл Иванович 2010.07.19 06:29 #533 你好,我无法理解SymbolInfoSessionTrade()函数,或者说最后两个参数--会话开始和会话结束。我可以在帮助中阅读。 允许获得指定符号和星期的指定交易时段 的开始时间和结束时间。事实证明,要找出一个交易时段的开始和结束时间,我应该已经知道交易时段的开始和结束时间(以秒为单位)--这并不一致。 Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote www.mql5.com Получение рыночной информации / SymbolInfoSessionQuote - Документация по MQL5 ddd06 2010.07.19 07:37 #534 kirill190982: 你好,我不能理解SymbolInfoSessionTrade() 函数,更具体地说,最后两个参数--会话开始和会话结束。我在帮助中读到过。 在这些参数中,SymbolInfoSessionTrade() 函数传递的变量将记录开始和结束时间。void OnTick() { datetime ld_start, ld_end; SymbolInfoSessionTrade( _Symbol, // имя символа MONDAY, // день недели 0, // Порядковый номер сессии ld_start, // время начала сессии ld_end // время окончания сессии ); Print(ld_start," - ",ld_end); } 顺便说一下,帮助中存在一个错误。 uintsession_index,// 符号名称 Кирилл Иванович 2010.07.19 08:59 #535 ddd06: 在SymbolInfoSessionTrade() 函数的这些参数中,变量被传递,开始和结束时间将被写入其中。 谢谢你,我知道了 ddd06 2010.07.19 09:48 #536 我已经简化了得到一个错误。 下面是一个复制收盘价数组的专家顾问int bars,i;void OnTick() { if(bars==Bars(_Symbol,_Period))return; bars=Bars(_Symbol,_Period); if(i>100)return; i++; datetime time[]; double Arr1[],Arr2[]; CopyTime(_Symbol,_Period,0,2,time); CopyClose("EURUSD",PERIOD_CURRENT, 0, 2, Arr1); CopyClose("GBPUSD",PERIOD_CURRENT, 0, 2, Arr2); Print("Время "+TimeToString(time[1],TIME_DATE|TIME_MINUTES)," mas1(EURUSD)-",Arr1[1]," mas2(GBPUSD)-",Arr2[1]); return; } 让我们从2010年7月1日起在欧元兑美元的M1时段运行prover.mq5,观察日志并查看真实价格 我们不时地看到不正确的数值 此外,直到01.00英镑兑美元的价格冻结在1.49393,之后它开始运行。 我已经痛苦了一个月,无法测试我的多货币专家顾问。 Slava 2010.07.19 10:26 #537 ddd06: 我已经简化了得到一个错误。 下面是一个复制收盘价数组的专家顾问 让我们从2010年7月1日起在欧元兑美元的M1时段运行prover.mq5,观察日志并查看真实价格 而我们不时地看到不正确的价值 此外,直到01.00英镑兑美元的价格冻结在1.49393,之后它开始运行。 我已经被这个问题困扰了一个月,无法测试我的多货币专家顾问。 你在一个未完成的条形图上使用当前值。 试试这个Print("Время "+TimeToString(time[0],TIME_DATE|TIME_MINUTES)," mas1(EURUSD)-",Arr1[0]," mas2(GBPUSD)-",Arr2[0]); 要么设置数组的时间序列。 ddd06 2010.07.19 10:50 #538 stringo: 你是在用一个未完成的条形图上的当前值工作。 试试这样的方式 或者设置数组的时间序列。 继续int bars,i;void OnTick() { if(bars==Bars(_Symbol,_Period))return; bars=Bars(_Symbol,_Period); if(i>100)return; i++; datetime time[]; double Arr1[],Arr2[]; CopyTime(_Symbol,_Period,0,2,time); CopyClose("EURUSD",PERIOD_CURRENT, 0, 2, Arr1); CopyClose("GBPUSD",PERIOD_CURRENT, 0, 2, Arr2); Print("Время "+TimeToString(time[0],TIME_DATE|TIME_MINUTES)," mas1(EURUSD)-",Arr1[0]," mas2(GBPUSD)-",Arr2[0]); return; } 而你顽固地拒绝回答为什么引号在开头。 在欧元兑美元上,它似乎已经开始匹配) Slava 2010.07.19 11:31 #539 如果是这样的话,那么你应该保留2个时间数组。有些时候从欧元兑美元复制,有些时候从英镑兑美元复制 ddd06 2010.07.19 11:42 #540 stringo: 如果是这样的话,那么你应该保留2个时间数组。有些时候应该从欧元兑美元复制,有些时候从英镑兑美元复制 好吧。int bars,i;void OnTick() { if(bars==Bars(_Symbol,_Period))return; bars=Bars(_Symbol,_Period); if(i>100)return; i++; datetime time1[],time2[]; double Arr1[],Arr2[]; CopyTime("EURUSD",_Period,0,2,time1); CopyTime("GBPUSD",_Period,0,2,time2); CopyClose("EURUSD",PERIOD_CURRENT, 0, 2, Arr1); CopyClose("GBPUSD",PERIOD_CURRENT, 0, 2, Arr2); Print("Время EURUSD"+TimeToString(time1[0],TIME_DATE|TIME_MINUTES), " Время GBPUSD"+TimeToString(time2[0],TIME_DATE|TIME_MINUTES)," mas1(EURUSD)-",Arr1[0]," mas2(GBPUSD)-",Arr2[0]); return; } 我认为不应该是这样的,你呢? 1...474849505152535455565758596061...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
如果能给我们大家一个在图表和测试器中运行良好的指标例子就更好了。
我已经改变了我的版本,现在图表上的指标值 与历史值一致,但测试器中的值却不一致。
我做错了什么?
和专家顾问
所以我又回到了我的老路上)
如果你通过测试器获得指标值,它们将与指标值和历史数据不同。
为了检查这一点,让我们从2010年7月1日起在欧元兑美元的M1时段运行prover.mq5,观察日志并查看真实价格。
你好,我无法理解SymbolInfoSessionTrade()函数,或者说最后两个参数--会话开始和会话结束。我可以在帮助中阅读。
允许获得指定符号和星期的指定交易时段 的开始时间和结束时间。
事实证明,要找出一个交易时段的开始和结束时间,我应该已经知道交易时段的开始和结束时间(以秒为单位)--这并不一致。
你好,我不能理解SymbolInfoSessionTrade() 函数,更具体地说,最后两个参数--会话开始和会话结束。我在帮助中读到过。
在这些参数中,SymbolInfoSessionTrade() 函数传递的变量将记录开始和结束时间。
顺便说一下,帮助中存在一个错误。
uintsession_index,// 符号名称
在SymbolInfoSessionTrade() 函数的这些参数中,变量被传递,开始和结束时间将被写入其中。
我已经简化了得到一个错误。
下面是一个复制收盘价数组的专家顾问
让我们从2010年7月1日起在欧元兑美元的M1时段运行prover.mq5,观察日志并查看真实价格
我们不时地看到不正确的数值
此外,直到01.00英镑兑美元的价格冻结在1.49393,之后它开始运行。
我已经痛苦了一个月,无法测试我的多货币专家顾问。
我已经简化了得到一个错误。
下面是一个复制收盘价数组的专家顾问
让我们从2010年7月1日起在欧元兑美元的M1时段运行prover.mq5,观察日志并查看真实价格
而我们不时地看到不正确的价值
此外,直到01.00英镑兑美元的价格冻结在1.49393,之后它开始运行。
我已经被这个问题困扰了一个月,无法测试我的多货币专家顾问。
你在一个未完成的条形图上使用当前值。
试试这个
要么设置数组的时间序列。
你是在用一个未完成的条形图上的当前值工作。
试试这样的方式
或者设置数组的时间序列。
而你顽固地拒绝回答为什么引号在开头。
在欧元兑美元上,它似乎已经开始匹配)
如果是这样的话,那么你应该保留2个时间数组。有些时候从欧元兑美元复制,有些时候从英镑兑美元复制
如果是这样的话,那么你应该保留2个时间数组。有些时候应该从欧元兑美元复制,有些时候从英镑兑美元复制
好吧。
我认为不应该是这样的,你呢?