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

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

Страницы: Пред. 1 ... 34 35 36 37 38 39 40 41 42 43 44 ... 72 След.
Отладка QUIK 9.3
 
тестил версию 9.4 на демо сервере и отлаживал на ней софт для работы с потоками.
-----------------
Версия понравилась.
-------------------------
странно, но работает быстрее , чем 8.3.
------------------------
правда последняя - это на боевом сервере у Сбербанка.
----------------------
может сбербанк мышей не ловит?
-------------------------------
кто бы их бы пнул под зад,
чтобы движение у них вперед началось
не все то золото, что блестит
 
и еще...
любая задача в потоке имеет доступ ко всем глобальным параметрам  основного потока и основной функции MAIN.
Время обращения к этой информации такое же.  
не все то золото, что блестит
 
Добрый день,Всем!
Предлагаю вашему вниманию сравнение быстродействия различных способов получения параметров свечи.
------------------------
фрагменты тестируемых скриптов:
--------------------по документации-----------
Код
local tx=candel[m]; if tx==nil then tx={} candel[m]=tx; i=1; else i=#tx; end --таблица сделок по инструменту
local m1=0;
if tsoc[m]=="SBER" then
nklib.startA();
while count>=i do
nklib.start();
Ti=ds:T(i) O=ds:O(i); H=ds:H(ind); L=ds:L(i); C=ds:C(i); V=ds:V(i)
x=nklib.stop();
tx[i]={O,H,L,C,V,Ti}; i=i+1; m1=m1+1;
end
x1=nklib.stopA();
----------------передача в пул потоков--------------------
Код
local ev=nkevent.wait(event_Sber,0);
if ev==0 then
nklib.start();
nkevent.Res(event_Sber);
z=nkini.VMLua(pVMSber,"main",t,count);
x2=nklib.stop();
end

--фрагмент из скрипта отдельного потока
Код
nklib.startB();
local m=#candel; if m==0 then m=1 end
local m1=0;
while count>=m do
if PData==nil then PData,j=nkini.IniPData("ds"); end
O,H,L,C,V,T,x=nkini.GetData(m,PData);
candel[m]={O,H,L,C,V,T};
m=m+1;
m1=m1+1
end
======результат расчета в main =====================
count=484,x1=1948.1,x2=70.1
count=1,x1=239.1,x2=7.3
count=1,x1=66.5,x2=7.5
count=1,x1=59.6,x2=4.0
=======результат расчета в main потока ================
Sber,count=484,x1=1931.1
Sber,count=1,x1=146.6
Sber,count=1,x1=119.5
Sber,count=1,x1=9.5,
===============================  
итоги:
в первой сточке указано время для получения 484 свечей
x1- время затраченное на 484 свечи (~2 ms)
x2 -время затраченное на передачу задачи в поток(0.07 ms)
------------
Далее обработка одной новой свечи
x1=0.2 ms, x2=0.007 ms
=======
Из результатов теста видно, что время передачи задачи в поток примерно в 20 раз меньше, чем время расчета в функции MAIN.
---------------------------
Это время не зависит от сложности задачи.
---------------------------
т е чтобы запустить алгоритм любой сложности в потоке для любого инструмента потребуется не более 0.0001 секунды.
------------------------
При этом колбеки не дублируются и выполняют минимум работы - устанавливают событие и передают свои данные в MAIN
MAIN определяет текущую задачу и передает ее в свободный в пуле поток.
-----------------------  
Теоретическая цена фьючерсов в опционном модуле
 
Цитата
Дмитрий написал:
Цитата
nikolz написал:
Теоретически справедливая цена фьючерса рассчитывается по следующей формуле  Pфьючерс = Pспот * (1+R*(T/365)  , где Pфьючерс – цена контракта  Pспот – цена актива на спот-рынке  R ­– безрисковая процентная ставка  T – срок до истечения контракта в днях
Предлагаю посчитать.
Базовым активом для фьючерсов Si является USDRUB_TOM
Безрисковая процентная ставка наверное около 20% годовых (ставка ЦБ на текущий день?).

Дата 17 марта 2022 г., время около 12:30 мск - экспирация SiH2, можно сказать 1 день до экспирации.
Теор.цена SiH2 по данным Quik: 104504
BID стакана БА: 104.7
ASK стакана БА: 104.65

Дата 17 марта 2022 г., время около 12:30 мск - до экспирации SiM2 91 день.
Теор.цена SiM2 по данным Quik: 110412
BID стакана БА: 104.6550
AKS стакана БА: 104.6512

Вот конкретно у меня не сходятся цифры даже близко.
Если есть возможность, то посмотрите алгоритм расчета на бирже.
Видел его там раньше.
Сейчас у меня сайт биржи не открывается.
подключение библиотеки qlua.dll к скриптам в новых потоках
 
всем спасибо, что молчали.
Разобрался, тема закрыта.
---------------
В итоге на каждый инструмент работает свой поток.
---------------
Свободные потоки не закрываются, а ждут в пуле.
--------------
Колбеки не дублируются.
----------------
Все скрипты запускаются одним кликом.
---------------------------
И Вам того же желаю.
Сбербанк не позволяет скачать со своего сайта Quik 8
 
Цитата
Автоном написал:
Позвонил в службу техподдержки Сбера, ответили: действительно есть такая проблема, над ней работают, попробуйте другой браузер. Прошло 12 часов, Квик не скачивается ни Edge, ни Chrome. Предполагаю, что это дискриминация программы Quik, чтобы навязать пользователям приложение для торговли от Сбера. Что делать?  
скачивается:
https://www.sberbank.ru/ru/person/investments/broker_service/quik
подключение библиотеки qlua.dll к скриптам в новых потоках
 
Добрый день,
-------------
Вопрос к разработчикам QUIK или к тем, кто это решил.
-------------
версия QUIK 9.4.
--------------------
Возникла следующая проблема.
===========
Написал библиотеку запуска произвольных скриптов Луа по событиям в отдельных потоках  из пула потоков.
============
Все работает замечательно.
=============
Решил в скрипте, запущенном в моем потоке,  обратиться к функциям из библиотеки QLUA.
============
Например, подключиться к источнику данных:
-----------------------
if ds==nil then ds=CreateDataSource("QJSIM","SBER",INTERVAL_M1) end
--------------------
Мой скрипт имеет функцию main и запускается из функции main Вашего скрипта.
----------------
В вашей main все работает, а в моей - пишет ds=nil.

Попытка подключить через  require "qlua"  дает ошибку:
----------------
D:/lua-5.4.2/lua54.exe: error loading module 'qlua' from file 'D:/QUIK_SCRIPT/qlua.dll':
Не найдена указанная процедура.
----------------------
Проверяю зависимости -  Все находит.
-------------------------
Что делаю не так?
Спасибо.
не все то золото, что блестит
 
Зачем же измерять время реакции робота на приход информации и знать время запаздывания этой информации спросите Вы?
-----------------------
Поясняю,  для тех, кому интересно.

Торговый робот - это система реального времени. Что это означает?
Это означает то, что такая система должна успеть обработать пришедшие данные до момента прихода новых.
Если робот не успевает их обработать, то данные либо теряются, либо Вы должны их накапливать для отложенной обработки.
-----------------
Выше я показал время прихода информации Таблицы текущих параметров.
Чаще всего именно по этой информации определяется изменение цены инструмента.  
Из данных выше следует что для демо сервера, информация об этом изменении может запаздывать до 1 секунды,
а значения из пакета данных могут передаваться в колбек через 10 мкс.
---------------
Ну и что?
Это означает, что при задержке данных в 1 секунду не надо мечтать о создании HFT робота.
----------------
А получение данных из пакета с интервалом в 10 мкс может привести к тому, что Вы пропустите сильное изменение цены инструмента
и узнаете об это по сливу вашего депозита на данном инструменте или с большим опозданием войдете в тренд.
не все то золото, что блестит
 
Продолжим тестировать скорость исполнения скриптов.
версия квика 9.4.
------------
Посмотрим,
как влияет на скорость выполнения колбека чтение каких либо параметров .
------------------  
Сначала колбеки запишем так:
function OnParam (clas, sec)-- изменение текущих параметров
ncb=14;
nkevent.Set(event);  -- событие
end
function OnQuote (clas, sec)-- изменение стакана котировок
ncb=15;
nkevent.Set(event);  -- событие
end
-------------------
т е в колбеках ничего не делаем.
получаем:
=============
111746 1124068.5;14;0
111746 1.8;14;0
111746 1.3;14;0
111746 21.7;14;0
111746 1.7;14;0
111746 20.9;14;0
111746 21.1;14;0
111746 21.2;14;0
111746 1.5;14;0
111746 1.2;14;0
111746 6688.0;15;0
===========  
Получаем пакета onParam  один раз в секунду и вывод его в колбек onParam  время примерно от 2 до 20 мкс.
А колбек OnQuote  исполняется аж 6688 мкс.
===============
Теперь добавим в колбеки что-нибудь:
Например так:
function OnParam (clas, sec)-- изменение текущих параметров
ncb=14; --local clas=class_code; local sec=sec_code;
LAST=getParamEx(clas, sec,"LAST").param_value;
nkevent.Set(event);
end
function OnQuote (clas, sec)-- изменение стакана котировок
ncb=15;  ql2 = getQuoteLevel2(clas, sec);
nkevent.Set(event);
end
----------------------
получаем:
============
111942 1077168.6;14;0
111942 23.5;14;0
111942 77.2;14;0
111942 23.4;14;0
111942 40.1;14;0
111942 23.3;14;0
111942 40.2;14;0
111942 13.4;14;0
111942 47.4;14;0
111942 54.4;14;0
111942 40.6;14;0
111942 7207.1;15;0
 ==================  
Как видим, теперь время колбека  onParam  составляет от 20 до 80 мкс
Время колбека OnQuote  стало 7200 мкс.
Т е , чтобы прочитать один стакан затратили 7200-6700=500 мкс.
----------------  
Очевидно, что колбек стакана очень тяжелый,
так как на него затрачено в 100 раз больше времени чем на onParam.
======================  
Обращаю Ваше внимание, что разбор пакета параметров происходит очень быстро
время от 2 до 80 мкс.
Поэтому если Вы поставите в main sleep ,  то main  будет обрабатывать каждый чих колбека через интервалы сна.
Вы не сможете установить слип меньше 3 мс т е 3000 мкс.
А интервал кобеков в 1000 раз меньше.
--------------------------
Поэтому sleep не применяю вообще, а использую системные EVENT.


 
не все то золото, что блестит
 
информация к размышлению.
Вопрос: Какую информацию мы получаем в реальности?.
Для этого написал тест, который измеряет время реакции колбека относительно времени сервера.
так как реальные торги сейчас не проводятся, то тестируем тестовый сервер.
В итоге получаем следующий результат:
Первое число -это время сервера, когда тот послал нам последнюю порцию данных.
Например 17:16:22.
Далее указано время , которое прошло с момента срабатывания  последнего колбека QLUA
например 723174.2 мкс, Т е прошло 0.7 секунды
далее указан номер колбека
например 15 - это колбек OnParam
Обратите внимание на то, что далее время сервера не изменяется еще 9 значений.
При этом время вызова колбека составляет не более 100 мкс, т е 0.0001 сек
----------------------------
что же это означает.
Это означает, что данные мы получаем не чаще чем один раз в 0.7 секунды в виде пакета,
Потом этот пакет пересылается нам в колбеки.
В итоге вам кажется, что вы получаете данные в реальном времени, а в действительности с задержкой на 0.7 секунды.
В реальных торгах задержка возможно и меньше, но передачу пакетом никто не отменял.

Скрытый текст
Теоретическая цена фьючерсов в опционном модуле
 
Цитата
Евгений написал:
Цитата
nikolz написал:
на сайте биржи есть алгоритм.
но у меня сайт биржи не открывается.
Если вы используете VPN то по рекомендации роскомпозора все иностранные ip адреса заблокированы, вернитесь на российский
у Вас эта ссылка работает:
http://www.moex.com/
?
getParamEx актуальный список param_name
 
"param_name"
для любой таблицы QUIK
можно получить в терминале QUIK через экспорт таблицы по DDE в Excel.
--------------------------------------
см. Руководство пользователя Раздел 6.
Теоретическая цена фьючерсов в опционном модуле
 
на сайте биржи есть алгоритм.
но у меня сайт биржи не открывается.
Теоретическая цена фьючерсов в опционном модуле
 

Теоретически справедливая цена фьючерса рассчитывается по следующей формуле

Pфьючерс = Pспот * (1+R*(T/365)

, где Pфьючерс – цена контракта

Pспот – цена актива на спот-рынке

R ­– безрисковая процентная ставка

T – срок до истечения контракта в днях

[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Цитата
Roffild написал:
Цитата
nikolz написал:
 Roffild  , если не трудно ,
дайте ссылку на пакет  Alglib ,
который содержит методы машинного обучения.
и перечислите, какие методы обучения в этой библиотеке есть.
Спасибо.
 https://github.com/Roffild/RoffildLibrary/tree/master/Include/Roffild  - я запихал лес из Alglib в Java и Python. И в QLua конвертировать не проблема. Я использую ВСЕ языки программирования одновременно.

Это только у Вас объединение QLua с Python и C++ вызывает боль и гордое повторение мантры "яжпрограммист".

https://www.alglib.net/translator/man/manual.cpp.html  - всё к QLua можно прикрепить. Там и К-Кластер, простой perceptron, случайный лес и много чего ещё...
Вы, очевидно,  меня с кем-то путаете.
я никогда не писал, что у меня есть сложности с языками программирования. Пишу на любом.
-----------------------------
Ранее написал, что не называю себя программистом,
так как в моем понимании это переводчик готового текста со словарем. Этому сейчас учат в начальной школе.
----------------------------------------------
Я давно уже пишу собственные тексты и перевожу их на любой язык без словаря,
так как  давно закончил и школу и  ВУЗ  и защитил диссертацию по ИИ.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Цитата
Nikolay написал:
Справедливости ради, знание современных систем хранения версий - это ни в коем времени не характеризует кого-то как программиста.
Я когда начинал, мы учились на бумаге. В первую очередь просто алгоритмы. Потом код на бумаге. И ничего, абстрактное мышление хорошо развивает.
То что сейчас без знаний Git не считают кого-то полноценным программистом, то это сюр, т.к. это знание ничего не дает.
Nikolay, напишите как называется Ваша специальность в дипломе.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Цитата
nikolz написал:
Roffild , если не трудно ,
дайте ссылку на пакет  Alglib ,
который содержит методы машинного обучения.
и перечислите, какие методы обучения в этой библиотеке есть.
Спасибо.
Спасибо, нашел.
Теперь хотелось бы увидеть Ваше решение задачи об утопленниках на луа c помощью этой библиотеки.
Ждемс.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Roffild, если не трудно ,
дайте ссылку на пакет  Alglib ,
который содержит методы машинного обучения.
и перечислите, какие методы обучения в этой библиотеке есть.
Спасибо.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Цитата
Roffild написал:
Цитата
nikolz написал:
Ваша ссылка на сайт - это сайт для чайников по обучению МО на питоне.
Вы научились собирать из готовых кубиков на питоне программу,
которая, как "черный ящик", ищет решение регрессионной задачи.
Прекрасно.
-------------------------------------
Но, если для Вас парсинг и МО - одно и тоже ,
тогда покажите Ваши результаты машинного обучения в LUA, на указанных Вами CSV файлах.
------------------------
или хотя бы разверните TORCH на Lua для начала.
Для меня нет трудностей в использовании Alglib на LUA.
Но я скорей всего Python к QLua полностью прикручу, когда Биржа очухается.

И если у тебя из МО получается "черный ящик"... ну... посмотри его код хотябы...
Ну, во-первых, не у тебя, а у Вас. Полагаю, Вы не заразитесь манерой общения от Владимира.
---------------------------
Во вторых, Вы полагаю не поняли термин "черный ящик". Но это не повод обижаться. Этот термин широко применяется в науке.
-----------------------------
В- третьих, если трудностей не, то покажите на Вашей задаче ее решение на луа.
Проблема с запуском терминала на ноутбуке после отключения монитора
 
Цитата
Роман написал:
Поняли правильно. Такой возможности нет, так как при отсутствуии подключенных доп мониторов текущий и так является основным.

Удалось вернуть ермиал на текущий дисплей, переключив ориентацию экрана в книжную и обратно.
Надо в винде указать, что у Вас один монитор.
Что надо знать о LUA, чтобы не было мучительно больно.
 
продолжаю тему , для интересующихся.
--------------------------  
Чтобы понять механизм хэширования, который используется в таблицах луа, предлагаю статью на китайском:
https://blog.csdn.net/y1196645376/article/details/94348873
Гугл поможет без проблем.
--------------------
если кто-то не осилит, то здесь ее перевод:
https://russianblogs.com/article/49161410962/
Что надо знать о LUA, чтобы не было мучительно больно.
 
Владимир,
Если нечего сказать по-существу вопроса, то просьба не засирать тему.
я пишу не для Вас. Спите спокойно.
Что надо знать о LUA, чтобы не было мучительно больно.
 
Добрый день,
В данной теме предлагаю Вашему вниманию информацию о том, что у VM LUA (виртуальная машина луа) внутри.
-------------------------------
Полагаю, что данный материал будет особенно полезным тем начинающим,
которые буратино на фондовом рынке и чайники в программировании.
----------------------------
Основа VMLua - это таблицы.
------------------------------
Полагаю, что многие просто не представляют сложность реализации таблиц в VM Lua.
----------------------
Даю ссылку на статью.
В ней речь идет о LuaJit - это более быстрый вариант VMLua, чем просто Lua 5.3 или 5.4.
Но принцип организации работы с таблицами тот же.
-------------------
Прошу:
https://habr.com/ru/company/vk/blog/493642/
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Цитата
Roffild написал:
Цитата
nikolz написал:
странное у Вас предложение.
Вы предлагаете соревнование на питоне.
Если очень Вам неймется, то тогда предлагайте на LUA.
Форум-то про КВИК, а в нем лишь LUA.
CSV можно парсить только на Питоне?
Парсить - это всего навсего грамматический разбор информации.  
проще сказать выделение из набора слов частей грамматики(подлежащее, сказуемое и т д)
-------------------------
Для машинного обучения на основе текстов это возможно и надо, но до машинного обучения это так же далеко, как от Вас до Луны.
----------------------------------------
Ваша ссылка на сайт - это сайт для чайников по обучению МО на питоне.
Вы научились собирать из готовых кубиков на питоне программу,
которая, как "черный ящик", ищет решение регрессионной задачи.
Прекрасно.
-------------------------------------
Но, если для Вас парсинг и МО - одно и тоже ,
тогда покажите Ваши результаты машинного обучения в LUA, на указанных Вами CSV файлах.
------------------------
или хотя бы разверните TORCH на Lua для начала.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Цитата
Roffild написал:
Я фанат современного программирования, который рос на  "Форуме.Исходников" , споря с программистами медицинского оборудования и с создателями  Alglib . Я исходный код воспринимаю быстрее обычного текста.

И тут явился Владимир, который БЕЗ ДОКАЗАТЕЛЬНО наплёл, что он крут и Я ему неровня! Чтож... отвертеться у него не получится!

Задача начального уровня для МО:  Найти выживших с Титаника
train.csv - данные для обучении модели
test.csv с gender_submission.csv - тестовые данные с результатом

Нужно для train.csv получить свой "gender_submission.csv" и отправить в Kaggle на автоматическую проверку.

Мой результат с 77.99% на простой 4-х слойной сетке. Точную ссылку дам только после Владимира.

Владимир, отказ и увиливание от решения этой задачи будет расценено, как полная капитуляция и потеря права хоть чё-то вякать про программирование!

Проверочный файл можешь закачать куда-нибудь (админы этого форума додумались ZIP запретить) или сразу на  Kaggle . И исходники решения тоже выложи, если твоя модель больше 80% выдаст.
Roffild,
странное у Вас предложение.
Вы предлагаете соревнование на питоне.
Если очень Вам неймется, то тогда предлагайте на LUA.
Форум-то про КВИК, а в нем лишь LUA.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Roffild,
Правильно я Вас понял,
что "алгоритмом МО" вы называете "алгоритм машинного обучения",
а не алгоритм МО, указанного мною выше.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Цитата
Roffild написал:
Цитата
nikolz написал:
и еще...
TORCH (факел) программа машинного обучения содержащая практически все, что из этого сейчас модно.
---------------------
Гугл взял пакет TORCH7 для луа и сделал оболочку для питона.
-----------------
разработчики TORCH7 взяли пакет программ для научных исследований на Фортране и сделали оболочку для CИ.
-------------------  
Прикольно.
Нет. Pytorch -  Caffe2
Caffe использует библиотеку  BLAS и LAPACK ,
а это и есть то самое на фортране,
для которых сделана обертка на СИ,
для которой сделана обертка на питоне.
Как влияет кол-во неиспользуемых функций в файле индикатора
 
В качестве совета начинающим.
---------------------------
В луа вызов функций самая тяжелая операция (в смысле затрат времени процессора).
---------------------
Поэтому, если очень хотите экономить время,
то вставляйте код функции там,
где хотите вызвать функцию.
--------------------
Безусловно это приведет к затратам памяти.
------------------------
На самом деле, все не так уж и страшно.
---------------------------
Если Вы начинающий,
то у Вас будут существенно большие затраты и памяти и времени
процессора из-за неоптимальности вашего алгоритма и выбираемых Вами методов.
 
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
пардон, ошибся не ГУГЛ, а фейсбук.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
и еще...
TORCH (факел) программа машинного обучения содержащая практически все, что из этого сейчас модно.
---------------------
Гугл взял пакет TORCH7 для луа и сделал оболочку для питона.
-----------------
разработчики TORCH7 взяли пакет программ для научных исследований на Фортране и сделали оболочку для CИ.
-------------------  
Прикольно.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Цитата
Roffild написал:
Цитата
Владимир написал:
...Нет, лапуль, про Машинное Обучение я тоже не в курсе. Зато я в курсе, что обучение тоже УГРОБЛЕНО!
...И как, при работе этого самого "МО" комп успевает-таки отслеживать нажатие клавиш? Чо, УСПЕВАЕТ?! Большой успех молодого спортсмена! ::  
Да поняли мы уже, что бот для шахмат - это достижение для тебя. Считаешь, что алгоритмы не создаются...

Чувак, всё современное МО строится на алгоритмах, недоступных компам до 2000-х. "Градиентный спуск" может распознать тебя в московском метро и предсказать цену акций. "Случайный лес" строит цепочку условий. МО - это то, что обыграет Каспарова. Но ты до сих пор можешь сидеть в своей пещерке. Хотя в твоём возрасте уже сложно разбираться в алгоритмах МО...
для справки:
--------------------------
алгоритм "градиентный спуск"  в обед -50 лет.
см.  Корн Г., Корн Т. Справочник по математике для научных работников и инженеров. — М.: Наука, 1970. — С. 575-576.
----------------
алгоритм "случайный лес" почти 30 лет.
Основная идея заключается в использовании большого ансамбля решающих деревьев,
каждое из которых само по себе даёт очень невысокое качество классификации, но за счёт их большого количества результат получается хорошим.
По сраным обстоятельствам он схож с алгоритмом к-ближайших соседей, которому более 50 лет.
--------------
Алгоритм глубокого обучения  официально 15 лет.
Но по сраным обстоятельствам этот алгоритм очень похож на МГУА  , которому в обед 50 лет.
------------------
Алгоритм Мо  - это вообще-то не алгоритм в узком смысле, а общая идея.
Он применим к следующему классу задач:
"Дается массив Arr длиной N и Q запросов. Каждый запрос представлен двумя числами L и R,и он просит вас вычислить некоторую функцию Func с под массивом Arr[L..R] в качестве аргумента."
Алгоритм Мо (кит. 莫隊算法) был популяризован китайским спортивным программистом Мо Тао (莫涛)  в конце нулевых годов.
-----------------------  
50 лет - это тот срок, через который методы,
известные в науке, доходят до массового потребления.
-----------------------------
Причем, те, кто продвигает "новые" алгоритмы  в массы ,
забывают сказать у кого они их взяли.
Как влияет кол-во неиспользуемых функций в файле индикатора
 
поясняю:
Смотрим API вызов функций:
----------------------
lua_getglobal(L, "f"); /* вызываемая функция */ lua_pushliteral(L, "как"); /* 1-й аргумент */
-------------------
lua_getglobal(L, "t"); /* таблица для индексирования */
---------------------
итд
---------------------
Во всех случаях мы указываем имя функции и(или)  имена переменных как строки.
-------------------  
Смотрим  исходный код например LUA 5.3 (особой разници нет так как это у всех версий луа одинаково)
если хорошо искать,
то найдет функцию которая создаст кэш нашей строки и проверит новая это строка или нет
===============
TString *luaS_new (lua_State *L, const char *str) {
unsigned int i = point2uint(str) % STRCACHE_N; /* hash */
int j;
TString **p = G(L)->strcache[i];
for (j = 0; j < STRCACHE_M; j++) {
if (strcmp(str, getstr(p[j])) == 0)
return p[j];
}
for (j = STRCACHE_M - 1; j > 0; j--)
p[j] = p[j - 1];  p[0] = luaS_newlstr(L, str, strlen(str));
return p[0];
}
Не сложно увидеть в этой функции циклы по глобальной таблице.
Кроме того, второй цикл занимается перемещением элементов.
----------------------
Очевидно чем больше таблица и дальше по ней наша строка, тем дольше поиск.
------------------------
В итоге, по-моему мнению,
число функций, как и число переменных,
влияет не только на затраты памяти,
но и на производительность т е загрузку процессора.
-----------------
Как влияет кол-во неиспользуемых функций в файле индикатора
 
например, есть глобальная функция с именем "start"
В скрипт грузится  и исполняется строка типа _G["start"]()
-------------------
Вопрос:
В каком случае эта строка исполнится быстрее
когда глобальных функций 1, или когда их 1000000.
Как влияет кол-во неиспользуемых функций в файле индикатора
 
Цитата
s_mike@rambler.ru написал:
Цитата
nikolz написал:
На самом деле, количество используемых функций влияет на производительность.
Поясняю:
Если функции глобальные, то указатели на них помещаются в глобальную таблицу , что увеличивает ее размер и соответственно поиск по ней требуемой функции.
Если функция локальная, то она увеличивает локальную таблицу и аналогично выше сказанному
если применить предварительную выборку функции, то это требует добавку кода, что влияет на производительность.
-----------------
Таким образом, в общем случае количество функций влияет на производительность.
размер таблицы в луа-реализации практически не влияет на скорость выборки информации из нее, так как используется механизм хеширования ключей.

для таблиц с целочисленными индексами вообще не влияет.
Ну если хотите подробно рассмотреть вопрос, то начните с момента
каким образом луа определит есть ли такой хеш или это новый?  
И ответьте влияет ли на это  число существующих функций.
Как влияет кол-во неиспользуемых функций в файле индикатора
 
но скорее всего это влияние практически незаметно.
Большее влияние это оказывает на общее число функций особенно локальных.
Как влияет кол-во неиспользуемых функций в файле индикатора
 
предположу, что такое влияние может наблюдаться во всех системах, использующих виртуальные машины (это гипотеза).  
Как влияет кол-во неиспользуемых функций в файле индикатора
 
На самом деле, количество используемых функций влияет на производительность.
Поясняю:
Если функции глобальные, то указатели на них помещаются в глобальную таблицу , что увеличивает ее размер и соответственно поиск по ней требуемой функции.
Если функция локальная, то она увеличивает локальную таблицу и аналогично выше сказанному
если применить предварительную выборку функции, то это требует добавку кода, что влияет на производительность.
-----------------
Таким образом, в общем случае количество функций влияет на производительность.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Цитата
Владимир написал:
nikolz, Лапуль, Вы хоть читать-то умеете? Там же русским языком сказано: пока мой скрипт "часто лазил в хранилище терминала (функция getParamEx)", и эта "очень затратная операция" вызывалась сотни раз в секунду, то память болталась в диапазоне 5-10, редко 20 мегов. А вот когда он ПЕРЕСТАЛ туда лазить, тогда память подпрыгнула до 500 мегов, иногда даже больше.

Лапуль, я много раз открытым текстом говорил, что я не воспринимаю Вас как программиста, что Вы абсолютно ни хрена в программировании не понимаете - ну какие, в задницу, ОТ ВАС могут быть "советы"? Какие "промежуточные таблицы"? Это В БОЕВОМ скрипте под контролем находится несколько сотен тикеров, и примерно до 2000 это практически никак не сказывается на производительности, а в тестовом режиме у меня только ОДИН тикер! Ну включите Вы мозги, если там хоть что-то осталось!
Это Вы у нас телепат.
Я не буду мериться  с Вами струей,
но полагаю, что Ваше хамство лишь подтверждение Вашего низкого уровня знаний.
---------------------------------------
Это же классика, единственный способ самолюбования аля-кулибиных - это оплевывания все кругом.
---------------------  
В чем вы действительно правы , так в том, что я не программист,
так как программист , в моем понимании - это переводчик со словарем.
-------------------------------
Кроме умения переводить готовый текст с русского на язык программирования,
программист не хрена не понимает ни в железе,
ни в алгоритмах, ни в методах.  Узнаете себя?
-------------------------
Это Вы и есть -программист, а я так погулять Вышел.
--------------------------------------
Хамло, вы наш.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Цитата
Владимир написал:
Я тут всё время посмеивался над проблемами с производительностью, а сегодня вляпался в неё с размаху. Дело было так: решил я погонять алгоритмы на исторических данных, подготовил тиковый массив и переключил опрос ТТТ на чтение цены тиковой сделки из этого массива. Массив приличного объёма, тики за два месяца у очень ликвидного инструмента (более двух миллионов строк), но ждать ничего не надо, данные поступают и обрабатываются со страшной скоростью, так что я рассчитывал прогнать этот массив за пару минут. ЩАЗ! Начал он действительно бодро и весело, но всё крутит и крутит. Присмотрелся - а обработка замедлилась раз в сто, если не больше! Как же так? Да, данных много, но скорость же должна оставаться примерно одинаковой! Какая разница, первую он строчку из файла читает или 1234567-ю? Тем более, тикер у меня в этом прогоне вообще один (в боевой версии сейчас порядка 900). Ещё присмотрелся - МАМА ДОРОГАЯ! У меня объём, занимаемый скриптом, всегда болтался в районе 5-10 мегов (ну, на двадцать иногда заползал), а тут лихорадочные прыжки 300-500-200-400-500, т.е. за секунду размер меняется на 100-200 мегов в любую сторону! Тикер у меня, повторяю, ОДИН! Алгоритм фактически тот же самый - только вместо getParamEx цена заглатывается из текущей строки файла данных, И ВСЁ! Это сборщик мусора разошёлся, что ли? Больше, вроде, некому. И что этой падле от моего скрипта надо? Обрадовалась, что тикер у меня только один остался? У меня просто фантазии не хватает: как можно изуродовать софт, чтобы он вытворял ТАКОЕ? И что с этим делать? Нет, я-то переживу - ну, не за 2 минуты, но за час, за два массив он всё же обработает, но у меня просто нет слов...
Уж сколько раз твердили миру.
1) Разработчики QLUA тоже предупреждали - не надо часто лазить в хранилище терминала (функция getParamEx) - это очень затратная операция.
2) скорее всего у вас циклы и таблицы в которые вы динамически добавляете значения. попробуйте сразу задать таблицы максимального размера. тогда не будут создаваться и уничтожаться промежуточные таблицы.
3) если покажите алгоритм, скажу что исправить, чтобы не было мучительно больно.
Бесконечный цикл функции с заданным интервалом времени
 
Вот самое простое и быстрое решение:
Код
local t0 = os.clock()
local t1,t2,t3,t4,t5,t6,t7=t0,t0,t0,t0,t0,t0,t0  -- таймеры
-- функции исполняемого кода
function f1(x1) print(x1..", f1");   end
function f2(x1,x2) print(x1..", f2");   end
function f3(x1,x2,x3) print(x1..", f3");   end
function f4(x1,x2,x3,x4) print(x1..", f4");   end
function f5(x1,x2,x3,x4,x5) print(x1..", f5");   end
function f6(x1,x2,x3,x4,x5,x6) print(x1..", f6");   end
function f7(x1,x2,x3,x4,x5,x6,x7) print(x1..", f7");   end

 while true  do   --бесконечный цикл
local x=os.clock()
 if x-t1>1 then f1(x) t1=x end
 if x-t2>2 then f2(x,x2) t2=x end
 if x-t3>3 then f3(x,x2,x3) t3=x end
 if x-t4>4 then f4(x,x2,x3,x4) t4=x end
 if x-t5>5 then f5(x,x2,x3,x4,x5) t5=x end
 if x-t6>6 then f6(x,x2,x3,x4,x5,x6) t6=x end
 if x-t7>7 then f7(x,x2,x3,x4,x4,x6,x7) t7=x end
end
--- накладные расходы на вызов функции  - оператор if, одно вычитание, одно сравнение и одно присвоение.
это результат теста:
Скрытый текст
Бесконечный цикл функции с заданным интервалом времени
 
Владимир, скажите сколько времени Вы будете собирать функцию у которой 100 параметров
и честь из них функции у которых 10 параметров, а часть - двумерные таблицы из которых надо передать в нашу функцию выборку из строк и столбцов.
--------------------
Напишите пример.
Поразите публику Вашем  стилем извращенного программирования.
Бесконечный цикл функции с заданным интервалом времени
 
чем больше смотрю на ваше новое эссе, тем сильнее веселюсь.
----------------
чего стоит этот шедевр:
-------------------
 for  i =  1 , 3   do     if  x%t[i] =  =  0   then
    loadstring( "f"  .. t[i] .. "( "..i.." )")();
    end ;
   end ;
--------------
Т е вместо простейшего вызова
if t[i]==x then func(x1,x2,x3,.....x 1019284) end
Вы городите функцию луа, которая собирает указатель функции   в глобальной таблице из содержимого таблицы t и затем вызываете эту функцию.
---------------
Ну что же могу лишь "восхищаться" таким извращенным  способом.
Бесконечный цикл функции с заданным интервалом времени
 
Немногого поправлю свое мнение,
----------------------
Ба, да Вы показывается поняли как у меня сделано без Sleep?
-------------------------------
Но забыли сказать спасибо , а просто стащили из моего решения.
-------------------------------
Поэтому теперь у Вас sleep не надо.
Но это ценой воровства чужих решений.
=================
Но  попытка Ваших костылей с указателями все равно не тянет.
Да,  своровать неоткуда, а знания у Вас лишь из прошлого века, да и то какие искаженные временем и пространством.
---------------------
Признаться что мое решение работает быстрее, Вам жаба не позволяет.
---------------------
Успехов в присвоении  чужих решений.
Бесконечный цикл функции с заданным интервалом времени
 
Цитата
Владимир написал:
nikolz, Вот, лапуль, проверил вариант с указателями - всё прекрасно работает. Далее, чтобы ни по одному поводу мявкнуть не посмели, разжёвываю код.
1. Интервалов у меня в массиве 24, но отслеживаю я только три - для проверки я написал именно столько функций.
2. sleep теперь стоит на 0.1 секунды, но срабатывает обработка, как и раньше, раз в секунду.
3. Код "монстра" ваапще не потребовался - я генерю имена функций из того же самого массива, и даже аргументы им передаю. Их код слегка варьировал, чтобы не было сомнений, что вызываются именно они.

Учите матчасть, лапуль! Впрочем, Вам лучше заняться чем-то другим, а не программированием.  
Код
  f =  true ;
t = { 4 , 17 , 35 , 60 , 2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 , 23 , 29 , 31 , 37 , 41 , 43 , 47 , 53 , 59 , 61 , 67 , 71 }
 function   main ()
  local  i,x,y,z;
 y =  os.time ();
 z =  0 ;
  while  f =  =  true   do 
  x =  os.time () - y;
   if  x~ = z  then  
    for  i =  1 , 3   do 
     if  x%t[i] =  =  0   then 
     loadstring( "f"  .. t[i] .. "( "..i.." )")();
     end ;
    end ;
   end ;
  z = x;
   sleep ( 100 );
  end ;
 end ;

 function   OnStop ()
 f =  false ;
 end ;

 function   f4 (i)
  message ( "Истёк интервал "  .. t[i] .. " сек");
 end ;

 function   f17 (i)
  message ( "Интервал "  .. t[i] .. " сек");
 end ;

 function   f35 (i)
  message ( "Обрабатываем интервал "  .. t[i] .. " сек");
 end ;
  
Владимир, Вы что пытаетесь доказать?
Что ваш вариант хуже моего?
----------------------
Я Вам указал проблемы В вашем варианте .
---------------------------------
Вы ничего не сказали в чем у Вас лучше.
Попробуйте без словесного поноса проанализировать достоинства Вашего решения и недостатки моего
--------------------
относительно приведенного Вами нового "шедевра"
------------------  
Ранее я Вам написал, но Вы невнимательно читаете, так как ничего не исправили и все проблемы Вашего эссе остались.
--------------------
Повторю для особо тупых.
-----------------------
1) Ваше решение на работает без sleep.  Это указывает на низкий уровень разработчика.
----------------------------
2) ваше решение loadstring( "f"  .. t[i] .. "( "..i.." )")();  Это не полноценное решение, а костыли.
Это не указатель на функцию, а загрузка строки скрипта , ее компиляция в байт код и исполнение с вызовом функции из массива.
При этом число формальных параметров у таких функций сложно сделать различным.
Т е Вы нагородили кучу бессмысленного кода лишь бы показать что Вы что-то знаете?
Ваш пример стал еще монстрее и медленнее.
Ну и нахрена это?
3) Все ваши костыли просто усложняют решение и следовательно замедляют исполнение.
------------------
Изучайте мат часть .
Бесконечный цикл функции с заданным интервалом времени
 
Цитата
Владимир написал:
nikolz, Лапуль, я вчера зацепился глазом за очередной кретинизм "гуру" насчёт "пример предназначен для исполнения нескольких фрагментов кода (функций)" и, естественно, возмутился, а сегодня вдруг подумал: ну откуда нынешнему стаду так называемых "программистов" знать про указатели на функции? Тем более, что я даже не проверял, работает ли эта техника в Lua - уверен, что не может не работать, но вдруг и здесь я грешу излишним оптимизмом? Но сегодня я зацепился глазом за ещё более смешную фразу: "для тех, кто не понял, почему в моем примере первом нет цикла а есть  множество if объясняю" и далее до "если поставить цикл, то различить интервалы для запуска различных функций без if не получится". Лапуль, ну хотя бы ОДНУ функцию из того места вызвать можно? А передать ей аргументом значение интервала из массива или индекс этого массива тоже нельзя? Ну, тады базара нет: "без if не получится! Вот и выходит что для задачи данной темы нужны if а не цикл".      Скрытый текст        Господи, как же затрахало это безголовое стадо...  
Можно и по ссылке в таблице, но проще не будет.
----------------------
Оператор if наиболее быстрый.
----------------
У вас уже есть оператор if и еще цикл for
----------------
т е Ваш вариант работает по определению медленнее моего.
---------------
То что цикл сокращает длину программы на несколько строк - при современном объеме памяти это как дробина слону
--------------------
Если Вы для выбора функций еще и таблицу с указателями добавите, то у Вас будет монстр.
------------
Причем вам потребуется упаковывать параметры функций  чтобы было одинаковое число а потом распаковывать
---------------
В итогу у Вас и код будет больше и программа будет работать дольше.
----------------
Кроме того Ваша программа не работает без sleep
А это потеря быстродействия.
--------------------
короче, засуньте свой пример обратно в то место, откуда вы его достали.
--------------------
и не смешите мои тапочки.
Бесконечный цикл функции с заданным интервалом времени
 
Цитата
Roffild написал:
Я тоже хочу всех "лапуль" поучить :D

rd.isTradingAllowed()  учитывает баг `isConnected() == 1`, разрыв связи, клиринг и выходные!

Код
   local  rd  =   require ( "roffild" )

 function   main ()
    ISRUN  =   true 
     while  ISRUN  and   rd.isTradingAllowed () ~ =   true   do 
         sleep ( 1000 )
     end 
     message ( "started" )
     while  ISRUN  do 
         if   rd.isTradingAllowed ()  then 
             -- здесь основной код 
         end 
         sleep ( 100 )  -- 0.1сек 
     end 
 end 

 function   OnStop (flag)
    ISRUN  =   false 
     return   3000   -- Timeout 
 end 
  


Я callback'и не использую ВООБЩЕ! (кроме этого OnStop)
это как смотреть гланды через жопу.
--------------------
В терминале колбеки вызываются там же , где вызываются функции помещения данных в архив (таблицы)
---------------------
Вы вместо того, чтобы получить данные до архива, ждете, когда их загонят в архив, а потом оттуда выковыриваете.
----------------------
Разработчик QLUA , предупредил пользователей, что из архива получать очень долго и специально сделал для этого SearchItems -
Функция позволяет реализовать быструю выборку элементов из хранилища  терминала и возвращает таблицу с индексами элементов, удовлетворяющих условию  поиска.

---------------

Но Вы изобрели свой самовар. всегда проще сделать свою телегу, чем изучить, как работает современный автомобиль.

--------------------------------

На то оно и аля-кулибины.  Все у них через одно место.


Бесконечный цикл функции с заданным интервалом времени
 
Цитата
Владимир написал:
nikolz, Сударь, Ваш "пример" иллюстрирует разве что как не надо программировать - нигде и никогда. Во-первых, в цикле нет задержки, идёт с безумной скоростью опрос системных часов, при этом время задано В МИНУТАХ! А уж набор "ифов" - это позор даже для начинающего программиста. Самого-то не тошнит от Вашего примера? Уж если корчите из себя учителя, хотя бы пишите примерно так:
Код
  f =  true ;
t1 = { 4 , 17 , 35 , 60 }  --массив интервалов в секундах 
 function   main ()
  local  i,x,y;
 y =  os.time ();
  while  f =  =  true   do 
  x =  os.time () - y;
   for  i =  1 , 4   do 
    if  x%t1[i] =  =  0   then 
     message (x .. " истёк интервал  "..t1[i].."  сек");
    end ;
   end ;
   sleep ( 1000 );
  end ;
 end ;

 function   OnStop ()
 f =  false ;
 end ;
  
Кроме того, только клинический дебил "поместит всю свою обработку в эти колбеки": это аналог прерываний, и потому любой нормальный программист будет из них уматывать как можно скорее. Наконец, вся та хрень, которую Вы здесь "рекомендуете изучить" относится к области ОС, в которую прикладника нельзя пускать ни при каких обстоятельствах - особенно "деятельных", вроде Вас, у которых ручонки чешутся что-то такое запрограммировать, а задача организации торговли прикладная до мозга костей.
Владимир,
теперь поясните предыдущее свое высказывание
Цитата
Владимир написал:
shtur2005,
Цитата
А как сделать так, что бы одно другому не мешало?
Да никак не делать! ВАМ, ЛИЧНО ВАМ нужно что-то делать в эти 30 секунд? Нет? Так какое Вам дело, что кто-то там что-то "простаивает"? И вообще, разделение по потокам - это одна из главных глупостей Lua (после этой долбаной "динамической типизации" и убийства типа integer).
ну и куда ты лапуль будешь " потому любой нормальный программист будет из них уматывать как можно скорее"  если в main у тебя sleep на 30 секунд.
Придурок, ты наш.
Требуется разработка робота для QUIK, Нужен специалист, который разработает робота под платформу QUIK,
 
Цитата
Кирилл написал:
ТехЗаданию отправлю в личной переписке.
напишите в личку цену вопроса и сроки.
ошибка загрузки графиков
 
Цитата
Аннушка написал:
Цитата
Изя Шниперсон написал:
ответ внутри вопроса -  удалить инструмент с с истекшим сроком действия  из графика
Как его удалить из графика, если в графике у меня уже другие инструменты (у меня график привязан к таблице текущие торги), где найти тот истекший график, чтобы удалить его?
Вы можете его заменить на нужный вам. Поставить мышку на название инструмента нажать правую кнопку и выбрать - заменить инструмент и выбрать нужный вам.
Бесконечный цикл функции с заданным интервалом времени
 
для тех, кто не понял, почему в моем примере первом нет циакла а есть  множество if объясняю.
----------------
пример предназначен для исполнения нескольких фрагментов кода(функций) - по числу if через различные интервалы
---------------------
если поставить цикл, то различить интервалы для запуска различных функций без if не получится
---------------------
Вот и выходит что для задачи данной темы нужны if а не цикл.
Страницы: Пред. 1 ... 34 35 36 37 38 39 40 41 42 43 44 ... 72 След.
Наверх