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

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

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 28 След.
Нельзя ли ключ из secring.txk использовать из токена?, qcrypto32, secring.txk, yubikey, rutoken, openssl, pki
 
Цитата
suturee написал:
чтобы ключ не лежал в открытом виде на диске
Он и не лежит в открытом виде. Введите неправильный пароль в окне авторизации и убедитесь, что квик не сможет ключ извлечь.
Цитата
suturee написал:
нельзя ли это всё бесплатно сделать лучше чем сейчас
Либо я чего-то не понял, либо бесплатный ключик стоит от 2500 рубликов и до ой-ой. Также интересно, а пальчики юзера как в железку попадают вместе с приватным ключом? Сливаются ли они при этом куда-то? А то как-то эти все удобства уже проходили, сначала в бой бросаются те, кому "нечего скрывать", а потом уже ВСЕ ЗАКОНОМ ОБЯЗАНЫ.
Отладка QUIK 8.13
 
Цитата
TGB написал:
для вас чем меньше ядер у ПК, тем лучше?
Я такого не писал нигде и никогда. Что уж так грубо набрасывать-то.

Кому охота в граммах прикинуть, что такое лок шины и чем он плох, вот это надо собрать в релизном конфиге и запустить.
Код
#include <cstdio>
#include <intrin.h>
#include <process.h>
#include <Windows.h>

static const unsigned int NTHRD = 64;
static const unsigned int NITER = 10000000;
static volatile long cnt[NTHRD];

static unsigned int __stdcall RawLoopThread(void * pvoid)
{
   volatile long * pcnt = cnt + reinterpret_cast<unsigned int>(pvoid);
   *pcnt = 0;
   for(unsigned int n = 0; n < NITER; ++n)
      *pcnt = *pcnt + 1;
   return *pcnt;
}

static unsigned int __stdcall InterlockedLoopThread(void * pvoid)
{
   volatile long * pcnt = cnt + reinterpret_cast<unsigned int>(pvoid);
   *pcnt = 0;
   for(unsigned int n = 0; n < NITER; ++n)
      _InterlockedIncrement(pcnt);
   return *pcnt;
}

static void MeasureLoop(unsigned int (__stdcall * pfn)(void *), const char * name)
{
   unsigned long long t = ::GetTickCount64();
   HANDLE threads[NTHRD] = { 0 };
   for(unsigned int n = 0; n < NTHRD; ++n)
   {
      unsigned int tid;
      threads[n] = reinterpret_cast<HANDLE>(_beginthreadex(nullptr, 0,
         pfn, reinterpret_cast<void *>(n), CREATE_SUSPENDED, &tid));
   }
   for(unsigned int n = 0; n < NTHRD; ++n)
      ::ResumeThread(threads[n]);
   ::WaitForMultipleObjects(NTHRD, threads, TRUE, INFINITE);
   t = ::GetTickCount64() - t;
   for(unsigned int n = 0; n < NTHRD; ++n)
      ::CloseHandle(threads[n]);
   printf("  %s:\n    %0.9f seconds\n    %0.9f microseconds per iteration\n",
      name, t / 1000.0, t * 1000.0 / NITER);
}

void main(void)
{
   printf("Performance:\n");
   ::MeasureLoop(::RawLoopThread, "RawLoopThread");
   ::MeasureLoop(::InterlockedLoopThread, "InterlockedLoopThread");
   printf("Press ENTER to exit\n");
   getchar();
}

Отладка QUIK 8.13
 
Цитата
TGB написал:
То есть. когда вы пользуетесь браузером, у вас QUIK перестает работать?
Утрировать можно сколько угодно. Браузер более-менее нормально написан, поэтому не перестает. А вот когда квик с полными таблицами стартует, кое-что таки наблюдается. Речь-то шла блокируют ли ядра друг друга, так вот блокируют только в путь, например, каждый Interlocked* лочит шину, при этом все ядра встают и ждут. Сравните по времени цикл с v = v + 1; с аналогичным по функционалу циклом с InterlockedIncrement(&v), особенно если таких циклов несколько в разных потоках.
Отладка QUIK 8.13
 
Цитата
TGB написал:
в любой операционной системе на ПК с одним одним ядром ЦП
Выделил ключевое. Как только ядер больше одного, тут же начинают весьма себе блокировать.

Цитата
TGB написал:
а я пишу о "светлом" будущем, когда длинные участки участки непрерывного байт-кода не должны блокировать друг друга
Устройте его себе сами. Потом расскажете, удобно ли.
info.log
 
Цитата
QApplication написал:
Даже не могу представить что туда можно продублировать
Все OnParam например.
Расширить список функций обратного вызова
 
Цитата
Старатель написал:
Хотелось бы что-то типа такого "из коробки" без необходимости дёргать GUI.
Об чем вся и ветка. Так-то задача на десять строк, если говорить о монолитной аппе. Но qlua в основную аппу не зашит, он плагин, так что на практике может быть довольно геморройно это сделать.
Подскажите как отправлять инфу из QUIK в телеграм?
 
Цитата
Александр написал:
io.input() / io.output()
Они же просто переопределяют стандартный ввод и вывод. Как минимум надо иметь уже открытый хэндл, на который переопределять, что сводится к задаче где его взять, которая в общем тут и обсуждается.
Количество открытых позиций (ОИ)
 
Стих,  это особенность деривативов. Акций существует столько, сколько их выпустил эмитент, они из рук в руки переходят, но количество всегда постоянно (допэмисии и сплиты не считаем). Фьючерса в природе нет, пока не произошла сделка между покупателем и продавцом, в этот момент возникает один контракт. Потом он может опять же из рук в руки переходить. Если у кого-то был шорт и он купил контракт, эти две позиции взаимно уничтожаются и становится контрактом меньше. Вот ОИ и показывает, сколько сейчас живых контрактов.
OnTransReply возвращает order_num = nil
 
Цитата
Старатель написал:
про 0 (ноль)
Ага. Что, кстати говоря, косячок-с, по логике нил должен быть, номер-то не изменился у заявки, он просто уже недоступен.
OnTransReply возвращает order_num = nil
 
Старатель,  https://forum.quik.ru/messages/forum10/message50381/topic5978/#message50381
Расширить список функций обратного вызова
 
Цитата
Старатель написал:
с учётом, что SetSelectedRow - синхронное сообщение?
В данном случае да, колбек дернут из потока квика, SendMessage отправляется из потока квика в поток квика, а это просто прямой вызов оконной процедуры.
OnTransReply возвращает order_num = nil
 
Цитата
Алексей написал:
Но ведь колбэки именно под это и заточены.
Ну так они и дернутся в каком-то неведомом порядке и количестве, свою задачу выполнят.

Кстати говоря, еще раз перечитал первое сообщение и похоже, что вопрос-то немного о другом, нил приезжает в OnTransReply при снятии заявки? Это нормальное поведение тогда на некоторых классах. Опять же, в описанном мной варианте вас это не должно тревожить, у вас есть trans_id, по которому вы найдете объект транзакции, а из него получите ссылку на объект заявки, которую снимали. В любом случае предлагаю создавать свои объекты для заявок и транзакций, а не полагаться на "выдерну из таблицы", поскольку в таблице нет одной важной вещи - статуса (вашего, не квиковского), т.е. "что я с этим объектом сделал и чего от него жду".
OnTransReply возвращает order_num = nil
 
Цитата
Алексей написал:
он обязательно появится?
Он может и совсем не появиться. Выше QApplication дал ссылку, там он как раз разбирался с тем, что не приходит. Или если соединение потеряно непосредственно после отправки транзакции. Спасение в том, чтобы не закладывать никакой порядок колбеков и даже факт их появления. Вы хотите создать заявку - создаете объект заявки со статусом "ожидает отправки", затем создаете объект транзакции со ссылкой на объект заявки и отправляете, меняя статус заявки на "отправлена", затем колбеки как-то меняют состояние транзакции и заявки, при этом в колбеке транзакции вы также меняете состояние заявки (а ссылка на заявку у вас в транзакции есть). В какой-то момент состояние заявки становится "выставлена", или даже сразу "исполнена", или "снята", или "отвергнута", или "соединение потеряно, фикзнает что с ней", тут вам транзакция больше не нужна, вы ее удаляете, не глядя, что там с ней случилось.
OnTransReply возвращает order_num = nil
 
Алексей,  если коротко - придет позже еще один OnTransReply уже с номером заявки.

Если чуть длиннее, общая проблема состоит в том, что все рассматривают транзакцию как метод класса заявки, и OnTransReply как асинхронный колбек завершения этого метода, то есть примерно так
Код
class Order
{
    void SendTransaction(...);
    virtual void OnTransReply(...);
    virtual void OnOrder(...);
};
, в то время как транзакция является самостоятельным классом и OnTransReply это событие изменения чего-то в этом классе, т.е. примерно так
Код
class Order
{
    virtual void OnOrder(...);
};

class Transaction
{
    SendTransaction(...);
    virtual void OnTransReply(...);
};
При первом подоходе вы, естественно, ждете однократного события завершения транзакции со всеми полями. При втором нет ничего странного в том, что состояние транзакции меняется в несколько подходов. Когда оно изменится настолько, что дальнейшая судьба транзакции вам станет неинтересна (в вашем случае, когда придет номер заявки), вы можете этот объект удалить и игнорировать дальнейшие его изменения.

OnOrder может приходить раньше OnTransReply, но с учетом вышесказанного вас это не будет беспокоить, поскольку состояния классов меняются независимо (хотя как результат изменения состояния транзакции вы будете, скорее всего, и как-то менять состояние ордера).
Подскажите как отправлять инфу из QUIK в телеграм?
 
Цитата
Александр написал:
В чём прикол?
Дык сервер еще написать надо, который этот пайп создаст и будет его слушать. Речь о том, что на стороне луа особой поддержки не надо, она есть и так.
CreateDataSource для минутных интервалов
 
Цитата
QApplication написал:
QUIK пару часов был online.Может нужно каждый таймфрейм активировать (просмотреть на графике) для каждого инструмента?
Так вот CreateDataSource его и активирует. Неважно сколько квик был онлайн, если минутки до скрипта заказаны не были, только после заказа они начнут ехать, а это время какое-то. Потом еще вопрос, вы не из индикатора заказываете? В индикаторах работать не будет.
Подскажите как отправлять инфу из QUIK в телеграм?
 
Цитата
Nikolay написал:
либо named pipes - надо написать(найти) dll обмена на стороне lua
Код
io.open("\\\\.\\PIPE\\MySuperPuperServer", "wb")
Тока flush не забывать после записи.
CreateDataSource для минутных интервалов
 
Цитата
QApplication написал:
В чем может быть причина?
Может не приехали они еще.
Ошибка в таблице состояние счёта
 
Цитата
Дмитрий написал:
На MOEX цены в рублях
Поэтому и неправильно. У этой бумаги валюта номинала - доллары. Квик видит в портфеле бумагу, видит, что валюта доллары и считает в долларах. А тут, оказывается, кто-то забыл галоперидол принять и котирует в рублях бумагу с номиналом в долларах. С нефтью они уже к успеху приходили, теперь вот новую технологию прострела ноги выдумали. Квик, конечно, тоже не проверяет валюту первичной борды, что есть то есть.

Цитата
Дмитрий написал:
Здесь скрины нельзя загружать?
Можно. Затащите картинку ниже окна ввода, потом поставьте курсор куда надо картинку вставить и кликните по ней.
Ошибка в таблице состояние счёта
 
Цитата
Дмитрий написал:
Модерна по 30 500 рублей
долларов. Отсюда все остальные непонятки.
Кривые шибки в QLua
 
Цитата
TGB написал:
Например, не охватывается случай "OnParam".
Все такое же, имена поменяйте. Там может вообще темплейт в сорце.

Цитата
TGB написал:
А как вы обясните:
Никак на данный момент. Вижу, что все случаи показывают большой размер очереди, 200-400 элементов. Это значит, что у коллектора тоже достаточно большая очередь. Это значит, что коллектор начинает агрессивничать и влезать в любую доступную дыру. Где он там дыру в мейне нашел, науке пока неизвестно.

Цитата
TGB написал:
кстати, lua_lock() и lua_unlock() выполняется внутри функции lua_getglobal
Я кагбэ в курсе. Специально показал оверхед против просто обращения к таблице из байткода. Спорить мне все равно лень.
Кривые шибки в QLua
 
Цитата
TGB написал:
Раскажите детали.
Код
int callScriptOnAllTrade(lua_State * s)
{
   lua_checkstack(s, 1);
   int top = lua_gettop(s);
   lua_getglobal(s, "OnAllTrade");
   pushOnAllTradeArgument(s);
   int ret = doSafeLuaCall(s); // lua_pcall + SEH frame
   if(!ret)
      processScriptCallbackError(s);
   lua_settop(s, top);
   return ret;
}
Цитата
TGB написал:
Или вы думаете, что это не так?
Это lua_lock() + lua_getglobal() + lua_unlock(), совершенно бессмысленно это проделывать, точно зная, что в скрипте нет такой функции. Дискутировать лень.
Цитата
TGB написал:
Но вы же, похоже не главный?
Даже рядом не сидел.
Кривые шибки в QLua
 
TGB,  у меня для вас две новости, как водится:
1) в 5.3 воспроизводится буквально сразу, запущено 4 скрипта и заказаны все параметры по всем инструментам (на боевом);
2) в 5.4 в тех же условинях НЕ ВОСПРОИЗВОДИТСЯ.

Побочное:
1) колбеки так и запускаются, плюс-минус детали.
2) заменить колбек можно, если он был объявлен в виде хотя бы пустой функции. Если не был объявлен, квик его не будет дергать. Очень даже хорошая оптимизация, иначе квик бы на каждое событие разыскивал необъявленные функции во всех скриптах, что несколько затратно, учитывая локи.
info.log
 
Цитата
QApplication написал:
советы
Правой кнопкой на файле, атрибуты-дополнительно, галка сжимать для экономии места. Как обычно, экономим диск - тратим процессор, эффект может оказаться не так прекрасен, как ожидалось. Насчет отключить info.log это вряд ли, можно уменьшить, если не заказывать лишние параметры.
Permission denied при удалении файла
 
Цитата
s_mike@rambler.ru написал:
но с Незнайкой у нас получились разные результаты
И со мной теперь тоже разные. Есть у меня хост самопальный с луа 5.3 (не тот, что с луа идет), в нем все как описано, с execute файл не удаляется, без execute удаляется. Более того, если после ошибки попробовать удалить файл руками, винда говорит, что он открыт в интерпретаторе команд, после закрытия консоли повторная попытка файл удаляет. Таким образом, версия с наследованием хэндла подтверждена. А вот ваш случай удивляет. По-любому лишний хэндл есть, только где. Какой-нибудь антивирус все новые файлы смотрит? Какой-нибудь архиватор? Какая-нибудь фича винды активна? Какой-нибудь вирус сидит? Не угадать.
Permission denied при удалении файла
 
Цитата
s_mike@rambler.ru написал:
Я пробовал вставлять до os.remove collectgarbage("collect")
Надеюсь, f = nil; collectgarbage("collect"), а то ж объект еще не вышел из скоупа.
Permission denied при удалении файла
 
Цитата
s_mike@rambler.ru написал:
Похоже что луа хендл не закрывает по fclose, а ставит флажок.
Файл закрывается так (луа 5.3)
Код
static int aux_close (lua_State *L) {
  LStream *p = tolstream(L);
  volatile lua_CFunction cf = p->closef;
  p->closef = NULL;  /* mark stream as closed */
  return (*cf)(L);  /* close it */
}

static int f_close (lua_State *L) {
  tofile(L);  /* make sure argument is an open stream */
  return aux_close(L);
}
При открытии файла closef устанавливается на функцию
Код
static int io_fclose (lua_State *L) {
  LStream *p = tolstream(L);
  int res = fclose(p->f);
  return luaL_fileresult(L, (res == 0), NULL);
}
Так что закрывает как положено. Другое дело, если явно не закрыть, тогда эта функция отработает только при сборке объекта файла, т.е. когда рак на горе свистнет.
Permission denied при удалении файла
 
Цитата
Незнайка написал:
можно запустить
Мне сейчас не на чем. Тем не менее, раз код именно таков, остается одно предположение: хэндл файла наследуется запускаемым процессом и удерживается открытым до его завершения, что и не дает удалить файл. Решение - закрывайте файл перед запуском процесса, удаляйте после. Если предположение верно, все заработает, и тогда это будет не косяк арки и даже не косяк луа, это будет косяк майкрософтовского си-рантайма.
Permission denied при удалении файла
 
Цитата
Незнайка написал:
Перед вызовом os.remove() файл закрыт
Закрыт этот хэндл в этом приложении. Если файл не удаляется, значит, есть другой хэндл где-то еще. В os.execute точно эта самая команда, что приведена, или все же там запускается нечто, что этот файл читает?  Во втором случае надо запускать читающее приложение без start, тогда execute дождется его завершения.
Проблемы экспорта в Wealth-Lab
 
Mikhail Ran,  опять оговорюсь, что использовал в свое время вл 3/4, который сняли с продакшена лет 10 назад, тонкости помню уже плохо. Так вот, насколько помню, все, что есть в датасорце, будет отображено, если специально не настроен маркет менеджер на фильтрацию чего-нибудь. Проще всего создать датасорец из текстовых файлов и руками или скриптом туда напихать чего угодно. Это если речь об историческом тесте. Если в реалтайме с поставкой из квика, пусть лучше поддержка арки прокомментирует, я не помню просто.
Проблемы экспорта в Wealth-Lab
 
Цитата
Mikhail Ran написал:
пустые интервалы
В смысле справа? В тройке/четверке было что-то вроде AddFutureBars, в дотнетных версиях не знаю.
Еще один вопрос про потоки
 
Владимир, хозяин барин. Чет вот вспомнил. Был интересный чел, математик кстати, обнаруживший вырождение распределения в многочастичном фильтре, принявший эффект за имманентное свойство рынка и, что забавно, поднявший на этом неплохо бабла. Где-то в 14 году вышла работа об этом эффекте, доказывающая, что он есть свойство самого фильтра. К сожалению, с челом уже нельзя пообщаться на эту тему по объективной причине, а было бы интересно его мнение теперь услышать. Это я к чему. Все йогурты могут быть полезны, пока горят достаточно далеко от.
Еще один вопрос про потоки
 
Цитата
Владимир написал:
нужны именно свечи
Помогают ли свечи от геморроя? в общем да, но вот когда догорают... Ок, возьмем свечу и будем двигать ее вправо тик за тиком. Некоторые называют это скользящим окном.
Еще один вопрос про потоки
 
Цитата
Владимир написал:
Тики идут с сервера, а свечи считаются на каждом клиенте. У меня просто челюсть отвисла, когда я об этом узнал.
Вы о квике? Свечи едут на клиент с сервера готовые, насколько мне известно.

Цитата
Владимир написал:
Какие такие "все клиенты локальные"?!
Мои аппы - клиенты моего сервера. Локальные клиенты локального сервера. И их, естественно, не тысячи, на каждом из трех-пяти это не то, о чем переживать стоит.

Цитата
Владимир написал:
Кому и на кой нужна эта "база тиков"? Разве что этому дурацкому HFT
Из тиков можно построить любые агрегаты. Из свечей можно построить только свечи кратного фрейма. Очевидно же, что надо хранить.

Цитата
Владимир написал:
нормальные решения по ним принимать практически невозможно - нужны именно свечи.
Я б поспорил, напомнил бы теорему Котельникова, прикинул бы, какова частота найквиста для минутных, скажем, свечек, и какова частота тиков, из которых эти минутные строятся, спросил бы, куда деваются частоты выше найквиста, ответил бы, что отражаются в низкочастотную часть, прикинул бы амплитуды разных частот, обнаружил бы, что отраженная составляющая может быть больше истинно низкочастотной, заявил бы, что в свечах появились составляющие, которых не было в исходных тиках, что ж мы анализируем тогда, артефакты дискретизации? Но не буду )
Еще один вопрос про потоки
 
Цитата
Владимир написал:
Что такое твс?
Раньше таблица обезличенных сделок называлась таблицей всех сделок, ТВС. Так и называю до сих пор, потом вспоминаю, что уже не так называется.

Цитата
Владимир написал:
Гонять огромные объёмы данных на каждого клиента, и на каждом из них (хорошо, если одинаково!) получать из этих данных другие, меньшие по объёму на несколько порядков! А если обрыв связи?
Все клиенты локальные, далеко гонять не надо. Есть квик и другие источники, они в реальном времени или задним числом, если что-то пропущено, наполняют базу тиков, есть сервер данных, любая желающая аппа цепляется к нему и получает тики сплошным потоком "вот с этой даты" и { "по эту дату" или "в реальном времени" }. В большинстве случаев никакие свечи вообще не строятся, голый тиковый поток используется как есть, но если порисовать чего, то просто на лету в свечки. Объем не так и велик, одна сессия ужимается в десяток мегов, распаковка уже самой клиентской аппой тоже на лету. Часть сжатия там тксть ноухау, поверх него - deflate, как бы одна из причин, почему на луа переделывать - только приключений искать.

Цитата
Владимир написал:
Да и просто свихнёшься: у меня обычно несколько десятков сделок в сутки - иногда больше, иногда меньше, и всей этой колодой бомбардировать мой телефон - упаси, Господи!
Одно время сделал уведомления о сделках тем самым голосом, что в автопилотах вещает. Быстро убрал, задрало насмерть. Но на посетителей производило неизгладимое впечатление. Мечта ж, бот жужжит, бабло бежит, еще и силиконовая баба бесстрастно докладает о прибылЯх несметных.
Еще один вопрос про потоки
 
Цитата
Владимир написал:
Но функциональность по-прежнему ДОСТАТОЧНАЯ для организации торговли.
С этим не спорю. Свои боты тоже, хоть и внешние, довольно простые. Можно сказать, исторически сложилось, давно-давно в квике мало что можно было сделать. Потом, кроме торговли есть и другие задачи. Скажем, квик может служить источником твс для накопления, пресловутые свечи просто строю на лету из тиков. Все ж периодически надо что-то по истории посчитать. Накопление можно было бы и на луа сделать, но раз уже есть сишное, чего ж выдумывать-то. Кому-то кровь из носу охота смс получать с отчетами. Так что задачи есть, которые проще на сях порешать.

А так иногда стало возникать желание встроить в аппу луа и закодить бизнес-логику на нем, типа работает и радуйтесь, а что внутри какая вам разница. Но это вроде как некрасиво, люди на сишника тратились, а получат пыхыпы в обертке.
Еще один вопрос про потоки
 
Владимир,  а я решал проблемы, когда в квике не было никакого луа вообще и транзакции загонялись через файлы. Вы еще не знаете, видимо, что вытворяли, чтобы в квик залезть в те времена, вот это был онанизм, а то что здесь - это именно программирование на луа, внешние длл по дизайну предусмотрены.
Обновление штата
 
Цитата
Рустам написал:
вы хоть дали бы объявления
Не там искали просто.
Еще один вопрос про потоки
 
Цитата
Виталий написал:
Но стек то получается один
Видимо, плохо я объяснил. Стека два, про мейн я не упомянул, полагая, что и так понятно. Еще раз. Пусть в длл есть колбек и есть мейн:
Код
int qOnAllTrade(lua_State * scb)
{
  return 0;
}

int qMain(lua_State * sm)
{
  while(something)
  {
    WaitForSingleObject(hSyncObject, INFINITE);
    DoSomething(sm);
  }
  return 0;
}
Обратите внимание, назвал аргументы по-разному, отразив факт, что эти две функции получают разные стейты и, соответственно, разные стеки. Как вы описываете, мейн ждет некого события, потом что-то делает с полученными данными. Пусть мы хотим передать в мейн таблицу, полученную в OnAllTrade. Мы не можем просто взять и lua_xmove ее на стек мейна, потому что мейн в другом потоке выполняется и мы ему просто стек сломаем таким образом. Мы можем действовать по-разному. Во-первых, можем сделать чисто сишную потокобезопасную очередь с событием, распаковать таблицу в OnAllTrade в сишную структуру и сунуть в эту очередь, что разбудит мейн и он что-то там с этой таблицей сделает. Во-вторых, мы можем завести глобальную луа-таблицу в качестве очереди, в OnAllTrade совать туда таблицу и будить мейн, в мейне доставать таблицу и что-то с ней делать. Опять же надо прогарантировать, что мы работаем с таблицей потокобезопасно. В-третьих, мы можем в OnAllTrade просто будить мейн, игнорируя переданную таблицу, а в мейне вынимать все еще не обработанные записи прямо из ТВС циклом с getItem или даже одним SearchItems. В-четвертых, мы можем заякорить таблицу в OnAllTrade с помощью luaL_ref и передать в мейн только индекс в реестре, а в мейне вытащить таблицу из реестра, обработать и luaL_unref ее, чтобы коллектор мог ее потом собрать. Возможны еще варианты, если подумать. Как видите, все варианты предполагают некую синхронизацию.
Еще один вопрос про потоки
 
Цитата
Виталий написал:
Но ведь стейты разные же...и обращение к ним в любой момент времени не должно повлиять друг на друга
Смотрите, пусть у вас в длл есть сишный колбек OnAllTrade(lua_State * s). Квик его вызывает в потоке колбеков, передает стейт колбеков, на вершине стека лежит ссылка на таблицу с данными. При этом перед вызовом вашей сишной функции луа отпустил лок. Пока вы не вернетесь из колбека, никто этот стек трогать не будет, ссылка так и лежит на вершине. В этом смысле да, стейты разные, стеки разные, в пределах потока со стеком можно делать что угодно и считать, что он, пока вы не вернулись из вызова, только ваш. В том числе можно смело lua_pushinteger и прочая. А вот таблица, на которую ссылка указывает, она не ваша, ссылка на нее может быть и у другого потока, и тот тоже может с ней что-то делать в данный момент. Вот здесь вам надо синхронизировать доступ.
Еще один вопрос про потоки
 
Цитата
Виталий написал:
main и колбэки отправляют в с++ либу разные lua_state
Да.
Цитата
Виталий написал:
поэтому в данном случае обращение к ним из либы в принципе не может пересечься  поэтому потокобезопасно.
Нет, как раз наоборот, если бы один стейт был, не могло бы пересечься.
Цитата
Виталий написал:
разные колбэки сами по себе отправляют в либу одно и тоже lua_state
Да.
Цитата
Виталий написал:
поэтому работа с ними в либе уже требует синхронизации.
Нет, в каждый момент времени выполняется только один колбек, между собой они никак не пересекутся, только с мейном.
Робот как источник пассивного дохода?
 
Цитата
Pavel написал:
всё что заработаю планирую выводить
Фьючерсы - игра с нулевой суммой, о каком заработаю речь? Это не завод и не офис, тут не платят за присутствие по часам, и за знание луа не платят, и ни за что другое не платят. Вы должны будете обуть кого-то на эту сотку в месяц. Прикиньте, насколько это вероятно. Чудеса бывают, но на сколько-нибудь длинной дистанции вы подарите денег кому-то более прошаренному, инфа сотка.
Тестирование стратегий, Возможность тестирования
 
Цитата
Старатель написал:
У меня, к примеру, в ней есть инструменты с датой экспирации 20200731
И датасорец не создается по ним?
Тестирование стратегий, Возможность тестирования
 
Цитата
BlaZed написал:
1) В терминале имеются исторические данные по инструментам
, но нет справочников, о чем выше
Цитата
Egor Zaytsev написал:
описание инструментов засылает биржа
Это он про вот эти вот все шаги цены, точность и прочее. То есть взять данные из архива квик может, он не знает, что эти все циферки обозначают, поскольку каждый день грузит новые справочники с сервера, а там выбывших уже нет. И далее Егор пишет, что ежли брокер сделает некие телодвижения, на его стороне справочники выбывших инструментов могут сохраняться уже сейчас и, соответственно, приезжать на клиенты.
Любой API, который позволит вытаскивать данные в свои приложения
 
Цитата
swerg написал:
Какая технология не прошлый век, кстати?
Видимо, имеется в виду что-то типа протобуферов или thrift. Но это все обобщенные решения, после адаптации получится фикс. А фикс арка в другом продукте реализовала, зачем им себе крылья резать. В итоге ваш ответ верен, колхозим сами и это наиболее прямой путь.
Отладка QUIK 8.13
 
Цитата
TGB написал:
Где ваш протестированный вами код?
Нормально. Идея фикс у вас, проблемы с возможным зависанием у арки, а код я буду писать. Не надейтесь.

Цитата
TGB написал:
Команде Lua это не нужно.
Потому что у них мозги есть. У арки, думаю, тоже.

Засим завершаем тему. Я свою позицию изложил, прислушиваться или нет - арке решать.
Отладка QUIK 8.13
 
Цитата
TGB написал:
почему вы так упорно боретесь против «форка lua»?
Потому что арка не знает, как устроен луа. И вы не знаете. И я не знаю. У вас есть формальное описание виртуальной машины? Нет. Вы что-то патчите в неизвестно-как-работающем-коде с доказательствами вида "я три дня тестил". Тесты пишутся не для того, чтобы показать, что "у меня работает", а чтобы доказать соответствие написанного кода формальной модели. Модели нет, что тестировать? Если бы вы это предложение выкатили команде луа, еще куда б ни шло, там хоть последствия понимают.

Еще раз, в текущем луа есть удобная особенность атомарности исполнения байткода. Вы это хотите сломать. Я против самой идеи это ломать. Проблема возможного завешивания хоста навсегда кривым кодом - существует. Как ее решить без ковыряния в кишках луа, я предложил. Протестировать очень просто: выставляете в реестре HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\CriticalSectionTimeout на сколько хотите миллисекунд и тестируете существующий квик. В продакшене так делать нельзя, на всякий случай добавлю, это на всю систему влияет.


Цитата
TGB написал:
закладки в моем коде
Вы на это слово так триггернули, что теперь действительно есть смысл поискать (но я не буду). Там не про ваш код было, если что.
Отладка QUIK 8.13
 
Цитата
TGB написал:
я бы до такого не додумался
Есть вещи, друг горацио, что и не снились вашим мудрецам. Я писал сначала, что не надо луа патчить для решения вашей проблемы? Писал. Я написал, как решить ее без патча луа? Написал. Еще что-нибудь? Нагуглить для вас критическую секцию с таймаутом или сами сумеете?

Цитата
TGB написал:
закладки
Эко я хорошо слово подобрал. Все ж я экстрасенс, согласитесь.
Отладка QUIK 8.13
 
Цитата
TGB написал:
Конечно же, каждый разработчик может писать скрипты как хочет
, "но тем, кто будет писать не как я, подложу-ка я закладочку и выкручивайтесь как выйдет". Вот так вот получается.

Я хорошо понимаю, чего вы добиться хотите: возможности выполнять произвольный юзерский (то есть не контролируемый вами) код с возможностью его контролировать. Это невозможно в принципе, вы можете либо прибить зависший поток со всеми потрохами, либо ждать, когда он соизволит обратить на вас внимание. В то же время у нас есть виртуальная машина, поэтому арка может добавить отслеживание зависших скриптов, если вместо кондовой CRITICAL_SECTION в качестве лока будет использовать нечто иное с возможностью таймаута на вход. Если таймаут истек и секция не захвачена, весь скрипт убивается как в случае ошибки, все дела. В идеале сначала дергается некий юзерский колбек с вопросом "тебя прибить или сам отвиснешь", если ответил отвисну и не отвис, в морг. Вот что вам стоило бы попросить у арки, а не луа ломать.
Отладка QUIK 8.13
 
TGB,  этот марлезонский балет достал уже. Все показал, все на пальцах объяснил, теперь оказывается надо писать только так и никак иначе. Что воду в ступе толочь.
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 28 След.
Наверх