double count_time_diff(std::chrono::time_point<std::chrono::system_clock> t)
{
auto end = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = end - t;
return elapsed_seconds.count();
}
bool deleteOrder(Symb_data params, int order_num, bool is_stopOrder, lua_State *L)
{
lua_settop(L, 0);
bool ans = false;
Ttransaction T(L, params);
int trans_id = T.trans_id();
T.classcode();
T.seccode();
if (is_stopOrder)
{
T.action(order_Action::KILL_STOP_ORDER);
T.stop_order_key(order_num);
}
else
{
T.action(order_Action::KILL_ORDER);
T.order_key(order_num);
}
std::string res = sendTransaction(T);
if (res.compare("") == 0)
{
ans = true;
auto doLoop = [&]()
{
bool ans = false;
std::vector<OrderData> orders;
if (get_Orders_Info(orders, params))
{
for (size_t i = 0; i < orders.size(); i++)
{
if (orders[i].trans_ID == trans_id)
{
ans = true;
break;
}
}
}
return ans;
};
auto start = std::chrono::system_clock::now();
while (count_time_diff(start) <= 30 && doLoop())
{
Sleep(1);
}
if (doLoop())
ans = false;
}
else
{
res = "Ошибка удаления ордера:\n " + res;
msg_ToQuik(L, res, 3);
}
return ans;
}
Да, хоть я и пишу на С++, но все работает. Данная функция справляется со своими задачами на фьючерсах, а вот лимитку на акциях удалить не получается...
Кстати говоря, написал вам тут как делаю, после сам интереса рази пересобрал все быстро в Луа - и понял что поспешил позоже. (луа скрипт сработал в отличии от моего), придется свое творение дебагить получше
Похоже все таки какая то ошибка происходит во время стыковки с квиком, так как для фьючерсов описанный мною способ работает верно, а вот для акций - возвращает не верное значение запрашиваемого параметра.