Добрый день.
К сожалению, не нашел, где у вас баг-трекер, поэтому пишу сюда.
Я разрабатываю коннектор для алгоритмической торговли через интерфейс C++ - Lua. В lua скрипте только лишь загружается библиотека, весь остальной функционал реализован на C++.
Выяснилось, что в момент вызова функции getSecurityInfo() в случае, если у терминала нет информации по запрашиваемой бумаге, он возвращает данные по бумаге, по которой у него был в последный раз удачный вызов. Если же до этого не было вызовов данной функции, терминал прекращает работу скрипта с сообщении о необработанном исключении. Могу предположить, что в этот момент в самом терминале происходит чтение неинициализированной памяти или нечто в этом роде.
Пример кода:
С уважением,
Андрей.
К сожалению, не нашел, где у вас баг-трекер, поэтому пишу сюда.
Я разрабатываю коннектор для алгоритмической торговли через интерфейс C++ - Lua. В lua скрипте только лишь загружается библиотека, весь остальной функционал реализован на C++.
Выяснилось, что в момент вызова функции getSecurityInfo() в случае, если у терминала нет информации по запрашиваемой бумаге, он возвращает данные по бумаге, по которой у него был в последный раз удачный вызов. Если же до этого не было вызовов данной функции, терминал прекращает работу скрипта с сообщении о необработанном исключении. Могу предположить, что в этот момент в самом терминале происходит чтение неинициализированной памяти или нечто в этом роде.
Пример кода:
| Код |
|---|
boost::shared_ptr<Security>
initFirstLegalSecurity(std::string const& class_code, std::string const& sec_code)
{
boost::shared_ptr<Security> result;
lua_getglobal(lua_state_, "getSecurityInfo");
lua_pushstring(lua_state_, class_code.c_str());
lua_pushstring(lua_state_, sec_code.c_str());
int result = lua_pcall(lua_state_, 2, 1, 0);
if(result == 0)
{
result = boost::shared_ptr<Security>(new Security(class_code, sec_code));
int item_idx = lua_gettop(lua_state_);
lua_pushnil(lua_state_);
while(lua_next(lua_state_, item_idx) != 0)
{
std::string key = lua_tostring(lua_state_, -2);
if(key == "scale")
security->setScale(lua_tonumber(lua_state_, -1));
else if(key == "lot_size")
security->setLotSize(lua_tonumber(lua_state_, -1));
else if(key == "min_price_step")
security->setMinPriceStep(lua_tonumber(lua_state_, -1));
lua_pop(lua_state_, 1);
}
}
lua_pop(lua_state_, 1);
return result;
} |
С уважением,
Андрей.
QuantPro Platform