初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1242 1...123512361237123812391240124112421243124412451246124712481249...1503 新评论 Vladimir Karputov 2020.08.15 18:31 #12411 Sayberix:我正在读。只是还没有到那一步,我想。我认为要读懂一个28MB的pdf参考资料并不容易。或者换一种说法--并非所有教友都知道整本圣经,即使他们是虔诚的信徒。我还有一个问题,请告知--如果不难的话。当在策略可视化器中执行代码时。1.程序进入无限循环。2.执行的结果是不同的。没有断点。在打印时有断点。都是在调试历史数据上完成的。 你在不断增加变量。你认为:什么时候变量的大小会超过其极限? Sayberix 2020.08.15 18:44 #12412 Vladimir Karputov:你在不断增加变量的大小。你认为:什么时候变量的大小会超过其极限? 我认为乌龙的 10次迭代应该已经足够了。那么问题来了。 1.为什么循环没有断裂? 2.为什么不显示迭代时间计数器本身的结果? 是不是因为调试是在历史数据上进行的? Vladimir Karputov 2020.08.15 18:46 #12413 Sayberix:我认为,对于10次迭代来说,乌龙 应该已经足够了。那么问题来了。1.为什么循环没有断裂?2.为什么不显示迭代时间计数器本身的结果?是因为对历史数据进行调试吗? 你有一个在全局程序级别声明的变量--你在不断地增加它。 Sayberix 2020.08.15 18:49 #12414 哦,我明白了...迭代的时间不到一毫秒...... Sayberix 2020.08.15 18:54 #12415 Vladimir Karputov:你有一个在全局程序层面声明的变量--你在不断地增加它。 我还是不明白全局变量 与此有什么关系。程序本身只限于一个循环:"for(int i=1; i<=10; i++)" ? 或者是我不明白的地方,请解释。 Vladimir Karputov 2020.08.15 19:02 #12416 Sayberix:我还是不明白全局变量 与此有什么关系。程序本身只限于一个循环:"for(int i=1; i<=10; i++)" ?或者是我不明白的地方,请解释。 删除变量 ulong count, raschet = 1; 超出全球范围。 在每一个刻度上,你都会重复地增加raschet变量。而在下一次打勾时,你继续将其增加数倍。几下子,拉舍特 变量就超出了范围。最终你打印出了变量的值,但由于某些原因没有看打印出来的结果。 Sayberix 2020.08.15 19:15 #12417 Vladimir Karputov:删除变量 从全局范围来看。在每一次打勾时,你都会重复地增加raschet变量。而在下一次打勾时,你继续重复增加它。几下子,拉舍特 变量就超出了范围。最后你打印出了变量的值,但由于某种原因没有看打印出来的结果。 谢谢,我明白了。我只是被搞糊涂了,以为return会完全停止程序,而它只是中断了当前tick的执行。我把 "返回;"改为"ExpertRemove();"。 Sayberix 2020.08.15 23:44 #12418 你能告诉我在这个代码中。 //+------------------------------------------------------------------+ //| env.mq5 | //| Copyright 2020, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property indicator_buffers 2 int envHandle; double upperEnv[], lowerEnv[]; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit() { envHandle = iCustom(_Symbol,_Period,"Examples\\Envelopes",3,0,MODE_LWMA,PRICE_OPEN,0.03); if(envHandle<0) { Alert("Ошибка при создании индикаторов - номер ошибки: ",GetLastError(),"!!"); return(INIT_FAILED); } SetIndexBuffer(0,upperEnv,INDICATOR_DATA); SetIndexBuffer(1,lowerEnv,INDICATOR_DATA); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Deinitialization function of the expert | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { IndicatorRelease(envHandle); } //+------------------------------------------------------------------+ //| "Tick" event handler function | //+------------------------------------------------------------------+ void OnTick() { ArraySetAsSeries(upperEnv, true); ArraySetAsSeries(lowerEnv, true); if((CopyBuffer(envHandle,0,0,3,upperEnv)<0) || CopyBuffer(envHandle,1,0,3,lowerEnv)<0) Alert("Ошибка копирования буферов индикатора Envelopes - номер ошибки:",GetLastError(),"!!"); double upEnv = upperEnv[0]; double lowEnv = lowerEnv[0]; } //+------------------------------------------------------------------+ 我怎样才能在变量upEnv和lowEnv中获得不断更新的信封 线的价格值?它画出了指标,但变量中的指标值被更新2次,仅此而已。 Vladimir Karputov 2020.08.16 07:17 #12419 Sayberix:你能告诉我这个代码吗?我怎样才能在变量upEnv和lowEnv中获得不断更新的信封线的价格值?它画出了指标,但变量中的指标值被更新2次,仅此而已。 首先,决定:你想写一个专家顾问 还是一个指标?(你现在有一个混合的代码--指标和专家顾问混在一起)--也就是说,该代码将无法工作。 提示:使用MQL向导来创建一个模板。 Sayberix 2020.08.16 08:33 #12420 Vladimir Karputov:首先下定决心:你想写一个EA 还是一个指标?(现在你的代码是一团糟--指标和专家顾问都混在一起)--也就是说,代码是不可行的。提示:使用MQL向导来创建一个模板。 我已经试过了。但它在Wizard中生成了类。我希望至少能以简单的方式理解代码--代码我至少能理解一点。能否请您告知如何纠正代码,以便在EA中获得指标值? 1...123512361237123812391240124112421243124412451246124712481249...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我正在读。只是还没有到那一步,我想。我认为要读懂一个28MB的pdf参考资料并不容易。或者换一种说法--并非所有教友都知道整本圣经,即使他们是虔诚的信徒。
我还有一个问题,请告知--如果不难的话。
当在策略可视化器中执行代码时。
1.程序进入无限循环。
2.执行的结果是不同的。
没有断点。
在打印时有断点。
都是在调试历史数据上完成的。
你在不断增加变量。你认为:什么时候变量的大小会超过其极限?
你在不断增加变量的大小。你认为:什么时候变量的大小会超过其极限?
我认为乌龙的 10次迭代应该已经足够了。那么问题来了。
1.为什么循环没有断裂?
2.为什么不显示迭代时间计数器本身的结果?
是不是因为调试是在历史数据上进行的?
我认为,对于10次迭代来说,乌龙 应该已经足够了。那么问题来了。
1.为什么循环没有断裂?
2.为什么不显示迭代时间计数器本身的结果?
是因为对历史数据进行调试吗?
你有一个在全局程序级别声明的变量--你在不断地增加它。
你有一个在全局程序层面声明的变量--你在不断地增加它。
我还是不明白全局变量 与此有什么关系。程序本身只限于一个循环:"for(int i=1; i<=10; i++)" ?
或者是我不明白的地方,请解释。
我还是不明白全局变量 与此有什么关系。程序本身只限于一个循环:"for(int i=1; i<=10; i++)" ?
或者是我不明白的地方,请解释。
删除变量
超出全球范围。
在每一个刻度上,你都会重复地增加raschet变量。而在下一次打勾时,你继续将其增加数倍。几下子,拉舍特 变量就超出了范围。最终你打印出了变量的值,但由于某些原因没有看打印出来的结果。
删除变量
从全局范围来看。
在每一次打勾时,你都会重复地增加raschet变量。而在下一次打勾时,你继续重复增加它。几下子,拉舍特 变量就超出了范围。最后你打印出了变量的值,但由于某种原因没有看打印出来的结果。
谢谢,我明白了。我只是被搞糊涂了,以为return会完全停止程序,而它只是中断了当前tick的执行。我把 "返回;"改为"ExpertRemove();"。
你能告诉我在这个代码中。
我怎样才能在变量upEnv和lowEnv中获得不断更新的信封 线的价格值?它画出了指标,但变量中的指标值被更新2次,仅此而已。
你能告诉我这个代码吗?
我怎样才能在变量upEnv和lowEnv中获得不断更新的信封线的价格值?它画出了指标,但变量中的指标值被更新2次,仅此而已。
首先,决定:你想写一个专家顾问 还是一个指标?(你现在有一个混合的代码--指标和专家顾问混在一起)--也就是说,该代码将无法工作。
提示:使用MQL向导来创建一个模板。
首先下定决心:你想写一个EA 还是一个指标?(现在你的代码是一团糟--指标和专家顾问都混在一起)--也就是说,代码是不可行的。
提示:使用MQL向导来创建一个模板。
我已经试过了。但它在Wizard中生成了类。我希望至少能以简单的方式理解代码--代码我至少能理解一点。能否请您告知如何纠正代码,以便在EA中获得指标值?