finsight / QUIKSharp

QUIK# (QUIK Sharp) is the QUIK Lua interface ported to .NET.
Other
232 stars 135 forks source link

После обновления Quik до 8.11.0.66 QuikSharp перестал работать! #286

Open ipARTEM opened 3 years ago

ipARTEM commented 3 years ago

Я так понимаю это связано с переходом на Lua 5.3.5 и Lua 5.4.1. Подскажите, пожалуйста, что нужно сделать, чтобы библиотека заработала?

Pr0phet1c commented 3 years ago

Маловероятно. Я на этой версии квика сегодня утром запускался, на сколько помню. Все работало

ipARTEM commented 3 years ago

Я обновил только Junior, значит если обновлю Quik на Брокере Открытие будет работать?

Pr0phet1c commented 3 years ago

Я не могу этого знать, но в открывашке сегодня точно работал. Если правильно помню, утром была именно эта версия терминала, а потом было обновление (версию не посмотрел), и там тоже все работало. С "игровыми" версиями не работаю, там могут быть свои особенности

ipARTEM commented 3 years ago

Ок, спасибо

ArcCosec commented 3 years ago

У меня тоже QuikSharp не заработал на Quik-Junior 8.11.0.66. При попытке запустить QuikSharp.lua Квик виснет или завершается с критической ошибкой. На форуме Квик есть жалоба на некорректную работу lua-скрипта в Квик 8.11.0.66.

Pr0phet1c commented 3 years ago

В общем, наступил понедельник. Текущая версия "боевого" терминала в открывашке - 8.11.0.66. Роботы взлетели без каких-либо проблем. Единственное, что могу предложить - это проверить, что вы используете самую последнюю версию библиотеки (в том числе файл QuikSharp.lua). В конце ушедшего года мы внесли изменения в методику определения версии терминала. Возможно, вы не обновлялись, и сейчас столкнулись с проблемами именно из-за этого,

ipARTEM commented 3 years ago

Я понял, я .dll собирал из файла RobotDemo, там Lua не переделана. Сделал .dll из QuikSharpDemo всё заработало!

Pr0phet1c commented 3 years ago

Странный подход (IMHO). Если Вы скачали полный исходный код, то наиболее корректным решением будет полная перекомпиляция всего решения на своей машине. Если все прошло без ошибок, то уже не так важно откуда вы dll забираете. Да и проверять потом проще. Если перестал работать "Ваш" робот, то для проверки запускаете демо-приложение. Если демка работает - значит проблема скорее всего в Вашем роботе. Если демка НЕ работает - значит возможно проблема более глобальна.

Pr0phet1c commented 3 years ago

@ArcCosec, а у Вас как обстоят дела? Проблема решилась?

ArcCosec commented 3 years ago

Я как временное решение эти дни использовал предыдущую версию quik. Сейчас всё перезалил и перекомпилировал, и всё заработало. Спасибо за помощь. Есть одна реплика и один вопрос.

Реплика. По поводу комментария ipARTEM. Когда перезаливаешь QuikSharp, недостаточно его откомпилировать и откомпилировать свой проект. Нужно еще удалить QuikSharp.dll из папки с исполняемым файлом своего проекта, чтобы подтянулась свежая версия QuikSharp.dll. По крайней мере у меня так.

Вопрос. Есть ли простой способ получать информацию, что в QuikSharp внесены критические изменения, и нужно скачивать свежий QuikSharp?

ArcCosec commented 3 years ago

Случайно обнаружил, что в свежескаченном (12.01.2021) QuikSharp не работает пример DemoRobot: зависает на строчке _quik = new Quik(Quik.DefaultPort, new InMemoryStorage()); Тестировал на демо-квике 8.11.0.66. Коллеги, проверьте, пожалуйста, у себя. Это проблема библиотеки или у меня что-то не так?

Pr0phet1c commented 3 years ago

@ArcCosec, Попробуйте сегодняшнюю версию. Должно работать.

ArcCosec commented 3 years ago

Теперь предыдущую строчку (создание _quik) проходит нормально. Входит в позицию и тут же зависает на строке 611 (файл FormMain.cs):

position.entranceOrderNumber = _quik.Orders.GetOrder_by_transID(tool.ClassCode, tool.SecurityCode, position.entranceOrderID).Result.OrderNum;

с исключением System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."

Параметры (ClassCode, SecurityCode, OrderID) вызова метода GetOrder_by_transID корректные. Причем, если пошагово (F11) зайти в этот метод, то номер заявки возвращается нормально. И, кстати, какой Lua-аналог метода GetOrder_by_transID? Я сходу не нашел.

Pr0phet1c commented 3 years ago

Явного аналога этой функции в Lua нет. Я ее делал для удобства. Немного переделал робота, чтобы оперативно решить проблему. Можете забирать. Однако, учитывайте, что эта реализация робота сильно далека от нормальной. Лучше сделать что-то свое, с различными проверками результатов и обработкой ошибок.

ArcCosec commented 3 years ago

Ошибка исчезла, но появилась другая )). Набрав лонговую позицию (16 транзакций), робот зачем-то отправил транзакцию с отрицательным количеством -1 и на этом завис. Может он хотел закрыть позицию таким образом)).

Я пишу свой велосипед. Пока еще плохо ориентируюсь в библиотеке, и на примеры смотрю как на учебник. Раз уж пошла такая пьянка, чтобы два раза не вставать, можно попросить еще немного поправить код. При каждом скачивании библиотека не компилируется или работает с ошибками, и приходится вносить одни и те же исправления:

  1. Profiler собран на .NET Framework 4.5 и не видит QuikSharp, собранный на 4.6.1. Т.е. нужно изменить в свойствах у Profiler .NET на 4.6.1.
  2. В Profiler ссылка на QuikSharp нерабочая. Обновить ссылку.
  3. В Profiler в файле Program.cs в строках 11 и 43 синтаксические ошибки: в DebugFunction не хватает второго аргумента - Quik.DefaultHost.
  4. В проекте RobotDemo в файле FormMain.cs в строке 140 добавить класс QJSIM. Иначе в демо-квике метод GetSecurityClass зависает и не возвращает класс QJSIM для демо-бумаг.
  5. Тоже самое в проекте QuikSharpDemo: в файле FormMain.cs в строке 142 нужно добавить QJSIM.
Pr0phet1c commented 3 years ago
  1. Готово
  2. Готово
  3. Готово
  4. Я против "затачивания" библиотеки под демо-квик. Библиотека создавалась под "боевой" терминал, Если в последствии в демо-квике появятся вещи прямо противоречащие боевой версии терминала - это приведет к проблемам. Список классов задается пользователем, на основе его предпочтений. Я задал тот список, который показался уместным и достаточным лично мне. Для своих целей Вы можете использовать свой список.
  5. то же, что и в п.4

Что касается работы робота: Похоже, как-то неправильно он работает именно у Вас (возможно как раз из-за демо-терминала). Данный робот никогда не должен набирать позицию больше чем указано в поле "Количество торгуемых контрактов". По умолчанию - это один контракт, т.е. размер позиции никогда не должен быть больше 1. У меня, при проверке в боевом режиме, все работает корректно.

ArcCosec commented 3 years ago

Спасибо вам за пункты 1-3. У меня, правда, пункт 2 почему-то не реализовался. Т.е. в проекте Profiler ссылка на QuikSharp присутствует (она и раньше была), но в свойствах ссылки на QuikSharp не указан путь (и раньше не был указан). Приходится удалять ссылку на QuikSharp, и заново добавлять. Посмотрите, пожалуйста, что там не так с путем.

Что касается пунктов 4-5. Полностью вас поддерживаю в том, что ценность библиотеки в стабильной работе в боевом терминале. Но я же просил немного о другом. Уверен, что популярность библиотеки идет только ей на пользу. И знакомство с библиотекой начинается обязательно с демо-квика. До сегодняшнего дня после первой компиляции высыпалось пару-тройку десятков ошибок, и неискушенный программист-любитель навсегда уходил, считая библиотеку сырой поделкой. Если вы поправите пункт 2, ошибок компиляции не будет. Но на демо-бумагах ни RobotDemo, ни QuikSharpDemo не заработают. И далеко не каждый продолжит выяснять, почему демонстрационные примеры "из коробки" не работают.

Считаю критически важным, чтобы первое впечатление от библиотеки не смазывалось её неработоспособность на демо-квике без допиливания. В данном локальном случае речь идет о добавлении к существующим 7 классам еще один демо-класс. Причем, не в самой библиотеке, а в демо-примерах. Мне кажется, это абсолютно никак не повлияет на стабильность и производительность в боевом режиме, но существенно увеличит привлекательность библиотеки у начинающих её осваивать.