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

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

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 87 След.
Таблица алгоритмических заявок в QUIK для Windows, Не очищается таблица алгоритмических заявок
 
Цитата
SergeyCS написал:
потому что у меня уже есть опыт ожидания более 40 минут времени после соединения, чтобы дождаться чтобы программа ожила и ей стало возможно пользоваться. Но с этим можно бороться установкой новой программы без накопленной истории котировок за несколько месяцев.
Почему просто не сотрете историю вместо установки новой программы?
Можно историю стирать бат файлом автоматом при запуске программы.  
Утечка памяти при getQuoteLevel2, Утечка памяти при getQuoteLevel2
 
Цитата
andrey2185 написал:
Привет, при вызове getQuoteLevel2 в OnQuote
Пардон, из вашего сообщения следует что Вы читаете стакан в колбеке
Код
...при вызове getQuoteLevel2 в OnQuote ...
Можете выложить свой тест, который покажет, что утечка есть?
Утечка памяти при getQuoteLevel2, Утечка памяти при getQuoteLevel2
 
сделайте очередь и кидайте все из колбеков в нее
В main делаете цикл обработки очереди.
В результате все сигналы колбеков будут обработаны.
В документации есть пример .  
Как создать мост QLua-скрипта с другим C++ приложением? Вопрос концепта., Предлагаю такой подход, но есть вопросы.
 
Цитата
Бес Паники написал:
Цитата
nikolz написал:
Для обмена между скриптами т е потоками main  в разных скриптах QUIK , использую глобальные переменные.
Подскажите пожалуйста где посмотреть подробнее про такой обмен данными в Quik между разными скриптами, запущенными по отдельности.
для начала спросите у алисы:  обмен данными между потоками в одном приложении
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Судя по документации функция OnDestroy() не предназначена для решения указанной задачи.
Код
Функция вызывается при удалении индикатора с графика, либо при закрытии окна 
диаграммы и не является обязательной для индикатора. 
Формат вызова: 
OnDestroy () 
В данном случае индикатор не удаляется и окно не закрывается.
А при смене инструмента в окне это функция и не должна работать.
---------------------
Задача смены лог файла при смене инструмента решается другим способом.
При смене инструмента графика в Lua индикаторе OnDestroy() не вызывается
 
Информация к размышлению
Взял скрипт который приведен здесь

тест показал, что проблемы нет:





т е при смене инструмента старые матки удаляются.
Что не так?
Получить данные о сделках при срабатывании стоп-ордера, когда скрипт не работает?
 
Цитата
Сергей Че написал:
Цитата
nikolz написал:
Сергей Че,
Вы удивитесь, но покупает не QUIK и не Вы, а брокер, по вашему поручению, которое Вы в данном случае подаете через QUIK.
Все иное Вам только кажется.
А через Lua-скрипт?
QUIK предназначен для подачи поручений  в текущей сессии. Если включите QUIK  в торговый день когда совершилась сделка то увидите иначе нет .
Но документально покупка подтверждается лишь отчетом брокера.  
Все что видите в QUIK это как новости по ящику.  Может правда, а может нет. Реальность лишь в отчете брокера.
Получить данные о сделках при срабатывании стоп-ордера, когда скрипт не работает?
 
Сергей Че,
Вы удивитесь, но покупает не QUIK и не Вы, а брокер, по вашему поручению, которое Вы в данном случае подаете через QUIK.
Все иное Вам только кажется.
Получить данные о сделках при срабатывании стоп-ордера, когда скрипт не работает?
 
Цитата
Сергей Че написал:
Можно ли получить данные о сделках при срабатывании стоп-ордера, когда скрипт не работает?

Пример. Цена растёт, я открыл лонг, поставил стоп-ордер под точку входа. Потом закрыл квик, выключил компьтер, и включил его через неделю.
Как узнать, по какой цене произошла сделка (сделки), когда на следующий день после открытия позиции сработал стоп-ордер и закрыл мою позицию?
Можно ли узнать данные о произошедшей сделке (сделках), когда я снова включу компьютер и открою квик?
Смотрите отчет брокера.  
CreateDataSource
 
Цитата
Сергей Че написал:
Цитата
nikolz написал:
 Сергей Че  ,
Рекомендую почитать про потоки и не только:
Спасибо за рекомандацию, но всё-таки, что произойдёт с ИД второго скрипта, если в первом выполнить   data_source    :Сlose()  , учитывая, как было сказано выше, что хранилище свечей одно.
Если библиотека QLua написана правильно ( а сомнений в этом пока нет), то ничего существенного не произойдет.
-------------------
Обычно, если ресурс используется различными приложениями , например , библиотеки, то создается счетчик обращений к данному ресурсу. если подписались, то счетчик увеличивается, а если отписались то уменьшается.
Ресурс освобождается лишь при нулевом счетчике.  
CreateDataSource
 
Сергей Че,
Рекомендую почитать про потоки и не только:
CreateDataSource
 
Цитата
Сергей Че написал:
Цитата
TGB написал:
 
Цитата
Сергей Че  написал:
Сколько потоков создаст функция CreateDataSource()?
      Вы, наверное, хотели спросить: сколько хранилищ свечей создаст функция CreateDataSource()?
Ответ: одно.
И что будет, если в одном из скриптов вызвать   data_source:Close()  ?
Другой скрипт обломается?
Сергей Че, Вы что-то путаете
Функция reateDataSource()? никакие потоки не открывает. Я вам это уже давно сказал. Вы опять пошли по кругу.
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
 
Цитата
AndyWise написал:
Цитата
nikolz написал:
можно поставить таймер. или использовать тики и высокоточный счетчик.
В файл, тики,  тики плюс+счетчик - это понятно. А таймер это как? Я так понял, что если инструмент не в торгах и не в сделках, то график статичен и там нет событий вообще.
Таймер и высокоточный счетчик это API C for Lua.
---------------
Один из вариантов решения  проблемы с малыми движениями индикатора на инструменте.
Торгую вечным фьючерсом сбера. Он изменяется медленно. Открываю лучшее предложение/спрос на графике акции.  
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
 
можно сделать очень просто
из индикатора сбрасывать в файл, а в скрипте читать из этого файла.
Так как это будет лишь при смене графика, то грузить ничего не будет. А запаздывание чтения в скрипте составит не более 0.1 сек
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
 
еще можно использовать тики от высоколиквидного инструмента например сбер.
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
 
Цитата
AndyWise написал:
Цитата
nikolz написал:
Зачем на индикаторах день или час  интервалы в секунды? Какой в этом смысл?
Стратегия на графике Дня, Часе/5мин, 2 окна. Нужно секундное обновление данных в привод, для расчетов и контроля  ошибок. Но если от тиков обновление брать, то они не постоянны. А если полингом из скрипта, то там не работает getDataSourceInfo. Вот  сижу думаю
можно поставить таймер. или использовать тики и высокоточный счетчик.
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
 
Если надо высокую скорость то это на скрипте не индикаторе. В таком варианте можно получить интервал в 0.001 сек.
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
 
Цитата
AndyWise написал:
Цитата
nikolz написал:
Чтобы индикатор лишнего не грузился обходите те функции внутри него, которые надо считать лишь на закрытых свечах.
А если таймфрейм свечи графика 60мин или дневной, как бы Вы реализовали опрос позиций и статус соединения Квика 1 раз в 2 сек внутри индикатора? Через разницу времени тиков?  
Дневную свечу строю  на интервалах меньшего тайма.
-----------------------------
Зачем на индикаторах день или час  интервалы в секунды?
Какой в этом смысл?
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
 
Чтобы индикатор лишнего не грузился обходите те функции внутри него, которые надо считать лишь на закрытых свечах.
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
 
Цитата
AndyWise написал:
Цитата
nikolz написал:
Непонятно, что и куда передать. Напишите пример.
getDataSourceInfo() работает только в потоке индикатора, а его лучше не грузить т.к. перерисовывается на каждом тике. Поэтому у меня просто отдельный скрипт собирает каждые 0,2с :  текущее время, статус терминала, позиции, цену, ATR, границы цен и т.д. и гонит их в файл. Вот  задумался, а как сделать, чтоб поток этот был в зависимости от выделенного инструмента в ТТТ и заякоренного графика.
Все не так уж сумрачно вблизи.
----------------------------
Если происходит изменение инструмента на графике, то перестраиваются все индикаторы.
Это означает, что индекс Calculate начинается с 1 .
ставим условный оператор
if indx==1 then
....getDataSourceInfo()....
end
В результате эта функция вызываемся всего один раз для нового инструмента или нового тайма.
Поле trans_id для закрытия заявки: в чём смысл?, Есть ли примеры, где оно может быть использовано?
 
Цитата
User12501 написал:
Предположим я создал заявку, присвоив ей trans_id=1. При создании срабатывает OnOrder(ord), где ord.trans_id=1, ord.order_num = номер новой заявки.
Теперь я хочу отменить эту заявку. Для этого я создаю новую транзакцию, в которой пишу trans_id=2, action = kill_order. Но при срабатывании OnOrder(ord) я опять вижу, что ord.trans_id=1, ord.order_num = номер удаляемой заявки. Т.е. новая транзакция, у которой trans_id=2, не вернулась в OnOrder, и даже не отобразилась в общем списке заявок. Это в целом понятно и логично, но непонятно, для чего тогда указывать trans_id=2? Т.е. если я не заполню поле trans_id=2, будет ошибка, но по факту это значение 2 дальше нигде не будет использовано. Или есть какие-то случаи, когда оно может пригодиться?  
Например, торгуем двумя инструментами, по первому послали выставить заявку и по второму послали выставить заявку.
Но по второму транзакция не прошла .
Для второй заявки сработает лишь OnTransReply.
По id можно определить какая транзакция с ошибкой.
 
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
 
Цитата
AndyWise написал:
Цитата
nikolz написал:
функция getDataSourceInfo() работает как и говорилось.
Про источник я понял, я в контексте, как передать информацию в обычный скрипт с минимальными издержками. Пока варианты это метка, или файл открыть. Есть еще идея считать выделенное в ТТТ через  win api, все равно весь трафик гоню в отдельную программу. Но пока не осилил, далеко она запрятана ....
Непонятно, что и куда передать. Напишите пример.
CreateDataSource
 
Цитата
Сергей Че написал:
Цитата
nikolz написал:
запуск каждого скрипта добавляет ровно один поток - функция main.
То есть сколько скриптов запрашивают поток, столько же потоков запрашивает КВИК? Даже на один и тот же инстумент?
нет. Когда запускается скрипт, то функция main запускается в отдельном потоке.
Это делается  для функции main, даже если в скрипте лишь эта функция пустая.
так реализован механизм запуска скрипта.
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
 
Цитата
AndyWise написал:
функция getDataSourceInfo() работает как и говорилось.
функция getDataSourceInfo() работает как и говорилось.
CreateDataSource
 
запуск каждого скрипта добавляет ровно один поток - функция main.
CreateDataSource
 
Цитата
Сергей Че написал:
Цитата
nikolz написал:
В рамках одного скрипта (торгового робота) понятно, что  поток будет один .
Хоть я 10 раз выполню   CreateDataSource    ()   с одними и теми же параметрами.
А если разные скрипты (торговые роботы) решили поторговать одним и тем же инструментом?
Реально подписку делает терминал  а не скрипт, Скрипт это VMLua (виртуальная машина) .
QLua - это и есть библиотека для связи скриптов с терминалом, а через него с сервером.
Можно не делать никакую подписку, а открыть график в терминале это и вызовет обращение терминала к серверу за данными.
Неважно сколько вы запустите скриптов по одному инструменту , сервер будет посылать  свечи лишь в одном экземпляре.  
------
А теперь тест:
запускаем терминал:

18 потоков

1-ый скрипт


2-ой скрипт


это текст скриптов (изменяем имя log файла и имя скрипта)
Код
minfo=debug.getinfo(1, "S").source:sub(2);  p=minfo:match("(.*[/\\])") or "."
logf =p.."/lua_log.txt" Log = io.open(logf,"w")
class = "QJSIM"
sec = "SBER"    -- КОД ИНСТРУМЕНТА
local t={}
function main()
   while true do
       local x=CreateDataSource(class, sec,1);
      local y=x;
      Log:write(tostring(x).."\n");
         Log:write(tostring(y).."\n");
   sleep(1000);
   end
end

это таблицы которые создали скрипты:

CreateDataSource
 
Вот тест:
-------------------
Запускаем QUIK
Смотрим сколько потоков:


их 11
теперь стартуем скрипт который  в main делает подписку много раз:
Это лог файл таблиц, которые созданы по подписке
Код
table: 0000014B7BA76EA0
table: 0000014B7BA76EA0
table: 0000014B7BA76760
table: 0000014B7BA76760
table: 0000014B7BA77020
table: 0000014B7BA77020
table: 0000014B7BA769A0
table: 0000014B7BA769A0
table: 0000014B7BA765A0
table: 0000014B7BA765A0
table: 0000014B7BA762A0
table: 0000014B7BA762A0
table: 0000014B7BA76AE0
table: 0000014B7BA76AE0
table: 0000014B7BA76BE0
table: 0000014B7BA76BE0
table: 0000014B7BA76620
table: 0000014B7BA76620
table: 0000014B7BA77A20
table: 0000014B7BA77A20
table: 0000014B7BA771A0
table: 0000014B7BA771A0
table: 0000014B7BA778E0
table: 0000014B7BA778E0
table: 0000014B7BA77F20
table: 0000014B7BA77F20
table: 0000014B7BA780A0
table: 0000014B7BA780A0
table: 0000014B7BA77C60
table: 0000014B7BA77C60
table: 0000014B7BA772A0
table: 0000014B7BA772A0
table: 0000014B7BA77220
table: 0000014B7BA77220
table: 0000014B7BA77360
table: 0000014B7BA77360

теперь смотрим сколько же потоков?

их 12
CreateDataSource
 
Цитата
Nikolay написал:
Здесь вопрос более тонкий. Кеш сделали и ладно. Я бы не стал полагаться на GC, все же запомнить уже заказанные потоки не сложно.
А вот закрытие оных уже вопрос. Я меня есть счетчик использования потоков. Т.к. один и тот же может использоваться много раз. И по мере того, как он перестает быть необходимым счетчик уменьшается, и если он 0, то вызывается Close. Дабы закрыть поток.

Но т.к. скрипт может быть остановлен принудительно, что закрыть все открытие потоки уже не всегда будет возможно. Как себя ведет терминал при таком закрытии скрипта - не ясно. Надеюсь, что есть внутренний кеш.. В древних версиях терминала (на ранней 7-ой, кажется) при заказе потоков без закрытия или вызова GC - терминал начинал есть память.
Я полагаю, что эта таблица лишь  хранит указатели, а не заказывает новые потоки. Поток данных  будет один.  Таблиц можно создать сколько угодно. Затраты копейки. Если это таблица не  сохраняется как глобальная , то отсутствие на нее ссылки приведет к уничтожению ее сборщиком мусора.
CreateDataSource
 
Цитата
Сергей Че написал:
Цитата
nikolz написал:
Указатель на колбек записывается в таблицу. Если таблицу уничтожили, то и указатель уничтожен.
А вот и нет! Функция будет жить самостоятельно, если создана до таблицы, а в таблице только ссылка на таблицу.
Код
  $ lua
Lua  5.4 . 8   Copyright (C)  1994  -  2025  Lua.org, PUC - Rio
 >  f  =   function (x)  return  x * x  end 
 >  f( 6 )
 36 
 >  t  =  {aaa  =  f}
 >   t.aaa ( 8 )
 64 
 >  t  =   nil 
 >   t.aaa ( 3 )
stdin: 1 : attempt to index a  nil  value (global  't' )
stack traceback:
   stdin: 1 :  in  main chunk
   [C]:  in  ?
 >  f( 4 )
 16   
А кто ее вызывать будет и как?
CreateDataSource
 
Указатель на колбек записывается в таблицу. Если таблицу уничтожили, то и указатель уничтожен.
CreateDataSource
 
Цитата
Сергей Че написал:
Цитата
nikolz написал:
Эта таблица ничего не триггереет. Она просто содержит указатели на функции.
Все затертые таблицы вообще становятся недоступными и их сборщик соберет.
Так значит предыдущая функция-колббек будет по-прежнему вызываться квиком?
Поясните вопрос.
какие предыдущие? Вы что делаете кучу колбеков на один и тот же источник ?
А нафига?
Новые фьючерсы на биткойн и эфир, Правильный рассчёт стоимости лота
 
Новые фьючерсы на биткойн и эфир, Правильный рассчёт стоимости лота
 
Если не ошибаюсь, то цена лота для BTZ5 не 90 000 долларов, а 90 000 рублей.
Новые фьючерсы на биткойн и эфир, Правильный рассчёт стоимости лота
 
Цитата
maxlifter написал:
фьючерсам BTZ5
Никакие. Это не форекс.
CreateDataSource
 
Цитата
Сергей Че написал:
Цитата
nikolz написал:
если вызывать так:
local x=CreateDataSource(class, sec,1);
то новая таблица будет просто удалять старую.
--------------------
При повторном вызове создается новая таблица:  
Код
    table: 0000027F53E0C620
table: 0000027F53E0C2A0
table: 0000027F53E0C3A0
table: 0000027F53E0C820
table: 0000027F53E0C460    
 
А предыдущие таблицы будут автоматически уничтожаться сборщиком мусора? Или они по-прежнему будут триггерить функцию-коллбек?
Нет.  
Эта таблица ничего не триггереет. Она просто содержит указатели на функции.
Все затертые таблицы вообще становятся недоступными и их сборщик соберет.
CreateDataSource
 
если вызывать так:
local x=CreateDataSource(class, sec,1);
то новая таблица будет просто удалять старую.
--------------------
При повторном вызове создается новая таблица:
Код
table: 0000027F53E0C620
table: 0000027F53E0C2A0
table: 0000027F53E0C3A0
table: 0000027F53E0C820
table: 0000027F53E0C460
CreateDataSource
 
можно протестить, если разработчики не прояснят.
CreateDataSource
 
если создается другая, то она очевидно будет точной копией.  
CreateDataSource
 
Предположу, что туже самую.  Так как не возникал такой вопрос.  
Нужна помощь в простейшей ситуации с вызовом getParamEx(class_code, sec_code, param_name), Скрипт выполняется, находит таблицу, но далее полный облом
 
Код
--  Скрипт для КВИК: Получение цены и запись в лог-файл
-- =======================================================
minfo=debug.getinfo(1, "S").source:sub(2);  p=minfo:match("(.*[/\\])") or "."
log_file_path =p.."/lua_log.txt"
class = "QJSIM"
sec = "SBER"    -- КОД ИНСТРУМЕНТА
param = "LAST"  -- Параметр: Цена последней сделки
local value = getParamEx (class, sec,param).param_image
if value then
   log_message = " Цена " .. sec .. " = " .. tostring(value)
else
   -- Ошибка
   log_message = "ОШИБКА: Не удалось получить параметр " .. param .. " для " .. sec .. ". Проверьте коды класса/инструмента и активность торгов."
end
 message( log_message,1) 
local file = io.open(log_file_path, "a")
if file then
   file:write(os.date("[%Y-%m-%d %H:%M:%S] ") .. log_message .. "\n")
   io.close(file)
   print("Лог записан в файл: " .. log_file_path) -- В системный лог QUIK
else
   local err = "Невозможно открыть/записать файл лога по пути: " .. log_file_path
   message(err, true) -- Всплывающее окно в QUIK
   print(error)
end
Нужна помощь в простейшей ситуации с вызовом getParamEx(class_code, sec_code, param_name), Скрипт выполняется, находит таблицу, но далее полный облом
 
Код
--  Скрипт для КВИК: Получение цены BRF6 и запись в лог-файл
-- =======================================================
minfo=debug.getinfo(1, "S").source:sub(2);  p=minfo:match("(.*[/\\])") or "."
log_file_path =p.."/lua_log.txt"
class = "QJSIM"
sec = "SBER"    -- КОД ИНСТРУМЕНТА
param = "LAST"  -- Параметр: Цена последней сделки
-- Используем функцию QUIK API для получения данных
local value = getParamEx (class, sec,param).param_image
  message(tostring(value),1) -- Всплывающее окно в QUIK
if value then
   log_message = " Цена " .. sec .. " = " .. tostring(value)
else
   -- Ошибка
   log_message = "ОШИБКА: Не удалось получить параметр " .. param .. " для " .. sec .. ". Проверьте коды класса/инструмента и активность торгов."
end
-- Запись сообщения в файл лога
 message( log_message,1) 
local file = io.open(log_file_path, "a")
if file then
   file:write(os.date("[%Y-%m-%d %H:%M:%S] ") .. log_message .. "\n")
   io.close(file)
   print("Лог записан в файл: " .. log_file_path) -- В системный лог QUIK
else
   local err = "Невозможно открыть/записать файл лога по пути: " .. log_file_path
   message(err, true) -- Всплывающее окно в QUIK
   print(error)
end


Вы неправильно читаете параметр.
Сделал для акции так как сейчас  на демо сервере фьючерсы не торгуются.
Исправьте как вам надо.
--------------------------
Лог файл откроется там, где этот скрипт.
Вывод сообщения в лог файл и в окно сообщений.
Не получается запустить два скрипта одновременно, При запуске второго первый останавливается
 
User12501
Если выложите скрипт, скажу как исправить.
Как вычислить положение курсора или перекрестия с графика инструмента
 
Цитата
Виталий Дерягин написал:
Нужно для того, чтобы отыскать ближайшую метку на графике от курсора к которой будет прикреплена таблица с данными и при нажатии горячей клавиши будет выводится таблица.
Это Вы не реализуете.
Как вычислить положение курсора или перекрестия с графика инструмента
 
Цитата
Виталий Дерягин написал:
Это вообще можно реализовать на КВИКЕ?
Сложно, что практически не имеет смысла.  
Не получается запустить два скрипта одновременно, При запуске второго первый останавливается
 
Не получается запустить два скрипта одновременно, При запуске второго первый останавливается
 
Цитата
User12501 написал:
Цитата
nikolz написал:
Я проверил, если запускать два простейших скрипта, типа message(...) sleep, то работают. Но если мой мониторинг цены запараллелить с простейшим - останавливается. Возможно какая-то конкретная функция есть, которая не хочет делить ресурсы.

Более того, останавливается даже в момент загрузки второго скрипта. Т.е. нажимаю кнопку "добавить", выбираю файл скрипта (но не запускаю) - и первый останавливается.

P.S. Тут по правилам форума новичку можно писать только одно сообщение в сутки. Так что если я молчу - не значит, что всё ок или я забил.  
У меня 1 скрипт - это робот который создает таблицу (видно на рисутке) обрабатывает колбеки выставляет заявки и выдает команды второму роботу Второй робот считает алгоритмы и выдает команды первому роботу. Они общаются через mapping file и глобальные переменные среды приложения.  Могу еще что-нибудь добавить .  
Не получается запустить два скрипта одновременно, При запуске второго первый останавливается
 
Как создать мост QLua-скрипта с другим C++ приложением? Вопрос концепта., Предлагаю такой подход, но есть вопросы.
 
...замечу, глобальные переменные не луа, а среды исполнения приложения.
Как создать мост QLua-скрипта с другим C++ приложением? Вопрос концепта., Предлагаю такой подход, но есть вопросы.
 
Цитата
A.T. написал:
Потому что это совсем колхоз, архитектурно неправильно. Я еще должен выделять специальное место в системе, как загашник... Когда существует официальная связка Lua-C (описанная в книге Иерусалимского), в детали не вникал и данные не гонял, но тестовый запуск уже получился, это есть.

Тем более есть мысли применить такой мост Lua-C <=> VC++ (MFC, скорее всего) и в другом месте, не только как узкоспециальный плагин на раз.

И потом, что значит "особенно в RAM диске"? Мне еще сторонний витруальный диск ради этого создавать? Какими-то сторонними драйверами? И запускать/пересоздавать его, заботиться после каждой перезагрузки. Который будет мешаться в системе в повседневных делах. У меня не только квик, у меня и другие развлечения есть.
То есть это даже не костыль, это хуже. Настолько временное решение, что лучше о нем не думать.
На сайте Майкрософта висит готовый пример для named pipes. И не только для него.

Насчет протокол на запрос-ответ понадобится в любом случае, тут спасибо за заметку. Пока думаю об этом в первом приближении. Думаю отделаться простыми переменными, if-elsами, сравнениями и кейсами. Хотя это не дело, если делать нормальный переносимый мост. Но для себя сгодится и так. Наверно. Тут не знаю, опыта в создании протоколов нет.
Расскажу свой опыт решения этой задачи.
--------------------
Сначала кратко повторю то, что уже недавно и давно писал на форуме с тестами.
------------------------
Во-первых замечу если ставите sleep ( я использую event) то задержка передачи данных будет равна задержке sleep.  можно поставить sleep(10) этого достаточно чтобы поток не грузил ядро впустую.
Можно даже поставить sleep(1)  но задержка реально будет примерно 10 ms - это квант OS.
--------------------
Так вот обмен через файлы это самое простое (примерно 10 операторов) и задержка не более 15 ms
----------------------
Я использую для обмена между процессами File Mapping https://learn.microsoft.com/en-us/windows/win32/memory/using-file-mapping
При этом если использовать event, то задержа примерно в 100 раз меньше, чем при обмене через файлы.
Для обмена между скриптами т е потоками main  в разных скриптах QUIK , использую глобальные переменные.
При этом, если использовать event, то задержка примерно в 1000 раз меньше, чем при обмене через файлы (3-5 мкс)
----------------------------  
Эти методы самые быстрые.
-------------------
Время загрузки тарминала QUIK
 
Я утверждаю, что время загрузки(старта)  существенно зависит от наличия скриптов индикаторов на луа и архива истории.
------------------
Провел тест времени загрузки (начала работы )терминала QUIK (брокер Сбербанк)
---------------------

Тест 1:
Сделал копию рабочей папки QUIK
Удалил папку архивы и индикаторы и подключился к брокеру:
-------------
Время старта вычислял по интервалу от момента двухфакторной до начала отображения стакана и графиков





Тест2:  загрузил рабочий вариант QUIK



В результате Тест 1 время загрузки без скриптов на луа составляет  12 секунд, а время загрузки со скриптами индикаторов 69 секунд
----------------------------------  
Выводы делайте сами.
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 87 След.
Наверх