错误、漏洞、问题 - 页 936 1...929930931932933934935936937938939940941942943...3184 新评论 FinEngineer 2013.03.02 08:18 #9351 #property indicator_separate_window #property indicator_buffers 1 #property indicator_plots 1 //--- plot Label1 #property indicator_label1 "Label1" #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- input parameters input string symbol1="AUDUSD"; input string symbol2="NZDUSD"; input double mass_of_symbol1=1; input double mass_of_symbol2=1; int i,r1,r2,j; double S,prs,k1,k2,d1,d2; //--- indicator buffers double ind1[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,ind1,INDICATOR_DATA); //--- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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[]) { //--- ArraySetAsSeries(time,true);ArraySetAsSeries(open,true);ArraySetAsSeries(high,true);ArraySetAsSeries(low,true); ArraySetAsSeries(close,true);ArraySetAsSeries(tick_volume,true);ArraySetAsSeries(volume,true);ArraySetAsSeries(spread,true); ArraySetAsSeries(ind1,true); MqlRates rates1[]; ArraySetAsSeries(rates1,true); MqlRates rates2[]; ArraySetAsSeries(rates2,true); if(prev_calculated<rates_total) { for(i=0;i<rates_total;i++) // for(i=prev_calculated-1;i<rates_total;i++) { CopyRates(symbol1,0,time[i],1,rates1); CopyRates(symbol2,0,time[i],1,rates2); ind1[i]=mass_of_symbol1*rates1[0].close-mass_of_symbol2*rates2[0].close; } } //--- return value of prev_calculated for next call return(rates_total); FinEngineer 2013.03.02 08:25 #9352 以上是指标Spread_of_symbols的代码......我决定重写它以使其工作得更快....,代码出现了,见下图......数据没有被复制......如果你在代码中把数据从1复制到0,指标画得非常快,但是出现了超出范围的错误......代码中的问题见下图......?#property indicator_separate_window #property indicator_buffers 1 #property indicator_plots 1 //--- plot Label1 #property indicator_label1 "Label1" #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- input parameters input string symbol1="AUDUSD"; input string symbol2="NZDUSD"; input double mass_of_symbol1=1; input double mass_of_symbol2=1; int i,r1,r2,j; double S,prs,k1,k2,d1,d2; //--- indicator buffers double ind1[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,ind1,INDICATOR_DATA); //--- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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[]) { //--- ArraySetAsSeries(time,true);ArraySetAsSeries(open,true);ArraySetAsSeries(high,true);ArraySetAsSeries(low,true); ArraySetAsSeries(close,true);ArraySetAsSeries(tick_volume,true);ArraySetAsSeries(volume,true);ArraySetAsSeries(spread,true); ArraySetAsSeries(ind1,true); MqlRates rates1[]; ArraySetAsSeries(rates1,true); MqlRates rates2[]; ArraySetAsSeries(rates2,true); int to_copy; if(prev_calculated>rates_total || prev_calculated<0) to_copy=rates_total; else { to_copy=rates_total-prev_calculated; if(prev_calculated>0) to_copy++; } if(CopyRates(symbol1,0,0,to_copy,rates1)<=0) { Print("Данные по первому символу не скопированы, ошибка ",GetLastError()); return(0); } if(CopyRates(symbol2,0,0,to_copy,rates2)<=0) { Print("Данные по второму символу не скопированы, ошибка ",GetLastError()); return(0); } if(prev_calculated<rates_total) { int limit; if(prev_calculated==0) limit=0; else limit=prev_calculated-1; for(int i=limit;i<rates_total;i++) { ind1[i]=mass_of_symbol1*rates1[i].close-mass_of_symbol2*rates2[i].close; } } return(rates_total); } Yedelkin 2013.03.02 10:01 #9353 FinEngineer: 见MQL5参考指南/ 访问时间序列和指标/ 组织数据访问 Yedelkin 2013.03.02 10:15 #9354 FinEngineer: 但出现了超出范围的错误......代码中出现了什么问题,见下文......? 看to_copy和limit的值是否相互匹配。 Konstantin Chernov 2013.03.03 11:28 #9355 在可视化模式下,当在两个符号上进行交易时,在同一时间关闭交易后,只有专家顾问正在运行的符号的数据出现在历史中。另一个符号的数据只有在打开进一步的交易后才会进入历史标签。因此,有一段时间,交易 和历史标签 上的数据是不同的。 sion 2013.03.05 16:07 #9356 JF 0 交易 19:31:10 '***': 取消订单 #3694236 买入止损 1.10 AUDJPY.m at 95.679<br / translate="no">DS 0 交易 19:31:10 '***': 取消订单 #3694238 买入限制 1.10 AUDJPY.m at 93.876 DH 0 交易 19:31:10 '***': 取消订单 #3694237 买进止损 0.36 AUDJPY.m at 95.679 FI 0 交易 19:31:10 '***': 取消订单 #3694239 买入限额0.36 AUDJPY.m,价格93.876 FP 0 交易 19:31:10 '***': 取消订单 #3694236 买入停止 1.10 AUDJPY.m 在 95.679 完成 QE 0 交易 19:31:11 '***': 取消订单 #3694238 买入限额 1.10 AUDJPY.m at 93.876 完成 CG 0 交易 19:31:11 '***': 取消订单 #3694237 买进止损 0.36 AUDJPY.m at 95.679 完成 OL 0 交易 19:31:11 '***': 取消订单 #3694239 买入限额0.36 AUDJPY.m 在93.876完成根据日志,有四个待处理的订单,似乎很快就被删除了。但在TradeTransaction上,反应大约在15秒内出现,嘀嗒声在这期间出现。KH 0 prp5 (EURUSD.m,M1) 19:31:23 TS=6 cancel sl _ OnTrade PENDING id=84 m=3 b/s=SELL Err=Bid done***JG 0 prp5 (EURUSD.m,M1) 19:31:26 TS=6 Delete tp _ OnTrade PENDING id=85 m=3 b/s=SELL Err=Bid completed*** RL 0 prp5 (EURUSD.m,M1) 19:31:26 TS=6 Delete sl _ OnTrade PENDING id=86 m=3 b/s=SELL Err=Bid completed***HK 0 prp5 (EURUSD.m,M1) 19:31:26 TS=6 Delete tp _ OnTrade PENDING id=87 m=3 b/s=SELL Err=Order executed虽然,这里也有一些奇怪的事情IE 0 prp5 (EURUSD.m,M1) 19:31:26 TS=6 =O= 交易收盘/反向价格=95.648 m=3 b/s=SELL ...===订单发送前的时间 ES 0 prp5 (EURUSD.m,M1) 19:31:29 TS=6 case 8(real) m=3 b/s=SELL Err=Order placed ==>After OrderSendAsync, 3 sec seems be too long.P.S. 看起来专家的执行出现了滞后,不过我想知道OnTradeTransaction的数据包可以在队列中停留多长时间。 Victor Kirillin 2013.03.06 02:26 #9357 fyords:从参考资料来看。MQL5 参考 /标准库/ 创建面板和对话框的类 / CWnd / StateFlagsSet什么属性?StateFlagsSet不是属性,而是状态。一个改变状态的团体方法。就在改变个别州旗的方法之上。单独使用。 FinEngineer 2013.03.06 14:51 #9358 看了 "数据访问组织",看了抽出数据的样本脚本,了解了一切,出现了以下问题。1.为什么我不能把这段代码写在指标的OnInit函数 中,这样在开始时指标就会下载自己的历史并准备时间序列?我可以在我的专家顾问中开出这样的支票吗?2.我需要多长时间做一次这样的检查。1个用于专家顾问,2个用于指标?如果我只准备一次历史和时间序列的复制,那么在未来的复制中就不会出现错误?或者我必须每次或不时地检查历史和时间序列是否已经准备好?3.是否只有使用多个时间段和符号的指标和专家顾问才需要这种检查,还是所有的都需要? Документация по MQL5: Основы языка / Функции / Функции обработки событий www.mql5.com Основы языка / Функции / Функции обработки событий - Документация по MQL5 Renat Fatkhullin 2013.03.06 16:52 #9359 交换过程是异步的,指标不允许等待数据。因此,可以在inite中进行查询,不需要等待或放慢速度,只需在oncalculate中检查可用性和计数。 请注意--该指标无权等待或循环,否则将扼杀后续指标的计算。 FinEngineer 2013.03.06 17:56 #9360 Renat: 交换过程是异步的,指标不允许等待数据。因此,你可以在inite中查询,决不要等待或放慢速度,只在oncalculate中检查可用性和计数。请注意--该指标无权等待或循环,否则将扼杀后续指标的计算。 1 那么,我应该在哪里分页数据呢?如果我想做一个有一篮子货币对的指标,很多符号......对于每一个货币对,我需要检查和交换数据......我应该从指标中运行一个脚本吗?为什么一个指标会扼杀后续指标的计算?在下一个指标中,通过BarsCalculated(indicator1_Handle)检查上一个指标的计算结果,让它计算并下载数据就可以了,还是我错了?2 另一个问题,是另一种问题--当我在函数中声明指标句柄时,它开始计数?还是在我发出复制命令之前就开始计算? 1...929930931932933934935936937938939940941942943...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
以上是指标Spread_of_symbols的代码......我决定重写它以使其工作得更快....,代码出现了,见下图......数据没有被复制......如果你在代码中把数据从1复制到0,指标画得非常快,但是出现了超出范围的错误......代码中的问题见下图......?
DH 0 交易 19:31:10 '***': 取消订单 #3694237 买进止损 0.36 AUDJPY.m at 95.679
FI 0 交易 19:31:10 '***': 取消订单 #3694239 买入限额0.36 AUDJPY.m,价格93.876
FP 0 交易 19:31:10 '***': 取消订单 #3694236 买入停止 1.10 AUDJPY.m 在 95.679 完成
QE 0 交易 19:31:11 '***': 取消订单 #3694238 买入限额 1.10 AUDJPY.m at 93.876 完成
CG 0 交易 19:31:11 '***': 取消订单 #3694237 买进止损 0.36 AUDJPY.m at 95.679 完成
OL 0 交易 19:31:11 '***': 取消订单 #3694239 买入限额0.36 AUDJPY.m 在93.876完成
根据日志,有四个待处理的订单,似乎很快就被删除了。但在TradeTransaction上,反应大约在15秒内出现,嘀嗒声在这期间出现。
***
JG 0 prp5 (EURUSD.m,M1) 19:31:26 TS=6 Delete tp _ OnTrade PENDING id=85 m=3 b/s=SELL Err=Bid completed
***
RL 0 prp5 (EURUSD.m,M1) 19:31:26 TS=6 Delete sl _ OnTrade PENDING id=86 m=3 b/s=SELL Err=Bid completed
***
HK 0 prp5 (EURUSD.m,M1) 19:31:26 TS=6 Delete tp _ OnTrade PENDING id=87 m=3 b/s=SELL Err=Order executed
虽然,这里也有一些奇怪的事情
ES 0 prp5 (EURUSD.m,M1) 19:31:29 TS=6 case 8(real) m=3 b/s=SELL Err=Order placed ==>After OrderSendAsync, 3 sec seems be too long.
P.S. 看起来专家的执行出现了滞后,不过我想知道OnTradeTransaction的数据包可以在队列中停留多长时间。
从参考资料来看。
MQL5 参考 /标准库/ 创建面板和对话框的类 / CWnd / StateFlagsSet
什么属性?
StateFlagsSet不是属性,而是状态。一个改变状态的团体方法。就在改变个别州旗的方法之上。
单独使用。
看了 "数据访问组织",看了抽出数据的样本脚本,了解了一切,出现了以下问题。
1.为什么我不能把这段代码写在指标的OnInit函数 中,这样在开始时指标就会下载自己的历史并准备时间序列?我可以在我的专家顾问中开出这样的支票吗?
2.我需要多长时间做一次这样的检查。1个用于专家顾问,2个用于指标?如果我只准备一次历史和时间序列的复制,那么在未来的复制中就不会出现错误?或者我必须每次或不时地检查历史和时间序列是否已经准备好?
3.是否只有使用多个时间段和符号的指标和专家顾问才需要这种检查,还是所有的都需要?
请注意--该指标无权等待或循环,否则将扼杀后续指标的计算。
交换过程是异步的,指标不允许等待数据。因此,你可以在inite中查询,决不要等待或放慢速度,只在oncalculate中检查可用性和计数。请注意--该指标无权等待或循环,否则将扼杀后续指标的计算。
1 那么,我应该在哪里分页数据呢?如果我想做一个有一篮子货币对的指标,很多符号......对于每一个货币对,我需要检查和交换数据......我应该从指标中运行一个脚本吗?为什么一个指标会扼杀后续指标的计算?在下一个指标中,通过BarsCalculated(indicator1_Handle)检查上一个指标的计算结果,让它计算并下载数据就可以了,还是我错了?
2 另一个问题,是另一种问题--当我在函数中声明指标句柄时,它开始计数?还是在我发出复制命令之前就开始计算?