【发布时间】:2021-12-23 11:56:04
【问题描述】:
我收到一个错误,我在修复时遇到问题,因为递归尚未“陷入”。
它应该通过类 OrderManager 对象已经放置的符号数组并检查传入的符号是否已经存在,如果不存在则应允许交易,否则将阻止它(同一货币的多个订单复合风险)
[Error] '}' - not all control paths return a value.
我相信这是因为重新测试部分没有返回值,但我对制作自己的递归函数还是很陌生。但是也可能是因为我的基础和测试用例可能是错误的?
P.S 我在一些地方添加了 (SE) cmets 来阐明语言特定的东西,因为它非常接近 C++。
P.P.S 由于编译器错误,我不知道这是否符合 MVRC。对不起大家。
bool OrderManager::Check_Risk(const string symbol, uint iter = 0) {
if((iter + 1) != ArraySize(m_symbols) &&
m_trade_restrict != LEVEL_LOW) // Index is one less than Size (SE if
// m_trade_restrict is set to LOW, it
// allows all trades so just break out)
{
if(OrderSelect(OrderManager::Get(m_orders[iter]),
SELECT_BY_TICKET)) // Check the current iterator position
// order (SE OrderSelect() sets an
// external variable in the terminal,
// sort of like an environment var)
{
string t_base = SymbolInfoString(
OrderSymbol(),
SYMBOL_CURRENCY_BASE); // Test base (SE function pulls apart
// the Symbol into two strings
// representing the currency to check
// against)
string t_profit =
SymbolInfoString(OrderSymbol(), SYMBOL_CURRENCY_PROFIT);
string c_base =
SymbolInfoString(symbol, SYMBOL_CURRENCY_BASE); // Current base
// (SE does the same as above but for the passed variable instead):
string c_profit = SymbolInfoString(symbol, SYMBOL_CURRENCY_PROFIT);
// Uses ENUM_LEVELS from Helpers.mqh (SE ENUM of 5 levels: Strict,
// High, Normal, Low, None in that order):
switch(m_trade_restrict) {
case LEVEL_STRICT: {
if(t_base == c_base || t_profit == c_profit) {
return false; // Restrictions won't allow doubling
// orders on any currency
} else
return Check_Risk(symbol, iter++);
};
case LEVEL_NORMAL: {
if(symbol == OrderSymbol()) {
return false; // Restrictions won't allow doubling
// orders on that curr pair
} else
return Check_Risk(symbol, iter++);
};
default: {
// TODO: Logging Manager
// Hardcoded constant global (SE set to LEVEL_NORMAL):
ENB_Trade_Restrictions(default_level);
return Check_Risk(symbol, iter);
}
}
}
} else {
return true;
}
}
【问题讨论】:
-
@Ted Lyngmo 感谢您更好地格式化我的代码以便在 SE 上阅读。下次我会这样做
-
如果
OrderSelect调用返回false,Check_Risk返回什么值?