初学者的问题 MQL5 MT5 MetaTrader 5 - 页 81 1...747576777879808182838485868788...1503 新评论 Yedelkin 2013.01.15 09:01 #801 oldiol: 我在代码中写道:if(!m_Trade.PositionClose(_Symbol,100))//----我们按当前符号平仓。其结果是,位置颠倒了!如果能得到关于如何平仓的提示,我将非常感激。 位置颠倒了,因为程序向服务器发送了两个相同的请求。该程序向服务器发送了两个相同的请求,因为其代码没有检查是否存在先前发送的请求(也没有检查服务器上处理该请求的结果)。 oldiol 2013.01.15 09:30 #802 Yedelkin: 位置颠倒了,因为程序向服务器发送了两个相同的请求。该程序向服务器发送了两个相同的请求,因为其代码没有检查先前发送的请求(也没有检查服务器上处理该请求的结果)。 请把我的代码修正为正确的代码... oldiol 2013.01.15 09:41 #803 Yedelkin写道:它的代码没有检查以前发送的请求。你能告诉我这是哪个函数的检查吗? Yedelkin 2013.01.15 10:02 #804 oldiol: 请把我的代码改成正确的... 每个人对正确的代码都有不同的理解。所以你最后必须写出 "正确 "的代码。作为另一个提示--尝试看看这段代码是否以正确的方式工作(sendRequest标志的示意图使用)。bool sentRequest=false; //задать на уровне глобальных переменных программы ... if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) { if(!sentRequest) { if(p_close1<buy_stop_level) { if(!m_Trade.PositionClose(_Symbol,100)) Print("Метод PositionClose() потерпел неудачу. Код возврата=",m_Trade.ResultRetcode(),". Описание кода: ",m_Trade.ResultRetcodeDescription()); else { Print("Метод PositionClose() выполнен успешно. Код возврата=",m_Trade.ResultRetcode()," (",m_Trade.ResultRetcodeDescription(),")"); sentRequest=true; } } } else Print("Блок закрытия позиции: имеется POSITION_TYPE_BUY и ранее отосланный запрос на закрытие позиции"); } else if(sentRequest) sentRequest=false; oldiol 2013.01.15 10:13 #805 Yedelkin: 每个人对正确的代码都有不同的理解。所以你最后必须写出 "正确 "的代码。作为另一个提示--尝试看看这段代码是否在正确的键中工作(sendRequest标志的示意图使用)。非常感谢您!试试吧... oldiol 2013.01.15 10:49 #806 结果如下:代码正确地关闭了一个多头头寸,但没有打开一个空头头寸...当重新打开一个多头头寸时,EA并没有根据条件来关闭它。EA窗口中一直有信息。 我如何在专家顾问体中使用这段代码,如果它只工作一次)? Yedelkin 2013.01.15 11:08 #807 oldiol: При повторном открытии лонга, эксперт не закрывает больше позу по условию. В окне эксперта всё время идут сообщения: Как же использовать этот код в теле эксперта, если он работает только 1 раз)? 在这个问题上应该是很简单的。在原理图的代码中,如果开仓位置 不是买入位置,sendRequest标志应该被设置为零(代码的最后一行)。看看为什么在你的代码中,当没有未平仓头寸 或未平仓 头寸不是买入头寸时,这个标志不会被设置为零。 oldiol 2013.01.15 11:14 #808 万岁!它工作))))删除了if(sentRequest) sentRequest=false; 并在块前写上if(PositionsTotal()==0) sentRequest=false; 非常感谢Yedelkin的帮助,祝你好运! Yedelkin 2013.01.15 11:22 #809 oldiol: 删除了 if(sentRequest) sentRequest=false; 并在块前写上 if(PositionsTotal()==0) sentRequest=false。 所以主代码中没有位置检查?然后我想补充的是,使用PositionGetSymbol 或PositionSelect 函数来选择某个特定符号的位置。 oldiol 2013.01.15 11:25 #810 oldiol : 当重新打开一个多头时,EA不再按条件关闭头寸。在EA窗口中一直有信息:我如何在EA主体中使用这段代码,如果它只工作了1次)? 对不起,我的错误...代码中还有一个条件 如果(PositionSelect(_Symbol)==true) //有一个开放的位置{位置关闭块}// ...因此if(sendRequest) sentRequest=false;//把它放在下一个括号后面,一切都工作得很好。Yedelkin 谢谢你! 1...747576777879808182838485868788...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
位置颠倒了,因为程序向服务器发送了两个相同的请求。该程序向服务器发送了两个相同的请求,因为其代码没有检查先前发送的请求(也没有检查服务器上处理该请求的结果)。
Yedelkin写道:它的代码没有检查以前发送的请求。你能告诉我这是哪个函数的检查吗?
每个人对正确的代码都有不同的理解。所以你最后必须写出 "正确 "的代码。作为另一个提示--尝试看看这段代码是否以正确的方式工作(sendRequest标志的示意图使用)。
每个人对正确的代码都有不同的理解。所以你最后必须写出 "正确 "的代码。作为另一个提示--尝试看看这段代码是否在正确的键中工作(sendRequest标志的示意图使用)。
非常感谢您!试试吧...
结果如下:代码正确地关闭了一个多头头寸,但没有打开一个空头头寸...当重新打开一个多头头寸时,EA并没有根据条件来关闭它。EA窗口中一直有信息。![](https://c.mql5.com/3/14/0dx1n5_50z4u96x.jpg)
我如何在专家顾问体中使用这段代码,如果它只工作一次)?
oldiol: При повторном открытии лонга, эксперт не закрывает больше позу по условию. В окне эксперта всё время идут сообщения: Как же использовать этот код в теле эксперта, если он работает только 1 раз)?
在这个问题上应该是很简单的。在原理图的代码中,如果开仓位置 不是买入位置,sendRequest标志应该被设置为零(代码的最后一行)。看看为什么在你的代码中,当没有未平仓头寸 或未平仓 头寸不是买入头寸时,这个标志不会被设置为零。
万岁!它工作))))删除了if(sentRequest) sentRequest=false; 并在块前写上if(PositionsTotal()==0) sentRequest=false; 非常感谢Yedelkin的帮助,祝你好运!
oldiol : 当重新打开一个多头时,EA不再按条件关闭头寸。在EA窗口中一直有信息:我如何在EA主体中使用这段代码,如果它只工作了1次)? 对不起,我的错误...代码中还有一个条件
如果(PositionSelect(_Symbol)==true) //有一个开放的位置
{
位置关闭块
}// ...因此
if(sendRequest) sentRequest=false;//把它放在下一个括号后面,一切都工作得很好。Yedelkin 谢谢你!