string.format("%+6.6f", x) даёт строку с 6-ю знаками после разделителя. А мне надо, чтобы перед разделителем тоже всегда было одинаковое количество знаков. Есть ли у string.format такой параметр?
Если обращение к хранилищу данных реализовано через одну дверь - основной поток, - то все остальные потоки, сколько бы их не было запущено, выстроятся в одну очередь у входа в дверь. И при запуске нескольких скриптов, "одновременно" запрашивающих, например, данные стаканов мы не увидим сколько-нибудь существенного ускорения по сравнению с одним скриптом, запрашивающим по очереди такое же количество стаканов. Проверим:
Код
function main()
local t = os.clock()
for _ = 1, 100000 do
getQuoteLevel2(class, sec)
end
message(tostring(os.clock() - t))
end
Проведём несколько тестов с 1-м, 2-мя, 3-мя, 4-мя одновременно запущенными скриптами.
Результаты: 1 скрипт: 6.5 сек 2 скрипта: по 15.2 сек каждый 3 скрипта: по 23.1 сек каждый 4 скрипта: по 30.4 сек каждый
При этом, во всех случаях было загружено только одно ядро процессора, что как бы намекает на использование только одного потока для доступа к данным.
nikolz написал: Прием данных от источника и стаканов реализуется в main. ----------------- Все работает замечательно. Но узким местом является прием данных всех инструментов в одном потоке main. ----------------------- Хочу принимать данные и стаканы в отдельном потоке каждого инструментов.
А разве приём данных идёт не через основной поток? Хоть тысячу отдельных потоков сделай, они все встанут в очередь при обращении к хранилищу. Или вы располагаете другой информацией?
BlaZed написал: старичок хоть троллит и флудит как не в себя, зато делает форум забавнее, без него скучно бы тут было.
Не вижу ничего забавного в том, что два идиота в каждой теме меряются у кого больше. Лично я, захожу на форум, как и большинство адекватных людей, чтобы найти решение какой-то проблемы, а не веселиться Вся ветка по программированию уже загажена.
Цитата
Alexey Ivannikov написал: Наша позиция такова: это форум, а на форуме люди общаются.
Брокеру можно предъявить только то, что его железо не тянет сервер квик в моменты повышенной нагрузки. Но не брокер ПО пишет. Корень зла в тормозной обработке заявок сервером. Причём, перед снятием заявки серверу, кровь из носа, надо обязательно её обработать. Хотя очевидно, что обработка избыточна, если заявку уже снимают. Более 75% всех ошибочных транзакций у меня - это ошибки вида "Вы не можете заменить заявку ХХХ. Повторите попытку позже." Когда возрастает волатильность на рынке, резко увеличивается количество таких ошибок. Но обращение к брокеру бесполезно, коль скоро сам разработчик не желает заниматься проблемой. Саппорт предлагает понатыкать слипов. А что толку, если при росте волатильности эта обработка увеличивается до 5 и более минут?
Серьёзно?!! Загляните в ветку Программирование на языке Lua. Там каждая вторая тема завалена флудом, флеймом и оффтопом. Оффтоп — сообщения, никак не соответствующие заявленной теме. Флуд — нетематические сообщения, не несущие никакой полезной информации, зачастую занимающие большие объёмы. Флэйм — агрессивные сообщения, оскорбления, провокации в сообщениях, перебанка (даже с использованием цензурных слов), нередко уже не имеющие отношения к первоначальной причине спора.
По-моему, всем участникам форума, кроме администрации, очевидно, о каких сообщениях идёт речь.
Fasmin написал: Так я и есть разработчик этого скрипта
Цитата
Fasmin написал: [17:34:47.955073] (error) update.luac: D:\SAMP\CLEAR SBORKA SAMP\moonloader\update.luac:0: attempt to index global 'updateIni' (a nil value)
Скорее всего, ошибка возникает при выполнении:
Код
updateIni = inicfg.load(nil, update_path)
Цитата
Fasmin написал: (exception) update.luac: error reading ini file: D:\SAMP\CLEAR SBORKA SAMP\moonloader\script_update.ini: cannot open file
Смотрите, по какой причине не может открыть script_update.ini
Anton написал: Надо только корневой сертификат импортировать в доверенные корневые, это который самоподписанный (DigiCert Trusted Root G4).
Я вообще не заморачивался с сертификатами. Просто после обновления до 9 при попытке запуска квика вида ругнулась однократно, что файл info.exe повреждён. Я нажал "ОК". Вроде, повторно распаковал из апдейта info.exe (щас уже не вспомню) и запустил заново - всё заработало. Про сертификаты я уже потом прочитал на форуме.
Незнайка написал: Из QUIK8 копируем файлы MP_Pr.dll, mp_pr.ini, qcrypto.ini в QUIK9 с заменой.
Вот это ваще не надо. Не обратил внимания. что в quik_9.3.3_upd.zip никаких инишников нет, т.ч. эти файлы и так останутся при создании копии папки целиком QUIK8 -> QUIK9.
ISINhere2001 написал: напишите пожалуйста, если не сложно, что и куда копировать, какие файлы изменить, дополнить.
Берем паку с рабочей версией 8 (Пусть будет условно QUIK8). Делаем её копию: QUIK9 Далее из quik_9.3.3_upd.zip распаковываем содержимое в QUIK9 с заменой файлов. Из QUIK8 копируем файлы MP_Pr.dll, mp_pr.ini, qcrypto.ini в QUIK9 с заменой.
ISINhere2001 написал: Сотрудники техподдержки Quik в Сбере пользуются 9-й версией терминала, но пользователям ее пока не предоставляют, тк не все оттестировали.
Сбер обычно позже остальных брокеров обновляет версии квика, т.к. действительно тестирует их (особенно серверные) на своём стенде. В отличие от других брокеров, которые сразу выкатывают новые версии на бой. А пользователи пусть сами потом мучаются )) Но я сейчас попробовал подключиться по MultiPurpose_SSPI_Provider из 9.3. У меня пока нет логина и пароля - ввел наобум, пишет "Неверное имя или пароль". Думаю, если б там 8-й сервер был, другая ошибка была бы.
Транслируются ли в QUIK индикативные курсы валют? Ну те, которые используются для расчета стоимости шага цены. Интересует, есть ли у какого-нибудь брокера в реалтайм?
На срочном рынке МБ существует понятие "скальперские сделки":
Цитата
Срочные сделки, совершенные на основании безадресных заявок, приводящие к открытию и закрытию позиции по фьючерсу в течение одного Торгового дня
Комиссия по таким сделкам взимается только при открытии позиции. При закрытии позиции в течение одного Торгового дня комиссия не взимается. Квик же показывает комиссию как по сделкам открытия, так и закрытия позиции.
Сергей написал: В таблице Купить/Продать в поле Прибыль/Убытки данные не за текущий день, как просят многие пользователи, а суммарные прибыль или убытки.за все время.
Тут даже не за все время, а пока позиция открыта. Как я понял, считается тупо как разница между средней ценой приобретения и текущей ценой, помноженная на количество бумаг. Если в течение дня позицию закрыть и снова открыть, то весь предыдущий результат будет похерен.
Можно сделать функции, вызываемые в основном потоке квика:
Код
SetTimeout (func, [start [, ...]])
Вызвает функцию один раз через определённый интервал (delay) времени
func - вызываемая функция
start - время (в мс), через которое необходимо вызвать функцию, по умолчанию start = 0
... - список аргументов вызываемой функции
Если start = 0, то функция func вызывается немедленно синхронно. SetTimeout при этом возвращает результат работы func
Если start > 0, то func вызывается асинхронно через заданное время. SetTimeout возвращает идентификатор, который можно использовать в ClearInterval.
Код
SetInterval (func, delay [, start [, ...]])
Вызвает функцию регулярно, повторяя вызов через определённый интервал (delay) времени
func - вызываемая функция
delay - период повтора (в мс)
start - время, через которое будет первый вызов (в мс), по умолчанию start = 0
... - список аргументов вызываемой функции
Возвращает идентификатор, который можно использовать в ClearInterval.
Код
ClearInterval (id [, start [, delay]])
id - идентификатор функции таймера, параметры которой надо изменить
start - изменяет время следующего вызова
delay - изменяет период вызова
если start и delay не заданы, то таймер удаляется
Alex, GetItem и getNumberOf работают только со стандартными таблицами. Они все указаны в руководстве. Если вам нужны параметры бумаг, то надо использовать ParamRequest и getParamEx/getParamEx2
nikolz, милейший, я не хотел вас обидеть, но вы всегда пишите не в тему, не заморачиваясь ее прочтением. Вы сделаете себе одолжение, не встревая в чужие темы со своим чрезвычайно важным мнением, выставляя напоказ свою глупость.
Anton написал: 2) onMainInit как раз чтобы вынести бизнес-код из мейна, заодно весь мусор, созданный в процессе инициализации, попадет к коллектору сразу после нее, а не после того, как мейн закончится (т.е. никогда).
Тоже самое, если запихать содержимое onMainInit в блок do end?
Цитата
Anton написал: 1) OnStop снижает runStatus с 3 до 2 и крутит спинлок, не давая квику начать отсчет остатка жизни мейна.
А не проще onMainCleanup выполнить в OnStop? Ведь пока OnStop крутит холостой цикл, QUIK все равно ничего не делает.