Anton (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Несколько вопросов по оптимизации производительности
 
Нормальный способ есть, создаем таблицу луа с ключами - кодами бумаг и значениями boolean, в колбеке вместо тысячи иф просто берем из этой таблицы значение по коду бумаги (луа индексирует таблицу за O(1)). Получаем
1) true - бумага нам известна и выбрана для обработки
2) false - бумага нам известна и не выбрана для обработки
3) nil - бумага нам неизвестна, сигналим юзеру, что появилась новая и нужно его решение. Естественно, не из колбека сигналим, иначе повесим квик.
Но вот наличие фильтров эту простую и эффективную схему портит, появляется неопределенность, стоит там галка не стоит, а может кто-то открывал таблицу и закрыл потом и галка сбросилась, а может еще тысяча вариантов. Чистой воды убийство детерминизма эти фильтры.
Несколько вопросов по оптимизации производительности
 
Цитата
NoWay написал:
насколько критично будет для моих целей постоянно проверять лишние 200-500 опционов , а раз в минуту - 12 тысяч ( когда у них поменяется теор цена и OnParam вызовется каждым опционом)
Не будет критично. Вся ТВС за день выкидывается скриптом за секунды, а там миллион-два записей есть. Можете попробовать запустить следующий скрипт и перезаказать ТВС, увидите, насколько медленнее будет работать, чем без скрипта (спойлер - ненамного).
Код
local stopflag = false
local f = io.open(getScriptPath() .. "\\attlog.txt", "w")

main = function()
   while not stopflag do
      sleep(1000)
   end
end

OnS top = function()
   stopflag = true
end

OnAllTr ade = function(t)
   f:write(string.format('%s %s\n', t.class_code, t.sec_code))
end
Несколько вопросов по оптимизации производительности
 
Цитата
NoWay написал:
простое решение вопроса.
Простейшее решение это
Код
if (нужная бумага) then
    делаем что надо
end
И это по-любому надо делать, так как откроете табличку какую-то "чисто посмотреть", даже при наличии фильтров, и все из нее к вам в скрипт поедет все равно. А вот когда к вам что-то не приехало, вот тут начинается метание икры, то ли фильтр какой-то включен, то ли просто сделок нет, то ли вам брокер бумагу отрезал. Зачем вот эти сложности себе создавать, один if все решает и ничего не стоит ни в плане сложности написания, ни в плане производительности квика, ни в плане трафика, все равно откроете любой новостной сайт и загрузите недельный квиковский трафик за три минуты.
Несколько вопросов по оптимизации производительности
 
Воистину "не ведаете, чего просите". Уже выпросили фильтры ТВС, в результате потеряли контроль над списками получаемых бумаг со стороны скрипта, еще вот здесь надо добавить, чтобы уже на глушняк. У меня другое предложение - выкинуть к чертовой матери все фильтры, пусть всегда едет все, что есть на сервере, скрипт сам может разобраться, что сохранять/обрабатывать, а что игнорировать.
Линии тренда
 
Цитата
nero333 написал:
Это как?
Ну как-то так примерно
Код
int y = *static_cast<int>(nullptr);
Результатом будет немедленный крэш скрипта (а если повезет, то и квика целиком). То есть то же самое, что и при описанном вами подходе. Хочется надеяться, что *** работает все-таки как-то не так.
Линии тренда
 
Цитата
nero333 написал:
 Устанавливаете одну из точек линии тренда на какое-то значение, например 12,35467, потом ищете все ячейки памяти, в которые записано это значение, и смотрите, какая из этих ячеек меняет значение при перетаскивании линии тренда или этой точки. Эта ячейка и содержит Y-координату одной из точек тренда. *censored* так работает.
Есть же способ проще, сразу кастуем ноль к инт пойнтеру и читаем оттуда координату. Отхватим тот же акцесс виолейшен наиболее эффективным образом. Что удобно, после перезапуска квика адрес ячейки не меняется, как был нулем, так и остается.
Как узнать путь к папке, из которой запущен QUIK?
 
Цитата
Imersio Arrigo написал:
почемуто мне кажется что она вернет "рабочий каталог", т.е. тот куда Квик пишет свои файлы, и который, тащемта, может отличаться от пути где info exe.
Тоже не проверял, но ежли вдруг окажется так, можно GetModuleFileName(NULL) + PathRemoveFileSpec завернуть в длл.
QUIK 8.0
 
Цитата
Анатолий написал:
при  сборке проект начал ругаться  на нехватку многих хедеров
Долго ли, коротко ли, скачал я эту либу, посмотрел. Там автор сильно автоматику любит, симейки там всякие, а я наоборот на дух их не перевариваю, так что "простой" способ, видимо, не сообщу. Чуть более сложный - это подтянуть зависимости руками, в deps/auxiliar это https://github.com/zhaozg/lua-auxiliar, в deps/lua-compat это https://github.com/keplerproject/lua-compat-5.3 и собрать все это мейкфайлом, не студией. Сам по себе процесс примитивнейший, запускаете VisualStudioCommandPrompt (x64), переключаетесь в папку проекта и командуете nmake -f Makefile.win, после чего все должно само и собраться, ежли, конечно, там других косяков нет.

Что касается openssl, просто скачайте 64-битные бинарники, там версия луа ни на что не влияет.
QUIK 8.0
 
Цитата
Анатолий написал:
- я так понимаю это потому что что дллки для луа53, уже не раз пробовал - дллки от луа51 неработают в луа53 и наоборот
Там куча причин. Во-первых, по дефолту у него стоит DLL рантайм, у вас встроенный, судя по размеру получившейся длл. Во-вторых, он озаботился-таки совместимостью с луа 5.1. Для этого он добавил compat.h и compat.c. По-хорошему надо было из них отдельный либ-проект сделать (третий), но он вот так решил, что и заставило его делать общий intermediate directory, на что у вас потом студия ругалась. Там надо препроцессору указывать LUA_VERSION_NUM=501 в обоих проектах, это включит замены из compat, проверяется этот макрос в двух местах, тут и тут, и видно, что без макроса весь этот код просто игнорируется. Вот тогда можно с чистой совестью менять в настройках линкера 5.1 на 5.3 и подсовывать собственно либу 5.1. Ну и все сорцы на винде компилировать не нужно, там часть их никсовые. Вреда от них, впрочем, быть не должно, линкер выбросит, если что. Раз все работает (хотя я и не понял, почему), то пусть так и будет, видимо.
Цитата
Анатолий написал:
Может будете так добры что поможете еще и библиотечку SSL под луа 64бит скомпилить?
Саму openssl настоятельно рекомендую скачать собранную, они есть. Ибо тот факт, что она собралась и запустилась, совсем не значит, что там хоть какой-то уровень безопасности получился. Обертку вечером гляну, даже скорее ночью, пока ничего сказать не могу.
QUIK 8.0
 
В общем, качнул я с гитхаба эту штуку, посмотрел. Там два проекта действительно, причем в настройках автор, похоже, решил показать "глядите как умею", так что в итоге проще свои проекты создать, чем в этом арт-объекте разбираться. Общая длл, скорей всего, получилась, только, видимо, через require луа ее не загрузит, а через package.loadlib сможет.
QUIK 8.0
 
Цитата
Анатолий написал:
там действительно прописано - lua53.lib причем изменить невозможно,
А там и нельзя менять, этот экран просто показывает, что поедет в командную строку, для тех, кому интересно. Менять надо раньше, оно должно быть в настройках линкера, вот там можно поменять lua5.3 на lua5.1, но, конечно, если проект захочет чего-то, чего в 5.1. нет, так он этого и не найдет. А если автор просто вписал 5.3, потому что "стильно модно молодежно", то прокатит.
Цитата
Анатолий написал:
Но в отличие от того что у меня собралась одна dll'ка  размером  108 Кб в проекте у Нехаба собралось две dll'ки  -  core.dll размером 18,5 Кб и 52 Кб  в двух разных каталогах -  mime и socket соответственно,  так что же в итоге получилось у меня и у Нехаба?
В студии строго один проект - один выход. Значит, у него там два проекта в одном солюшене. Получилась ли совмещенная длл? Возможно. А возможно нет. Тут надо взять dependency walker (x64), открыть им эти три длл и поглядеть, что они экспортируют. Ну и в деле попробовать.
Цитата
Анатолий написал:
И почему у Нехаба проект лупил ошибки когда я ему подсунул либу и хедеры от луа51 вместо луа53 а у меня не ругался и скомпилился?
Судя по ошибкам, он сам что-то не то в проектах накрутил. Intermediate directory у проектов действительно должны быть разные, можно там конечно руками поправить, но так тут поправил, там поправил, и опять вышло что-то свое. Вообще говоря есть такая проблема, программеры как-то слабо шарят в процессе сборки проектов студией, иной раз глянешь в настройки - там дичь лютая. Ну привык чел всю жизнь мейкфайлами собирать, что тут сделаешь.
Цитата
Анатолий написал:
Т.е. Нехаб получается изначально задумал исходники строго под луа53? А под Луа5.1 что? Надо более ранние качать или эти все таки могут пойти? Надо будет конечно попробовать в работе дллку что я скомпилил, может и заработает, и вообще возможно ли заставить заработать дллки от луа53 в луа51?
Без детального разглядывания сорцев на первый вопрос не ответить. Повторюсь, если он просто обновил зависимости, оставив код совместимым с 5.1, все и так работать будет, если завязался на что-то новое из 5.3 - то не будет, придется действительно более старые версии смотреть.
Цитата
Анатолий написал:
(В квике ведь Луа51, разрабы не спешат за прогрессом а жаль)
На самом деле не жаль. Вот эта вот бесконечная свистопляска с "новыми версиями", три буквы поменяли, но ничего уже не совместимо, это все очень здорово для индустрии, все типа при деле, все премии получили, а юзеры там пусть пляшут как хотят, это не то, что хотелось бы видеть под названием "прогресс".
QUIK 8.0
 
Цитата
Анатолий написал:
Цитата
Anton написал:
система та же
Вписал в препроцессор _WINSOCK_DEPRECATED_NO_WARNINGS, теперь другие ошибки  ))))))))))    
Тут уже можно промежуточные поздравления выдать, компилятор у вас до конца отработал, это уже линкер плачет. Во-первых, ему не хватает либы winsock, ws2_32.lib надо вписать в зависимости. Самое простое это в одном из сорцев (.c или .cpp) дописать где-нибудь #pragma comment(lib, "ws2_32.lib") на отдельной строке. Во-вторых, у вас где-то стоит неправильный рантайм, ну то есть у одних файлов например MultiThreadedDebug, а у других MultiThreaded, либо разные SDK. Об этом первая ошибка на скрине. Тут надо тщательно настройки посмотреть, чтобы одинаковые были.
QUIK 8.0
 
Цитата
Анатолий написал:
 Вписал, теперь другие ошибочки полезли    
Теперь вот этот вот макрос, что в описании ошибок предлагается, надо в препроцессор вписать. Как с crt ворнингами, система та же.
Запись в файл из разных потоков скрипта
 
Цитата
Constantin написал:
   Где-то было написано, что в QLua доступ к глобальным переменным синхронизирован для потоков.
Малость оффтоп, но никак не могу мимо пройти, не упомянув эту тему, очень хорошо все разрыто, особенно для сишников. Жаль нельзя тут ветки "поднимать", эта достойна закрепления.
Заявки в QUIK
 
Если не видели, предлагаю почитать для общей картины, хоть это и не совсем в тему вопроса, более базовый уровень, но написано уж больно хорошо, а там, глядишь, некоторые ответы станут очевидными, а другие легко найдутся в доках квика.
QUIK 8.0
 
По поводу неработающего DDE я думаю вот в эту сторону, другое что-то придумать сложно. При условии, конечно, что квик и эксель работают от одного юзера на одной машине, в офисе все настроено "нормально" и никакие касперские препятствий не чинят. Самому разбираться некогда, вбрасываю идею, а верная или нет надо смотреть.
QUIK 8.0
 
Цитата
Анатолий написал:
не посоветуете ли где об устройстве ДДЕ почитать можно?
DDE хорошо описан в книге Петзолда (или Петцольд, по-разному пишут). По сути там вообще ничего сложного нет, окна посылают друг другу сообщения. Единственное, что могли поломать, - это когда вводили ограничения на обмен некоторыми сообщениями, то ли с восьмерки, то ли как раз с десятки. На память не скажу, какие именно запрещали, но что-то было. Может краем и коснулось.
Цитата
Анатолий написал:
поправил везде на < > но ничего не изменилось
Эт вы напрасно. Кавычки - значит файл лежит в папке проекта, скобки угловые - искать его "по стандартному пути". А где именно искать надо вписать в
 
Полноэкранный режим, Расширение окна программы на весь экран с горячими клавишами
 
Цитата
И Г О Р Ь написал:
"F11"
Папочку из архива вытащите в папку квика, скрипт в квике запустите и будет вам F11. Только дочерние окна не масштабируются, так себе игрушка. И не останавливайте скрипт, пока в фулскрине, - обратно не выберетесь )
QUIK 8.0
 
Цитата
Анатолий написал:
Раз уж на то пошло
Про десятку мало что могу сказать, по идее, если бы длл не находились, ошибка была бы другая, хотя тут у арки надо спрашивать. Попробуйте не в эксель экспортнуть, сразу будет ясно, квик ли виноват или винда с офисом. Хоть бы в эту шнягу
QUIK 8.0
 
Цитата
новичок написал:
 дык это надо выяснять до разадачи цу, имхо
Потом уже в код посмотрел, сначала только на скрины. Впрочем, там автор именно что забил болт на виндовые ворнинги. Ну есть же уже условная компиляция, что мешало нормально написать-то.
Код
#ifdef _WIN32
        d->hFile = 0L;
        if (strlen(path) > MAX_PATH-2)
          luaL_error (L, "path too long: %s", path);
        else
          sprintf (d->pattern, "%s/*", path);
#else
        d->dir = opendir (path);
        if (d->dir == NULL)
          luaL_error (L, "cannot open %s: %s", path, strerror (errno));
#endif
QUIK 8.0
 
Цитата
новичок написал:
 не нужно сравнивать теплое и мокрое.
когда речь о бизнес-проектах, то решение пишется под тех. задание заказчика и фиолетово какая там ось или что-то еще
а учебные поделки - везде остаются самими сабими
В общем да, погорячился, скорее имелось в виду то, что можно скачать с гитхаба, даже, казалось бы, "нормальные" либы. Особенно когда портируют под винду с никсов. Вон подивитесь на "защиту от атаки по боковому каналу" в известной криптолибе , виндовая ветка. Все бы хорошо, да working set по дефолту 50 страниц всего и никто даже не пытается его увеличить. Там дальше если порыться, окажется, что ошибка лока просто игнорируется. Нормальная такая защита.
QUIK 8.0
 
Цитата
Imersio Arrigo написал:
 Супер. Каждый роет себе могилу сам. Но это если ты сам код пишешь.
А вот тому чуваку - совет переходить на *_s это лишняя куча проблем.
Куча проблем как раз будет, если программа не рухнет на переполнении буфера. Просто посмотрите, что будет после оверрана. В идеальнейшем варианте мы затрем стековый кадр и рухнем на ближайшем return'е, это будет просто подарок. А если мы затрем заголовок кучи? Через полчаса прога свалится на free и мы будем в мыле искать, что вообще произошло, а уж "где" это произошло найдем только чудом. А если буфер - часть структуры и мы затрем другие ее поля? Ничего вообще не рухнет, а на выходе будет мусор, и с хорошей вероятностью мы вообще ничего не найдем никогда. Нет уж, пусть оно рушится в момент преступления.

В данном конкретном случае как раз автор проверил длину перед sprintf, можно оставлять как есть, уже было признано.
QUIK 8.0
 
Цитата
Imersio Arrigo написал:
А самая подлянка в том, что в случае выхода за пределы буфера эти, т.н. "безопасные" функции бросают исключение. И программа просто падает.
И это правильно, я еще и ассертов натыкиваю через строчку. Пусть она у меня в отладчике лучше упадет, чем у юзера в самый ненужный момент. В чем, собственно, и отличие подходов "никсоводов" и "виндузятников". Первый пишет абы как, "потом поправлю либо кто-нибудь поправит, опенсорц же ж", потом никогда не наступает и этот код десятилетиями кочует по интернетам и проектам в первозданном недовиде. Второй знает, что ежли у юзера что обвалится, субботник будет именно у него, родимого, так что лучше полдня потерять, потом за пять минут долететь.
QUIK 8.0
 
Цитата
Анатолий написал:
 А есть хорошие ссылочки по которым можно на эту тему просветится более подробно, как правильно все эти несьюрные функции заменить на секьюрные? Или же это надо вообще Си изучать полностью?
Вкратце суть в том, что в "безопасную" функцию передается размер буфера, так что она может проверить, что не вылетела за его границу, старые функции такого параметра не имели и вынуждены были "верить", что кодер подготовил буфер достаточной длины, что не всегда просто, особенно для sprintf со сложным форматом. В той же вашей либе взгляните на строки 555-558, там как раз автор проверяет, что буфера достаточно. Конкретно в этом месте можно сказать, что безопасно и без замены. Заменить достаточно легко, большинство новых функций похожи на старые, только добавлен второй параметр "длина буфера". Но не все, некоторые возвращают другой тип (код ошибки вместо длины, например), некоторые (та же strerror) вообще отдаленно похожи, в каждом случае лучше в доку глянуть.

Обзорная статья https://docs.microsoft.com/en-us/cpp/c-runtime-library/security-features-in-the-crt?view=vs-2019 , конкретно по sprintf_s с друзьями https://docs.microsoft.com/en-us/cpp/c-runtime-library/security-features-in-the-crt?view=vs-2019
QUIK 8.0
 
Цитата
Анатолий написал:
 Заменил все те функции на их рекомендуемые секьюрные аналоги с добавкой _s, ошибок полезло еще больше
Ожидаемо, там сигнатуры другие, придется и окружающий код править. Расписывать реально долго, в принципе можно оставить strerror как есть, она в эту компанию попала можно сказать "случайно", а попробовать заменить только sprintf, но у sprintf_s надо будет добавить второй параметр - размер буфера (который в первом параметре передан), а дальше все то же самое.

Цитата
Анатолий написал:
Вписал _CRT_SECURE_NO_WARNINGS заодно и _CRT_NONSTDC_NO_WARNINGS
как мелкософт советуют
Можно и так оставить, конечно. Там проблема с безопасностью не самой этой либы, а что она с устаревшими функциями может вызывать переполнение буфера, никак не детектируемое, а уж этим могут воспользоваться вирусы и трояны (не из этой либы).
QUIK 8.0
 
Цитата
s_mike@rambler.ru написал:
вы бы вместо рассуждений о несовершенстве вселенной помогли человеку и собрали бы ему библиотеку.
время то же и польза для вселенной отлична от нуля.  
Попробую к таксисту так подойти, че мол сидишь в телефон пялишься, давай до ашана сгоняем, время-то то же, и польза для вселенной.
QUIK 8.0
 
Цитата
Анатолий написал:
 Выставил непомогло,
Включил multibyte ненпомогло
Таки помогло, E0144, E0167, C2440, C2664 же больше нет?
Цитата
Анатолий написал:
Тем более вытаскивать ничего ненадо, в луабинариях с сорсефоржа  https://sourceforge.net/projects/luabinaries/files/5.1.5/Windows%20Libraries/Static/ ,  которые для мингв64 есть либа - liblua5.1.a ,  это она ведь нужна?
Нет, не она, нужна именно вытащенная из qlua.dll и именно из вашей версии квика. Но это пока в сторону отложите, пусть компилятор сначала до конца отработает, потом будете линкер мучать. А чтобы компилятор отработал, разберитесь с вызовами strerror, sprintf и прочими, в ошибках написано даже как именно, либо заменить на sprintf_s сотоварищи (рекомендуется), либо в препроцессор вписать D_CRT_SECURE_NO_WARNINGS (что сделает код еще более говнокодом, но он скомпилируется). Таки да, если кодеру влом каст явный сделать и проверить диапазон size_t, прежде чем пихать его в int, такой код зовется говнокодом, независимо от его работоспособности.
QUIK 8.0
 
Ужос-то какой.

1. Чтобы студия компилировала как си без плюсов, надо расширение сделать .c, а не .cpp, либо кликнуть по файлу в дереве проекта правой кнопкой, открыть настройки файла и поставить ему "компилировать как си". Либо всему проекту поставить. Хотя, возможно, в мс-новоделии уже и нельзя это все, тут не в курсе.

2. Ваша qlua.dll, куда вы ее ни кладите, компилятору не нужна, он ее, как того Джо, не находит, потому что и не ищет. Даже линкеру она не нужна, ему нужна qlua.lib, как ее вытащить из qlua.dll тут где-то тема была.

3. Ошибки в студии (глядя по скрину) говорят о следующем: а) исходный код является говнокодом (E0144, C2440, C2664) даже с точки зрения сей без плюсов; б) в проекте стоит char type = UNICODE, а должен быть MULTIBYTE (E0167); в) аффтар не рассчитывал на винду (C4996); г) аффтар не рассчитывал на 64 бита (C4267). И это только что видно на скрине.

Если есть возможность, делегируйте компиляцию кому-нибудь. С помощью зала, конечно, что-нибудь в итоге накомпилируется, но что именно это будет - уже вопрос.
как мне скомпилировать или достать luasql
 
Вы и не найдете такого файла, потому что файл должен называться mysqlclient.lib или mysqlclient.a и лежать, по идее, в мускуловской папке lib. Вы ж линкеру указали E:/lua, он там и роется. Впрочем, и то, что он в ошибке пишет -lmysqlclient, а не истинное имя, правильным не выглядит.
ODBC-экспорт. Мониторинг, Проверка флагов ODBC-экспорта.
 
Цитата
Николай Камынин написал:
 стартуйте DDE  в скрипте LUA внешним скриптом например на AutoiT
Даже и внешний не нужен, ибо на сях все, но это уже несколько в сторону. Понимание кишок виндового приложения и умение их поковырять, несомненно, большой плюс, но, знаете ли, когда у юзера вся инфраструктура рухнет после очередного обновления квика, нужно иметь возможность (аргументированно) исполнить подобный танец.
ODBC-экспорт. Мониторинг, Проверка флагов ODBC-экспорта.
 
Цитата
s_mike@rambler.ru написал:
Как показывает практика, ODBC и DDE вряд ли получится заставить работать стабильно и надежно.
За ODBC не знаю, а DDE вполне себе надежно работает, если аккуратно серверную часть сделать. Другое дело, что чуть какая предобработка нужна и все равно придется подпиливать костылики на луа, и тут появляется фактор "ой, я DDE стартанул, а скрипт забыл запустить", так что в итоге все верно сказано, луа как луа или луа как интерфейс к сям-плюсам - единственный удобный вариант.
Плечо по ОФЗ
 
У брокера в тарифах, называться должно как-то типа "использование заемных средств при переносе позиции".
Функцию с двоеточием в таблицу, как запихнуть функцию string в таблицу.
 
Двоеточие всего лишь скрывает self, поэтому запихнуть можно в формате с точкой
Код
t.foo = string.reverse
и при вызове тоже точку использовать
Код
t.foo("123")
Возможно, у более лучших собаководов получше идеи найдутся.
Плечо по ОФЗ
 
Дык на споте плечо платное.
LuaSQL
 
Цитата
Старатель написал:
 Помимо этой библиотеки ещё что-то нужно?
Это нативная библиотека, нужна еще обертка для lua.
Запрос списка инструментов Lua
 
У текущего фьюча может быть только четыре кода, последняя цифра - год, последняя буква - месяц экспирации (H, M, U, Z), тут как раз выбрать несложно, если хотя бы сегодняшняя дата известна (а она известна в квике). Аналогично у опционов коды не с потолка берутся, там вся нужная информация уже содержится (на память не скажу, см. на бирже). А вообще в принципе порядок примерно такой и будет, только отчего же отфильтровать все и получить одну-единственную, можно фильтровать сразу по искомому списку.
Запрос списка инструментов Lua
 
Как выше сами написали, получаем список всех опционов по классу, потом для каждого получаем информацию, оставляем только те, у которых базовый актив интересный и что там еще нужно, дата экспирации или что. Это всяко быстрее и проще, чем парсить с биржи, там тоже не все радужно.
Запрос списка инструментов Lua
 
Есть же getSecurityInfo.
LuaSQL
 
Цитата
s_mike@rambler.ru написал:
Надеюсь, это Release.
Release + NDEBUG, SDK7.1, остальное все дефолтное.
LuaSQL
 
Берем amalgamation последней версии с офсайта, там нам нужны три файла, sqlite3.h, sqlite3ext.h и sqlite3.c. Создаем в студии пустой проект, добавляем в него эти три файла, крутим настройки проекта по желанию и умению, в sqlite3.c недрогнувшей рукой в самом начале пишем
Код
#define SQLITE_API __declspec(dllexport)
И все, запускаем компиляцию, 0 errors, 0 warnings, получили sqlite3.dll. По-хорошему это надо делать в той же студии, в которой все остальное компилируется, дабы рантайм был один и тот же, но вот ежли надо прям щас, собрал с встроенным рантаймом от студии 2010 (и ничего в настройках скьюлайта не крутил), https://dropmefiles.com/KyA8z
LuaSQL
 
Готового не покажу, но звучит странно, sqlite один из немногих пакетов, собирающихся на раз буквально чем угодно, надо только брать не подробный девелоперский исходник, а amalgamation.
Возможно связать Wealth-Lab и Quik через библиотеку trans2quik.dll?
 
Делал очень давно еще для WLD3 путем написания брокер-адаптера. Глючное было решение именно со стороны велса. Как там теперь с новым шарповым велсом дела обстоят не знаю.
Хозяйке на заметку: OnStop(), или "Зачем вы это делаете, мистер Андерсон?"
 
Цитата
swerg написал:
Как известно, QLua работает вот по такой модели:  https://quik2dde.ru/viewtopic.php?id=16
Спасибо, информативная штука. Кстати, Ваша диаграммка сильно помогла в свое время разобраться в порядке вызова колбеков.

Цитата
swerg написал:
Осталось лишь узнать мнение начальника транспортного цеха, зачем он использует столь изощрённый синтаксис. Какова хитрая цель? Быть может все будет полезно?
Куда поедет выполнение скрипта, зависит от результатов OnInit. В частности, если оказалось, что "файл настроек не найден или поврежден", то main будет с юаем, циклом сообщений и всем таким, при других условиях другая, наконец, если все прошло по "основному сценарию", то вообще

Код
void _on_main_regular(void * lua_state)
{
   TRACE();
   set_exception_handler(_on_exception);
   _mainthread = thread::current();
   // enable OnStop callback
   _replace_callback(lua_state, "OnStop", ::cbid_on_stop);
   wait::all(_stopevent, wait::infinite);
}
CreateDataSource, не делает квик сильнее
 
Цитата
swerg написал:
 Вот когда откроете полторы тысячи тиковых TOC - тогда и будет смысл говорить про "ничего не виснет".
И опять "об том и речь". Я прошу сделать ОДНУ ТОС из скрипта, но мне говорят, что это не фича а баг, поэтому не будем.
*AllTrade*, новые функции для qlua
 
Цитата
Sergey Gorokhov написал:
Для анализа просьба прислать на quiksupport@arqatech.com копию всей папки с проблемным терминалом QUIK (без ключей доступа)
В письме укажите ссылку на эту ветку форума.
Отправил.

Цитата
Старатель написал:
При каждом вызове CreateDataSource по тикам дергается info.ini: раз 15 повторяется цикл LockFile/ReadFile/UnlockFile/CloseFile и один раз даже WriteFile ))
Интересная информация по доступу к info.ini, спасибо. С одной стороны, винда должна кэшировать доступ к файлам, если, конечно, кодер сам не наставил флагов прямого доступа к диску, с другой, пара LockFile/UnlockFile может добавлять хороших тормозов. Косвенно также дан ответ на вопрос "что будет, если лезть в info.ini из скрипта", -- все будет хорошо, раз квик лочит файл перед чтением.

Цитата
Старатель написал:
Ну ещё и сравнивать надо в одинаковых условиях, например, какие были установлены фильтры, что было в файлах info.ini (в частности в секции [ALL_TRADES_DATA]), alltrade.dat до запуска скрипта.
Получается два контура торможения (двухконтурная тормозная система,  ага). Первый это доступ к info.ini, если там не стоят class_code=ALL,  квик будет добавлять открываемые инструменты в список, а он не может их  сразу все добавить, т.к. создает датасорцы по одному. Эти (и только эти)  тормоза можно увидеть, запустив подписку при сброшенных фильтрах и  пустом alltrade.dat. Второй контур - это когда в info.ini установлены  фильтры ALL для всех классов, тогда записи в info.ini не будет, как и не  будет поиска по info.ini, квик сразу увидит ALL. Тогда при пустом  alltrade.dat подписка произойдет мгновенно, но при заполненном получим  "тормоза второго рода", зависящие от размера alltrade.dat.
*AllTrade*, новые функции для qlua
 
Цитата
Sergey Gorokhov написал:
 для очистки dat файлов есть ключ -clear (в документации глава "Ключи запуска Рабочего места QUIK")
Спасибо, полезная штука в некоторых ситуациях, хотя в данном случае менее костыльным будет просто потребовать открытой ТВС.

Значит, нынче почистил все, до чего руки дотянулись, обновил квик (три длл подъехали), о дневных пробах писал уже. После закрытия биржи включил скрипт и вот до сих пор (скоро два часа как) он все жужжит, сейчас где-то в опционах ковыряется. То есть ничего нового. И такая резкая зависимость от количества записей в ТВС грустно намекает на "эн-квадрат" где-то внутри.

Таким образом, на текущий момент вариантов кроме "ТВС должна быть открытой" я не вижу, на будущее хотелось бы все же видеть что-то более легкое, чем CreateDataSource, без встроенного энквадрата.
*AllTrade*, новые функции для qlua
 
Цитата
Sergey Gorokhov написал:
Кроме того, попробуйте провести тест в разное время, утром до торгов, утром при старте торгов, в обед и вечером.
Сравните данные и сообщите нам.
Вот сейчас как раз пробовал. Похоже, причину разницы 20/500 понял. Значит, удаляем alltrade.dat, отключаем все фильтры ТВС, запускаем квик, подключаемся, убеждаемся, что ничего не едет (alltrade.dat 64кб, т.е. одна гранулярити отмэплена, скорей всего пустая). Запускаем (тиковую) подписку - подписались мгновенно, параллельно начинают дергаться OnAllTrade. Казалось бы, идиллия. Повторяем упражнение, подождав подкачки всех сделок в alltrade.dat (около 200 Мб), вот тут уже гораздо медленнее. И да, облигации сейчас где-то за 20 секунд и подписались (на глаз смотрел, плюс-минус километр). Вечером, когда в alltrade.dat будет весь день, думаю, все вернется на круги своя. Кстати, утром-то ситуация как раз такая, в alltrade.dat вся вчерашняя ТВС, так что хочешь не хочешь, а надо запускаться вот в таком окружении.
*AllTrade*, новые функции для qlua
 
Так вот я и не понял, где у меня в скрипте таймер что-то добавляет. Там нет слип(0), где действительно бы отдавался остаток таймслота до следующего тика, тиккаунт же поток не снимает, да и тот выполняется всего 20 раз за скрипт, на каждом классе, а не на каждом инструменте. Там запись в лог больше лопает.

Любопытно, что подписка на дневки в том же самом цикле происходит практически мгновенно, хотя квику приходится несколько тысяч файлов создать в архиве (почистил предварительно). А вот если добавить ds:SetUpdateCallback(), приходится подождать секунд 10 (опять же на все). К сожалению, на ТВС это не влияет, фильтры не устанавливаются и все сделки не едут, а то был бы вариант.

Вот по разнице во времени выполнения уже интереснее. Заметил, между прочим, что и открытие ТВС тоже как-то не то чтобы быстро происходит после обновления на восьмую версию, хоть и не часы конечно, но "раньше было лучше". Попробую у себя почистить все для начала и повторить эксперименты.

Где стартовать, дело даже не мое, а того, кто этим будет пользоваться. По опыту юзеры выдумывают такие юзкейсы, которые мне и в голову не могли прийти, и через икс времени переписывать весь код "по гарантии", сиречь даром, не очень улыбается. Это же относится и к недокументированным всяким возможностям, так что гипотетический вариант с хачением info.ini всерьез и не рассматривал. Вариант с info.ini кстати не работает, если вдруг кто еще возжелает попробовать. Чтобы квик увидел написанное, надо диалог фильтров "продернуть", а зачем тогда в файл писать, можно в диалоге кнопки подавить, раз уж его открывать все равно. В любом случае это все не вариант, одно "неудачное" обновление квика и попал на субботник.
*AllTrade*, новые функции для qlua
 
Sergey Gorokhov, благодарю за фидбек. Несколько обескураживает ваш ответ, если честно, особенно часть про таймер, особенно после ознакомления со статьей по ссылке. Таймер тут при чем? Равно как и сплит тут мало на что влияет, он выполняется один раз на класс, коих в тестовом случае всего 19. Перенос в мейн тоже ничего не меняет, интерфейс висеть не будет, но сам процесс подписки идет с той же скоростью. В общем, про таймер как раз добавило лишних вопросов. А так-то я больше 20 лет под винды пишу, краем уха слышал, как там внутри все устроено, даже, если поднапрячься, вспомню, на какое прерывание этот "таймер процессора" заведен.

Категорически не согласен с пунктом 5. Пример. Юзер в 23:45 запустил квик, чтобы скачать данные за день, запустил скрипт. В 0:15 брокер вырубил сервер. И вдруг внезапно оказывается, что наш скрипт за это время (когда вся ТВС уже приехала бы сто раз) не то чтобы не сохранил данные, а даже еще и не подписался на них. То есть сессия пропала (нет подписки -> нет данныех даже в alltrade.dat), завтра утром на сервере ее уже не будет. Нормальный такой скрипт, удобный. Зато уж компом рычит как зверь по три часа кряду, сразу видно, что важным делом занят.

Таки да, мне в соседней ветке говорили про мейн и между делом намекнули на "другой подход", не знаю вот, стоит ли тут публично контору палить. Этим (или не этим) "другим способом" я подписался на все за пару секунд, но там другой вопрос возникает, такой способ сработает только когда глобальные фильтры уже установлены все на ALL, а при отписке (и закрытой ТВС) квик их сбрасывает. Тогда вопросы другие - а если я в info.ini их из скрипта запишу? Квик это увидит? А если квик со скриптом пересечется на доступе к info.ini, будет ждать анлока или упадет? А если через версию квика вы решите в другом месте фильтры хранить?
CreateDataSource, не делает квик сильнее
 
s_mike@rambler.ru, однако ж спасибо за идею/ключевик, кое-что интересное вырисовывается. Главно дело чтобы это не пофиксили в "одной из будущих версий".
Страницы: 1 2 След.
Наверх