任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 846 1...839840841842843844845846847848849850851852853...1178 新评论 Artyom Trishkin 2015.02.09 09:55 #8451 Pokrov:我在函数后面有GetLastError,如果发生错误,不是会转到这个块吗(按照写法),命令就不会被执行?我明白这个链条,例如OrderSend() -> GetLastError -> 错误块Sleep(3000) RefreshRates() -> 退出该块,如果条件不变,则再次请求OrderSend()。或者我的推理和概念是错误的。我明白你想在块中写出返回值1或0,但我的函数很简单,与布尔值无关,如SignalBuy,如果我理解正确,返回值应该在那里返回。 在错误的交易尝试次数上做一个循环。刷新交易环境。重置前一个错误的值,并发送一个交易请求,对返回的结果进行检查。如果返回一个错误,对其进行分析,根据错误代码,要么完全终止循环,要么执行必要的行动来纠正错误,并进入循环的下一个迭代。如果交易操作成功,中断循环并向调用程序返回与程序逻辑相对应的值,以便进一步处理交易请求结果(要么是函数执行成功标志,要么是未平仓订单号码,等等)。 Alexey Viktorov 2015.02.09 10:26 #8452 Pokrov:我在函数后面有GetLastError,如果发生错误,不是会转到这个块吗(按照写法),命令就不会被执行?我明白这个链条,例如OrderSend() -> GetLastError -> 错误块Sleep(3000) RefreshRates() -> 退出该块,如果条件不变,则再次请求OrderSend()。或者我的推理和概念是错误的。我明白你想在块中写出返回值1或0,但我的函数很简单,与布尔值无关,如SignalBuy,如果我理解正确,返回值应该在那里返回。 我还要补充一点,在你的例子中,在得到一个错误后没有任何反应。我们检查了一下,没有,只是我们决定睡一会儿,或者刷新一下数据。在OnTick()函数 完成后退出即可 Nauris Zukas 2015.02.09 11:00 #8453 下午好!我需要一些建议。根据条件,该仓位应被关闭,121秒后应打开一个新的仓位。我怎么能用Sleep(121000)来做呢?if(GetProfitOpenHigestInPoint(NULL,OP_BUY,magic) > PiespieduClose*10) { ClosePosWithMaxProfitInCurrency(NULL,OP_BUY,magic); Sleep(121000); OpenPosition(NULL, OP_BUY, LotSize(),0,0,magic); } Artyom Trishkin 2015.02.09 11:30 #8454 abeiks: 日安! 我需要一些建议。根据条件,该仓位应被关闭,121秒后应打开一个新的仓位。我怎么能用Sleep(121000)来做呢? 帮助:OnTimer() Nauris Zukas 2015.02.09 13:09 #8455 artmedia70: OnTimer()来拯救 谢谢你!我从未使用过OnTimer(),这部分代码是在void OnTick()中。 我可以用OnTimer()处理OpenPosition()函数吗?如果可以的话,请纠正代码,如何在那里正确插入OnTimer()...void OnTick() { ... if(GetProfitOpenHigestInPoint(NULL,OP_BUY,magic) > PiespieduClose*10) { ClosePosWithMaxProfitInCurrency(NULL,OP_BUY,magic); EventSetTimer(121); OpenPosition(NULL, OP_BUY, LotSize(),0,0,magic); } ... } Jakhongir Rajabov 2015.02.09 13:57 #8456 我刚刚重装了Windows 7,想安装Mt4,问题是文件无法下载,我应该怎么做? PokrovMT5 2015.02.09 15:18 #8457 阿列克谢和阿蒂姆,感谢你们的专家意见和建议! Artyom Trishkin 2015.02.09 16:19 #8458 abeiks: 谢谢!我从未使用过OnTimer(),这部分代码是在void OnTick()中。 那么OpenPosition()函数是否会由OnTimer()处理?如果可以的话,请纠正代码,如何在那里正确插入OnTimer()...计时器是在OnInit()中启动的。EventSetTimer(1); // раз в секунду要开始倒计时,你需要在计时器中找到最后一个位置的关闭时间,并从这个时间开始计算121个苏昆德。为了传递允许你打开一个新位置的标志,使用一个全局变量,其范围涵盖整个程序。你可以让它最初包含一个大于121的值,例如122(你可以在设置中改变等待时间)。在OnTick()中,检查这个变量。如果它大于121,并且没有头寸,你就打开一个头寸,在检查它是否成功打开后,将变量重置为零。一旦仓位关闭,计时器就会看到关闭的时间(每秒连续进行一次),如果从当前时间到仓位关闭的时间少于121秒,计时器就开始计数--每秒钟的变量值就会增加1。大约如此。其中可能存在一个错误--如果尚未平仓,其平仓时间等于零。这可能会导致启动倒计时的问题。例如,你可以将该变量重置为-1。是的,别忘了在OnDeinit()中销毁定时器。//+------------------------------------------------------------------+ void OnDeinit(const int reason) {EventKillTimer();} //+------------------------------------------------------------------+ Nauris Zukas 2015.02.09 16:41 #8459 artmedia70:计时器是在OnInit()中启动的。为了开始倒计时,你需要在计时器中找到最后一个位置被关闭的时间,并从该时间开始计算121秒。为了传递允许你打开一个新位置的标志,使用一个全局变量,该变量可由整个程序扩展。你可以让它最初包含一个高于121的值,例如122(你可以在设置中改变等待时间)。在OnTick()中,你检查这个变量。如果它大于121并且没有位置--打开一个位置--在检查是否成功打开后,将变量重置为零。一旦仓位关闭,计时器就会看到关闭的时间(每秒连续进行一次),如果从当前时间到仓位关闭的时间少于121秒,计时器就开始计数--每秒钟的变量值就会增加1。大约如此。其中可能存在一个错误--如果尚未平仓,其平仓时间等于零。这可能会导致启动倒计时的问题。例如,你可以将该变量重置为-1。是的,别忘了在OnDeinit()中销毁定时器。 明白了,谢谢。我希望能在一条线上完成,但可能我还得再努力一下。 Artyom Trishkin 2015.02.09 16:58 #8460 abeiks:我明白了,谢谢你。我希望能在一条线上完成,但我想这要花更多的功夫。 1...839840841842843844845846847848849850851852853...1178 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我在函数后面有GetLastError,如果发生错误,不是会转到这个块吗(按照写法),命令就不会被执行?我明白这个链条,例如OrderSend() -> GetLastError -> 错误块Sleep(3000) RefreshRates() -> 退出该块,如果条件不变,则再次请求OrderSend()。或者我的推理和概念是错误的。我明白你想在块中写出返回值1或0,但我的函数很简单,与布尔值无关,如SignalBuy,如果我理解正确,返回值应该在那里返回。
我在函数后面有GetLastError,如果发生错误,不是会转到这个块吗(按照写法),命令就不会被执行?我明白这个链条,例如OrderSend() -> GetLastError -> 错误块Sleep(3000) RefreshRates() -> 退出该块,如果条件不变,则再次请求OrderSend()。或者我的推理和概念是错误的。我明白你想在块中写出返回值1或0,但我的函数很简单,与布尔值无关,如SignalBuy,如果我理解正确,返回值应该在那里返回。
我需要一些建议。根据条件,该仓位应被关闭,121秒后应打开一个新的仓位。我怎么能用Sleep(121000)来做呢?
日安!
我需要一些建议。根据条件,该仓位应被关闭,121秒后应打开一个新的仓位。我怎么能用Sleep(121000)来做呢?
OnTimer()来拯救
我刚刚重装了Windows 7,想安装Mt4,问题是文件无法下载,我应该怎么做?
谢谢!我从未使用过OnTimer(),这部分代码是在void OnTick()中。 那么OpenPosition()函数是否会由OnTimer()处理?如果可以的话,请纠正代码,如何在那里正确插入OnTimer()...
计时器是在OnInit()中启动的。
要开始倒计时,你需要在计时器中找到最后一个位置的关闭时间,并从这个时间开始计算121个苏昆德。为了传递允许你打开一个新位置的标志,使用一个全局变量,其范围涵盖整个程序。你可以让它最初包含一个大于121的值,例如122(你可以在设置中改变等待时间)。
在OnTick()中,检查这个变量。如果它大于121,并且没有头寸,你就打开一个头寸,在检查它是否成功打开后,将变量重置为零。
一旦仓位关闭,计时器就会看到关闭的时间(每秒连续进行一次),如果从当前时间到仓位关闭的时间少于121秒,计时器就开始计数--每秒钟的变量值就会增加1。
大约如此。其中可能存在一个错误--如果尚未平仓,其平仓时间等于零。这可能会导致启动倒计时的问题。例如,你可以将该变量重置为-1。
是的,别忘了在OnDeinit()中销毁定时器。
计时器是在OnInit()中启动的。
为了开始倒计时,你需要在计时器中找到最后一个位置被关闭的时间,并从该时间开始计算121秒。为了传递允许你打开一个新位置的标志,使用一个全局变量,该变量可由整个程序扩展。你可以让它最初包含一个高于121的值,例如122(你可以在设置中改变等待时间)。
在OnTick()中,你检查这个变量。如果它大于121并且没有位置--打开一个位置--在检查是否成功打开后,将变量重置为零。
一旦仓位关闭,计时器就会看到关闭的时间(每秒连续进行一次),如果从当前时间到仓位关闭的时间少于121秒,计时器就开始计数--每秒钟的变量值就会增加1。
大约如此。其中可能存在一个错误--如果尚未平仓,其平仓时间等于零。这可能会导致启动倒计时的问题。例如,你可以将该变量重置为-1。
是的,别忘了在OnDeinit()中销毁定时器。
明白了,谢谢。我希望能在一条线上完成,但可能我还得再努力一下。
我明白了,谢谢你。我希望能在一条线上完成,但我想这要花更多的功夫。