Блог им. 3Qu |О быстродействии авто торговой системы.

    • 01 мая 2021, 02:25
    • |
    • 3Qu
  • Еще
На вечерке измерил быстродействие своей ТС. ТС обрабатывает в среднем ~2.8 запроса в секунду.
Если ТС занята обработкой предыдущего запроса, то следующий запрос пропускается и не обрабатывается. При этом рыночные данные в системе постоянно обновляются и всегда остаются актуальными для системы.
Ну, и о системе. Это Lua программа в паре с C++ DLL. Вся необходимая обработка производится в DLL. Lua является только источником рыночной информации — стакан, обезличенные сделки и свечи.

PS Начал заниматься тем, о чем написал в комментариях — попыткой ускорить обработку данных ТС до 4-5 запросов в секунду. Практически ничего не меняю — небольшая перекомпоновка программы C++ DLL, и обнаружил несколько уже ненужных операторов, оставшихся как мусор от этапа отладки.

Блог им. 3Qu |Лаборатория интрадея и скальпинга - ScalpLab.

    • 14 апреля 2021, 03:03
    • |
    • 3Qu
  • Еще
ScalpLab — не знаю, употреблял ли ранее кто такое название, м.б. оно уже кем-то зарегистрировано. Если так, то потом изменю на что нибудь типа ScalpJob, но пока, до выяснения, пусть будет ScalpLab.
Идея эта у меня не новая. Она была реализована для терминала АД 3.5, который приказал долго жить где-то в 2015 году. Компьютеры сменились, программа затерялась в архивах на старых дисках, технологии утеряны, а подробности реализации уже не вспомнить. Да и если будет реализация, толку не будет — взаимодействие терминала АД и Quik с внешним ПО построено на совершенно различных принципах и ничего общего не имеют.
Конечно, интрадеить из Quik можно, но скальпить уже весьма проблематично. Настройки стакана для этого весьма примитивны и особо не развернешься — можно второпях и щелкнуть не туда. А надо всего 2 кнопки Buy и Sell, все настройки и отступы автоматом, и, чтоб вообще не думалось.
В старой программе ScalpLab были не только Buy, Sell и настройки, это была именно лаборатория, со своими микротаблицами, индикаторами, типа столбцовых диаграмм и пр. вспомогаловки для скальпинга и интрадея. Графики там не нужны, их не нужно анализировать, нужны только результаты измерений и обработки — вся информация должа быть обработана подана максимально готовом виде.

( Читать дальше )

Блог им. 3Qu |Quik 8.11.0.66. Вот так номер. Шо, опять Win32, опять 32 бит?

    • 18 февраля 2021, 20:35
    • |
    • 3Qu
  • Еще
Сегодня брокер Альфа обновил Квик с версии 8.8… до версии Quik 8.11.0.66. Появился кроме Lua 5.3.5 еще и Lua 5.4.1. Отлично, мне бы радоваться, давно этого хотел. Но...
Запустил рабочую в Quik 8.8 версию системы использующую DLL, И увидел вот это:
Quik 8.11.0.66. Вот так номер. Шо, опять Win32, опять 32 бит?
Во первых, ничего не работает даже в уже отлаженной версии Lua 5.3.5. Вы видите на картинке, что Lua не нравится 64-бит DLL, и она хочет 32-битную.
Во вторых, то ли Quik стал опять 32-х битным (пока не смотрел), то ли Lua в Quik стала снова 32-х битной, а это означает, что все надо переделывать с 64 бит на 32 бит. С чем боролись, на то и напоролись. Вечный кайф.
Признаться, сильно лень переделывать все опять на 32 бит, тем более, многих библиотек для DLL С++ для 32 бит просто не существует в природе.
О моей борьбе с этим буду сообщать. Наверно, дополнением этого топика. Подписывайтесь, чтобы ничего не пропустить. Мало ли, м.б. решение и найдется.



  • обсудить на форуме:
  • QUIK

Блог им. 3Qu |Quik 8.5.2.11, Lua 5.3.5. Первые впечатления.

    • 01 июня 2020, 19:50
    • |
    • 3Qu
  • Еще
Quik, по сравнению с версией 8.2, стал несколько лучше. Меньше подвисает, но иногда бывает. Мелкие, наверно несущественные, изменения в интерфейсе — не сразу и заметил.
Lua 5.3.5, по сравнению с Lua 3.1, летает. То, что исполнялось несколько секунд, теперь пролетает практически мгновенно. В программах Lua никаких изменений делать не пришлось, мною не использовались специфические для Lua 5.1 конструкции.
Вот, DLL, цепляющиеся к Lua, все упали, в буквальном смысле. Пару дней разбирался, несколько изменился C-API, пришлось переделывать функции luaopen в DLL. Помогли ребята с http://quikluacsharp.ru/, если что — смотрите решение у них.
В DLL, по идее, еще надо переделывать int на 64 бит целое (при компиляции куча алармов на эту тему), но, кроме номеров заявок в обозримом будущем, не обязательно. Кроме заявок-сделок, таких номеров в инструментах нет. Пока, по крайней мере.

Блог им. 3Qu |Досужие размышления о Quik, Lua и Python.

    • 28 марта 2020, 16:03
    • |
    • 3Qu
  • Еще

Я уже писал, что у меня сделана C++ DLL, которая получает данные из Lua и пишет их в БД SQLite. Уже писал также, что DLL под Lua делается на раз, и даже приводил коды и шаблон проекта простенькой C++ DLL. Посмотрело несколько тысяч, скачало, аж 12 человек, применят от силы двое. КПД постов, прямо скажем, оч низкий.)

В DLL реализована как связь с Lua, и будет реализована сама стратегия, вот только не решил какая из них. Повторять старые стратегии на новой для меня платформе Quik уже неинтересно, а новых моделей АТС отработано уже несколько. Все моделируется в Python. Часть стратегий не требует сложной математики, и могут быть легко перенесены непосредственно на С++. Другие непосредственно в DLL перенесены быть не могут, т.к. используют пакеты Python — всяческие регрессии и машинное обучение.
В общем, получилось, что DLL является шаблоном для любой стратегии. Все необходимые для АТС данные доступны АТС — реал-тайм данные поступают в DLL непосредственно из терминала, а необходимая история пишется DLL в БД SQLite и читается АТС из базы данных.



( Читать дальше )

Блог им. 3Qu |Алготрейдинг, Quik и Visual Studio 2017.

    • 24 марта 2020, 14:04
    • |
    • 3Qu
  • Еще
Делаю новую алгоритмическую торговую систему (АТС) под Quik. Базовой в системе является достаточно сложная многопоточная C++ DLL, связывающаяся с Quik через Lua. Для разработки с самого начала использовалась VS 2015. Т.к. в настоящее время перешел на х64 Quik занялся перекомпиляций всего своего х86 софта под Quik на платформу х64.
Все бы ничего, но при больших рыночных потоках данных Quik начинал подтормаживать, а при подключении DDL, Quik подтормаживал еще сильнее и через некоторое время падал вместе с DLL. Переход на х64 существенно улучшил ситуацию, Однако эпизодические падения, значительно реже, но продолжались.
Надо сказать, что все эти многопоточности и были ранее введены в DLL для снижения нагрузки на Quik, чтобы не грузить поток событий терминала. Вся обработка событий заключалась лишь в том, чтобы преобразовать данные получаемые из Lua и отдать их соответствующему потоку для дальнейшей обработки.
В общем, о стабильной АТС приходилось только мечтать, и думать что дальше с этим делать.
У меня на компе давно без дела пылилась Visual Studio 2017. Требований к железу она предъявляет больше чем VS 2015, и я ее использовал считанные разы, скорее, чтобы посмотреть что в ней нового и отличия от VS 2015. Существенных отличий не заметил, и продолжал работать на старой VS 2015.

( Читать дальше )
  • обсудить на форуме:
  • QUIK

Блог им. 3Qu |Переход на 64-бит Quik. Пляски с DLL. 2.

    • 22 марта 2020, 18:00
    • |
    • 3Qu
  • Еще

Не далее как вчера опубликовал топик "Смена x86 Quik 7.27.2.1 на x64 Quik 8.4.1.6. Пляски вокруг DLL", где кратко рассказывалось как перекомпилировать проект С++ с платформы х86 на х64. Надеюсь, что у вас все уже получилось или получится.
Но я «крутой» программист, и, естественно, у меня вначале вообще ничего и никак не получалось. А так как проект большой, да еще и непонятно в чем дело, а своими экспериментами я могу вообще все испортить, то решил сделать маленькую простенькую DLL LuaProba.dll, на ней отработать переход на х64, и потом перенести это в большой проект.
Привожу код С++ DLL целиком:

// LuaProba.cpp: определяет экспортированные функции для приложения DLL.
//

#include "stdafx.h"
#include <stdio.h>
#include <string.h>

//=== Необходимые для Lua константы ============================================================================//
#define LUA_LIB
#define LUA_BUILD_AS_DLL

//=== Заголовочные файлы LUA ===================================================================================//
extern "C" {
#include "Lua\lua.h"
#include "Lua/lauxlib.h"
}

static int forLua_TestFunc(lua_State *L) // Возвращает заданный текст
{
        const char *cc = "Привет из C/C++ и от меня 2 раза"; //str.c_str();
        lua_pushstring(L, cc);
        return(1);
}

//= == Регистрация реализованных в dll функций, чтобы они стали "видимы" для Lua == == == == == == == == == == == == == == == ==//
static struct luaL_reg ls_lib[] =
{
        { "TestFunc", forLua_TestFunc },
        { NULL, NULL }
};

//=== Регистрация названия библиотеки, видимого в скрипте Lua ==================================================//
extern "C" LUALIB_API int luaopen_LuaProba(lua_State *L)
{
        luaL_openlib(L, "LuaProba", ls_lib, 0);
        return 0;
}
Весь проект DLL для VS 2015 можно скачать по ссылке - 

( Читать дальше )
  • обсудить на форуме:
  • QUIK

Блог им. 3Qu |Смена x86 Quik 7.27.2.1 на x64 Quik 8.4.1.6. Пляски вокруг DLL.

    • 21 марта 2020, 19:30
    • |
    • 3Qu
  • Еще

Признаться уже достал этот 32-битный Quik 7. Работать стало почти невозможно, начал подвисать практически на пустом месте. А если повесить на Quik Lua, а к Lua прицепить DLL, то вообще все эпизодически вставало. DLL-ки, вообще-то, многопоточные и освобождают вызывающие потоки (события) Lua практически за миллисекунды, но если таких событий много Quik встает. Хотя, он и без Lua и DLL тоже регулярно встает.)

Были и другие причины ухода от 32-бит Quik, но это уже связано с брокером и другими факторами.
Итак, новый брокер — новый 64-битный Quik 8.4.1.6. Наконец сбылась мечта идиота!
Что можно сказать, — х64 Quik работает гораздо лучше, все равно временами немного подвисает, но, вроде, некритично. После логин-пароля, прежде чем работать надо подождать, — потоки обезличенных сделок начинают работать только через 3-4 минуты после старта. В общем, с этим все более-менее ОК.
Следующий этап — надо переводить весь подключаемый к Quik софт с х86 на х64, и если есть исходники, то никаких проблем не должно появиться. Если вы не используете в своем софте каких либо дополнительных DLL, то все должно ограничиваться двумя действиями.
1. Меняете в проекте С++ в разделе Файлы ресурсов 32-битную версию файла Lua5.1.lib на 64-битную версию Lua5.1.lib,
2. Выставляете в свой свойствах проекта компиляцию в x64. Можно даже так:



( Читать дальше )

Блог им. 3Qu |Почему я не продолжаю тему "Quik->Lua->C++ DLL".

    • 02 марта 2020, 20:12
    • |
    • 3Qu
  • Еще
Посмотрите на тематику сайта последние 2-3 недели — коронавирус, кризис — уже наступил, или еще только собирается, покупать или продавать, обсуждение падения, от все пропала до мы еще о-го-го, и счас как отскочим в небеса.
До каких-то Lua, DLL и автоторговли сейчас нет никому никакого дела. Кто сейчас это будет читать, когда и в более спокойные времена читали лишь немногие. Писать просто так не хочется, писать для себя — мне это тоже не нужно.
В общем, решил подождать с этой темой до лучших, более спокойных, времен. А там посмотрим, м.б. высохнет, и само отвалится.
  • обсудить на форуме:
  • Quik Lua

Блог им. 3Qu |Брошенная стратегия. Дневник разработчика.

    • 06 февраля 2020, 16:47
    • |
    • 3Qu
  • Еще
Сегодня окончательно сделал и протестировал DLL. DLL через Lua получает из Quik реал-тайм данные о истории, состоянии текущей свечи, стакане, ленте сделок и пр., и поставляет все эти данные в ТС. Также DLL считает (пока не все) необходимые данные для оценки вектора текущего состояния инструмента, и также передает их ТС. Сама ТС еще не написана, только данные получает. DLL также пишет все получаемые данные в БД Sqlite, где они, при необходимости, доступны ТС.
И, чтобы не быть голословным, картинки.
История, последние 15 записей:
Брошенная стратегия. Дневник разработчика.

Лента сделок, последние 15 сделок.
Брошенная стратегия. Дневник разработчика.

( Читать дальше )

....все тэги
UPDONW