我希望其他人也遇到过这个问题。我是 MQL5 的新手(来自 pinescript),正在寻找使用该语言的方法。
按照文档的指导,建议在调用
PositionSelect()
之前先调用PositionGetInteger()
,例如:
int openPositions(ENUM_POSITION_TYPE type) {
int count = 0;
//if (PositionSelect(_Symbol)) {
for (long i = 0; i < PositionsTotal(); i++) {
if (PositionGetInteger(POSITION_TYPE, i) == type) {
count++;
}
}
//}
return count;
}
如果我启用该
PositionSelect(_Symbol)
条件,MT5 回溯测试将“冻结”,并且在进行几笔交易后不会执行任何操作。然后我必须单击“停止”才能恢复功能。
代码似乎无需进行该检查即可正常工作,但文档建议进行该调用,并且我也看到其他教程使用它......那么到底是什么?
对这里发生的事情有什么想法吗?
谢谢
通过 MQL5.com 论坛获得帮助。答案是:
int openPositions(ENUM_POSITION_TYPE type) {
int count = 0;
for (int i = 0; i < PositionsTotal(); i++) {
if (!PositionGetTicket(i)) {
Print("ERROR: PositionGetTicket() failed, error code: ", GetLastError());
continue;
}
if (PositionGetInteger(POSITION_TYPE) == type)
count++;
}
return count;
}
文档在这方面令人困惑:PositionGetTicket() 和 PositionSelect() 都应该在 PositionGetInteger() 之前使用,但一个会冻结,另一个可以工作。
哦,好吧。
if (PositionSelect(i)) { //选择这个错误