初学者的问题 MQL5 MT5 MetaTrader 5 - 页 854 1...847848849850851852853854855856857858859860861...1503 新评论 [删除] 2018.05.01 19:48 #8531 我在摆弄CTrade::PositionClose(const ulong ticket,const ulong deviation=ULONG_MAX),并意识到它内部并不完全有序。这都是关于2个返回代码 - bool和ResultRetcode()。RetCode在返回false之前并不总是内部清零,所以如果PositionClose给出false,RetCode很可能返回TRADE_RETCODE_DONE。如果开发者能将这两个返回值同步化,那就更好了。 Vladimir Karputov 2018.05.01 19:50 #8532 . ... Rick D. ... .: 我在摆弄 CTrade::PositionClose(const ulong ticket,const ulong deviation=ULONG_MAX),并意识到它内部并不完全有序。这都是关于2个返回代码 - bool和ResultRetcode()。RetCode在返回false之前并不总是内部清零,所以如果PositionClose给出false,RetCode很可能返回TRADE_RETCODE_DONE。如果开发者能将这两个返回值同步化,那就更好了。代码+例子+日志。 [删除] 2018.05.01 21:43 #8533 我发现了一个奇怪的错误。也许这只适合我。 COrderInfo::OrderType() 总是返回0。 为了检查它,你可以手动放置任何挂单(BuyStop, SellStop, ...)。 然后把它输入到脚本中。 #include <Trade\Trade.mqh> COrderInfo m_order; void OnStart() { ulong ticket = 250262937; //здесь ваш тикет if (!m_order.Select(ticket)) { PrintFormat("COrderInfo::Select(#%I64u) failed", ticket); return; } PrintFormat("OrderType= %d", m_order.Type()); }也许是虚拟函数表的问题?在调试中,我只得到了虚拟int CObject::Type() PS。我自己已经想清楚了。COrderInfo有2个类似的方法:Type()和OrderType()。 [删除] 2018.05.02 11:19 #8534 Vladimir Karputov:代码+例子+日志。看看我说的是什么情况。 #include <Trade\Trade.mqh> CTrade m_trade; void OnStart() { int LErr; bool bRC; double price; ResetLastError(); price = 0.0; bRC = m_trade.Buy(0.1, "EURUSD", price, 0.0, 0.0); LErr = GetLastError(); PrintFormat("! Buy: (bRC= %s)(RetCode= %u: %s)(LErr= %d)", ticket, (string)bRC, m_trade.ResultRetcode(), m_trade.ResultComment(), LErr ); //В m_trade.ResultRetcode() теперь TRADE_RETCODE_DONE //--- ulong ticket = 1; //Позиции с таким тикетом нет ResetLastError(); bRC = m_trade.PositionClose(ticket); LErr = GetLastError(); PrintFormat("! Close #%I64u: (bRC= %s)(RetCode= %u: %s)(LErr= %d)", ticket, (string)bRC, m_trade.ResultRetcode(), m_trade.ResultComment(), LErr ); //В m_trade.ResultRetcode() все еще TRADE_RETCODE_DONE }我在CTrade 中没有看到任何SetResultRetcode和SetResultComment方法,以便在每次新操作之前重置它们。 我必须继承我的类,在那里我添加一个单一的方法 class CTradeEx : public CTrade { public: void SetResult(MqlTradeResult& result) { m_result = result; } }; Vladimir Karputov 2018.05.02 11:50 #8535 . ... Rick D. ... .:看看我说的是什么情况。 我在CTrade中没有看到任何SetResultRetcode和SetResultComment方法,以便在每次新操作之前重置它们。 为了什么?完全没有必要的功能。 第一:你在空中开枪--你在没有首先检查的情况下发送交易指令--没有检查操作的结果是什么。看一下参考文献:PositionClose 是bool类型的。 其次,让我们看一下位置关闭链:当位置没有找到时(它不能被指定的票选择),返回 "false"。 //+------------------------------------------------------------------+ //| Close specified opened position | //+------------------------------------------------------------------+ bool CTrade::PositionClose(const ulong ticket,const ulong deviation) { //--- check stopped if(IsStopped(__FUNCTION__)) return(false); //--- check position existence if(!PositionSelectByTicket(ticket)) return(false); string symbol=PositionGetString(POSITION_SYMBOL); //--- clean 在这一点上,结构没有被清除到任何地方--因为这没有意义--毕竟之前不能选择位置,因此结构中没有信息。 [删除] 2018.05.02 12:11 #8536 Vladimir Karputov:这有什么意义?完全没有必要的功能。 第一:你在空中开枪--你在没有首先检查的情况下发送交易指令--没有检查操作的结果是什么。让我们看一下参考资料:PositionClose 是bool类型的。 第二,让我们看一下位置关闭链:当位置没有找到时(它不能被指定的票选择),返回 "false"。 同时,这些结构在任何地方都没有被清除,因为这没有意义--毕竟之前无法选择位置,因此结构中没有信息。 1) 我们不妨说,ResetLastError()是一个绝对不必要的函数。 2)对返回的结果有一个检查。想象一下,通过类比,你调用一些WinAPI函数,它返回一个错误,而GetLastError()(ResultRetcode的类似物)返回任何最后的代码。 如果我在调用PositionClose之前添加一些检查(我会这样做),它不会在任何其他调用之前覆盖任何其他检查,此时RetCode不会改变。 我的专家顾问在日志中写了信息。我所需要的是在某些调用返回错误时,在日志中写下合理的ResultRetcode和ResultComment。 Vladimir Karputov 2018.05.02 12:37 #8537 . ... Rick D. ... .: 1) 我们不妨说ResetLastError()是完全不必要的。 2)对返回结果有一个检查。想象一下,通过类比,你调用一些WinAPI函数,它返回一个错误,而GetLastError()(ResultRetcode的类似物)返回任何最后的代码。 如果我在调用PositionClose之前添加一些检查(我会这样做),当RetCode没有改变时,它不会覆盖任何其他调用之前的检查。 我的专家顾问在日志中写了信息。我需要做的就是在某些调用返回错误时,在日志中写下合理的ResultRetcode和ResultComment。当你需要通过调用ResultRetcode()方法来检查交易请求的执行结果(交易服务器的返回代码) 时,请阅读CTrade类的帮助。 [删除] 2018.05.02 12:56 #8538 Vladimir Karputov:在CTrade类的帮助下, 阅读何时通过调用ResultRetcode()方法检查交易请求的执行结果(交易服务器返回代码)。你可以这样断言。 1)如果PositionClose返回false,那么Retcode就永远不会被填满? 2) 如果PositionClose返回true,那么Retcode总是被填充? Seric29 2018.05.02 16:57 #8539 Vladimir Karputov:订单->交易->头寸。从头寸中提取开盘价。你能展示一下这个订单->交易->头寸的图片吗,它在写交易的地方下面,所以它不允许复制那里。 Vladimir Karputov 2018.05.02 17:32 #8540 Seric29:你能否展示一张图片,说明这个订单->交易->仓位,它在底部写着交易,所以它不让你复制。 请重写你的问题或加上标点符号,或者最好在图片上加上什么、哪里和谁。否则,我就会发现,我看到了熟悉的字母,但却无法理解其含义和你的观点。 1...847848849850851852853854855856857858859860861...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我在摆弄 CTrade::PositionClose(const ulong ticket,const ulong deviation=ULONG_MAX),并意识到它内部并不完全有序。这都是关于2个返回代码 - bool和ResultRetcode()。RetCode在返回false之前并不总是内部清零,所以如果PositionClose给出false,RetCode很可能返回TRADE_RETCODE_DONE。如果开发者能将这两个返回值同步化,那就更好了。
代码+例子+日志。
COrderInfo::OrderType() 总是返回0。
为了检查它,你可以手动放置任何挂单(BuyStop, SellStop, ...)。
然后把它输入到脚本中。
也许是虚拟函数表的问题?在调试中,我只得到了虚拟int CObject::Type()
PS。我自己已经想清楚了。COrderInfo有2个类似的方法:Type()和OrderType()。
代码+例子+日志。
看看我说的是什么情况。
我在CTrade 中没有看到任何SetResultRetcode和SetResultComment方法,以便在每次新操作之前重置它们。
我必须继承我的类,在那里我添加一个单一的方法
看看我说的是什么情况。
我在CTrade中没有看到任何SetResultRetcode和SetResultComment方法,以便在每次新操作之前重置它们。
为了什么?完全没有必要的功能。
第一:你在空中开枪--你在没有首先检查的情况下发送交易指令--没有检查操作的结果是什么。看一下参考文献:PositionClose 是bool类型的。
其次,让我们看一下位置关闭链:当位置没有找到时(它不能被指定的票选择),返回 "false"。
在这一点上,结构没有被清除到任何地方--因为这没有意义--毕竟之前不能选择位置,因此结构中没有信息。
这有什么意义?完全没有必要的功能。
第一:你在空中开枪--你在没有首先检查的情况下发送交易指令--没有检查操作的结果是什么。让我们看一下参考资料:PositionClose 是bool类型的。
第二,让我们看一下位置关闭链:当位置没有找到时(它不能被指定的票选择),返回 "false"。
同时,这些结构在任何地方都没有被清除,因为这没有意义--毕竟之前无法选择位置,因此结构中没有信息。
1) 我们不妨说,ResetLastError()是一个绝对不必要的函数。
2)对返回的结果有一个检查。想象一下,通过类比,你调用一些WinAPI函数,它返回一个错误,而GetLastError()(ResultRetcode的类似物)返回任何最后的代码。
如果我在调用PositionClose之前添加一些检查(我会这样做),它不会在任何其他调用之前覆盖任何其他检查,此时RetCode不会改变。
我的专家顾问在日志中写了信息。我所需要的是在某些调用返回错误时,在日志中写下合理的ResultRetcode和ResultComment。
1) 我们不妨说ResetLastError()是完全不必要的。
2)对返回结果有一个检查。想象一下,通过类比,你调用一些WinAPI函数,它返回一个错误,而GetLastError()(ResultRetcode的类似物)返回任何最后的代码。
如果我在调用PositionClose之前添加一些检查(我会这样做),当RetCode没有改变时,它不会覆盖任何其他调用之前的检查。
我的专家顾问在日志中写了信息。我需要做的就是在某些调用返回错误时,在日志中写下合理的ResultRetcode和ResultComment。
当你需要通过调用ResultRetcode()方法来检查交易请求的执行结果(交易服务器的返回代码) 时,请阅读CTrade类的帮助。
在CTrade类的帮助下, 阅读何时通过调用ResultRetcode()方法检查交易请求的执行结果(交易服务器返回代码)。
你可以这样断言。
1)如果PositionClose返回false,那么Retcode就永远不会被填满?
2) 如果PositionClose返回true,那么Retcode总是被填充?
订单->交易->头寸。从头寸中提取开盘价。
你能展示一下这个订单->交易->头寸的图片吗,它在写交易的地方下面,所以它不允许复制那里。
你能否展示一张图片,说明这个订单->交易->仓位,它在底部写着交易,所以它不让你复制。
请重写你的问题或加上标点符号,或者最好在图片上加上什么、哪里和谁。否则,我就会发现,我看到了熟悉的字母,但却无法理解其含义和你的观点。