Передача данных из скрипта в скрипт QUIK или приложение

Страницы: 1
RSS
Передача данных из скрипта в скрипт QUIK или приложение
 
Алгоритм теста:
---------------
два скрипта.
------------------
Первый скрипт:
Содержит колбеки. Полученная в колбеке таблица преобразуется в строку и записывается в файл.
-------------------------
Второй скрипт:
В функции main читает новые строки из файла. Если строки есть, то выводит их в лог файл.
--------------------------
В результате получаем в лог файле вторго скрипта таблицы из колбеков первого.
Ниже приведено содержимое лог файла при купокупки и продажи  акции на демо сервере
----------------------------
В строке записана следующая информация
136, млсек --задержка приема данных вторым скриптом в ms  относительно колбека первого скрипта.
307620878521: --значение счетчика в мкс во втором скрипте
307620741599:  --значение счетчика в мкс в первом скрипте
6,  мксек-- время на передачу таблицы из колбека в функцию вывода в файл в первом скрипте,
Param={sec_code=RUAL,class_code=QJSIM},  -- таблица параметров колбека
14  мксек  -- время на преобразование таблицы в строку.
Код
136,307620878521:307620741599:6,Param={sec_code=RUAL,class_code=QJSIM},14
46,307632222474:307632175847:6,Param={sec_code=PLZL,class_code=QJSIM},15
47,307632223018:307632175847:6,Param={sec_code=PLZL,class_code=QJSIM},15
151,307644227744:307644075798:4,DepoLimit={openlimit=0.0,locked_buy_value=332.37,currentbal=0.0,wa_price_currency=SUR,sec_code=SBER,locked_buy=1.0,openbal=0.0,locked_sell_value=0.0,currentlimit=0.0,firmid=NC0011100000,limit_kind=-260202016,client_code=10057,trdaccid=NL0011100043,locked_sell=0.0,awg_position_price=0.0,wa_position_price=0.0},67
152,307644228721:307644075798:4,DepoLimit={openlimit=0.0,locked_buy_value=332.37,currentbal=0.0,wa_price_currency=SUR,sec_code=SBER,locked_buy=1.0,openbal=0.0,locked_sell_value=0.0,currentlimit=0.0,firmid=NC0011100000,limit_kind=-260202016,client_code=10057,trdaccid=NL0011100043,locked_sell=0.0,awg_position_price=0.0,wa_position_price=0.0},67
76,307656202404:307656125744:6,Param={sec_code=PLZL,class_code=QJSIM},14
156,307668145723:307667989434:6,Param={sec_code=GAZP,class_code=QJSIM},15
156,307668145886:307667989434:6,Param={sec_code=GAZP,class_code=QJSIM},15
74,307679654875:307679580857:6,Param={sec_code=AFKS,class_code=QJSIM},15
74,307679655479:307679580857:6,Param={sec_code=AFKS,class_code=QJSIM},15
150,307692504242:307692353605:6,Param={sec_code=PLZL,class_code=QJSIM},14
151,307692504717:307692353605:6,Param={sec_code=PLZL,class_code=QJSIM},14
74,307705089868:307705015404:6,Param={sec_code=AFLT,class_code=QJSIM},23
72,307718039330:307717966568:6,Param={sec_code=AFLT,class_code=QJSIM},17
75,307730093355:307730017462:6,Param={sec_code=GAZP,class_code=QJSIM},15
64,307742024710:307741960032:6,Param={sec_code=GMKN,class_code=QJSIM},15
64,307742024919:307741960032:6,Param={sec_code=GMKN,class_code=QJSIM},15
4,307743459241:307743454534:5,DepoLimit={openlimit=0.0,locked_buy_value=0.0,currentbal=1.0,wa_price_currency=SUR,sec_code=SBER,locked_buy=0.0,openbal=0.0,locked_sell_value=304.88,currentlimit=0.0,firmid=NC0011100000,limit_kind=20260202,client_code=10057,trdaccid=NL0011100043,locked_sell=1.0,awg_position_price=304.92,wa_position_price=304.92},57
152,307743606854:307743454534:5,DepoLimit={openlimit=0.0,locked_buy_value=0.0,currentbal=1.0,wa_price_currency=SUR,sec_code=SBER,locked_buy=0.0,openbal=0.0,locked_sell_value=304.88,currentlimit=0.0,firmid=NC0011100000,limit_kind=20260202,client_code=10057,trdaccid=NL0011100043,locked_sell=1.0,awg_position_price=304.92,wa_position_price=304.92},57
152,307754399207:307754246493:7,Param={sec_code=GAZP,class_code=QJSIM},16
153,307754399652:307754246493:7,Param={sec_code=GAZP,class_code=QJSIM},16
151,307754554695:307754402703:2,Order={revision_number=0,side_qualifier=0,price=0.0,qty2=0.0,firmid=NC0011100000,account=NL0011100043,external_qty=0.0,uid=0,repoterm=0,operation_type=0,linkedorder=0,bank_acc_id=,passive_only_order=0,client_short_code=0,reject_reason=,filled_value=0.0,ext_order_flags=0,datetime={week_day=5,hour=13,min=34,day=30,ms=0,sec=46,year=2026,mcs=0,month=1},order_num=10210576492,accruedint=0.0,price_currency=,visibility_factor=0.0,expiry=-1,exec_type=0,exchange_code=,visible=0.0,price2=0.0,yield=0.0,value_entry_type=0,userid=NC0011100000,lseccode=,on_behalf_of_uid=0,executing_trader_qualifier=0,executing_trader_short_code=0,ordernum=10210576492,awg_price=0.0,accepted_uid=0,start_discount=0,visible_repo_value=0.0,expiry_time=-1,trans_id=0,canceled_uid=0,settlecode=,price_entry_type=0,benchmark=,flags=20,seccode=SBER,trading_session=0,repovalue=0.0,acnt_type=0,start_date=0,withdraw_datetime={week_day=1,hour=0,min=0,day=1,ms=0,sec=0,year=1601,mcs=0,month=1},client_code=10057,sec_code=SBER,settle_date=0,value=0.0,repo2value=0.0,brokerref=10057//,investment_decision_maker_short_code=0,investment_decision_maker_qualifier=0,settle_currency=,ext_order_status=0,class_code=QJSIM,repo_value_balance=0.0,activation_time=0,client_qualifier=0,qty=1.0,extref=,value2=0.0,settle_date2=0,balance=0.0,capacity=0,min_qty=0.0},169
150,307766405391:307766254827:6,Param={sec_code=NVTK,class_code=QJSIM},16
150,307766405474:307766254827:6,Param={sec_code=NVTK,class_code=QJSIM},16
59,307777503003:307777443230:6,Param={sec_code=PLZL,class_code=QJSIM},15
143,307790104848:307789961057:6,Param={sec_code=HYDR,class_code=QJSIM},15
146,307802247682:307802101258:5,Param={sec_code=GAZP,class_code=QJSIM},14
146,307802247877:307802101258:5,Param={sec_code=GAZP,class_code=QJSIM},14
 
А зачем писать на диск, если mmap позволяет делать отражение в памяти.
 
Цитата
Nikolay написал:
mmap позволяет делать отражение в памяти
Какую библиотеку используете?
 
Цитата
Йцукен написал:
Какую библиотеку используете?
Свою.
 
Цитата
Nikolay написал:
А зачем записывать на диск, если mmap позволяет создавать отражение в памяти.
ранее уже про это писал:
https://forum.quik.ru/forum17/topic8452/
-------------
Поясняю.
Есть несколько способов обмена.
Самый быстрый это через общую память dll,  следующий  mapping file.   Они есть у меня.
Но они требуют создания dll на С for lua.
-------------------
Обмен через файлы не требует написания dll и может быть реализован на луа без знания C.
 
Изменил алгоритм работы скриптов.
Увеличилась скорость обмена данными:
Алгоритм:
Задается список торгуемых классов и список торгуемых инструментов
----------------
Первый скрипт записывает  информацию из колбеков  для каждого инструмента в отдельный файл.
По колбеку OnParam   передается последняя цена и лучшие цены спроса и предложения.
---------------------
Второй скрипт перебирает торгуемые инструменты и читает из их файлов новые данные.
Полученные данные выводит в лог файл.
Результат:
Время передачи данных составляет 15 млсек (0.015 сек)  
Код
SBER,15,1769849062.0292:1769849062.014:{Quote={offer_count=10.000000,bid_count=10.000000,offer={{price=308.34,quantity=3},{price=308.36,quantity=28},{price=308.37,quantity=265},{price=308.40,quantity=11},{price=308.49,quantity=137},{price=308.50,quantity=24},{price=308.56,quantity=1},{price=308.57,quantity=1},{price=308.64,quantity=1},{price=308.67,quantity=1}},bid={{price=307.87,quantity=1},{price=307.97,quantity=1},{price=308.07,quantity=1},{price=308.17,quantity=3},{price=308.18,quantity=1},{price=308.20,quantity=2},{price=308.26,quantity=231},{price=308.27,quantity=1},{price=308.29,quantity=500},{price=308.30,quantity=572}}},fun=Quote}
RUAL,15,1769849063.083:1769849063.0677:{last=41.085,fun=Param,buy=41.085,sell=41.070,clas=QJSIM}
GAZP,15,1769849063.083:1769849063.0677:{last=128.85,fun=Param,buy=128.85,sell=128.82,clas=QJSIM}
VTBR,15,1769849063.083:1769849063.0677:{last=77.84,fun=Param,buy=77.85,sell=77.84,clas=QJSIM}
SBER,15,1769849063.083:1769849063.0677:{last=308.34,fun=Param,buy=308.34,sell=308.30,clas=QJSIM}
ALRS,15,1769849064.0812:1769849064.0658:{last=42.09,fun=Param,buy=42.11,sell=42.09,clas=QJSIM}
RUAL,15,1769849064.0812:1769849064.0658:{last=41.085,fun=Param,buy=41.085,sell=41.070,clas=QJSIM}
VTBR,15,1769849064.0812:1769849064.0658:{last=77.84,fun=Param,buy=77.85,sell=77.84,clas=QJSIM}
SBER,15,1769849064.0812:1769849064.0658:{last=308.34,fun=Param,buy=308.34,sell=308.30,clas=QJSIM}
RUAL,15,1769849065.094:1769849065.0782:{last=41.085,fun=Param,buy=41.085,sell=41.070,clas=QJSIM}
VTBR,15,1769849065.094:1769849065.0782:{last=77.84,fun=Param,buy=77.85,sell=77.84,clas=QJSIM}
SBER,15,1769849065.094:1769849065.0782:{last=308.34,fun=Param,buy=308.34,sell=308.30,clas=QJSIM}
 
еще замечу...
Передача данных через файл позволяет использовать внешние приложения,
написанные на любом другом языке программирования, без знания Lua и С.
и необходимости писать костыли для приема данных.
 
и еще...
Полученное время обмена через файлы  не является длительностью совершения записи чтения,
а равно установленному кванту Windows .
 
21 инструмент,
Первый скрипт при работе занимает 197 Кбайт.
Постепенно объем занятой памяти растет до 279 Кбайт.
Далее включается сборщик мусора и объем снова 197.
 
Как указал ранее, задержка в 15 мс при обмене через файлы связана с квантом времени OC
и возникает из-за наличия SLEEP в цикле функции main.  
------------------
Если sleep удалить то получаем задержка обмена составляет не более 0.2 мс:
Код
GAZP,105,57149552931.4:57149552826.0:{clas=QJSIM,fun=Param,buy=128.34,sell=128.33,last=128.34}
VTBR,56,57149554092.8:57149554036.7:{clas=QJSIM,fun=Param,buy=77.80,sell=77.79,last=77.79}
SBER,138,57151073500.0:57151073362.0:{clas=QJSIM,fun=Param,buy=306.81,sell=306.79,last=306.81}
VTBR,199,57151074195.8:57151073996.4:{clas=QJSIM,fun=Param,buy=77.80,sell=77.79,last=77.8}
VTBR,57,57152455520.3:57152455463.0:{clas=QJSIM,fun=Param,buy=77.79,sell=77.78,last=77.78}
HYDR,124,57153911679.6:57153911554.8:{clas=QJSIM,fun=Param,buy=0.4315,sell=0.4314,last=0.4315}
VTBR,94,57153912857.8:57153912763.8:{clas=QJSIM,fun=Param,buy=77.79,sell=77.78,last=77.79}
VTBR,71,57155297672.1:57155297600.4:{clas=QJSIM,fun=Param,buy=77.82,sell=77.80,last=77.82}
VTBR,66,57156653740.7:57156653674.4:{clas=QJSIM,fun=Param,buy=77.84,sell=77.80,last=77.84}
SBER,94,57159382893.5:57159382798.8:{clas=QJSIM,fun=Param,buy=306.83,sell=306.82,last=306.83}
RUAL,95,57160803449.5:57160803354.5:{clas=QJSIM,fun=Param,buy=40.040,sell=40.010,last=40.04}
SBER,160,57160803716.9:57160803556.6:{clas=QJSIM,fun=Param,buy=306.86,sell=306.84,last=306.84}
VTBR,166,57162174584.1:57162174417.5:{clas=QJSIM,fun=Param,buy=77.84,sell=77.80,last=77.82}
RUAL,100,57163604236.7:57163604136.6:{clas=QJSIM,fun=Param,buy=40.043,sell=40.010,last=40.043}
VTBR,130,57172533507.3:57172533377.2:{clas=QJSIM,fun=Param,buy=77.84,sell=77.80,last=77.84}
GAZP,77,57173902076.6:57173901999.1:{clas=QJSIM,fun=Param,buy=128.35,sell=128.33,last=128.35}
ROSN,110,57173903294.6:57173903184.5:{clas=QJSIM,fun=Param,buy=407.65,sell=407.50,last=407.65}
RTKM,99,57176686384.2:57176686285.2:{clas=QJSIM,fun=Param,buy=65.82,sell=65.66,last=65.66}
SBER,26,57176686529.9:57176686503.2:{clas=QJSIM,fun=Param,buy=306.85,sell=306.83,last=306.85}
GAZP,163,57178153117.1:57178152953.5:{clas=QJSIM,fun=Param,buy=128.36,sell=128.33,last=128.36}
MOEX,44,57178153647.0:57178153602.4:{clas=QJSIM,fun=Param,buy=184.88,sell=184.77,last=184.88}
RUAL,189,57179605642.4:57179605452.5:{clas=QJSIM,fun=Param,buy=40.045,sell=40.010,last=40.045}
GAZP,165,57185716199.5:57185716034.2:{clas=QJSIM,fun=Param,buy=128.35,sell=128.33,last=128.35}
RUAL,32,57188285333.0:57188285300.2:{clas=QJSIM,fun=Param,buy=40.045,sell=40.040,last=40.04}
VTBR,74,57188286119.0:57188286044.3:{clas=QJSIM,fun=Param,buy=77.83,sell=77.80,last=77.83}
SBER,152,57192108110.7:57192107958.5:{clas=QJSIM,fun=Param,buy=306.86,sell=306.83,last=306.86}
ROSN,244,57204920658.8:57204920414.5:{clas=QJSIM,fun=Param,buy=407.65,sell=407.50,last=407.6}
RUAL,188,57204920792.8:57204920604.2:{clas=QJSIM,fun=Param,buy=40.045,sell=40.040,last=40.045}
GAZP,181,57206336953.6:57206336772.4:{clas=QJSIM,fun=Param,buy=128.36,sell=128.33,last=128.36}
MOEX,216,57211753373.1:57211753156.5:{clas=QJSIM,fun=Param,buy=184.85,sell=184.77,last=184.85}
VTBR,324,57211753620.7:57211753296.0:{clas=QJSIM,fun=Param,buy=77.84,sell=77.80,last=77.84}
MOEX,91,57213097741.2:57213097649.3:{clas=QJSIM,fun=Param,buy=184.83,sell=184.82,last=184.82}
MOEX,1152,57221834944.0:57221833791.5:{clas=QJSIM,fun=Param,buy=184.85,sell=184.82,last=184.85}
AFKS,200,57223095019.4:57223094819.2:{clas=QJSIM,fun=Param,buy=13.451,sell=13.437,last=13.451}
GAZP,188,57224384388.9:57224384200.6:{clas=QJSIM,fun=Param,buy=128.37,sell=128.33,last=128.37}
AFKS,155,57234547298.5:57234547143.1:{clas=QJSIM,fun=Param,buy=13.453,sell=13.437,last=13.453}
GAZP,142,57238172378.6:57238172235.8:{clas=QJSIM,fun=Param,buy=128.38,sell=128.33,last=128.38}
SBER,149,57250574559.6:57250574409.9:{clas=QJSIM,fun=Param,buy=306.85,sell=306.80,last=306.8}
MTSS,77,57256067937.4:57256067859.9:{clas=QJSIM,fun=Param,buy=226.55,sell=226.50,last=226.5}
ROSN,63,57256068421.6:57256068357.8:{clas=QJSIM,fun=Param,buy=407.65,sell=407.50,last=407.65}
GAZP,119,57257458284.3:57257458164.5:{clas=QJSIM,fun=Param,buy=128.37,sell=128.33,last=128.37}
VTBR,65,57258935393.6:57258935328.3:{clas=QJSIM,fun=Param,buy=77.83,sell=77.80,last=77.83}
Таким образом, если Вы используете sleep, то при любом способе обмена получите задержку не менее кванта времени OC, по умолчанию это 15мс.  
Страницы: 1
Читают тему
Наверх