Евгений написал: Для того что бы сделки поступали нужно что бы эта таблица была открыта, и это в принципе даже не плохо. Но вот эти сообщения в таблице(появление сделки и ее параметры) они много пожирают ресурсов квика ? Может можно как то их сэкономить и не транслировать эти сообщения ?
Ну то есть пусть они туда пишутся в эту таблицу, только без выдачи этого визуально. Например сделать чек бокс не отображать
[не показывать]
V
Для этого надо подаисаться на обезличенные сделки, а таблицу не открывать.
читайте внимательно документацию, там даже пример написали, чтобы было понятно: этот параметр обязателен, но значение его может быть nil читаем внимательно там где звездочки
serggio написал: Вам ровно пять сообщений назад поддержка ответила .
Я видел, что ответила поддержка. Заметьте, что после этого так же nikolz задал свой вопрос и поддержка не ответила. Вообще поддержка ответила, что такой стакан "огрызок" по сути - транслирует биржа. Т.е. биржа у себя имеет полный стакан котировок на акции, а брокеру она транслирует "огрызок" этого стакана. Вам не кажется это странным? Как поддержка вообще взялась тут ответить за брокера? Квик оперирует данными брокера, но не биржи. Поэтому думаю вопрос этот пока открыт и напишу брокеру - пусть он ответит какой полный стакан на бирже и какой стакан ему транслирует биржа и почему. Толи сам брокер делает у себя такие настройки, что биржа ему даёт не полный стакан, толи брокер получает таки полный стакан с биржи, но по каким то своим понятиям транслирует нам в квик не полный стакан.
потому что у брокера сервер QUIK и поддержка знает, что говорит. Но какая длина очереди на сервере биржи почему-то не знает. Понимаю что она разная бывает, но ее длина полагаю измеряется тысячами.
В NeuralNetwork.Training первые строки до коммента "--Теперь правим веса": ошибки(delta) собираются в обратной порядке: выходной слой, далее остальные(for tmpl =self.layers-1, 1, -1 do -- слои) до первого.
Можете привести оценку скорости обучения для каких либо примеров и сравнение скорости например с факелом. -------------------------- Я сделал обертку для Lua библиотеки fastNet на СИ, но для акций ее так и не применил, так как использую бинарную сеть, для которой не нашел алгоритма оптимизации.
читайте внимательно документацию. Там стоит звездочка - т е надо читать сноску, а в сноске написано: (*) В зависимости от настроек сервера QUIK, величина может выражаться в лотах или в штуках. Уточните единицы измерения у обслуживающего брокера.
Функция getBuySellInfoEx возвращает два параметра:
Цитата
is_long_allowed = 1; //Признак того, является ли бумага разрешенной для покупки на заемные средства. Возможные значения: «1» – разрешена, «0» – не разрешена. is_short_allowed = 1; //Признак того, является ли бумага разрешенной для покупки на заемные средства. Возможные значения: «1» – разрешена, «0» – не разрешена.
То есть бумага для которой я запрашивал getBuySellInfoEx - имеет возможность торговли с плечом.
Но параметр так же возвращенный функцией getBuySellInfoEx:
читайте внимательно документацию. Там стоит звездочка - т е надо читать сноску, а в сноске написано: (*) В зависимости от настроек сервера QUIK, величина может выражаться в лотах или в штуках. Уточните единицы измерения у обслуживающего брокера.
Вопрос к разработчиками. Как я понимаю, глубина стакана - это размер очереди заявок на сервере биржи. -------------------- Регулируется ли на сервере КВИК брокера размер транслируемой очереди т е глубина стакана. Еесли да , то какая максимальная, если нет , то какая максимальная на сервере биржи. Спасибо
Quikos написал: Подскажите, возможна ли остановка и запуск скрипта из другого скрипта ?
К примеру так: первый скрипт следит за соединение Квика - если соединение разрывается, то первый скрипт останавливает второй скрипт. Первый скрипт ждет пока восстановится соединение и как только соединение восстанавливается первый скрипт запускает второй скрипт.
скрипт - это всего лишь текст на языке луа. Почему не можете все написать в одном романе, зачем второй?
Nikolay написал: Не лучшее решение, оно блокирует исполнение кода. Запросы где время ответа неизвестно, лучше решать через очереди задач ожидания. Потоков в lua нет, но, как минимум, не блокировать весь код. Если, например, скрипт обрабатывает много инструментов и потоков данных, то ждать после каждого заказа - много времени пройдет пока до последнего дойдет. Или надо что-то другое постоянно контролировать, пока по другому инструменту заказ сделали. То что долго идет ответ - это не повод для уже работающих инструментов ждать.
Не от хорошей жизни, данные не всегда успевают. Поскольку, как вы заметили, потоков в луа нет, пришлось на каждый инструмент(тикер) сделать по скрипту. Ну а в отдельном скрипте без базы никаких задач нет. К стати, пока ни при какой нагрузке ожидание начала загрузки больше секунды-двух не встретил, а базы подгружается в основном либо при запуске, либо на открытии сессии. Как и повода жаловаться на SetUpdateCallback. Хотя в основном как колбэк используется OnAllTrade, база больше для расчетов.
В квике можно создавать сколько угодно потоков При этом надо использовать общий глобальный стек. В нем решены проблемы синхронизации для main и для любых других. ---------------- я приводил пример с пулом потоков Использовал его для обработки колбеков по 200 инструментов. в итоге максимальное количество потоков которые были открыты пулом составило 12. Никаких проблем с синхронизацией не было.
Quikos написал: Я правильно понял, что нужно дождаться пока появится таблица заполнится и только потом вызвать SetUpdateCallback ?
я в настоящее время не использую тики, Но для таблице обезличенных сделок (тиков) я сделал DDE клиента который стартует всегда при загрузки квика и позволяет получать в фоновом режиме любые таблицы квика , например доску опционов, или таблицу обезличенных сделок. -------------- еще использовал колбек onAllTrade , тоже работает нормально.
local code_class1 = "TQBR"
local code_paper1 = "GAZP"
local interval1 = INTERVAL_TICK
local code_class2 = "TQBR"
local code_paper2 = "SBER"
local interval2 = INTERVAL_TICK
------------------------
local function my_cb_CDS(idx,tabl)
message(tostring(tabl.sec)..","..tostring(idx),1)
Sleep(100);
end
-----------------------------------------------------------------------------------------------------------int main:-----------------------------------------------------------------------------------------------------
function main()
while not stopped do
if tab1==nil then tab1 = CreateDataSource(code_class1, code_paper1, interval1);
if tab1 then
tab1.clas=code_class1; tab1.sec=code_paper1; tab1.int=interval1;
tab1:SetUpdateCallback(function(idx) my_cb_CDS(idx,tab1) end)
end
end
if tab2==nil then tab2= CreateDataSource(code_class2, code_paper2, interval2);
if tab2 then
tab2.clas=code_class2; tab2.sec=code_paper2; tab2.int=interval2;
tab2:SetUpdateCallback( function(idx) my_cb_CDS(idx, tab2) end)
end
end
-------------------------
-- message(tostring(my_table1:Size()),1)
sleep(1000)
end
-------------------------
end -- end main()
function OnInit(script_path)
end
Переписал Ваш скрипт , но действительно, если таблица обезличенных сделок не открыта, то руками запускается со второго раза, а автоматом - с первого. Очевидно это какая-то особенность или ошибка библиотеки QLUA.
Код
local code_class1 = "TQBR"
local code_paper1 = "GAZP"
local interval1 = INTERVAL_TICK
local code_class2 = "TQBR"
local code_paper2 = "SBER"
local interval2 = INTERVAL_TICK
------------------------
local function my_cb_CDS(idx,tabl)
message(tostring(tabl.sec)..","..tostring(idx),1)
Sleep(100);
end
--------int main:---------------
function main()
if tab1==nil then tab1 = CreateDataSource(code_class1, code_paper1, interval1);
if tab1 then
tab1.clas=code_class1; tab1.sec=code_paper1; tab1.int=interval1;
tab1:SetUpdateCallback(function(idx) my_cb_CDS(idx,tab1) end)
end
end
if tab2==nil then tab2= CreateDataSource(code_class2, code_paper2, interval2);
if tab2 then
tab2.clas=code_class2; tab2.sec=code_paper2; tab2.int=interval2;
tab2:SetUpdateCallback( function(idx) my_cb_CDS(idx, tab2) end)
end
end
-------------------------
while not stopped do
-- message(tostring(my_table1:Size()),1)
sleep(1000)
end
-------------------------
end -- end main()
function OnInit(script_path)
end
nikolz написал: Скрипт запускаете руками или автоматом с запуском квика? Если автоматом, то в скрипте надо делать ожидание. ---------------- Проще, если вам нужны тики, то просто подпишитесь на них через меню и они будут приходить при старте квика без проблем.
Скрипт запускается полностью вручную.
Это хорошо, что можно подписаться через меню. Но это явный косяк в API.
Параметр Тип Описание money_open_limit NUMBER Входящий лимит по денежным средствам money_limit_locked_nonmarginal_value NUMBER Стоимость немаржинальных бумаг в заявках на покупку money_limit_locked NUMBER Заблокированное в заявках на покупку количество денежных средств money_open_balance NUMBER Входящий остаток по денежным средствам money_current_limit NUMBER Текущий лимит по денежным средствам money_current_balance NUMBER Текущий остаток по денежным средствам money_limit_available NUMBER Доступное количество денежных средств
Вызвал функцию getMoney() - она вернула условно следующие значения:
Там где нули пока что не интересует, там, где 1000 руб - функия вернула корректно, при условии, что у меня не было открытых позиций.
Я специально купил одну акцию и стоиомсть портфеля начала соовтевтнно изменятся, но при вызове getMoney() - возвращается все та же - 1000. Я закрыл сделку - стоимость изменилась - условно стала 998, но при вызове getMoney() - возвращается все та же - 1000.
Это так и должно быть ? Если да, то, как тогда получить кол-во доступных средств на конкретный данный момент в который вызвается getMoney() ? Под доступными средвами я имею ввиду, если у меня была 1000 на счете, я купил одну какую то акцию по 100 рублей - дсотупно мне стало 900, вот как эти 900 получить ?
выставили заявку - получили колбек. OnMoneyLimit ------------------ заявка исполнилась и акции Вам зачислили - сначала колбек OnDepoLimit, а потом OnMoneyLimit. ============= если прочитаете таблицы раньше, то в ничего не изменится, так как еще не пришла информация.
Quikos написал: Кто встречался с такой ситуацией ?
Заказываю тики через CreateDataSource:SetUpdateCallback().
Запускаю Квик: -Загружаю скрипт. -Запускаю скрипт. -Скрипт вызывает CreateDataSource. -CreateDataSource возвращает нулевую таблицу, что говорит о том, что данные придут позже в колбек. -Колбек больше НИКОГДА не вызывается.
Выгружаю Скрипт и СРАЗУ же его запускаю - данные сразу же начинают приходить.
Кто косячит ? Я или криворукие разрабы ?
Скрипт запускаете руками или автоматом с запуском квика? Если автоматом, то в скрипте надо делать ожидание. ---------------- Проще, если вам нужны тики, то просто подпишитесь на них через меню и они будут приходить при старте квика без проблем.
СергейК написал: FYI проблема осталась и ситуация немного изменилась. Раньше она проявлялась, если в этот день были сделки и менялся сервер подключения. Сейчас у Открытия остался только 1 сервер. И если сегодня были сделки, то при повторном соединении звук сделки проигрывается всегда. Т.е. это не потому, что сделки произошли за то время, когда соединения не было (заявок уже нет), а повтор старых.
при повторном соединение обновляется информация за текущий день. снова приходят данные о заявках и сделках. играет музыка, все встают, звучит трехкратное ура.
Quikos написал: Подскажите, после разрыва соединения, есть ли функция, которая опять начнет установку соединения ?
если установлен флаг "Восстановить связь автоматически", то квик начнет восстановление связи. Проблема будет в диалоге идентификации и ввода кода с телефона.
определить торговый или не торговый день, а также есть ли догружаемые записи (это для тех кого волнует все или не все в таблицах свечей и обезличенных сделок) можно по параметрам информационного окна.
Quikos написал: У функции getMoney() - какие то не понятные параметры, которая она принимает:
из примера:
Цитата
-- Параметры для запроса берутся из таблицы "Лимиты по дененым средствам" -- client_code = "Код клиента" -- firmid = "Фирма" -- tag = "Группа" -- currcode = "Валюта"
У меня в таблице лимиты по денежным средствам - из перечисленного есть только код клиента, который я естественно и так знаю. Все остальное вообще не понятно ничего.
Что за фирма ? Что за группа ? Кармен или машина времени ? Валюта ?? Что валюта ? Рубли? Так и писать РУБЛИ ??
Для кого это описание написано ? Для ясновидящих ? А зачем оно им ?
надо смотреть описание таблиц в документации QLua например, Позиции по деньгам
Описание параметров таблицы «Позиции по деньгам»:
Параметр
Тип
Описание
currcode
STRING
Код валюты
tag
STRING
Код позиции
firmid
STRING
Идентификатор фирмы
client_code
STRING
Код клиента
openbal
NUMBER
Входящий остаток
openlimit
NUMBER
Входящий лимит
currentbal
NUMBER
Текущий остаток
currentlimit
NUMBER
Текущий лимит
locked
NUMBER
Заблокировано. Сумма средств, заблокированных под исполнение заявок клиента
locked_value_coef
NUMBER
Стоимость активов в заявках на покупку немаржинальных инструментов
locked_margin_value
NUMBER
Стоимость активов в заявках на покупку маржинальных инструментов
leverage
NUMBER
Плечо
limit_kind
NUMBER
Срок расчётов. Возможные значения:
положительные целые числа, начиная с «0», соответствующие срокам расчётов из таблицы «Позиции по деньгам»: «0» – T0, «1» – T1, «2» – T2 и т.д.;
отрицательные целые числа – технологические лимиты (используются для внутренней работы системы QUIK)
Kolossi написал: Quikos, если я поставлю заявку на покупку и она в итоге сработает, а потом куплю выставленную кем-то на продажу, т.е. совершу две покупки - одну лимитную, одну по рынку, то в ленте сделок эти две сделки будут обозначены одна как "покупка" другая как "продажа". Потому что в любой сделке присутствует и покупка и продажа в равных долях, а в ленте отражается та часть сделки которая "по рынку". Как-то так.
расскажу немного иначе. -------------------------- Если заявка стоит в стакане т е зарегистрирована в очереди на сделку, то сделка по ней совершится лишь тогда, когда ее цена станет лучшей на рынке. и появится встречная заявка по лучшей цене, т е заявка по рыночной цене. --------------------- Появившаяся встречная заявка и будет инициатором сделки. и ее направление (купить/продать) будет отмечено в таблице обезличенных сделок. ------------------- Можно сказать, что сделка называется по направлению заявки, которая двигает рынок. ---------------- Поэтому есть такое выражение "рынок двигают заявки по рыночной цене" --------------- Очевидно, что заявка на покупку двигает рынок вверх, а на продажу -вниз.
Kolossi написал: Тут не соглашусь. Я практически не пользуюсь индикаторами после десятка лет экспериментов. Не буду сейчас освещать причины. Но использую ряд параметров которые делают расчет "от текущего времени назад" Например "изменение объема за последние пять минут" или "скорость изменения спроса/предложения за последний час. Для этого не подходят пятиминутные или часовые свечи. Повторю свой вопрос: как узнать что тиковая база получила все исторические данные и идет прием текущих. По первому onAllTrade?
Полагаю, что решить Вашу задачу для оценки изменения параметров на интервале в 5 минут вполне хватило бы и 1 минутных свечей.
Вы серьезно это предлагаете? Вычисления с точностью +/- 20% ? Спасибо, не надо )) Но. Если мне еще расскажете как получить значение количества сделок "по рынку" не используя ленту сделок я обещаю подумать.
P.S. Только про начинающих и циклы притормозите, перебор слегка.
Я не заставляю Вас что-то делать иначе, просто рассказал Вам свой опыт решения проблем при создании систем РВ для обработки данных. -------------------------- Например, могу вычислить по тикам любые параметры без циклов назад, результат вычисления параметра на текущий момент, вне зависимости от длины истории, всегда готов не более, чем через 0.001 секунду. ---------------------------------------- Относительно Вашего утверждения о точности +-20% , оно голословное. --------------------------------- Если нет, то покажите результаты теста и я с Вами соглашусь.
не мог понять, почему Вас волнует кончили заполнять таблицу или нет. Но последнее сообщение о расчете изменения параметров взад внесло ясность. --------------------- поясняю почему. проблема в том , что для расчета параметров большинство из посетителей этого форума использует цикл назад в историю. К сожалению это классическая ошибка в построении систем реального времени , к которым относятся торговые роботы, большинства пишущих и не только начинающих. ----------------- Ранее говорил, что циклы в таких системах - это очень плохо. Если вы научитесь мыслить (писать свои алгоритмы без таких циклов) то Вас не будет волновать когда же все данные поступят.
Для тиков проблема решается просто. Есть два варианта приема данных В первом случае принимаем всю таблицу от начала до текущей Во втором принимаются пропущенные данные. ----------------- В обоих случаях проверяем время либо номер принятой колбеком сделки и сравниваем его с последним в таблице и текущим временем сервера
nikolz написал: но с тиками проблема в том, что они уж точно придут пакетом сразу куча сделок и все в один текущий момент физически терминал будет перелопачивать "вчерашний день", так как куча сделок уже прошла. Полагаю что тики как правило пытаются использовать начинающие, но реально они имеют ценность лишь в HFT и в дата центре и скорее всего не в терминале КВИК.
Тут не соглашусь. Я не практически не пользуюсь индикаторами после десятка лет экспериментов. Не буду сейчас освещать причины. Но использую ряд параметров которые делают расчет "от текущего времени назад" Например "изменение объема за последние пять минут" или "скорость изменения спроса/предложения за последний час. Для этого не подходят пятиминутные или часовые свечи. Повторю свой вопрос: как узнать что тиковая база получила все исторические данные и идет прием текущих. По первому onAllTrade?
Полагаю, что решить Вашу задачу для оценки изменения параметров на интервале в 5 минут вполне хватило бы и 1 минутных свечей. Но спорить не буду, Ваше право считать по тикам.
но с тиками проблема в том, что они уж точно придут пакетом сразу куча сделок и все в один текущий момент физически терминал будет перелопачивать "вчерашний день", так как куча сделок уже прошла. Полагаю что тики как правило пытаются использовать начинающие, но реально они имеют ценность лишь в HFT и в дата центре и скорее всего не в терминале КВИК.
nikolz написал: Если Вам очень важно знать все ли свечи Вы приняли, то просто проверьте дату и время последней и сравните с текущем временем и датой.
nikolz, а как для ds с тиковым интервалом?
Тики, если не ошибаюсь, это таблица обезличенных сделок. С ними проще работать используя колбек onAllTrade. Можно также использовать дату время сделки, и дату время сервера ну и текущую дату время.
Mikhail написал: Да понятное дело, что при наличии промежуточных колонок все работает. Я так и не понял баг это квика или моего скрипта или я в мануале что-то пропустил? Так мы привыкнем подгонять свои скрипты каждый раз под новые баги новых версий квиков. На то, чтобы выяснить причину вылета у меня ушло часа 4. А дальше что? "Доколе?"
я хотел бы Вам заметить, что делать так: for k=1,15 do SetColor(t_id, k, row_color, RGB(0,255,0), RGB(0,0,0), RGB(255,255,255), RGB(0,0,0))--Crash here end для таблице в которой Вы определили лишь 0 и 15 столбец не корректно. Предполагаю, что разработчики не учли слишком низкий уровень пользователей и не установили защиту от ... которой в природе не существует
Quikos написал: Подскажите пожалуйста, когда я запрашиваю таблицу исторических свечей через CreateDataSource, то таблица сразу приходит заполненная окончательным размером или размер меняется по мере заполнения ?
Теоретически таблица сразу должна заполнится итоговым размером. Правильно ?
Нет. Начнем опять от печки. Сервер посылает терминалу квик(клиенту) запрошенные данные пакетами. Когда терминал принимает пакет данных он начинает их раскладывать по архивам(таблицам). Вы запросили свечи . сервер послал вам столько, сколько уместилось в пакет. Терминал вытаскивает по одной из пакета и кладет их в таблицу, при этом в Size вы получите текущее число элементов в таблице. ---------------- Если Вы принимаете свечи через колбек, то номер свечи будет равен номеру последней вытащенной терминалом. Иначе может быть так, что Вы получите результат лишь после того как терминал разберет весь пакет. ----------------- если число свечей много и все они не уместились в стандартный пакет , то сервер может посылать их несколькими пакетами и тогда терминал будет принимать их также несколько раз. в итоге Вы можете получить несколько значений size. ----------------------------------- Но так скорее всего не будет, либо будет пр первом подключении к серверу. --------------------- Если Вам очень важно знать все ли свечи Вы приняли, то просто проверьте дату и время последней и сравните с текущем временем и датой.
Айдар написал: Допустим, крайняя сделка была по цене ask - в данном случае цена поднялась вверх. Но может ли такое быть, что если далее сделка тоже по ask - но цена опустилась вниз? При просмотре сохраненных данных иногда выявляются такие моменты. Вот хочу понять, или у меня в коде косяк или что-то другое
Может. Все банально просто. Вам присылают не все стаканы и не все Last в TTT. ------------------------ Посмотрите эту ситуацию в таблице обезличенных сделок. Там должны быть все сделки.
Mikhail написал: Да понятное дело, что при наличии промежуточных колонок все работает. Я так и не понял баг это квика или моего скрипта или я в мануале что-то пропустил? Так мы привыкнем подгонять свои скрипты каждый раз под новые баги новых версий квиков. На то, чтобы выяснить причину вылета у меня ушло часа 4. А дальше что? "Доколе?"
вообще-то этот вылет уже был на форуме и я дал точно такое же решение. предполагаю причина банальна. Так как квик вылетает, то это не учтенная изначально разработчиками QLUA особенность VMLua. Но проявилась она на 9 версии, потому что в этой версии что-то радикально изменили.
Mikhail написал: Вот такой код вызывает краш Квика версии 9.7.1.10 (в версии 8.13 все было ок) после остановки работы скрипта и закрытия созданного им окна. Предыстория - в связи с настойчивой рекомендацией БКС обновил квик. Пр запуске моего скрипта на новой версии Квик стал вылетать. Стал разбираться - и вот. Суть в том, что если имеется пропущенная колонка (переменная row_color=15 а не 1) то при остановке скрипта происходит вылет квика. Если поставить row_color=1 то все работает ок.
Код
function main ()
is_run = true
row_color = 15
t_id = AllocTable ()
AddColumn (t_id, 0 , "0" , true , QTABLE_STRING_TYPE, 15 )
AddColumn (t_id, row_color, tostring(row_color), true , QTABLE_STRING_TYPE, 11 )
t = CreateWindow (t_id)
SetWindowPos (t_id, 0 , 0 , 500 , 500 )
for i = 1 , 15 do
InsertRow (t_id, i)
end
for k = 1 , 15 do
SetCell (t_id, k, 0 , tostring(k))
end
while is_run do
for k = 1 , 15 do
SetColor (t_id, k, row_color, RGB ( 0 , 255 , 0 ), RGB ( 0 , 0 , 0 ), RGB ( 255 , 255 , 255 ), RGB ( 0 , 0 , 0 )) --Crash here
end
sleep ( 500 )
end
end
добавьте строку так:
Код
function main()
is_run=true
row_color=15
t_id = AllocTable()
for i=0,15 do AddColumn (t_id,i, "", false, QTABLE_STRING_TYPE,8) end -- добавили
AddColumn(t_id, 0, "0", true, QTABLE_STRING_TYPE, 15)
JIMB, Не в обиду будет сказано, но Ваш вопрос очень не конкретный и очень наивный. Посмотреть котировки это не тоже самое что посмотреть оборот торгов за 15 лет. ------------------------------ Но даже если вы и посмотрите то что в этом толку? ----------------------- Вы как собираетесь отлаживать свой алгоритм торговли на истории в 15 лет? И предположу еще и на тиках. ----------------------- Вы для начала посмотрите какие есть торговые платформы которые позволяют отлаживать алгоритм. Сколько они стоят и что на них конкретно кто-либо разработал. ----------------------------- И поймете, ответ на свой вопрос.
Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?, Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?
если Вы не догнали, то вот копия моего ответа на ваш вопрос темы: --------------- Если у брокера есть ваши деньги либо активы колбеки будут при загрузке и обновлении экрана. Ну а если ничего нет, то на экране тоже все пусто. ------------------------- Я Вам уже сказал что данные приходят самые свежие. Если Вы уже купили что-то то это уже есть в таблице а таблица всегда придет вся никто не станет вам посылать по кусочкам.
Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?, Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?
Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?, Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?
Рустем написал: После перезапуска терминала, если автозапускается скрипт, то ф-я getNumberOf("futures_client_holding") выдет 0, хотя на эккаунте есть позиции.Есть какой-то способ проверить, что все данные пользоватьеля подгузились ?
вообще-то я для Вас написал и скопировал из документации. ------------------------ Я ответил на ваш вопрос, который вы задали в начале темы. -------------- После перезапуска терминала, если автозапускается скрипт, то ф-я getNumberOf("futures_client_holding") выдет 0, хотя на эккаунте есть позиции. Есть какой-то способ проверить, что все данные пользоватьеля подгузились ? ------------------ Теперь Вы изменили свой вопрос и с претензиями что Вам на него не ответили. -------------------- прикольно, что вам помогают, а вы с претензиями что не врубаетесь и виновато зеркало.
Nikolay написал: Если надо обработать много (много) в цикле, то да. В обычной практике - это просто дело вкуса и привычки.
Код
local k = 10local s = 100
for i = 1 , 10000000 do
k, s = math.max (k, s), math.min (k, s)
k, s = k * i, s * i
k, s = math.min (k, s), math.max (k, s)
end
[Done] exited with code=0 in 2.068 seconds
Код
local math_max = math.max
local math_min = math.min
local k = 10
local s = 100
for i = 1 , 10000000 do
k, s = math_max(k, s), math_min(k, s)
k, s = k * i, s * i
k, s = math_min(k, s), math_max(k, s)
end
[Done] exited with code=0 in 1.597 seconds
этот пример очень плохой результат его запуска показывает что ускорение всего в 1.5 раза. ----------- в этом тесте много накладных расходов не связанных с данным вопросом. если же интересует именно присвоение функции локальной переменной то надо делать лишь эти функции т е сравнивать k, s = math.max (k, s), math.min (k, s) и k, s = math_max(k, s), math_min(k, s) ------------------- в этом случае получаем 0.6 мкс и 0.2 мкс т е 3 раза