Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
BlaZed написал: В результате чтобы нарушилась уникализация надо одним роботом более 100 раз в секунду транзакцию сделать, что практически невозможно.
Делать ставку на то что маловероятное событие НИКОГДА не произойдёт - плохая тактика. Владимир уже на своем опыте об этом знает.
Ну надо же соблюдать баланс между идеалом и разумностью. Если у кого-то хотя бы теоретически может быть более 100 транзакций в секунду, то предложенный мной способ, конечно, не подойдет.
Вот только есть ли такие люди? Даже на высокочастотном скальпинге столько не надо. Я вот даже представить не могу кому может не хватить такой уникализации. Вы можете?
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
trans_time=dt.hour*10000+dt.min*100+dt.sec -- время отправки транзакции HHMMSS
trans_id_count=(trans_id_count+1)%100 -- счетчик транзакций, от 0 до 99 и по кругу
trans_id=1000*trans_time+100*robot_id+trans_id_count -- Уникальный идентификатор транзакций
Расчет на 10 одновременно работающих роботов, у каждого робота свой robot_id от 0 до 9 В результате чтобы нарушилась уникализация надо одним роботом более 100 раз в секунду транзакцию сделать, что практически невозможно.
Вы, вероятно, маржинальной торговлей занимаетесь и превысили риск-параметры. Брокер вам заблокировал сделку. Почитайте про маржинальные показатели, и в часности про "Норматив покрытия риска".
Владимир написал: Когда-то давно читал, как один умник в какой-то программе расчётов сделал так: расчёты велись с точностью до копейки (ну или там до цента). Так он остаток от округления (дробные части копеек) переводил на собственный счёт. Идея красивая, никому не мешает, деньги буквально из воздуха... а погорел на некачественной программной реализации: алгоритмист-то он был хороший, а программист - не очень.
Прошу помощи, как ограничить кол-во входов робота. Пока только могу ограничить одной сделкой - проверка таблицы сделок, если появилась сделка робота по комментарию, то больше робот не может входить в позицию сегодня.
Но мне нужно чтобы была возможность указать сколько раз робот может входить в сделку после закрытия позиции.
Сходу два способа. 1) Таблица сделок. Подсчитываем количество уникальных по полю "заявка" сделок с комментом робота 2) Таблица заявок. Подсчитываем количество заявок в статусе исполнена с комментом робота.
Ну и сравниваем полученное число с ограничениями робота. Если меньше торгуем роботом.
hts написал: ARK Genomic Revolution ETF (NYSE: ARKG ) Вот этот тоже не могу в квике найти
QUIK тут не причем, доступы к биржам предоставляет брокер. Вам надо обратиться к своему брокеру, и узнать как подключить выход на нужную вам биржу, в вашем случае NSYE
Владимир написал: Игорь М, Непохоже. Там у меня вообще стоит 10 секунд, а данные обновляются НАМНОГО чаще!
Именно вышеуказанная настройка мешала.
Вот простой код проверки частоты обновления параметров ТТТ по инструменту. Проверьте у себя при разных значениях.
Код
class_code="SPBFUT"
sec_code="SiH1"
function main()
clock1=0
is_run=true
while is_run do
sleep(100)
end
end
function OnStop()
is_run=false
return 100
end
function OnParam(c_code,s_code)
if(c_code==class_code)and(s_code==sec_code)then
clock2=os.clock()
message("delta="..clock2-clock1.."sec")
clock1=clock2
end
end
Что-то предыдущее сообщение криво отправилось, а правки нет...
Цитата
Владимир написал: BlaZed, Не проще. Оккам запрещает: ведь BID и OFFER по-любому нужны. К тому же, о тормозах здесь и речи быть не может - это же фактически две соседние цены в стакане. доступные даже без наличия самого стакана. Я в меню обновляю эти цены раз в 150 мс - куда уж чаще? Ну, теперь ещё буду читать перед отправкой заявки - по затратам ресурсов это не стоящие внимания копейки. Свечи же (у меня они минимум 15-секундные, у Вас, я полагаю, не меньше) намного тормознутее.
Основной мой посыл сообщения был о том, что таблица текущих торгов крайне тормозная, обновляется не чаще чем раз в 1 секунду. Что при высоколиквидных рынках весьма неприятно.
Владимир написал:
Я в меню обновляю эти цены раз в 150 мс - куда уж чаще?
Основной мой посыл сообщения был о том, что таблица текущих торгов крайне тормозная, обновляется не чаще чем раз в 1 секунду. Что при высоколиквидных рынках весьма неприятно.
Не проще ли пользоваться предназначенными для определения состояния сессии параметрами? STATUS STRING Статус инструмента
TRADINGSTATUS STRING Состояние сессии Но есть такая проблема, что таблица текущих торгов очень тормозная и могут быть задержки
Я лично для индикации сессии сравниваю время последней свечи инструмента с локальным временем скорректированным под нужный таймфрейм Для малых таймфреймов отлично подходит.
tom написал: так что делать чтоб тормоза пропали? потому что это не поприколу когда торгуешь интрадей и терминал притормаживает на нескалько секунд
Т.е. у вас со старым файлом настроек были тормоза, а как его удалили тормозов не стало? Если так, то значит какой-то косяк в этом файле. Файл info.wnd отвечает за всякие вкладки и окошки в квике.
Поэтому закрываете квик, удаляете (на всякий случай куда-нибудь скопируйте) файл info.wnd, запускаете заново квик. Открываете все нужные вам окна и графики вручную и сохраните настройки (Система->Сохранить настройки в файл)
Если у вас не 100500 вкладок, окошек и графиков, то должно помочь
Нужная доработка бы была. Хоть и на функционал не влияет, но удобство однозначно добавит. Тоже замучился в куче скриптов нужный выискивать.
И добавлю от себя пожелание, в списке скриптов очень было бы неплохо добавить поле "название", которое бы бралось из самого скрипта. Например, задали бы в скрипте переменную __NAME (ну или какую другую), чтобы она отображалась в списке скриптов.
hts написал: Как то сложно. Продал несуществующую акцию за 100 руб потом купил эту акцию за 90 руб и заработал 10 руб так что ли, Или это как то по другому работает. И если я продал акцию за 100 а на рынке она стоит 110 то что тогда.
Тут все предельно просто, главное принцип понять.
Вот смотрите. Например, вы из своих каких то размышлений решили что акции компании X пойдут вниз. И хотите на этом заработать. Как это можно сделать?
Берем у брокера ВЗАЙМЫ акцию, и тут же продаем эту акцию на рынке, допустим за 100 рублей.У вас появились деньги с продажи акции (100 рублей) и имеется обязательство вернуть брокеру взятую у него акцию. Вроде бы все хорошо, но брокеру то необходимо вернуть взятую взаймы акцию. А у вас ее нет, значит надо купит акцию.
Далее 2 варианта. 1) Если цена пошла вниз, до 90 рублей. Покупаем акцию и возвращаем брокеру. У вас есть 10рублей (100-90) и нет обязательств. Заработали 2) Если цена пошла вверх, до 110 рублей. Покупаем акцию и возвращаем брокеру. У вас есть -10рублей (100-110) и нет обязательств. Потеряли.
v={}
function OnCalculate(index)
if(v[index]==nil)then
if(T(index).hour==9)and(T(index).min==0)or(index==1)then v[index]=0
else
if O(index-1)<C(index-1) then v[index]=v[index-1]+V(index-1) end
if O(index-1)>C(index-1) then v[index]=v[index-1]-V(index-1) end
if O(index-1)==C(index-1)then v[index]=v[index-1] end
end
end
return v[index]
end
Раньше тоже определял время по параметру STATUS, вот только как уже писали выше, он "тормозит" с утра на 3-4 секунды (открытие брокер, если что). Хоть это и не очень критично, но иногда все же при утренних гэпах бывает нужно срочно закрыть сделку, и эти 3 секунды могут стоить 100-200 пунктов.
Решил вообще от проверки по статусу отказаться, решение то простое. Сравниваем время последней свечи с локальным, переведенным в московское, если совпадает, то торгуем.
Естественно, локальное время должно быть синхронизированно.
Антон написал: Мне нужно с помощью нажатия 1 кнопки активировать скрипт который введет 4 значения т.е. цифр Это нужно для быстрого заполнения паролей где копировать и вставить не возможно
Также это как то на уровне мышки настроить грубо говоря я жму 4 конпку мышки у меня вводится там допустим число 3333
Вы уверенны, что на нужном форуме вопрос задаете? Тут про QUIK форум.В квике пароли и копируются и вставляются, и вопрос автоввода пароля решается совсем по другому.
Nikolay написал: В голову приходит одно: взять w32 и поискать главное окно. Если найдено на английском, то english. Правда, если несколько терминалов, то уже может быть не вариант.
Я надеялся на более простой способ, Но ваш тоже подходит. Спасибо.
В общем, значение слипа надо ставить минимум 1, тогда ничего не виснет. А выбирать адекватное значение уже в зависимости от требований конкретно вашей стратегии.
BlaZed написал: Другими словами, конструкция без слипа, типа такой
Код
function main ()
a = 0
is_run = true
while is_run do
a = a + 1
end
end
может легко повешать квик.
Нет. Если процессор одноядерный - да, это будет заметно в скорости общей работы. Если процессор многоядерный (а это нынче стандарт де-факто) - то никто ничего даже не заметит, кроме термометра на процессоре.
Попробуйте, запустите Ryzen 5 3500x на 6 ядер, квик скопытился после запуска
КВИК на виртуалке не имеет постоянного доступа к ноутбуку. Я вышел с виртуалки, и связь с ноутбуком пропала. Но я рассчитываю, что считанные данные останутся в памяти.
Я правильно понимаю что...
Квик на виртуалке, вы закрыли вечером виртуалку, виртуальная машина задампилась, и вы надеятесь, что когда утром включите виртуальную машину, то скрипт продолжит работу с того момента на котором закрыли виртуалку?
Ладно, поиграем в Нострдамуса. Пока VM была выключена, связь с сервером, естественно, оборвалась по таймауту, а в скрипте стоит какая-нибудь проверка на наличие подключения типа onConnect() и при отсутствии подключения что-нибудь там сбрасывается в дефолтные значения и т.д и т.п.
PS: Есть еще вариант, что скрипты при таком "издевательстве" и правда перезапустятся. Эту теорию, думаю, сами можете без проблем проверить простеньким скриптом, который крутится в вечном цикле и при старте выводит какое-нибудь сообщение.
Добрый день. Постоянно в окно сообщений валятся ненужные сообщения от биржи. Например такие: "[FORTS] Уважаемые клиенты, если цена останется на текущем уровне в течение 3 минут, то торги фьючерсами SLV будут приостановлены для 1-ого расширения верхней границы диапазона оценки ценового коридора и рыночных рисков"
А мне вот на фьючерс SLV вообще плевать, не торгую им и не собираюсь.
Причем не одно-два сообщения приходят, а в определенные моменты по 30-40 за 10 минут вываливаются. Полностью отключить сообщения не предлагайте, ибо иногда и правда что-нибудь полезное приходит. Но вот этот "официальный спам" надоел.
Можно ли реализовать фильтрацию сообщений, по типу подписок? Чтобы можно было бы указать по каким инструментам меня интересуют сообщения, а по каким нет.
Другими словами, чтобы биржа/брокер при отправке сообщения соотносили бы ее к определенному типу/инструменту, а со стороны клиента можно бы было выбирать какие сообщения видеть, а какие нет.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
TGB, вроде много пишите, а вот не цепляет и все. Просто вот читаю и понимаю, что вроде что-то может быть даже и нужное, но вот зачем оно мне и какие преимущества даст совершенно не понятно.
Вы хоть как-то заинтересуйте аудиторию то. Видео с обзором своей разработки снимите что ли, да на какой нибудь ютуб залейте. И покажите, мол с помощью данной разработки можно делать то-то и то-то чего на квике не реализовать, и чтобы это был не сферический конь в вакууме, а что-либо реально нужное людям.
Короче, грамотный рекламщик вам нужен, если хотите в массы свой софт пустить.
Евгений написал: Кнопки свернуть, закрыть, восстановить. Нажатие мышкой один раз и держать не отпуская. Если отпустить на кнопке клавишу то выполнится действие. Это так и должно быть, это стандартное поведение?
Комиссия торговой системы - это комиссия квик? Можно где-то почитать, как она вычисляется?
Это комиссия Московской биржи. Смотреть в параметрах интересующего инструмента, комиссия незначительно меняется каждый день. Например по фьючу SiH1 смотреть тут https://www.moex.com/ru/contract.aspx?code=Si-3.21
Настройки->Программа->Получение данных->Котировки Галочка стоит "По выбранным классам" Выбираю нужный мне класс, ставлю фильтр на инструменты и параметры, тыкаю сохранить. Если сейчас просто перезапустить терминал, то после перезапуска сохранения не будет.
Однако нашел способ обойти этот косяк. После сохранения отключаемся и заново подключаемся к серверу, теперь если перезапустить терминал, все сохранится. Такое ощущение, что настройки котировок сохраняются в момент подключения к серверу брокера.
Как временное решение, перезапуск квика с параметром "-clear", тогда кеш будет чистый, и определить что данные еще не загружены легко. Например для числовых значений getParamEx2 будет возвращать всегда 0 А адекватное на мой взгляд решение должно быть таким: При заказе подписки ParamRequest должен не просто слать запрос на подписку на сервер, а еще и получать в ответ от сервера актуальные данные и кидать их в кеш ТТТ При отмене подписки на параметр в кеш ТТТ должен заноситься nil
foobar написал: Ничего не накручивал, скрипт писался под 8.1, я с тех пор его не трогал, работает и работает. И 5.1 dll в директории Квика есть. Обновлю, конечно, как вспомню как я компилировал dll, это 3 года назад было.
Интересно и непонятно. А в окне доступных скриптов, около кнопки запуска стрелка вниз есть, если на нее нажать, какие варианты запуска у вас показывает? И запустится ли скрипт, если выбрать "Запустить в Lua 5.3.5" или "Запустить в Lua 5.4.1"?
foobar написал: Кстати, lua 5.1 поддерживается Квиком. У меня работают написанные под lua 5.1 скрипты в 8.11.0.66
В версии QUIK 8.11.0.66 поддерживаются lua 5.3.5 и 5.4.1 Lua 5.1 выпилили из квика (хотя и не до конца, библиотеку почему-то оставили)
Другой вопрос, что если скрипт написанный для lua 5.1 не скомпилирован, то он вполне может работать в новых версиях lua, если изменения языка не коснулись логики конкретно вашего скрипта.
Максим написал: Купил робот-сканера, сделал все как рассказывает автор на инструкции, но при запуске скрипта выдаёт ошибку: C:\ClassesC\class.luac: version mismatch in precompiled chunk. Автор на видео пользуется версией квика, начинающейся на цифру 7.. у меня уже 8.8.4.3.. скорее всего, скрипт написан тоже на старую версию квика. Что в подобной ситуации можно предпринять? Какие есть варианты решения проблемы? В языке Lua являюсь нубом).
Правильный вариант уже подсказали, это попросить автора дать робота под актуальную версию lua Если робот представлен скриптом без dll`ек, то можно попытаться декомпилировать скрипт, погуглите про утилитку luadec.exe
Так у вас скрипт сразу же после запуски пытается купить, но OnQuote еще не получил price_buy Вот и получается, что отправляете транзакцию с пустой ценой
Александр написал: Действительно, имеется такая проблема, дело не в тормознутости квика, у меня тоже выскакивает окно ввода логина - пароля на передний план, поверх всех окон, даже если будеш смотреть какие - нибудь новости. Окно авторизации вскочит поверх всех окон, что очень неудобно.
Во первых. Если отвалился у вас quik, естественно, об этом необходимо узнать, и чем быстрее, тем лучше. Вы же в нем деньги зарабатываете, ну или просераете. Так что всплывание окна логина не передний план, это более чем логично и правильно.
Во вторых. На нормальном железе и чистой системе quik летает. У меня четыре-пять секунд до окна логина грузится, более чем приемлемо.
Ну и в третьих. Как можно на одном компе и квик рабочий держать и другими делами заниматься? Надо же понимать риски. Всякие вирусы еще не хватало подцепить, да или просто система глюкнет не во время, и из-за этого сделку просрете. Отдельный комп, чистая обновленная система и квик.