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

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

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 12 ... 77 След.
До каких пор живёт таблица, передаваемая функции?
 
и еще...
Я как-то выкладывал результаты теста, в котором видно, что колбеки тормозят  main поток.
До каких пор живёт таблица, передаваемая функции?
 
Цитата
funduk написал:
Цитата
nikolz написал:
getQuoteLevel2 лучше вызывать в main, чтобы не тормозить основной поток.
У Вас есть какой-нибудь скрипт, подтверждающий это?

Я когда дампил квик через procdump, постоянно видел, что вызовы qlua (типа SetEmptyCallback) из main стояли на входе в критическую секцию, а вот вызовы из главного потока - никогда.
Вес функции qlua в основном стеке.
Основной стек в главном потоке.
стек main - это дополнительный стек.
колбеки блокируют доступ main к  глобальному стеку.
Поэтому вызов функций qlua в колбеках не требует дополнительной синхронизации. Ее уже сделали при вызове колбека  
До каких пор живёт таблица, передаваемая функции?
 
Цитата
Serge123 написал:
Интересно: как можно проверить, что мой вариант скрипта, в котором я перенёс обработку стаканов и обезл. сделок в main, имеет смысл? Мне кажется, что добавилось лишней работы в потоке main с разбором очереди, а в потоке Квика работа уменьшилась неощутимо...
Вы правильно мыслите.
Если хотите получить эффект, то надо убирать sleep и  использовать event.
До каких пор живёт таблица, передаваемая функции?
 
Пардон, ответил не на тот вопрос.
До каких пор живёт таблица, передаваемая функции?
 
Цитата
funduk написал:
Цитата
nikolz написал:
getQuoteLevel2 лучше вызывать в main, чтобы не тормозить основной поток.
У Вас есть какой-нибудь скрипт, подтверждающий это?

Я когда дампил квик через procdump, постоянно видел, что вызовы qlua (типа SetEmptyCallback) из main стояли на входе в критическую секцию, а вот вызовы из главного потока - никогда.
Это написано в документации.
Могу объяснить на коде почему это так.
-----------------
Кроме того, если эта таблица создана глобально, то она будет всегда, если вы явно не присвоите ей nil.
------------------
Проверить можно на СИ.
Могу рассказать как.
339 сделок по одному тикеру в течение 1 мкс
 
Цитата
Serge123 написал:
drive.google.com/file/d/1fbPQM0Xfd-ULQFV7M0vBPW8m_6boaulj/view?usp=sharing
У Вас время  09:50:00  не содержит микросекунд.  
Это время Вашего компьютера, а не биржи.
Говоря о сделках в 1 мкс Вы очевидно имели ввиду вот это:
Код
9:59:32.000877 1.3796 270 S
09:59:32.000877 1.3796 5 B
09:59:32.000877 1.3796 36 B
09:59:32.000877 1.3796 39689 B
09:59:32.000877 1.3796 11 B
09:59:32.000877 1.3796 5000 B
09:59:32.000877 1.3796 29076 S
09:59:32.000877 1.3796 1000 S
09:59:32.000877 1.3796 200 S
09:59:32.000877 1.3796 1325128 S
09:59:32.000877 1.3796 1 S
09:59:32.000877 1.3796 1 S
09:59:32.000877 1.3796 2 S
09:59:32.000877 1.3796 25500 S
09:59:32.000877 1.3796 65 S
09:59:32.000877 1.3796 5 B
09:59:32.000877 1.3796 243000 S
09:59:32.000877 1.3796 732 S
09:59:32.000877 1.3796 178 S
09:59:32.000877 1.3796 62 S
09:59:32.000877 1.3796 1000 S
09:59:32.000877 1.3796 210 S
09:59:32.000877 1.3796 3718 S
09:59:32.000877 1.3796 2 S
09:59:32.000877 1.3796 100 S
09:59:32.000877 1.3796 4 S
09:59:32.000877 1.3796 4063 S
09:59:32.000877 1.3796 5332 S
09:59:32.000877 1.3796 4 S
09:59:32.000877 1.3796 8 S
09:59:32.000877 1.3796 45 S
09:59:32.000877 1.3796 1700 S
09:59:32.000877 1.3796 382 S
09:59:32.000877 1.3796 86 S
09:59:32.000877 1.3796 100 S
09:59:32.000877 1.3796 803 S
09:59:32.000877 1.3796 10000 S
09:59:32.000877 1.3796 1 S
09:59:32.000877 1.3796 13000 S
09:59:32.000877 1.3796 395 S
09:59:32.000877 1.3796 100 S
09:59:32.000877 1.3796 4 S
09:59:32.000877 1.3796 71952 S
09:59:32.000877 1.3796 47 S
09:59:32.000877 1.3796 7 S
09:59:32.000877 1.3796 7 S
09:59:32.000877 1.3796 7 S
09:59:32.000877 1.3796 200 S
09:59:32.000877 1.3796 58 S
09:59:32.000877 1.3796 511 S
09:59:32.000877 1.3796 10 S
09:59:32.000877 1.3796 578 S
09:59:32.000877 1.3796 566 S
09:59:32.000877 1.3796 3000 S
09:59:32.000877 1.3796 39 S
09:59:32.000877 1.3796 1000 S
09:59:32.000877 1.3796 220 S
09:59:32.000877 1.3796 33 S
09:59:32.000877 1.3796 6 S
09:59:32.000877 1.3796 295 S
09:59:32.000877 1.3796 406 B
09:59:32.000877 1.3796 14 B
09:59:32.000877 1.3796 500 B
09:59:32.000877 1.3796 1036 B
09:59:32.000877 1.3796 2242 B
09:59:32.000877 1.3796 9900 B
09:59:32.000877 1.3796 200 B
09:59:32.000877 1.3796 5000 B
09:59:32.000877 1.3796 1000 B
09:59:32.000877 1.3796 21 B
09:59:32.000877 1.3796 65 B
09:59:32.000877 1.3796 330 B
09:59:32.000877 1.3796 55 S
09:59:32.000877 1.3796 20000 S
09:59:32.000877 1.3796 2 S
09:59:32.000877 1.3796 2 S
09:59:32.000877 1.3796 1244960 S
09:59:32.000877 1.3796 100000 S
09:59:32.000877 1.3796 30000 S
09:59:32.000877 1.3796 1000 S
09:59:32.000877 1.3796 26756 S
09:59:32.000877 1.3796 7000 S
09:59:32.000877 1.3796 1004 S
09:59:32.000877 1.3796 9000 S
09:59:32.000877 1.3796 2233 S
09:59:32.000877 1.3796 10500 S
09:59:32.000877 1.3796 1400 S
09:59:32.000877 1.3796 1000 S
09:59:32.000877 1.3796 150 S
09:59:32.000877 1.3796 59 S
09:59:32.000877 1.3796 1 S
09:59:32.000877 1.3796 13 S
09:59:32.000877 1.3796 145000 S
09:59:32.000877 1.3796 5000 S
09:59:32.000877 1.3796 1360 S
09:59:32.000877 1.3796 2101 S
09:59:32.000877 1.3796 15 S
09:59:32.000877 1.3796 1 S
09:59:32.000877 1.3796 11378 S
09:59:32.000877 1.3796 139 S
09:59:32.000877 1.3796 20 S
09:59:32.000877 1.3796 2000 S
09:59:32.000877 1.3796 15135 S
09:59:32.000877 1.3796 110000 S
09:59:32.000877 1.3796 73 S
09:59:32.000877 1.3796 1 S
09:59:32.000877 1.3796 8000 S
09:59:32.000877 1.3796 1000 S
09:59:32.000877 1.3796 1670 S
09:59:32.000877 1.3796 5000 S
09:59:32.000877 1.3796 20000 S
09:59:32.000877 1.3796 100 S
09:59:32.000877 1.3796 33000 S
09:59:32.000877 1.3796 1000 S
09:59:32.000877 1.3796 12046 S
09:59:32.000877 1.3796 10000 S
09:59:32.000877 1.3796 5000 S
09:59:32.000877 1.3796 10200 S
09:59:32.000877 1.3796 1000 S
09:59:32.000877 1.3796 9510 S
09:59:32.000877 1.3796 1000 S
09:59:32.000877 1.3796 6000 S
09:59:32.000877 1.3796 160000 S
09:59:32.000877 1.3796 1000 S
09:59:32.000877 1.3796 100 S
09:59:32.000877 1.3796 700 S
09:59:32.000877 1.3796 241000 S
09:59:32.000877 1.3796 10320 S
09:59:32.000877 1.3796 87950 S
09:59:32.000877 1.3796 251344 S
09:59:32.000877 1.3796 2 S
09:59:32.000877 1.3796 2 S
09:59:32.000877 1.3796 2 S
09:59:32.000877 1.3796 615250 S
09:59:32.000877 1.3796 7000 S
09:59:32.000877 1.3796 362845 S
09:59:32.000877 1.3796 168328 S
09:59:32.000877 1.3796 100000 S
09:59:32.000877 1.3796 14873 S
09:59:32.000877 1.3796 493469 S
09:59:32.000877 1.3796 25000 S
09:59:32.000877 1.3796 1200000 S
09:59:32.000877 1.3796 1407296 S
09:59:32.000877 1.3796 181423 S

Обратите внимание, что не изменяются в этих записях время и цена.
Т е это не исполнение одной большой заявки по рынку, а продажи большому покупателю, который выставил большой пакет на покупку по фиксированной цене и его обгрызают продавцы.
Т е в него стукаются прилетающие заявки.
Так делают HFT роботы, но они не могут прилететь все за 1 мкс.
Что-то тут не так со временем.
До каких пор живёт таблица, передаваемая функции?
 
getQuoteLevel2 лучше вызывать в main, чтобы не тормозить основной поток.
До каких пор живёт таблица, передаваемая функции?
 
Цитата
Serge123 написал:
Смутно помнится, в документации на lua.org я видел, что жизнь таблицы из параметров функции гарантируется до выхода из этой функции (т.е. до выхода из OnAllTrade). Какая-то ерунда пока получается с этим переносом обработки таблиц в поток main...
Жизнь локальных параметров прекращается с выходом из функции.
А таблица, которую Вы передали через фактические параметры в функцию создана вне этой функции.
поэтому она будет утилизирована лишь когда на нее не будет ссылок вообще.
Когда вы ее указатель помещаете в очередь, а очередь существует вне функции, то таблица живет своей жизнью и дальше.
339 сделок по одному тикеру в течение 1 мкс
 
Цитата
Serge123 написал:
Цитата
nikolz написал:
Сервер не может провести 339 заявок за 1 мкс.
В 1-м моём сообщении речь шла о сделках. Ошибочно сделки перетекли в заявки...
Суть ответа не меняется.
Вы прочитали статьи? Там есть ответ на Ваш вопрос.
Поясняю:
В вашем вопросе 339 сделок совершено за 1 мкс. Это значит 339 миллионов сделок в секунду .
-------------------------
в статье сказано:
"8 млн в сек – это внутренняя производительность алгоритма на ядре системы.
50 тыс. – это поток, образуемый клиентской нагрузкой в реальной инфраструктуре
– с полным набором компонентов/серверов, резервированием, репликацией, сетевыми устройствами."
------------------------
Т е Ваши 339 это в 40 раз быстрее, чем реально достигнуто на уровне ядра системы на бирже
При этом, в системе на момент совершения первой сделки все заявки должны быть уже в очереди(стакане)
в оперативной памяти сервера.
--------------------  
339 сделок по одному тикеру в течение 1 мкс
 
ликбез:
почитайте это:
https://habr.com/ru/companies/moex/articles/444300/
https://habr.com/ru/companies/moex/articles/444302/
339 сделок по одному тикеру в течение 1 мкс
 
Цитата
Serge123 написал:
Цитата
paluke написал:
339 разных заявок в стакане кто-то собрал одной крупной встречной заявкой.
А, ясно, почему такая высокая скорость. А если бы мелкие заявки собирали мелкими, то сервер не успел бы за 1 мкс провести все 339 сделок и образовалась бы очередь?
Сервер не может провести 339 заявок за 1 мкс. это почти миллиард транзакций в секунду.
------------------------
Скорее всего Вы что-то не так поняли. Поэтому и предлагал Вам показать.
---------------------
Например, сервер QUIK делает примерно 1000 транзакций в секунду.
----------------------
Делал тест сервера на 4 ядрах. Получил 50 000 транзакций в секунду.
--------------------
Сомневаюсь, что на бирже сервер в миллион раз быстрее.
---------------------
В вашем случае, сервер биржи должен иметь десятки тысяч ядер .
 
Альтернатива CanSell/CanBuy
 
Цитата
Cyber написал:
У трех брокеров всегда использовал
getBuySellInfo(FIRM_ID,CLIENT_CODE,CLASS_CODE,SEC_CODE,price).can_sell
для подсчета возможной позы.
И там где не давали шортить can_sell = 0 выдавал.
Но тут у БКС выяснилось, что эти значения не соответствуют реальности, и шортить не дают бумаги у которых can_sell не равон нулю.
Есть ли в квике какая-то другая таблица с реальными значениями? Откуда еще можно узнать доступную позу?
Запретить шорт по конкретным инструментам  и конкретным клиентам - это право брокера .
Спросите у брокера список инструментов, которые доступны Вам в шорт.
339 сделок по одному тикеру в течение 1 мкс
 
Цитата
Serge123 написал:
Сегодня наблюдал сабж по некоторой акции на мосбирже с пом. моего скрипта с OnAllTrade. При этом время сделки было то же самое по самую микросекунду. Это произошло сразу после смены цен покупки/продажи. Как такое возможно? Действительно ли эти 339 сделок произошли менее, чем за 1 мкс?

Можно ли где-то получить общее представление о том, как организованы торги на мосбирже и какие там характеристики у серверов (какая ОС, память, ЦП, диски, пропускной канал, ...)? Т.е. как бы совершить виртуальный тур по бирже. Примерно, как в видео на ютюбе о работе tsmc, где клепают лучшие ЦП.
Можете показать фрагмент этих сделок?  
Утечка памяти в обработчике SetTableNotificationCallback, Функция обратного вызова обработчика событий пользовательской таблицы не освобождает память между вызовами
 
Цитата
БорисД написал:
Николз может все таки ответишь в этой теме на вопросы заданные тебе ?   https://forum.quik.ru/messages/forum10/message75159/topic8528/#message75159

А то мы все много раз читали в твоих сообщениях что ты  доктор технических наук а каких именно даже в догадках не можем  предположить . И про созданный тобой  в 1975 году и  в одиночку ИИ ( над которым по прежнему бьются все компании программистов мирового уровня )  признайся что это были твои враки , ну типа переборщил ты в самовосхвалении .  Иначе дай нам посмотреть на этот твой ИИ от 1975 года выпуска.  
Мое сообщение было направлено конкретному человеку.
---------------------
Удовлетворять больное любопытство хамов нет желания.
Утечка памяти в обработчике SetTableNotificationCallback, Функция обратного вызова обработчика событий пользовательской таблицы не освобождает память между вызовами
 
Цитата
Serge123 написал:
У меня в связи с выносом обработки в main вопрос: напр., я хочу вынести из OnQuote разбор стакана в main, OnQuote будет вызывать getQuoteLevel2 и запоминать результат в циклический массив, а main будет брать его оттуда по текущему индексу, обрабатывать и освобождать память под эту табличку, которую получила через OnQuote от getQuoteLevel2. Не хочется использовать медленные sinsert и sremove. Можно ли сделать такую схему, чтобы не было конфликтов в связи с параллельным использованием данных между потоком main и потоком коллбэков?
Синхронизируйте работу потоков с этой таблицей.  Собственно это и сделано в функциях sinsert и sremove.
Чтобы функции работали быстрее, вставляйте в конец и удаляйте последний.  
Но они работают быстро даже если вставлять и удалять в любое место.
Подскажите с суммирование, Суммирование предыдущего результата
 
Цитата
Phil написал:
Пример по прикрепленному ранее файлу
Код
--пусть оценки учеников
local c={2,4,4,4,5,5,7,9}
--тогда среднее
local s=0;
for i=1,#c do s=s+c[i] end s=s/#c; print("s="..s)
--вычислим квадраты отклонения оценок от их средней оценки:
-- и среднее арифметическое этих значений
local s1=0;
for i=1,#c do local x=(c[i]-s)^2; s1=s1+x; end  s1=s1/#c; print("s1="..s1)
--стандартное отклонение
local d=math.sqrt(s1); print("d="..d);
результат:
Код
>D:/lua53/lua53.exe -e "io.stdout:setvbuf 'no'" "test_SMA.lua" 
s=5.0
s1=4.0
d=2.0
>Exit code: 0
dll на C: удивительная ошибка...
 
Владимир,  Рыбинкин
Не знаю по какой причине Вы решили, что Вам позволено всем хамить.
Но это лишь унижает Вас.
================
Вы все хвалитесь своей программой игры в шахматы.
А что в этом особенного?
----------------------------
Первая программа игры в шахматы в СССР появилась давно до Вашей.
А в период развала СССР (1991) было не до игры в шахматы.
----------------------------
Вы написали свою прогу "мираж" в 1991 году.
Я написал программу ИИ в 1975 году.  
т е за 15 лет до того, как вы научились что-то программировать.
--------------------------
Вы получили награду на ВДнХ
Я получил 25 авторских на свои изобретения.
----------------------
Вы своей прогой хвалились на ВДНХ.
--------------------------
Я свою систему внедрил на трех авиастроительных предприятиях у двух ген.конструкторов
и в двух вузах. В трех союзных республиках.
===============
Хамство в интернете- это обыденная вещь,поэтому  если кто-то мне хамит, я перестаю с ним беседовать.
Но обычно такие хамы не затыкаются, так как им важно себя проявлять.
------------------------
Думал, что Вы лишь мне хамите.
Но оказалось, что Вы хамите всем.
-------------------
Прикольно было почитать в интернете отзывы других о Вашем "авторитете"
Вот одна и цитат с форума  https://forum.ixbt.com/topic.cgi?id=64:238-110
:
Код
Добавление от 10.02.2006 11:47:Итак, поскольку Владимир решил сдать всё и сразу, мы можем смело зачесть ему высшую оценку в том, к чему он на самом деле стремился - а именно, в доказательстве 4-х тезисов опровергателей:

1. Владимир Рыбинкин ни ухом ни рылом в вопросах, о которых он пытается судить.
2. Владимир Рыбинкин не в состоянии найти в общепризнанных теориях ни единого противоречия.
3. Владимир Рыбинкин не в состоянии свести концы с концами даже в самых основах собственных теорий.
4. Владимир Рыбинкин постоянно вынужден врать и подтасовывать, хотя сам обвиняет в том оппонентов.

Прекрасно раскрыт и доказан также особый "тезис Владимира Рыбинкина", доказываемый лишь меньшинством опровергателей - меньшинством, в котором Владимир занимает выдающееся место:

5. Владимир Рыбинкин не умеет читать, а если чтение ему случайно удаётся, то он не в состоянии понять прочитанное даже после многократного повторения.

Владимир, мои поздравления! Вы отлично справились с доказательствами!

У меня нет иллюзий относительно вас.
Хамите дальше, если вы не умеете иначе общаться.  
Quik на mac OC Ventura 13.3, Установка Quik на mac под операционной системой Ventura 13.3
 
Цитата
oldman написал:
0120:fixme:cryptasn:CryptDecodeObjectEx Unsupported decoder for lpszStructType 1.3.6.1.4.1.311.2.1.4
вот какой-то рецепт для подобной ошибки:
Код
jkfloris wrote: ↑Fri Feb 03, 2023 4:21 pm
Please check if you have installed the winbind and ttf-mscorefonts-installer packages and try again.CODE: SELECT ALLsudo apt install winbind ttf-mscorefonts-installer

That worked!!! Many many thanks my friend.
----------------
jkfloris написал: ↑Пт 03 февраля 2023 г., 16:21
Пожалуйста, проверьте, установлены ли у вас пакеты winbind и ttf-mscorefonts-installer и попробуйте еще раз.КОД: ВЫБРАТЬ ВСЕ sudo apt install winbind ttf-mscorefonts-installer
--------------------------
Это сработало!!! Большое-большое спасибо, мой друг.
Quik на mac OC Ventura 13.3, Установка Quik на mac под операционной системой Ventura 13.3
 
на всякий случай в сообщениях написано,хотя и не на русском:
Код
002c:fixme:winediag:loader_init wine-staging 9.1 - это тестовая версия, содержащая экспериментальные исправления.
002c:fixme:winediag:loader_init Пожалуйста, указывайте вашу точную версию при отправке отчетов об ошибках на winehq.org.
0120:исправлено:cryptasn:Неподдерживаемый декодер CryptDecodeObjectEx для lpszStructType 1.3.6.1.4.1.311.2.1.4
0120:исправлено:cryptasn:Неподдерживаемый декодер CryptDecodeObjectEx для lpszStructType 1.3.6.1.4.1.311.2.1.4
Проверка на nil
 
Код
local x=0;
local t=getFuturesLimit(FIRM, ACCOUNT, 0, "SUR");
if t then x=t.cbplplanned end 
Проверка на nil
 
Код
local t=getFuturesLimit(FIRM, ACCOUNT, 0, "SUR");
local x=t.cbplplanned or 0; 
Повторное использование строки
 
Цитата
TGB написал:
Цитата
nikolz написал:
вас так колебет что я повторно написал то, что Вы написали выше?
   Переживаю за то, что много мусора на форуме и могут переполниться его база ::
Спите спокойно, товарищ.
Эту проблему разработчики решат без нас.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
VPM,
Все, что Вы повторяете из прочитанных Вами книжек есть лишь пересказ чужих рассуждений.
------
Возможно будет работать, а возможно и нет.
-----
Есть еще множество различных рассуждений в  подобных книжках.
------------------------
Было бы интересно увидеть результат применения ваших скриптов хотя бы на истории,
которая уже есть в КВИКЕ.
А написать что-то на луа ,да еще без тестов - это может любой начинающий.
-------------------------
Покажите хотя бы какой-нибудь результат.
Ну хотя бы советника , который будет иметь положительное мат ожидание сделок хотя бы на истории.
-------------------
Уверен, что не получится.
Можете доказать иное?
Повторное использование строки
 
Цитата
TGB написал:
Цитата
nikolz написал:
А вы догадайтесь.
    Судя по тому, что вы всегда цитируете сообщения полностью (даже самые длинные), вы, наверное, спамер. Но нельзя исключать с учетом качества выдаваемого вами текста, что вы полуинтеллектуальный робот-спамер :: .
Попробуйте не вешать ярлыки, а спорить предметно.
Повторное использование строки
 
Цитата
TGB написал:
Цитата
nikolz написал:
А вы догадайтесь.
    Судя по тому, что вы всегда цитируете сообщения полностью (даже самые длинные), вы, наверное, спамер. Но нельзя исключать с учетом качества выдаваемого вами текста, что вы полуинтеллектуальный робот-спамер :: .
Вы любитель ярлыков?
----------------------
вас так колебет что я повторно написал то, что Вы написали выше?
-------------------
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
вот тут можете посмотреть варианты как делать очередь.
И результаты тестов различных вариантов.
https://forum.quik.ru/forum17/topic8426/
---------------
С интересом посмотрю Ваши результаты решений.
Может обсудить конкретные решение, что будет полагаю интересно начинающим.
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Вы тоже не читаете внимательно чужие предложения.
Я на форуме не только предлагал, но и показывал как это работает у меня.
-------------------
Например, я выполнение различных алгоритмов обработки событий реализую не только на Lua, но и на Luajit ( что более чем на порядок быстрее)
на Terra, на Python, на julia.  
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
TGB,
Про колебки Вы пишите фигню.
Колбеки не запускаются, а вызываются.
------------------------
Никто не мешает Вам запустить в колбеке новый поток.
--------------
Я это использую уже давно.
Об это писал у же на форуме.
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Цитата
TGB написал:
2.  
Цитата
nikolz написал:
 TGB  ,
Sleep - это функция, которая останавливает поток и возвращает управление OC.
Что Вы будете модифицировать в ней?
 Опять, та же фигня :: .  
Я пишу про sleep (это функция QLua):
Цитата
Фигня это у Вас.
sleep в QLua - это обертка для Sleep OC.
Поэтому Ваше рассуждение про "модификацию" - это пустая фраза.
Повторное использование строки
 
Цитата
TGB написал:
Цитата
nikolz написал:
Если Вы это сообщение выводите в файл, то пишите сразу в файл. куски сообщения. Каждый новый кусок добавится в конец файлаВ итоге Вам не надо наращивать строки.
   nikolz писатель?  
  Зачем вы пишите, то что было уже написано два раза?:
1)  
Цитата
TGB написал:
Почему бы не записывать строку сразу в файл (в системе это буферизуется). Вы проверяли, сколько записей выполняется в файл за 1 секунду, если писать напрямую? Если вы это сделаете, то, возможно, удивитесь.
2)  
Цитата
Nikolay написал:
У меня такие потоки для каждой новой записи просто пишутся в файл черезf:write(str..'\n')
   Вы так спамите или не умеете читать :: ?
А вы догадайтесь.
Повторное использование строки
 
Цитата
Serge123 написал:
Как-то уже об этом писал...
Есть строка mess (age), в которой коллбэки накапливают свой вывод, при превышении определённой длины строка записывается в файл. Потом обычно пишут mess='', чтобы сбросить длину строки в 0, но что в этом случае произойдёт? Создастся новая строка, или в структуре TString для этой строки её длина установится в 0?
Я не вижу, где хранится число байтов, выделенных под строку, и как контролируется выход за её предел при дописывании к строке?
Не хочется ненужного пересоздания строки и сборки мусора, а хочется просто зарезервировать под строку 10 Мб и использовать эту же память под строку постоянно. Зачем выметать сор из  избы  строки, если можно обойтись без этого? Как это всё оптимизировать и сделать, как в нормальных языках типа того же си?
Если Вы это сообщение выводите в файл, то пишите сразу в файл. куски сообщения.
Каждый новый кусок добавится в конец файла
В итоге Вам не надо наращивать строки.
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
TGB,
Sleep - это функция, которая останавливает поток и возвращает управление OC.
Что Вы будете модифицировать в ней?
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Цитата
Constantin написал:
Цитата
nikolz написал:
- запуск коллбеков всех Lua-скриптов пользователя;Мое мнение:Колбеки не запускаются, а вызываются. Вызываются они в основном потоке, потому что иначе они не могут вызываться. Они и есть реакция на события в этом потоке.Вы знаете иной механизм вызова колбеков? Расскажите .
Как я понимаю человек предлагает вызывать колбеки в потоке Lua-скрипта.
Мечтать не вредно.
Пусть сначала сделает и докажет,  что это лучше.
--------------
Существующее решение работает быстро и даже раньше, чем данные попадают в таблицы терминала.
 
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Цитата
TGB написал:
Цитата
Constantin написал:
Как я понимаю человек предлагает вызывать колбеки в потоке Lua-скрипта.
   Один из возможных вариантов предлагаемой обработки событий Qlua:
  1)  вместо регистрации функций обратного вызова, регистрация соответствующих потокобезопасных очередей событий (возможно, с теми же именами);  я бы сделал эти очереди (можно, в принципе, обойтись и одной) циклическими, с указанием их длины при регистрации, но не более некоторого значения;
  2)  вместо sleep, служебная функция с тем же именем ожидания либо истечения интервала времени (как в sleep), либо появления данных в очередях событий (с выдачей списка непустых очередей);
  3)    добавление функции чтения очередей событий (их параметров).
  Эта схема реализует рекомендованную ARQA обработку параметров событий в main (смотрите "Использование Lua в Рабочем месте QUIK"), с тем, чтобы не было проблем синхронизации в скриптах.  Кроме того, в такой схеме решается тяжелая задача подключения новых версий Lua в QUIK, так как не будет требоваться конфигурирования Lua для многопоточного использования (из-за запуска функций коллбеков в потоке, отличном от потока main, но в контексте пользователя). Подключение новых версий Lua  в QUIK станет в описанной выше схеме рутинной задачей.
Это делается очень просто.
----------------------
Применяю это с момента появления VMLua в КВИКЕ.
---------------------
Возьмите готовую библиотеку https://quik2dde.ru/viewtopic.php?id=78
------------------
и используйте всего две функции
CreateEvent и  WaitForSingleObject
-------------------
Как реализовать очередь есть в документации QLUA  
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Цитата
TGB написал:
1) В текущей версии в одном основном потоке обслуживаются:- запуск всех Lua-скриптов пользователя;- запуск коллбеков всех Lua-скриптов пользователя;-- обработка всех коллбеков таблиц QUIK (это не таблицы Lua);-- обработка всех индикаторов пользователя.
Зачем столько фантазии и эмоций.
Сложно понять что думал человек, написавший три предложения.
Давайте разберем то, что Вы написали и то, как я это понял.
------------------  
Вот Ваши предложения:
1) В текущей версии в одном основном потоке обслуживаются:
- запуск всех Lua-скриптов пользователя;
- запуск коллбеков всех Lua-скриптов пользователя;
-- обработка всех коллбеков таблиц QUIK (это не таблицы Lua);
-- обработка всех индикаторов пользователя.
----------------------------
Разбираем:
Вам не нравиться ,что  в основном потоке терминала выполняется:
запуск всех Lua Скриптов пользователя.
--------------
И что в этом плохого?
Мое мнение - это выполняется однократно и на дальнейшую работу скриптов не влияет. поэтому никакой проблемы в этом нет.
Докажите, что это не так.
----------------------
- запуск коллбеков всех Lua-скриптов пользователя;
Мое мнение:
Колбеки не запускаются, а вызываются.
Вызываются они в основном потоке, потому что иначе они не могут вызываться. Они и есть реакция на события в этом потоке.
Вы знаете иной механизм вызова колбеков?
Расскажите .
--------------------
-- обработка всех коллбеков таблиц QUIK (это не таблицы Lua);
Вообще непонятно. Что за "обработка" ?
В каком основном потоке ?
-------------------
-- обработка всех индикаторов пользователя.
В каком основном потоке?
Где это Вы прочитали ?
===================  
Поэтому Ваши высказывания ошибочны.
если Вы не согласны, то докажите,а не обвиняйте, что другие не умеют читать Ваши мысли.
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
1) - ошибочное утверждение.
------------------
Вот доказательства:
-  запускаем QUIK и смотрим сколько потоков используется без подключения к серверу:

При запуске QUIK создает 5 потоков. (это уже больше чем число ядер)
---------------------------------
- запускаем скрипт


Потоков уже 8.
----------------------------------
-- Запускаем еще один скрипт


Потоков уже 9
-----------------------------
-- Запускаем третий скрипт

Потоков уже 10.
=====================
2) - Разработчики дали решение этой проблемы. Оно прекрасно работает.
Так как QUIK - это бесплатное приложение, то дареному в... не заглядывают.
сделать что-то еще - это их право, но не обязанность.
==================
3) - с этим согласен.
Хотя бы просто открыли формат файлов dat.
Остальное я бы написал и выложил в свободный доступ.
-----------------  
Даже макрософт выкладывает форматы свои файлов.
DNS влияет на скорость работы Квика?
 
Цитата
Serge123 написал:
Цитата
nikolz написал:
 Serge123  ,
А Вы знаете, зачем нужен DNS?
----------------------
Судя по вопросу, Вы этого не знаете.
----------------------
Прочитайте в интернете и вопрос отпадет сам собой.  
Я когда-то знал это, даже своей программкой получал пакет по UDP с корневого сервера. Сейчас поискал в Гугле, зачем нужен DNS, оказалось, что для того же, для чего и раньше:

===
DNS (система доменных имен) преобразует доменные имена, удобные для человеческого восприятия (например,  www.amazon.com ), в IP-адреса, понимаемые машиной (например, 192.0.2.44).
===

и вдобавок

===
Какой DNS самый быстрый?
1.1.1.1 — самый быстрый в мире, ориентированный на конфиденциальность DNS-резолвер
===

А в чём был замечен криминал у этой темы?
Криминала нет, есть бессмысленность вопроса.
----------------------
Система доменных имен (DNS)  представляет собой распределенную систему хранения и обработки информации о доменных зонах.
Она необходима, для соотнесения IP-адресов устройств в сети и более удобных для человеческого восприятия символьных имен.
----------------------------
Ну скажите на кой хрен КВИКУ доменные имена?
----------------------------
У Вас в квике уже прописан IP адрес сервера брокера.  
--------------------
DNS - это список имен типа "ВАСЯ ПУПКИН " и напротив него записан  IP адрес.
------------------
В Квике нет надобности искать васю пупкина.
Снять защиту с робота на LUA, Снять защиту с робота на lua, привязанного к закрытому счёту
 
Выкладываю скрипт mos.lua, в котором устанавливается номер счета.
отредактируйте его сами как хотите и потом скомпилируйте и замените в папке робота.
Код
EDP = "NO"
FIRMID = "не об\255зателе\237"
RISK_CHANGE = "NO"
RISK_CONST = 6
LICENSE_RISK = "NO"
VEDLOG = "Ведётс\255"
PAPER = "RTS"
ACCOUNT_DEPO = "99999"
CLIENTCODE = "11111"
MODULD = "10092021"
SALUT = "1000000000"
MODULPRO ="10092021"
RISK_LIC = 6
Trade = function(Type)
  -- function num : 0_0 , upvalues : _ENV
  local temp = nil
  trans_id = trans_id + 1
  local spred = 100
  local Price = 0
  local operation = ""
  if Type == "BUY" then
    for j = 0, 9 do
      Price = (getParamEx(CLASS_CODE, SEC_CODE, "offer")).param_value
      if Price == 0 then
        do
          temp = (getParamEx(CLASS_CODE, SEC_CODE, "bid")).param_value
        end
      end
    end
    spred = Price + spred
    operation = "B"
  else
    for j = 0, 9 do
      Price = (getParamEx(CLASS_CODE, SEC_CODE, "bid")).param_value
      if Price == 0 then
        do
          temp = (getParamEx(CLASS_CODE, SEC_CODE, "offer")).param_value
        end
      end
    end
    spred = Price - (spred)
    operation = "S"
  end
  local Transaction = {ACCOUNT = ACCOUNT_DEPO, TYPE = "L", TRANS_ID = tostring(trans_id), CLASSCODE = CLASS_CODE, SECCODE = SEC_CODE, ACTION = "NEW_ORDER", OPERATION = operation, PRICE = tostring(spred), QUANTITY = "1"}
  for j = 0, 10 do
    sendTransaction(Transaction)
    while not stopped and trans_Status == nil do
      sleep(10)
    end
    local Status = trans_Status
    trans_Status = nil
    if Status ~= 3 then
      row = t:AddLine()
      t:SetValue(row, "Дата", Data.date, i)
      t:SetValue(row, "Врем\255", TimeF, i)
      t:SetValue(row, "Событи\229", (string.format)("Зайт\232 \226 сделку не удалос\252 по цене %d! Статус %d: %s", Price, Status, trans_result_msg), i)
      i = i + 1
      f:write("\n", Data.date, " ", TimeF, " ", (string.format)("Зайт\232 \226 сделку не удалос\252 по цене %d! Статус %d: %s", Price, Status, trans_result_msg))
      f:flush()
      f:seek("end", 0)
      ;
      (bot.sendMessage)(from_id, (string.format)("Zajti v sdelku ne udalos` po cene %d! Status %d", Price, Status))
      if j == 9 then
        return false
      end
    else
      row = t:AddLine()
      t:SetValue(row, "Дата", Data.date, i)
      t:SetValue(row, "Врем\255", TimeF, i)
      t:SetValue(row, "Событи\229", (string.format)("\194 сделку зашл\232 по цене: %d", Price), i)
      i = i + 1
      f:write("\n", Data.date, " ", TimeF, " ", (string.format)("\194 сделку зашл\232 по цене: %d", Price))
      f:flush()
      f:seek("end", 0)
      ;
      (bot.sendMessage)(from_id, (string.format)("V sdelku zashli po cene: %d", Price))
      sleep(10)
      return true
    end
  end
  CountVolat = function(period, interV)
    -- function num : 0_0_0 , upvalues : _ENV
    tCandle = CreateDataSource(codeclass, codebum, interV)
    NumEndCandle = tCandle:Size()
    Sum = 0
    for j = 1, period do
      Volat = tCandle:H(NumEndCandle - j) - tCandle:L(NumEndCandle - j)
      Sum = Sum + Volat
    end
    avgVolat = Sum / period
    target = avgVolat / 2
    Hi = tCandle:H(NumEndCandle - 1)
    Lo = tCandle:L(NumEndCandle - 1)
    HiO = tCandle:H(NumEndCandle - 2)
    LoO = tCandle:L(NumEndCandle - 2)
    trd = "ничего"
    if HiO < Hi and LoO < Lo then   trd = "Лонг"
    else
      if Hi < HiO and Lo < LoO then   trd = "Шорт"
      else
        if HiO < Hi and Lo < LoO then  trd = "Внеш.свеч\224"
        else
          if Hi < HiO and LoO < Lo then
            HiOO = tCandle:H(NumEndCandle - 3)
            LoOO = tCandle:L(NumEndCandle - 3)
            if HiOO < HiO and LoOO < LoO then   trd = "Лонг(внут\240.свеч\224)"
            else
              if HiO < HiOO and LoO < LoOO then   trd = "Шорт(внут\240.свеч\224)"
              else   trd = "ХЗ"
              end
            end
          else      trd = "ничего"
          end
        end
      end
    end
    trend = trd
    return avgVolat, target, Hi, Lo, trend
  end
  insertLabel = function(labelType, labelDate, labelTime, yValue)
    label_params = {}
    if labelType == 1 then
      label_params.IMAGE_PATH = "C:\\pic_qlua\\купл\255.bmp"
    else
      if labelType == 2 then
        label_params.IMAGE_PATH = "C:\\pic_qlua\\продаж\224.bmp"
      end
    end
    label_params.TIME = labelTime
    label_params.DATE = labelDate
    label_params.YVALUE = yValue
    label_params.ALIGNMENT = TOP
    AddLabel(id_grafic, label_params)
  end
end


Снять защиту с робота на LUA, Снять защиту с робота на lua, привязанного к закрытому счёту
 
Maater,
в личке ссылка на измененный скрипт. Попробуйте и сообщите что и на что изменить.
Вопрос по стеку Lua, стеку Lua и нюансы его чтения
 
Полагаю, что программирование на луа и строение VMLua - это две большие разницы,
подобно как руление на  авто и строение двигателя авто.  
Вопрос по стеку Lua, стеку Lua и нюансы его чтения
 
Цитата
Виталий написал:
Цитата
nikolz написал:
QLUA - это библиотека функций, написанная на СИ
---------------------------
VMLua - это виртуальная вычислительная машина ,
тоже написанная на CИ ,
интерпретирующая байт-код скрипта Lua.  
Но ведь ветка называется "Программирование на языке Lua".
Но вопросы не  о программировании на луа,
а о внутреннем строении функций  на СИ.  
Вопрос по стеку Lua, стеку Lua и нюансы его чтения
 
QLUA - это библиотека функций, написанная на СИ
---------------------------
VMLua - это виртуальная вычислительная машина ,
тоже написанная на CИ ,
интерпретирующая байт-код скрипта Lua.  
Вопрос по стеку Lua, стеку Lua и нюансы его чтения
 
вообще-то,
это форум по QUIK, а не про луа.
-------------  
Тут постоянно путают qLua с VMLua.  
Вопрос по стеку Lua, стеку Lua и нюансы его чтения
 
Цитата
Виталий написал:
Цитата
nikolz написал:
1. Вы ошибаетесь. NULL и nil это не одно и то же. Это одно и тоже в objective-c, но не в луа. В Lua  нет NULL.
Допустим, но глобально в текущей ситуации это разве что-то меняет? Это пусто, 0, ничего, false.

Цитата
Serge123 написал:
Но если сравнить различные языки, то ,  если в данных присутствуют значения NULL, логические операторы и операторы сравнения могут возвращать, кроме TRUE или FALSE, также и третий результат — UNKNOWN.
Только JS встречал, с которым сейчас в основном и работаю. Больше нигде.

Цитата
nikolz написал:
2.  Этот способ адресации  делает VMLua не только стековой машиной, но и регистровой машиной.Отрицательный индекс удобен, когда  работаем с вершиной, положительные, когда работаем с фактическими параметрами функций.
Ну вот примерно про это я и спрашивал. Получается, что это просто работа со стеком таким образом, чтобы не превращать его в массив. Стек - это первый зашел и последний вышел. А если читать стек по положительным индексам - это массив получится. Получается, что это просто выбор разраба, как читать - ок. Меня это и интересовала: это правило или просто так сложилось.

Цитата
nikolz написал:
4.   Зря Вы не читаете учебники и документацию, а придумываете объяснение сами. Проблема Вашего непонимания в том, что Вы не знаете архитектуры процессоров.Пытаетесь разобраться в "железе" на основе знания какого-либо языка программирования. --------------------  Очевидно, что Ваши ощущения - это и есть результат незнания.
Ну так я сюда и пришел за знаниями. Разве форумы не для того чтобы быстро получить ответ на вопрос и продвинуться дальше? Читать документацию и прочее можно до бесконечности. У меня знакомый 4 года назад начал изучение ReactJS с чтения документации, тогда как я советовал ему освоить базу и начать работать. До сих пор учит. Зачем же в такие крайности?

Цитата
nikolz написал:
Подробнее написано в ссылках, выше и в других статьях в интернете.
Спасибо.
Массив  регистров.  - это и есть регистровый способ адресации.
Т е VMLua это не только стековая, но и регистровая машина.    Два в одном.  
DNS влияет на скорость работы Квика?
 
Serge123,
А Вы знаете, зачем нужен DNS?
----------------------
Судя по вопросу, Вы этого не знаете.
----------------------
Прочитайте в интернете и вопрос отпадет сам собой.  
Как вы боретесь с описками в именах переменных?
 
Ставлю  вычисления в условный оператор
Код
if x and x1 ...  and xn then 
 -- x,x1,xn --переменные , в выражениях внутри данного условия
...
end 
Снять защиту с робота на LUA, Снять защиту с робота на lua, привязанного к закрытому счёту
 
выложите на файлообменнике с описанием что есть что и пришлите в личку. Посмотрю и отвечу в личку.
Снять защиту с робота на LUA, Снять защиту с робота на lua, привязанного к закрытому счёту
 
Цитата
Maater написал:
Всем привет!
Столкнулся с такой проблемой: купил робота, он был привязан к конкретному счёту, который теперь закрыт, а автор робота на связь не выходит, чтоб сменить счёт.
Кто-то может помочь снять защиту? Вам робот считайте просто так достанется!) Работает на логике Ларри Вильямса
Надо смотреть.
Снятие заявки от администратора (брокера)
 
еще хотел заметить.
Так как фьючерсы и опционы - это не материальные активы,
и они изначально заложены у биржи.
Поэтому давать в дол под залог намерений (опционов) это прикольно.  
Снятие заявки от администратора (брокера)
 
Цитата
Айдар написал:
Цитата
nikolz написал:
 
Цитата
Айдар  написал:
 
Цитата
 nikolz   написал:
ее испол
  Вручную на практике снимать удается (хорошо, что он не рыночные заявки создает), смотришь в таблицу - новая заявка и сразу отменяешь. Возможно брокер и прав, но, не называя имена брокеров хочу сказать, что у старого такой фигни не было, он позволял держать опционы до дня исполнения даже если не хватает обеспечения, а новый за пару дней уже мутит что хочет. Старого брокера выкупили...
 Ставить такие заявки могут в региональном офисе брокера.
Дело конечно ваше, полагаю зря в опционы полезли. Возможно у Вас позиция при которой в случае неудачи Вы будете должны брокеру кучу бабла. Вот он и страхуется, так как деньги не его а клиентов.
Дело вот в чем. Опционы куплены (а не проданы, то есть не short) с запасом на балансе (потерять в данном случае больше стоимости самих опционов невозможно). Далее если опционы "в цене" есть два варианта: либо ДО момента исполнения обеспечить деньгами сумму ГО для фьючерсов, либо продать эти опционы. Но брокер заранее, за несколько дней уже продает эти опционы обратно (если на балансе не хватает ГО) и пропускается хорошие движения цен (я бы их продал например за пару часов до исполнения, а не за 3 дня). А к примеру, на 70 опционов Si нужно иметь на счете 1 000 000 рублей, что то не хочется доверять брокеру такие деньги с таким поведением... Да и вообще никому нельзя доверять большие деньги)
Теперь все понятно.
Дело в том, что на фьючерсах и опционах нет short как на акциях. Рынок производных инструментов тем и отличается от рынка базовых.
Поэтому брокер  по регламенту не обязан Вам давать в долг на этих инструментах.
--------------------
Но некоторые брокеры дают , могу догадаться у кого вы раньше обслуживались.  
Другие не дают, и это их законное право.  Вот Ваш брокер сейчас из таких.  
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 12 ... 77 След.
Наверх