Робот это всего лишь автоматизация, его цель делать то же самое, что бы делал трейдер, только быстрее.
Так что ответы очевидны. 1) Робот будет зарабатывать (ну или терять) столько же, сколько зарабатываете вы руками. 2) Стоит, если вы руками умеете зарабатывать, но надоело постоянно торчать за терминалом. 3) Когда робот отлажен, то времени на него уже не тратится. Другой вопрос, что пока пишите, замучаетесь ловить и обходить косяки квика.
Поиск инструмента по названию
Пользователь
Сообщений: Регистрация: 20.12.2020
24.08.2021 16:59:05
Цитата
Виталий написал: Необходимо каждый день находить код обновляемого инструмента. Из данных имеется только лишь его префикс от короткого имени. Обычно делается следующим кодом:
Код
function findSecurity ()
local mdt = 0
local now = os.time ()
local foundcode = ""
for i = 0 , getNumberOf ( "SECURITIES" ) - 1 do
local row = getItem ( "SECURITIES" , i)
if (row.class_code = = "PSAU" ) and ( autolib.CheckAssetName (row.short_name) = = true ) then
--message(row.short_name)
local info = getSecurityInfo (row.class_code, row.code)
if info ~ = nil then
local expdt = strDateToEpoch(info.mat_date)
--message(tostring(info) .. " " .. tostring(expdt) .. " " .. tostring(now))
if expdt > mdt and expdt > now then
mdt = info.mat_date
foundcode = row.code
--message(tostring(info.mat_date) )
end
end
end
end
if foundcode ~ = "" then
autobuyerlib.LogU8 ( string.format ( "Найден инструмент %s" , foundcode))
end
end
Проблема в том, что часто (процентов 20% случаев) запуск кода дает ошибку ACCESS VIOLATION. Есть ли иной способ решить задачу?
Проще надо быть, зачем такой огород городить то?
Код
local sec_list=getClassSecurities(class_code)
for test_sec_code in string.gmatch(sec_list,"("..pref.."[^,]+)") do
-- в test_sec_code инструмент с нужным префиксом, далее ищите по mat_date нужный вам, мне лень писать
end
написал: Добрый день, Могли бы вы уточнить, что вы имеете в виду под "market"
у class TQBR возвращает micex. У SPBXM - nil. У class CETS возвращает nil. Вот и думаю, может, вручную задать этот параметр.
class="CETS" market=get_market(class)
Да не нужны никакие маркеты для торговли. Достаточно class_code и sec_code. Все.
Вам со своим роботом разобраться надо, что за market он там у вас возвращает и главный вопрос нахрена он вашему роботу нужен. Короче смотрите код своего робота и начните с функции get_market
Тестирование стратегий, Возможность тестирования
Пользователь
Сообщений: Регистрация: 20.12.2020
20.08.2021 19:27:59
Цитата
Egor Zaytsev написал: Дело в том,что описание инструментов засылает биржа, после экспирации старый контракт шлюз с биржи уже не получает и транслировать на сервер нечего.
Егор, вы толи прикалываетесь, толи не читали мое сообщение Еще раз прочтите пожалуйста То что вы выше пишете и так очевидно, но вопрос то был же совершенно не об этом.
Цитата
Egor Zaytsev написал: Но брокер может решить Вашу задачу, на стороне сервера QUIK есть решение, которое поможет Вам получать с сервера описание экспирированных фьючерсов
Вы предлагаете запрашивать вручную у брокера данные по инструментам которые и так уже имеются у пользователя и меняться не будут никогда? Если я вас правильно понял, то решение, думаю, рабочее, но ведь не логичное.
Давайте еще раз и медленно 1) В терминале имеются исторические данные по инструментам 2) Обратиться к ним нет возможности 3) Прошу дать возможность работать с этими данными 4) Я даже предложил способ как это сделать
Тестирование стратегий, Возможность тестирования
Пользователь
Сообщений: Регистрация: 20.12.2020
20.08.2021 16:09:42
Цитата
nikolz написал: Вариант 1: Вариант 2: Вариант 3: Вариант 4:
На счет ваших вариантов, вот к чему вы их мне писали? Я же не спрашивал как можно протестировать стратегию, это я и так умею и делаю.
Цитата
nikolz написал: Это лучше и быстрее, чем канючить халяву на этом форуме.
Вы считаете что делать предложение по улучшению функционала ПО это "канючить халяву"?
Но я хочу теститировать в квике на исторических данных, раз уж приходится в нем работать.
Если делать склейки инструментов при экспирации? Данные будут склеиваться, правда имя инструмента будет новое, но исторические данные получить сможете. Или такой вариант не удобен?
Такой вариант очень неудобен.
Может все же рассмотрите озвученное мной предложение?
Каждый при желании может написать свой тестер стратегий. Но на данный момент нет возможности получить доступ к историческим данным, однако исторические данные у многих имеются в папке archives терминала. Разве не логично бы было дать способ доступа к ним?
Ошибки в Qlua - двойной прогон всех индексов через функцию OnCalculate(), При добавлении индикатора на график происходит двойной прогон всех индексов через функцию OnCalculate()
Пользователь
Сообщений: Регистрация: 20.12.2020
19.08.2021 00:02:55
Цитата
vladindre написал: У меня из-за этой фичи пишутся в файл две одинаковые записи , что приводит к дальнейшему слому моего алгоритма чтения/записи. Приходится выкорячиваться и обходить эту фичу всякими нецензурными методами. Зато программерское мастерство сильно хорошо оттачивается.
Как уже сказали, этому косяку уже много лет, и фиксить его разрабы почему-то не желают.
У себя я решил проблему примерно так (упростил и вырезал стратегию)
Код
function OnCalculate(i)
if(sec_code~=getDataSourceInfo().sec_code)or(class_code~=getDataSourceInfo().class_code)or(interval~=getDataSourceInfo().interval)then
lines={} -- Массив со кешем рабочих линий
interval=getDataSourceInfo().interval
sec_code=getDataSourceInfo().sec_code
class_code=getDataSourceInfo().class_code
end
if CandleExist(i) and lines[i]==nil then
-- тут мои вычисления
lines[i]={}
lines[i]["S"]=sell
lines[i]["B"]=buy
end
return lines[i]["S"],lines[i]["B"]
end
В результате индикатор рассчитывается для каждой свечи только один раз, и полностью пересчитывается при смене инструмента или интервала
Тестирование стратегий, Возможность тестирования
Пользователь
Сообщений: Регистрация: 20.12.2020
18.08.2021 19:08:48
Примите еще одно пожелание по тестированию стратегий. Сам тестер стратегий у меня давно написан, но остался вопрос в исторических данных для него.
Так вот хотелось бы иметь возможность работать и историческими данными инструментов утративших актуальность. Поясню. Работаю с фьючерсами, на данный момент актуален SiU1. А мне хочется протестировать мою стратегию на более старых инструментах, например SiH1 и SiM1 Как я понимаю исторические данные по инструментам лежат в терминале в папке archive. У меня например имеются файлы SPBFUT_SiH1_60.dat и SPBFUT_SiM1_60.dat ну и некоторые другие
На данный момент, если я пытаюсь обратиться через CreateDataSource к SiH1, то получаю ошибку "SiH1 - unknown sec code." Так вот хотелось бы иметь возможность обращаться из скрипта к вышедшим из оборота инструментам. Все данные то имеются у меня имеются.
Решение вижу в добавлении необязательного параметра в функцию CreateDataSource, при установке которого данные будут напрямую браться из архивного файла с историческими данными игнорируя запрос инструмента у сервера и не проверяя его актуальность.
Нехватка видеопамяти
Пользователь
Сообщений: Регистрация: 20.12.2020
17.08.2021 17:46:41
Цитата
Владимир написал: Предлагаю радикальное решение проблемы.
Насколько я понимаю, существует некий "регламент работы с клиентами", который обязывает реагировать на замечания и предложения участников форума, но не обязывает их исправлять - достаточно стандартной отписки: "Ваше предложение зарегистрировано", после чего проблема как бы закрыта, и следующее аналогичное или даже тождественное предложение начинает жить своей жизнью, и так по кругу. Мало того: сами сотрудники техподдержки не помнят (или делают вид, что не помнят), что данное предложение уже подавалось. А нужно бы изменить регламент примерно так: 1. Заводится страничка, в которой сидит таблица со всеми предложениями, пронумерованными, прошнурованными, столбцы которое примерно такие: а) Порядковый номер предложения б) Автор (ник) в) Дата подачи предложения (и ссылка на него) г) Содержание предложения (лучше в "приглаженной" форме, убирая эмоции, если они там есть) д) Решение по предложению е) Причина отклонения либо предполагаемая дата реализации ж) Дата фактической реализации либо причина, по которой предложение не было реализовано.
Собрать такую страничку не так уж сложно - например, я сам могу не полениться и денька три посидеть в сообщениях сотруждников техподдержки и вытащить оттуда все посты о регистрации. Да, в конце концов, могу даже у себя на сайте такую таблицу сварганить! И я считаю, что подобное действие в состоянии серьёзно изменить отношения к пожеланиям пользователей: регламент - штука СТРРРРАШНАЯ!
Ну как, господа из техподдержки - регистрируем моё предложение? ::
Предложение у вас правильное и реально хорошее. Вот только готов поспорить, что никто не допустит вас к списку заявок арки.
Помнится ранее были уже предложения дать доступ с списку заявок, отказали. Не желают никому показывать сей секретный список.
Пример торгового робота, Помощь с торговым роботом
Пользователь
Сообщений: Регистрация: 20.12.2020
15.08.2021 20:00:02
Цитата
Игорь написал: , Наверное так правильно да, просто кажется бесконечным. Чем больше узнаешь, понимаешь как много ты еще не знаешь)
Это нормально. Я вот своего писал неделю если не меньше , зато потом еще где-то полгода ловил и исправлял ошибки которых по логике-то и быть не должно. Это у вас еще впереди. Просто учти, что написать робота это несложно, сложно будет заставить его корректно обрабатывать постоянно встречающиеся нестандартные ситуации.
Пример торгового робота, Помощь с торговым роботом
Пользователь
Сообщений: Регистрация: 20.12.2020
15.08.2021 19:48:16
Бегло пробежавшись по коду, сражу же понятно что его не стоит использовать. 1) CreateDataSource нет проверки что он хоть что нибудь вернул 2) SetEmptyCallback не надо вызывать в цикле, одного раза достаточно 3) getInfoParam("SERVERTIME") в нерабочее время может вернуть все что угодно, будете посылать свои заявки в пустоту и ловить ошибки 4) не учтено время клирингов, в которое будете получать от биржи всякий бред, который надо жестко фильтровать 5) С таблицей futures_client_holding тоже не все так просто, она запросто может оказаться например пустая, хотя позиции есть, но еще не прогрузились. Ну или например сделка уже прошла, но колбек задерживается из-за нагрузки сервера и таблица не успела обновиться, в результате получаем некорректные данные. 6) ну про стратегию торговли по SMA тут и говорить не чего
И это только не сильно всматриваясь в код.
Пример торгового робота, Помощь с торговым роботом
Пользователь
Сообщений: Регистрация: 20.12.2020
15.08.2021 19:16:29
Да не стоит брать чужих роботов, бед только хлебнете. Пишите с нуля неспешно, чтобы понимать полностью весь код.
Дело в том, что чистый код робота это по сути-то получил позиции, получил данные на основе которых выдал/не выдал сигнал, после чего и создал заявку и так по кругу Но в реальной торговле это совершенно не жизнеспособно.
А в результате чуть ли ни половина кода робота будет обработка не стандартных ситуаций возникающих при торговле и устранение косяков qlua через разнообразные костыли.
Проблема с открытием ссылки, Не получается открыть ссылку
Пользователь
Сообщений: Регистрация: 20.12.2020
14.08.2021 14:30:53
Цитата
houz написал: Так вот, я пытался использовать LuaSocket:
ВК работает через https А разве LuaSocket умеет HTTPS?
Запуск скриптов lua
Пользователь
Сообщений: Регистрация: 20.12.2020
08.08.2021 09:49:56
Цитата
Владимир написал: Мне не влом утром включить комп, Квик, авторизоваться, запустить скрипт.
Просто не понимаю, зачем делать руками то, что можно легко автоматизировать? Ну вот правда, в чем смысл это все делать руками?
Как-то давно я услышал фразу "Лень двигатель прогресса". И много раз убеждался, что она верна.
QUIK с кракозябами :( Как вылечить?
Пользователь
Сообщений: Регистрация: 20.12.2020
08.08.2021 09:27:59
Сначала выполните рекомендованные настройки от разработчиков. Заходим сюда и находим в разделе документации файл "Инструкция по устранению затруднений, связанных с нечитаемым отображением шрифтов в терминале QUIK для ПК на Windows 10"
Запуск скриптов lua
Пользователь
Сообщений: Регистрация: 20.12.2020
07.08.2021 21:04:35
Цитата
Владимир написал: Самый надёжный способ - не запускать ничего автоматом.
А как же максимальная автоматизация всего и вся?
Цитата
Владимир написал: Я не понимаю, что такое "быть постоянно привязанным к терминалу"
Тут можно только показать что такое быть минимально привязанным к терминалу.
У себя настроил так. Отдельный системник, на котором кроме квика и нескольких служебных утилит ничего нет. При загрузке системы автологин пользователя, при логине пользователя автостарт квика, при старте квика автологин у брокера плюс смски при двухфакторной авторизации принимаю и подставляю тоже автоматом, а после коннекта к брокеру начинает работать торговый скрипт. Обновления винды разрешены по умолчинию, а в период неактивности, что установлен на неторговое время, разрешил перезагружаться при необходимости. При восстановлении питания после отключения электричества машина автоматом включается, хотя беспребойник держит. Ну и каждую ночь бекап файлов настроек квика и скриптов. Плюс всякая мелочевка о которой и упомянать не стоит.
Короче все до чего дотянулись руки автоматизировал.
Полтора года так работаю изредка только что-то допиливая, полет нормальный.
Если в скриптах ничего не меняю, то могу и по неделе в терминал не заглядывать, дольше просто не выдерживаю.
Тиковый график QuikJunior и рабочего Quik
Пользователь
Сообщений: Регистрация: 20.12.2020
05.08.2021 18:43:36
Daniil Pozdnyakov ,а мой пост сможете опровергнуть или подтвердить? Терминалы QuikJunior и Quik это одно и то же или все таки есть отличия?
Тиковый график QuikJunior и рабочего Quik
Пользователь
Сообщений: Регистрация: 20.12.2020
30.07.2021 16:27:27
Цитата
Михаил написал: В связи с этим еще вопрос, планируется ли адаптация QuikJunior под реальные торги
Так нечего адаптировать, QuikJunior и Quik это один и то же терминал, только настройки отличаются. Тут весь вопрос в корректности трансляции данных игрушечного сервера арки.
Отладка QUIK 9.1
Пользователь
Сообщений: Регистрация: 20.12.2020
20.07.2021 20:19:26
Цитата
Артем написал: Тут должно быть немного очевидно что эти файлы делают и зачем они нужны.
Английский я знаю и вполне себе представляю что в randseed.bin и зачем он нужен. Но мой вопрос был совершенно не в этом.
Цитата
Артем написал: Бороться с этим не надо, если вам эти файлы не нужны то просто игнорируйте их.
Почему это не надо бороться? Если программа раскидывает свои логи там где им совершенно не место, то это явно не здоровое поведение.
Цитата
Sergey Gorokhov написал: Проблема изучается. Постараемся в ближайшее время дать ответ.
Очень надеюсь что исправите этот момент, а то мой внутренний перфекционист очень грустит.
Отладка QUIK 9.1
Пользователь
Сообщений: Регистрация: 20.12.2020
19.07.2021 20:50:47
Обновился на 9.1.0.63
И сразу же столкнулся с проблемой. QUIK создает во всех папках где есть *.lua файлы файл qrypto.log с таким содержанием
Вот просто в окне доступные скрипты, выбираю добавить, захожу в папку где есть файлы *.lua и тут же quik в данной папке создает файл qrypto.log
Кто сталкивался? Как это побороть?
Отладка QUIK 9.1
Пользователь
Сообщений: Регистрация: 20.12.2020
15.07.2021 19:07:24
Цитата
Дмитрий написал: Будет работать только у брокеров с версией сервера 9.0+
А можно ли как-то узнать версию сервера у брокера? Ну кроме очевидного позвонить и спросить.
Путь к скриптам Lua
Пользователь
Сообщений: Регистрация: 20.12.2020
12.07.2021 14:31:19
Цитата
TGB написал: Функция опреlеления папки запускаемого скрипта:
Аа чем getScriptPath() не устраивает?
Путь к скриптам Lua
Пользователь
Сообщений: Регистрация: 20.12.2020
11.07.2021 23:29:17
Цитата
Sergey написал: Такое впечатление, что сразу после добавления скрипта к путям, по которым происходит поиск подключаемых скриптов добавляется папка из которой запускается скрипт, а после перезагрузки QUIK в этой папке уже не ищет.
Именно так и происходит, вот на подобную проблему с путями к скриптам.
И этой проблеме, кстати, уже очень много лет... а воз и ныне там.
Путь к скриптам Lua
Пользователь
Сообщений: Регистрация: 20.12.2020
11.07.2021 23:04:29
Sergey, Такая проблема возникает, если загружаемый модуль расположен не в стандартных для скриптов папках, а пути к модулям не прописаны явно, либо прописаны по относительным путям.
Надо корректно прописать package.cpath и/или package.path
Вот вам для примера мой код подгрузки модуля из нестандартного места
Получение признака "Субординированный инструмент" в lua
Пользователь
Сообщений: Регистрация: 20.12.2020
10.07.2021 14:27:55
Цитата
Anton написал: Ссылка протухла, , пару недель проживет
Огромное спасибо. Очень полезная либа Если вам не сложно может откомпилите ее еще и под lua 5.4
Значение индикатора на графике
Пользователь
Сообщений: Регистрация: 20.12.2020
10.07.2021 13:55:51
Цитата
Sergey написал: Может есть обходное решение чтобы смотреть значение индикатора на графике?
Первая ссылка что я привел, пост №4. Но это именно что "обходное" решение
Значение индикатора на графике
Пользователь
Сообщений: Регистрация: 20.12.2020
09.07.2021 19:16:38
Недавно создавал подобную тему ответили что проблема изучается и т.д. Но как оказалось проблеме уже 6 лет и про нее толи забыли, толи забили.
Работа функций OnStop() и SetCell(), Подвисает скрипт
Пользователь
Сообщений: Регистрация: 20.12.2020
08.07.2021 16:46:32
Так же присоединяюсь ко всему этому негодованию.
Еще раз приведу цитату из документации (которую уже тут приводили)
Цитата
Также необходимо иметь в виду, что функция OnStop() выполняется в основном потоке РМ QUIK, и, так как в момент ожидания завершения скрипта (5 секунд) он занимает основной поток РМ QUIK, то другие обработчики событий уже не вызываются, а само РМ QUIK может некоторое время находиться в «подвисшем» состоянии.
Зачем OnStop() вообще занимает основной поток пока ожидается завершение скрипта и не дает выполняться другим функциям в основном потоке? Вот реально зачем это надо??
Достаточно чтобы OnStop() выполнился и передал в QUIK сигнал, что через столько-то миллисекунд требуется завершить принудительно скрипт, если он еще вдруг не завершен. Все. А как корректно завершить свой скрипт, пользователь сам разберется. Не надо нам мешать в этом.
Прошу разработчиков либо объяснить, зачем OnStop() делает то, что от него совершенно не требуется, либо зарегистрировать пожелание на приведение OnStop() к адекватному поведению.
Разрыв соединения Quik
Пользователь
Сообщений: Регистрация: 20.12.2020
06.07.2021 18:57:12
Тут что угодно может быть начиная от проблем с провайдером до пережатого ножкой стула сетевого кабеля. Причем все же больше похоже на проблемы с интернетом, чем с брокерами. Обрывы соединения с интернетом могут быстро восстанавливаться роутером, что вы даже не заметите, а вот связь с брокером успеет разорваться.
Раз у вас входящий кабель приходит сначала в роутер, а уже с него на комп, то роутер никак нельзя исключать из виноватых. Если есть логин и пароль к роутеру, то смотрите в первую очередь логи роутера во время разрыва соединения. Да и сами роутеры бывают глючными.
Так же логи винды посмотрите (уровни предупреждения и ошибки), вдруг что интересное увидите типа отрубания сетевухи
Так же запустите в трех разных окнах вечные пинги на роутер, на брокера и на какой-нибудь стабильно работающий сервер 1) ping -t ip_роутера 2) ping -t ip_брокера 3) ping -t google.comи смотрите что будет в момент разрыва
Кабели очень внимательно осмотрите на предмет повреждений, деформаций и перегибов. А то бывало, что кабель был проложен под полом, и когда наступали в определенном месте на пол, кратковременно сеть пропадала.
Коннекторы на кабелях тоже надо проверить, бывает и плохое обжатие и нестабильно держащиеся в гнездах.
В общем есть что проверить для начала.
getParamEx "last" Возвращает 0 для фьючерсов
Пользователь
Сообщений: Регистрация: 20.12.2020
02.07.2021 12:06:36
Цитата
Roman Azarov написал: В некоторых случаях, его значение может отличаться от цены действительно последней (крайней) сделки по инструменту. Это связано с особенностью трансляции параметров.
Тут проблема в том, что в этих "некоторых случаях", прилетает LAST=0, что неправильно, т.к. имеются инструменты у которых цена может быть нулевой. Можно как-то сделать, чтобы в упомянутых вами "некоторых случаях" прилетал бы не 0, а например nil или пустая строка Чтобы можно было корректно фильтровать входящие данные.
Цитата
Roman Azarov написал: Уточните, пожалуйста, при наблюдении описанного поведения, какое значение имеет параметр в таблице текущих торгов
В ТТТ так же наблюдается "Цена послед." = 0. Очень часто такое поведение наблюдается во время вечернего клиринга, и продолжается буквально несколько секунд.
getParamEx "last" Возвращает 0 для фьючерсов
Пользователь
Сообщений: Регистрация: 20.12.2020
30.06.2021 20:51:14
Бывает что от брокера некорректные данные приходят. Обычно такое происходит во время вечернего клиринга, что в принципе не критично
Но на всякий случай делаю пару проверок 1) Проверка получаемых данных из ТТТ на корректность Коррктность LAST проверяю так
Код
local param=getParamEx2(class_code,sec_code,"LAST")
if(param.result=="1")and(param.param_image~="")and(param.param_type=="1")then last=tonumber(param.param_value) end
2) Разрешать роботу торговать только если last~=0 Но надо быть предельно аккуратным, ибо на некоторых фьючерсах цена может быть нулевая, и такую проверку делать будет не желательно.
Как расшифровать "flags" в OnTrade?
Пользователь
Сообщений: Регистрация: 20.12.2020
30.06.2021 16:17:07
Переводим 29 в двоичный формат, получаем 00000000 00011101 Биты в полученном двоичном числе читаются справа налево начиная с нуля Далее смотрим документацию по флагам
Получение позиций по инструментам
Пользователь
Сообщений: Регистрация: 20.12.2020
28.06.2021 16:17:47
Цитата
Andrey Bezrukov написал: Если позиция ещё не загружена с сервера - функции вернёт "nil" вместо LUA-таблицы по этой позиции.Неоднозначности здесь нет.
Неа, например getFuturesHolding вернет nil для любого инструмента которого нет в таблице "Позиции по клиентским счетам (фьючерсы)" А вот в вышеупомянутой таблице инструмент может отсутствовать по двум причинам 1) Либо он еще не получен с сервера 2) Либо позиции нулевые и им не торговали в последнюю сессию. И достоверно определить причину нет возможности.
Получить текущие биды и аски по всем инструментам из потока, Как получить текущие котировки по всем инструментам, на которые подписан терминал, не дожидаясь OnQuote?
Пользователь
Сообщений: Регистрация: 20.12.2020
25.06.2021 14:42:01
Цитата
kauyon1306 написал: Спасибо. Натолкнулся на следующую проблему - даже после подписки Subscribe_Level_II_Quotes(class, sec) функция обратного вызова OnParam не срабатывает. В терминале отписался от всех потоков данных, чтобы вручную подписываться на них через скрипт. В чем может быть проблема.
Так Subscribe_Level_II_Quotes это подписка на стакан, а OnParam колбек на изменения ТТТ. Как бы совершенно разные вещи.
OnInit() не стоит нагружать сильно, он же в основном потоке выполняется, подвесите quik такими издевательствами, лучше засунуть все в main() Из квика вы не выдерните список инструментов с оформленной подпиской. Определять его через OnQuote() весьма не надежно, если например инструмент малоликвидный, то можете и не дождаться колбека. Правильнее в скрипте задать список нужных инструментов и из скрипта подписаться на них, вам Egor Zaytsev и подсказал целых 2 варианта
1) Стакан Подписка на стакан через Subscribe_Level_II_Quotes, ловить изменения стакана через OnQuote и получать значения getQuoteLevel2 2) Таблица текущих торгов Подписка на параметры ТТТ через ParamRequest, ловить изменения ТТТ через OnParam и получать значения getParamEx
Только не надо мешать все в кучу, выберите один из этих вариантов и реализуйте.
Sergey Gorokhov написал: В транзакции на снятие заявки нет такого параметра ACCOUNT
Действительно, убрал параметр ACCOUNT ничего не изменилось, все снимается.
PS: Ради интереса сейчас поочередно убирал разные параметры при снятии заявок и наблюдал снимется ли заявка. Оказывалось что SECCODE тоже не нужен, а вот CLASSCODE обязателен. Я искренне удивлен.
Слои индикаторов на графике цены, Нелогичное отобраджение подсказки при наложении индикатора на график цены
Пользователь
Сообщений: Регистрация: 20.12.2020
23.06.2021 12:42:17
Но если спрятать индикатор ЗА свечи то наведением мышки можно увидеть подсказку со значением.
Должно быть НАОБОРОТ!
Слои индикаторов на графике цены, Нелогичное отобраджение подсказки при наложении индикатора на график цены
Пользователь
Сообщений: Регистрация: 20.12.2020
23.06.2021 12:31:09
Поддержка, ответьте что-нибудь.
Ведь неудобство очень сильное. Если индикатор проходит через тело свечи, то значение индикатора на данной свече не увидеть без танцев с бубном.
Наглядный пример График SiU1 (часовик 21.06.2021) и индикатор EMA9 Как мне узнать значения индикатора на свечах где я стрелки нарисовал?
При снятии заявки перемерт account пустой
Пользователь
Сообщений: Регистрация: 20.12.2020
23.06.2021 10:35:11
Имеется заявка, снимаю ее скриптом
Код
function main()
local transaction={
["TRANS_ID"] = "12345",
["ACCOUNT"] = "4103YEK",
["CLASSCODE"] = "SPBFUT",
["SECCODE"] = "SiU1",
["ACTION"] = "KILL_ORDER",
["ORDER_KEY"] = "1892946353983939919"
}
sendTransaction(transaction)
sleep(1000)
end
function OnTransReply(trans_reply)
local str="OnTransReply\n"
for k,v in pairs(trans_reply) do
str=str..tostring(k).."="..tostring(v).."\n"
end
message(str)
end
Все отлично снимается, но один момент мне не нравится.
Почему при получении ответа на заявку параметр account пустой, я же задал его в таблице transaction? Ну и главный вопрос, что мне исправить, чтобы при получении ответа на транзакцию параметр account был заполнен правитьно (ожидаю там увидеть "4103YEK")?
PS: На всякий случай сразу упомяну, что в снимаемой заявке поле account было заполнено правильно.
QUIK 8.13.1.16
Слои индикаторов на графике цены, Нелогичное отобраджение подсказки при наложении индикатора на график цены
Пользователь
Сообщений: Регистрация: 20.12.2020
21.06.2021 22:45:39
Заметил одну неприятную особенность. 1) Берем любой график и накладываем на него индикатор (пускай будет MA) 2) В окне редактирования графика ставим Moving Average выше чем Price 3) На тех свечах где MA проходит через тело свечи (линия MA перед свечой), при наведении на MA не отображается подсказка со значением MA 4) В окне редактирования графика ставим Moving Average нише чем Price 5) MA "прячется" за телами свеч, зато если MA проходит через тело свечи, то при наведении мышкой на предполагаемое место нахождения MA видим подсказку со значениями. По-моему такое поведение крайне не логично, надо наоборот чтобы подсказка отображалась если MA перед свечой, а если сзади то не отображалась бы.
Такая беда со всеми индикаторами, MA взял просто для примера.
Mixa написал: А если getNumberOf('FUTURES_CLIENT_HOLDING') = 0?
Значит либо таблица еще не загрузилась, либо таблица пустая и позиции нулевые. Оба варианта учтены в алгоритме.
Написание автономного бота
Пользователь
Сообщений: Регистрация: 20.12.2020
17.06.2021 13:12:27
Mixa, дело в том, что иногда таблица с позициями не успевает загрузиться, а скрипт уже работает, этот момент надо просто учесть в работе скрипта Делаю вот так
Код
function FuturesClientHolding() -- Первоначальное заполнение позиций по срочному рынку
local n=0
while (n<try_count)and(getNumberOf('FUTURES_CLIENT_HOLDING')==0) do -- Ждем заполнения таблицы "Позиции по клиентским счетам (фьючерсы)"
sleep(100)
n=n+1
end
if getNumberOf('FUTURES_CLIENT_HOLDING')>0 then -- Таблица "Позиции по клиентским счетам (фьючерсы)" заполнена
for i=0,getNumberOf('FUTURES_CLIENT_HOLDING')-1 do
local tbl=getItem('FUTURES_CLIENT_HOLDING', i)
if(type(tbl)=="table")and(tbl['firmid']==firmid)and(tbl['trdaccid']==account)and(tbl['sec_code']==sec_code)and(tbl['type']==0)then
holding["TOTALNET"] = tbl['totalnet'] -- Текушие позиции
holding["OPENBUYS"] = tbl['openbuys'] -- Активная покупка
holding["OPENSELLS"] = tbl['opensells'] -- Активная продажа
return true
end
end
end
-- Таблица "Позиции по клиентским счетам (фьючерсы)" пустая, либо в ней отсутствует искомый инструмент
holding["TOTALNET"] = 0
holding["OPENBUYS"] = 0
holding["OPENSELLS"] = 0
return false
end
В дальнейшем обновляю позиции через колбек OnFuturesClientHolding
повторный Init() без OnDestroy() в индикаторе, При смене инструмента графика в Lua индикаторе перечитывается файл без предварительного срабатывания OnDestroy()
Пользователь
Сообщений: Регистрация: 20.12.2020
16.06.2021 12:33:45
Извиняюсь, что влезаю в тему, но вроде как это касается обсуждаемого вопроса.
Вызывать OnDestroy() еще и при смене интервала инструмента надо бы, график же меняется. И соответственно, после смены интервала OnInit() заново вызывать.
Собственно, нужно это для того, чтобы скрипт индикатора понимал, что параметры графика изменили, и надо бы пересчитывать весь индикатор заново. Сейчас выкручиваюсь тем, что в OnCalculate(), отслеживаю не изменился ли инструмент или интервал графика, но это как-то "неправильно" по моему.
QUIK не видит индикаторы
Пользователь
Сообщений: Регистрация: 20.12.2020
11.06.2021 12:36:59
Цитата
Ami написал: А чем разработчикам помешали скрипты в подпапках? у меня, например, все они так лежат — по авторам отсортированы. пришлось Квик 8,13 удалить! верните, как было!!!
Я решил проблему так. В папку LuaIndicators помещаем только файлы (с расширением lua) загружающие сами индикаторы, такого содержания:
Код
dofile("C:\\Путь\\До\\Индикатора\\индикатор.lua")
В результате в папке LuaIndicators держим только загрузчики индикаторов, а сами индикаторы располагаем где душа пожелает. Попробуйте, очень удобно.
простейший робот на Луа, Где взять простейший работающий робот на Луа в качестве заготовки?
Пользователь
Сообщений: Регистрация: 20.12.2020
10.06.2021 20:22:06
Да не бывает простейшего робота, такой работать не будет ибо слишком много моментов надо учесть, чтобы косяки квика обойти. Своего робота даже без стратеги показывать жалко, слишком много трудов вложено. Не думаю, что хоть кто-нибудь тут вам своего покажет, сильно удивлюсь если ошибся.
Так что вам лучше писать самостоятельно и спрашивать уже конкретно то, что у вас не получается.
А в целом самая простая структура примерно такая. Определили инструмент, убедились что торговля идет, получили свои позиции, получили свечки, прогнали по стратегии, если требуется сформировали заявку, и все по кругу.
[ Закрыто] Опять ошибка получения кол-ва ордеров скриптом
Пользователь
Сообщений: Регистрация: 20.12.2020
06.06.2021 17:48:11
Цитата
TGB написал: Вы меня заинтриговали своей версией QUIK
Тоже сначала удивлялся что это за версия такая 8.13.3, так как в некоторых темах пишут о данной версии Похоже что таким образом арка тестирует бета-версии квика, так сказать до официального релиза.
Сирануш, ну и по теме топика хотел бы добавить немного мыслей. Я бы дополнительно через коллбек OnDepoLimit попытался точнее определить проблему. Смотрите зачем это надо. Если через коллбек будут прилетать расхождения, тогда проблема не в квике, а в брокере, который шлет левые данные. Либо же через коллбек расхождений не будет наблюдаться, а через функцию getDepoEx будут расхождения, тогда косяк явно квика.
Просто на данный момент получается так, что проблема есть, а кто виновник пока не ясно.
Не получается создать новую заявку
Пользователь
Сообщений: Регистрация: 20.12.2020
02.06.2021 15:08:39
Хотелось бы услышать комментарии от разработчиков, ведь приведенный код из документации "Использование Lua в Рабочем месте QUIK.pdf" (с небольшими изменениями, но не принципиальными). И данный код не работает на свежем, только установленном QUIK Junior
Не получается создать новую заявку
Пользователь
Сообщений: Регистрация: 20.12.2020
02.06.2021 14:54:36
В квике есть два типа формата транзакций, названные "специальный" и "универсальный"
Вы написали в "универсальном" формате, у которого от универсальности только название, и будет или нет работать зависит от кучи причин. Лучше писать в "специальном" формате, вот он действительно универсален.
Angy написал: А как можно ознакомится с документацией, в которой описываются как рассчитываются индикаторы в квике
Официальной документации от разработчика по индикаторам не встречал, но информации с описаниями и формулами расчета в интернете легко ищется. Ну или скачайте с сайта арки и посмотрите код.
Цитата
Angy написал: какие единицы измерения (рубли, доллары, штуки, кол-во акций, количество сделок и т.д.) у ненормированных индикаторов? Например, цена акции - стоимость в валюте актива (рубли, доллары) за 1 акцию, цена фьючерса - стоимость в рублях одного стандартного фьючерса, скользящая средняя - измеряется в валюте актива, а индикатор объема volume в чем измеряется (количество сделок за период времени, количество проданных акций, объем денежных средств или еще в чем то) для рынка акций, для рынка фьючерсов?
Объем измеряется в лотах. Цена это стоимость в валюте инструмента за лот. Количество ценных бумаг в лоте и валюту инструмента смотрите на сайте биржи, находите нужный инструмент и изучаете пункт параметры инструмента.
Вызов индикатора в скрипте, Использование значений индикаторов при работе со свечками
Пользователь
Сообщений: Регистрация: 20.12.2020
31.05.2021 10:50:24
Dr Wed, у вас источник данных не успевает загрузиться. Добавьте после