Виктор Столетов написал: Можно ли в Lua получить доступ к свечам открытого интереса, например к закрытию C?
Да это возможно. Доступ происходит по тому же принципу что и к графику цены и объема. Если через getCandlesByIndex, то на нужном графике надо указать идентификатор. Если через CreateDataSource, то в четвертом параметре надо указать имя параметра, для открытого интереса это "numcontracts"
тестовый квик не учитывает размер лота в getDepoEx и OnDepoLimit
Nikolay написал: Не уверен, что есть ошибки, т.к. если убрать обработку ожидания while trans_Status == nil do sleep(1) end, то все работает.
Больше интересует вопрос что именно "работает"? Т.е. заявка по факту ставится или нет? В качестве примера, сообщите точное время (по МСК) когда была попытка выставить такую заявку.
Заявки не были исполнены по непонятной причине, ошибка в работе демо-версии
Пользователь
Сообщений: Регистрация: 23.01.2015
19.02.2018 04:46:45
Ilya, Здравствуйте, К сожалению, пока новой информации нет.
Чтение данных из файла
Пользователь
Сообщений: Регистрация: 23.01.2015
19.02.2018 04:39:29
Цитата
Андрей Пахомов написал: Мне важно знать что будет работать быстрее: file:seek (cur,2) или file:read() ?
У нас нет ответа на этот вопрос. Проведите тестирование и сравните результаты.
Проверьте в таблице транзакций терминала QUIK нет ли ошибки при отправке транзакций. Дело в том что рыночные заявки на покупку могут быть запрещены. Если так то в таблице транзакций Вы увидите сообщение об этом. Сообщите Ваш UID чтобы мы могли проверить права.
Чтение данных из файла
Пользователь
Сообщений: Регистрация: 23.01.2015
16.02.2018 05:15:34
Цитата
Андрей Пахомов написал: MySec[i..'']['SCod'] = file :read(6)
Судя по скриншоту у Вас там явно не 6 символов, а больше. Может 7?
и InsertRow Вы используете не правильно. надо так:
Может быть в лотах, может быть в штуках. Каждый брокер настраивает на свое усмотрение.
тестовый квик не учитывает размер лота в getDepoEx и OnDepoLimit
Пользователь
Сообщений: Регистрация: 23.01.2015
15.02.2018 10:57:48
electron, О каком тестовом сервере идет речь? Если это сервер Вашего брокера то вопрос к брокеру. Если это наш джуниор, то мы не будем менять настройки т.к. разных брокеров много и у каждого могут быть свои настройки, а джуниор один на всех.
тестовый квик не учитывает размер лота в getDepoEx и OnDepoLimit
Пользователь
Сообщений: Регистрация: 23.01.2015
15.02.2018 10:48:52
Здравствуйте Разные серверы, разные настройки. ничего удивительного.
CreateDataSource, не грузятся данные при формир. через CreateDataSource
Алгоритм скрипта по разному отрабатывает в режиме отладчика и автономно
Пользователь
Сообщений: Регистрация: 23.01.2015
14.02.2018 05:07:51
Артем, Здравствуйте, Для анализа нужен полный код портфеля. QPILE признан нами устаревшим и мы уже давно его не развиваем. Так что если Вы только начинаете программировать в QUIK лучше сразу начинать с QLUA Документация лежит в отдельном файле QLUA.chm в папке с терминалом.
Неверная дата и время, Стандартные функции Lua возвращают неверное время сервера
Пользователь
Сообщений: Регистрация: 23.01.2015
12.02.2018 13:57:15
К слову, в терминале версии 7.16 добавлена функция os.sysdate, позволяющая получить локальное время с точностью до микросекунд.
Неверная дата и время, Стандартные функции Lua возвращают неверное время сервера
Пользователь
Сообщений: Регистрация: 23.01.2015
12.02.2018 13:37:20
Цитата
Иван Ру написал: Нееет... эта функция возвращает время по Гринвичу, которое не совпадает с локальным временем компьютера и с временем сервера.
Попробуйте выделить две функции под разные параметры
Код
dofile ("C:\\Program Files\\Lua\\5.1\\lua\\ATR.lua")--ATR
ds_v = CreateDataSource(instr[k].v_class,instr[k].v_sec,INTERVAL_D1)
ds_v:SetEmptyCallback()
sleep(1000)
func1 = ATR()
func2 = ATR()
candles=ds_v:Size() --до этого места доходит и выдаёт количество свечей
long_v={}
short_v={}
for i=1,candles do
long_v[i]=func1(candles, {Period=252}, ds_v)
short_v[i]=func2(candles, {Period=5}, ds_v)
end
К слову, ATR не вернет данных если номер свечки меньше чем заданный период (по умолчанию 14) Т.е. если у Вас период 14, то первые 14 значений будут nil и это нормально.
Отображение изменения цены в проц
Пользователь
Сообщений: Регистрация: 23.01.2015
12.02.2018 11:16:09
Неверная дата и время, Стандартные функции Lua возвращают неверное время сервера
Пользователь
Сообщений: Регистрация: 23.01.2015
12.02.2018 10:24:33
если надо в виде таблицы, тогда так: local Ttime = os.date("!*t",os.time())
Неверная дата и время, Стандартные функции Lua возвращают неверное время сервера
А что Вы хотите получить? Если Дату/Время Вашего компьютера, то есть штатная Lua функция os.date()
QLUA, вопросы начинающих.
Пользователь
Сообщений: Регистрация: 23.01.2015
12.02.2018 10:03:41
Арсений, Здравствуйте, Есть целая куча причин. Существуют разные ограничения со стороны биржи. Например нельзя указывать слишком маленькую или слишком большую цену. Или слишком часто подавать транзакции или еще много чего. Это описано биржевых правилах торгов. Еще Ваш брокер может настроить какие-нибудь ограничения. Это следует уточнить у брокера. В связи с чем, всегда лучше всего сообщить текст ошибки которая возникает при неудачном выставлении.
Получать график один раз в день
Пользователь
Сообщений: Регистрация: 23.01.2015
12.02.2018 09:36:31
Цитата
Let_it_go написал: 1. Если я воспользуюсь ds[sec]:Close(), чтобы отписаться от дневок, он случайно не отпишет меня от минуток?
Если Вы вызовите Close для потока с дневным интервалом, то он закроет поток с дневным интервалом.
Цитата
Let_it_go написал: 2. По графику, где мне нужны раз в день дневки, я заказываю минутки на постоянной основе. Будет ли КВИК делать лишнюю работу, если я буду всё время обновлять дневки (не отпишусь от них), или в данном случае этой лишней работой можно пренебречь?
этой лишней работой можно пренебречь
Неверная дата и время, Стандартные функции Lua возвращают неверное время сервера
Время в сообщениях, это время Вашего компьютера. SERVERTIME это время сервера. И эти времена совершенно не обязаны совпадать. Никто кроме Вас не может гарантировать что время на Вашем компьютере синхронизировано с компьютером брокера.
TRADEDATE показывает дату торговой сессии. Это не тоже самое что астрономическая дата. Дата торговой сессии это дата когда проводились торги. Последний раз они проводились в пятницу, 9-го числа.
Получать график один раз в день
Пользователь
Сообщений: Регистрация: 23.01.2015
12.02.2018 06:03:37
Let_it_go, Чтобы заказать графики нужно вызвать CreateDataSource с SetEmptyCallback Когда график уже не нужен просто вызовите ds:Close()
Не приходят данные по обезличенным сделкам, версия 7.16.1.36, тестовый сервер
Lua не будет получать данные если они не заказаны. И это правильное поведение. Если раньше оно работало, значит либо раньше заказ все-таки происходил, либо это была какая-то ошибка.
Заказать данные по обезличенным сделкам через сам Lua можно функцией CreateDataSource с параметром INTERVAL_TICK, и последующей установкой коблека SetEmptyCallback или SetUpdateCallback. Если нужно заказать данные по параметрам текущих торгов, то это делается функцией ParamRequest Если нужно заказать данные по стаканам, то это делается функцией Subscribe_Level_II_Quotes
Ошибка после обновление Windows, Как исправить ошибку , после обновления системы Windows
Пользователь
Сообщений: Регистрация: 23.01.2015
07.02.2018 14:45:39
Цитата
_sk_ написал: Разработчикам пора в дистрибутив терминала включить вот такой bat-файл,
Во первых, брокер сам формирует дистрибутив для своих клиентов, так как сам посчитает нужным. Во вторых, в терминале QUIK есть команда запуска -clear Подробнее о нем в документации -Раздел 1. Подготовка к работе ---Ключи запуска Рабочего места QUIK
Как получить данные с индикатора на графике?, Как получить данные с индикатора ADX на графике?
Пользователь
Сообщений: Регистрация: 23.01.2015
05.02.2018 14:33:59
Александр, В самой функции getCandlesByIndex в параметре line Вам нужно указать номер нужной линии.
Вы новых версиях Квика INIT в индикаторах появляется только один раз
Пользователь
Сообщений: Регистрация: 23.01.2015
05.02.2018 09:59:39
Цитата
kbrobot.ru написал: или перезапуске Квика - инит не вызывается
Это действительно так. И соответствует документации. Можем предложить зарегистрировать пожелание на добавление функционала.
Принимаю из стека пустое значение, Программирование на Lua C++
Пользователь
Сообщений: Регистрация: 23.01.2015
01.02.2018 05:11:19
Илья, Если проблема в С++ то увы помочь ничем не можем т.к. вопрос вне нашей сферы ответственности. Только вопросы касающиеся непосредственно QUIK.
По коду QLUA как минимум видно что Вы опять совершаете ту же самую ошибку что мы уже с Вами Еще раз повторяем OnQuote() срабатывает сам по себе при изменении любых стаканов. У Вас же при любом изменении стаканов по любым инструментам, вызывается getQuoteLevel2 по сбербанку. Например, изменился стакан по лукойлу, а Вы дергаете данные по сбербанку. Это уже само по себе не логично и не правильно. Решение уже было озвучено и еще раз повторим, надо добавить проверку инструмента в событии.
Либо если с пониманием колбеков проблемы, вообще избавиться от OnQuote. Раз Вам так надо дергать стакан в цикле, так и делайте, никто не запрещает.
В стакан попадают странные значения, Работа со стаканом из Lua
Пользователь
Сообщений: Регистрация: 23.01.2015
31.01.2018 14:08:33
Илья, Таблица "Состояние счета" никакого отношения к стаканам не имеет. Ищите лучше. Либо у Вас все-таки где-то открыты стаканы по другим инструментам (посмотреть в меню Окна - Менеджер окон) Либо у Вас настроен экспорт стаканов по ODBC (посмотреть в меню Сервисы - Экспорт/Импорт данных - Экспорт инструментов по ODBC) Либо запущен какой-то Lua скрипт который заказывает стакан функцией Subscribe_Level_II_Quotes
Если Вы считаете что всё сказанное для Вас не верно, пришлите нам на quiksupport@arqatech.com папку с терминалом (без ключей доступа) мы проверим.
В стакан попадают странные значения, Работа со стаканом из Lua
Пользователь
Сообщений: Регистрация: 23.01.2015
31.01.2018 13:43:55
Цитата
Илья написал: Но все еще не понял - почему функция вызывается по СЛУЧАЙНОМУ стакану, вместо того который открыт или по нескольким если открыты несколько или не возвращает ноль если стаканы закрыты все?
Функция срабатывает при поступлении данных по любому заказанному стакану в любом порядке. Т.е. все в одну кучу. Далее программист сам фильтрует то что ему надо. Раз функция OnQuote у Вас срабатывает по не нужному инструменту, значит где то у Вас заказан стакан по этому инструменту. Заказ данных происходит либо при открытии стакана, либо при экспорте по ODBC, либо через скрипт LUA. Если заказано 10 стаканов по разным инструментам, значит OnQuote будет срабатывать по 10 разным инструментам и не важно кто и как их заказал.
Снятие всех заявок в Lua, Какой брать параметр trans_id?
Пользователь
Сообщений: Регистрация: 23.01.2015
31.01.2018 13:15:49
Цитата
Constantin написал: А номер транзакции должен быть уникальным или не обязательно? Если, например, запускаются несколько роботов и они нумеруют свои транзакции с единицы.
TRANS_ID может быть любым. уникальным или нет, всё равно, решать Вам. Можете во всех транзакциях указывать 123 и оно будет работать. Для удобства может в разных роботах указать разное значение. Чтобы определять какой робот подал транзакцию.
В стакан попадают странные значения, Работа со стаканом из Lua
Пользователь
Сообщений: Регистрация: 23.01.2015
31.01.2018 13:07:50
Илья, терминал сам вызывает функцию OnQuote при изменении данных по стакану. В этом сама суть колбеков. И от того что Вы сами вызовите функцию OnQuote, терминал от этого не перестанет ее вызывать. Вот и получается что терминал вызывает функцию по стакану который Вы не ожидаете. Чтобы этого избежать надо добавить фильтр.
В стакан попадают странные значения, Работа со стаканом из Lua
Пользователь
Сообщений: Регистрация: 23.01.2015
31.01.2018 12:56:34
Цитата
Илья написал: Прошу, поясните - это баг, это фича, или это у меня руки кривые ?
Исправьте код так:
Код
function main()
is_run=true;
while is_run == true do
sleep(2000);
end
end;
function OnQuote(class, sec)
if (class == "TQBR") and (sec == "SBER") then
tb = getQuoteLevel2(class, sec);
message(tostring(tb.offer[1].price));
end
end
Снятие всех заявок в Lua, Какой брать параметр trans_id?
Пользователь
Сообщений: Регистрация: 23.01.2015
31.01.2018 04:53:49
Виктор Столетов, Просьба больше никогда не выкладывать код в виде JPEG. Для кода в панели есть специальная кнопка Например:
Код
function Close_all_order()
function myFind(F)
return (bit.band(F, 0x1) ~= 0)
end
local ord = "orders"
local orders = SearchItems(ord, 0, getNumberOf(ord)-1, myFind, "flags")
if (orders ~= nil) and (#orders > 0) then
for i=1,#orders do
local transaction={
TRANS_ID=tostring(1000*os.clock()),
ACTION="KILL_ORDER",
CLASSCODE=c_code,
SECCODE=getItem(ord,orders[i]).sec_code,
ORDER_KEY=tostring(getItem(ord,orders[i]).order_num)
}
local res=sendTransaction(transaction)
end
end
end
getMoney возвращает только лимит вида Т0 Вам же нужен другой вид лимита. Посмотрите в таблице лимитов, в колонке "Вид лимита" что на самом деле Вам нужно. Для остальных видов лимитов, существует отдельная функция getMoneyEx.
Снятие всех заявок в Lua, Какой брать параметр trans_id?
Пользователь
Сообщений: Регистрация: 23.01.2015
30.01.2018 05:14:33
Цитата
Виктор Столетов написал: И все же я не совсем понимаю, как работает функция снятия всех заявок
Что именно не понятно?
Цитата
Виктор Столетов написал: Почему например в операторе local ord = "orders" стоит "orders", а не "order"?
При обращении к данным таблицы используются константы которые приведены в документации -Функции для обращения к строкам произвольных таблиц QUIK --Таблицы, используемые в функциях «getItem», «getNumberOf» и «SearchItems»
и там таблица заявок называется "orders".
Вы новых версиях Квика INIT в индикаторах появляется только один раз
Пользователь
Сообщений: Регистрация: 23.01.2015
30.01.2018 05:10:29
Цитата
Eldar написал: если я изменю настройки индикатора, то в любом случае он будет пересчитываться весь с первой свечи! так зачем событие? при изменении не будет входа в функцию Init. ну этого мы избежим и грамотнее код напишем.
На вопрос "зачем" уже был дан ответ. Если Вам не нужно использовать OnChangeSettings просто не используйте. Еще раз повторять одно и тоже не вижу смысла.
Цитата
Eldar написал: я добавляю индикатор на график. есть начальные настройки, которые указываю. так и нужно. но например я открываю настройку области на графике и хочу изменить какие либо настройки самой области (например убрать сетку) или меняю области местами, а индикаторы пересчитываются. вот именно в данном случае не стоит все пересчитывать. или например я поменял цвет линии!! и тут не нужно пересчитывать индикатор.
В текущей реализации нет никакого способа отличить те настройки "где надо делать перерасчет" от тех "где не надо", по этому перерасчет делается всегда.
Вы новых версиях Квика INIT в индикаторах появляется только один раз
Пользователь
Сообщений: Регистрация: 23.01.2015
29.01.2018 13:22:02
Цитата
Eldar написал: вы указываете на график с 1 свечой - что это за график такой мегауникальный.
например месячный но новому фьючерсу.
Цитата
Eldar написал: если я изменяю настройки индикатора, то и весь индикатор пересчитывается с новыми настройками и без надобности событие по изменению.
Не нравится не используйте, никто не заставляет.
Цитата
Eldar написал: вот ЕСЛИ бы при изменении не происходил обязательный перерасчет с 1 свечи
Простите, т.е. по сути Вы хотите чтобы настройки индикатора вообще не работали? Тогда зачем они вообще нужны, удалите из кода и все.
Цитата
Eldar написал: либо со свечи, в которой поменялись настроки, пошел пересчет с новыми настройками. тогда логично и правильно.
Вы хотите получить винегрет на графике? такого никогда не будет.
Вы новых версиях Квика INIT в индикаторах появляется только один раз
Sergey Gorokhov написал: если на графике всего одна свечка то постоянно будет сыпать 1. Как отличить? Никак, именно по этой причине мы создали OnChangeSettings.
64-битная версия QUIK
Пользователь
Сообщений: Регистрация: 23.01.2015
29.01.2018 05:11:18
Здравствуйте, 64 битая версия терминала, в ближайшем будущем не планируется.
Снятие всех заявок в Lua, Какой брать параметр trans_id?
Пользователь
Сообщений: Регистрация: 23.01.2015
29.01.2018 05:09:25
Здравствуйте, Команды «KILL_ALL_ORDERS», «KILL_ALL_STOP_ORDERS», «KILL_ALL_NEG_DEALS» не поддерживаются в QLUA.
TRANS_ID - это произвольный номер Вашей транзакции, "снятие заявки" - это тоже транзакция и ей надо придумать номер. Номер может быть любым в диапазоне от «1» до «2 147 483 647»
как поставить айсбер-заявку, как поставить айсбер-заявку
пример транзакции типа "Айсберг-заявка" приведен в документации на терминал QUIK -Раздел 6. Совместная работа с другими приложениями --Импорт транзакций ---Формат .tri-файла с параметрами транзакций ----Примеры строк, которые могут содержаться в файле
Вы новых версиях Квика INIT в индикаторах появляется только один раз
Пользователь
Сообщений: Регистрация: 23.01.2015
26.01.2018 04:39:58
Цитата
Eldar написал: сейчас изменение параметра вызывает пересчет всего индикатора с 1 по текущую свечу. в 7.16 данное изменение не приведет к пересчету?
В 7.16 ничего в этом месте не менялось, только добавилось событие.
Цитата
Eldar написал: изменение параметра будем отлавливать по событию?
вопрос не понятен. Изменили параметр, случился OnChangeSettings, далее все по старому, перерасчет и т.д.
Цитата
Eldar написал: по индикатору из 1 свечи - сравниваем с Size(). хотя как показала практика и общение на форме, Size() это не количество свечек на графике, а количество интервалов.
опять не понятно, это вопрос или утверждение?
Вы новых версиях Квика INIT в индикаторах появляется только один раз
Пользователь
Сообщений: Регистрация: 23.01.2015
25.01.2018 13:56:23
Цитата
Sergey Gorokhov написал: Другой вопрос в том зачем расчитывать
Не договорил. Другой вопрос в том зачем рассчитывать индикатор который имеет всего одну свечку. Но это уже зависит от идеи автора.
Вы новых версиях Квика INIT в индикаторах появляется только один раз
Пользователь
Сообщений: Регистрация: 23.01.2015
25.01.2018 13:44:20
Цитата
Eldar написал: вопрос - если изменили настройки индикатора, разве он не с 1 свечи будет вызывать OnCalculate?
Естественно будет перерасчет с 1. А еще, если на графике всего одна свечка то постоянно будет сыпать 1. Как отличить? Никак, именно по этой причине мы создали OnChangeSettings. Другой вопрос в том зачем расчитывать
Цитата
Eldar написал: где можно почитать описание нового события ?
В документации на терминал 7.16 Цитата от туда
Цитата
OnChangeSettings - Функция вызывается при редактировании свойств индикатора после нажатия кнопок «Применить» или «OK». Функция вызывается также при перезагрузке Рабочего места QUIK и при загрузке wnd-файла либо tab-файла, в которых сохранен график с индикатором
Помогите найти ошибку., После срабатывания стопзаявки
Пользователь
Сообщений: Регистрация: 23.01.2015
25.01.2018 12:30:03
Здравствуйте, Не рекомендуем использовать циклы в колбеках. Т.к. колбеки выполняются в основном потоке терминала, т.е. пока колбек не закончит работу, терминал будет виснуть. Все тяжелые циклы, следует использовать только в main. В самом же колбеке, следует добавить флаг, приводящий к нужным действиям в main Пример
Код
work = false
function OnStopOrder(...)
work = true
end
function main()
...
if work then
...
end
...
end
помогите разобраться с CreateDataSource, QJSIM - unknown class code.
Пользователь
Сообщений: Регистрация: 23.01.2015
25.01.2018 06:28:56
Цитата
Сергей написал: Как посмотреть список возможных и валидных класс кодов?
Здравствуйте, Список доступных кодов классов можно получить через функцию getClassesList Или просто открыть в терминале таблицу текущих торгов и посмотреть (колонка "код класса")
Класс с кодом QJSIM существует только на нашем демо контуре Если Вы используете демо доступ какого-то брокера, то там код класса вполне по честному может быть другим. Либо Вы пытаетесь запросить данные когда наш демо контур не работает
Вы новых версиях Квика INIT в индикаторах появляется только один раз
Пользователь
Сообщений: Регистрация: 23.01.2015
25.01.2018 04:46:06
Здравствуйте, Из описания не понятно ,в "новых версиях" это в каких? В версии 7.16, для корректной обработки изменения настроек индикатора, было добавлено новое событие OnChangeSettings.