Closed ildarskii closed 1 year ago
Эта функция на данный момент действительно не реализована. ЕСли будет время - постараюсь реализовать. Как сейчас можно получить эту информацию в Q# к сожалению не знаю.
Готово. Пользуйтесь
Функции GetBuySellInfo и GetBuySellInfoEx появились в библиотеке, спасибо. Но при их вызове ничего не возвращается и код зависает в бесконечном ожидании. Остальные функции вроде GetParamEx работают хорошо...
Попробуйте перезагрузиться, чтоб изменение qsfunctions.lua прошло У меня все работает. Спасибо
А попробуйте запустить для акций ВТБ функцию GetBuySellInfo(Firmid, clientCode, "TQBR", "VTBR", 0). У меня возвращает пустые значения (отсутствие плеча): DLong = null, DShort = null, LongCoef = "1.000000" Тогда как в таблице Квик вижу DLong = 0.4, DShort = 0.37
При этом если вызвать с другими параметрами GetBuySellInfo(Firmid, clientCode, "INSTR", "RUR_2", 0). (такой инструмент и класс тоже есть в справочнике квик, что бы он ни значил), то программа зависает. А функция GetBuySellInfoEx(..) зависает даже если запросить по ВТБ. Было бы разумным возвращать управление назад с кодом ошибки, без зависания.
GetBuySellInfo не возвращает DLong, DShort. Тут все правильно
DLong, DShort возвращает функция GetBuySellInfoEx(..) Чтобы она заработала, нужно слегка подкорректировать файл src/QuikSharp/DataStructures/BuySellInfo.cs
/// <summary>
/// Срок расчётов. Возможные значения: положительные целые числа, начиная с «0», соответствующие срокам расчётов из таблицы «Позиции по инструментам»: «0» – T0, «1» – T1, «2» – T2 и т.д.
/// </summary>
[JsonProperty("limit_kind")]
public int LimitKind { get; set; }
public int LimitKind { get; set; } поменяйте на public string LimitKind { get; set; } После этого должно заработать
Да, так заработало. Включите исправление в master версию?
И по второй технической проблеме зависания. По некоторым инструментам вызовы функций GetBuySellInfo и GetBuySellInfoEx зависают. Например, вот такой вызов GetBuySellInfoEx(Firmid, clientCode, "TQOB", "SU25085RMFS0", 0) GetBuySellInfoEx(Firmid, clientCode, "PSAU", "RU000A0NR748", 0) GetBuySellInfoEx(Firmid, clientCode, "PSAU", "RU000A105ZN3", 0)
Было бы правильно завершить работу функции с возвратом соотв. статуса или значениями по умолчанию. Подскажете где и что исправить?
Внести сам правки не смогу, т.к. не разработчик библиотеки.
По второму вопросу, попробуйте отредактировать таблицу "купить/продать" средствами самого quikа. Добавьте в нее все инструменты с которыми работаете или планируете работать. Возможно это и будет решением.
Добавление в таблицу квик инструментов не помогло, все равно зависает на них. Плюс нужно системное решение, т.к. набор инструментов и значение плеча по ним динамически меняются.
Проблему с зависанием решил через асинхронные запросы. Вложенный Task нужен, чтобы не было блокирующего ожидания.
var t = new Task(() => { var task = Task.Run(() => QuikLua.Trading.GetBuySellInfoEx(Firmid, clientCode, classCode, secCode, 0));
if (task.Wait(100)) // если не завис запрос
{
DLong = task.Result.DLong;
Console.WriteLine($"{DLong}");
}
}); t.Start();
Кстати, столкнулся с неожиданным поведением библиотеки QuikSharp - она не совместима с официальной последней версией пакета Newton.Json 13.0.3, хотя в настройках QuikSharp это не указано. Было бы правильным прописать в настройках несовместимость.
С учетом вышесказанного, изначальная проблема решена. Спасибо.
Согласно документации Quik Lua значение плеча можно получить с помощью функции getBuySellInfo() через поле long_coef.
В реализации QuikSharp в классе TradingFunctions функция getBuySellInfo() отсутствует (она закомментирована).
Подскажите, как можно получить значение плеча по инструменту в библиотеке QuikSharp?