Вчера 20.03.20 т.е. в пятницу кода все работает щлюзы шмузы разработчик стратегий опять косячил. Вместо графика опционной позиции на экране просто наклонная линия хотя должен отображаться стредл. Это при том что заказаны котировки интересующих опционов и базового актива, сняты фильтры параметров. В таблице параметров стратегии не отображается цена базового актива ни в столбце "фактич." ни в сценариях. Предположу что это как то связано со сменой базового актива которая произошла как раз с 19.03 на 20.03. Хотя до 19.03 корректно отображалась позиция которая была собрана из опцоинов на разные базовые активы - RIH0 и RIM0. Хотя говоря корректно отображались я имею ввиду форму но не значения - здесь то же есть что сказать. Когда позиция собрана из опционов на разные базовые активы для построения графика позиции берется только цена одного - ближайшего по дате истечения . В связи с этим: 1. Скажите что сделать что бы заработал разработчик стратегий - удалить какие то дат файлы или еще что. 2. Прошу зарегистрировать пожелание на доработку разработчика стратегий - что бы при построении суммарной опционной позиции учитывались цены базовых активов разных опционных серий из которых собраны эти позиции.
Сергей написал: День добрый! Некое противоречие между двумя предложениями: "загружает текущую позицию но не прорисовывает графики " и "данные перезаказаны и получены графики перерисованы ". Если Ваш вопрос - к пустым стаканам, то да - они пустеют сразу по закрытию сессии. К наполнению готовятся другие стаканы ::
Не знаю как у вас у меня стаканы котировок после сессии не пустеют и в них присутствуют заявки которые конечно не сняли участники торгов. Если систему перезагрузить то да стаканы будут очищены. После перезаказа данных прорисовываются графики по кокретным инструментам которые мы открываем как "построить график" или " создать диаграмму по интересующим инструментам". В разработчике стратегий строятся диаграммы по совокупности всей позиции по фьчам и опционам которые и не прорисовываются.
Здравствуйте! При запуске разработчика он загружает текущую позицию но не прорисовывает графики. Заказ данных для инструментов включен, фильтров параметров нет. Из видимых причин - в поле цена б/а ноль. Пытался подставлять актуальную цену в сценарии - результат тот же. Возможно причина в том что сегодня суббота - но подключение установлено даже данные перезаказаны и получены графики перерисованы - только стаканы(пардон) пустые. Да и проявился этот баг еще вчера. В чем причина может быть?
Зачем заморачиваться с индикаторами. Весь расчет который я вам предложил укладывается в одну формулу. Как получить пиковые значения так же Вам предложил. С более крупного таймфрейма берете значения максимумов или минимумов цен в зависимости от того линию сопротивления или поддержки ищете - сложность только в том что для этих цен нужно будет найти время но опять же на мелком таймфрейме. Но это не так уж и сложно.
lergen написал: Здесь вопрос совсем в другом - как определить ключевые точки по которым вы будете строить линию тренда. Если Вы знакомы с программированием и сможете достаточно четко формализовать решение данной задачи то возможно даже денег тут заработаете :)
Пардон, то же все элементарно если не заморачиваться. Можно взять значения цен с более крупных таймфреймов с дневного или 4-х часового.
Вам же правильно подсказали что можно использовать уравнение линии. Считается все элементарно. P1 - пик цены 1 Р2 - пик цены 2 NT1 - количество интервалов между Р1 и Р2 NT2 - количество интервалов после Р2 до крайнего периода (Р2 - Р1)/NT1 - коэффициент для построения этой линии назовем его К Р2 + (NT2 * K) - то что Вы хотели найти
Здесь вопрос совсем в другом - как определить ключевые точки по которым вы будете строить линию тренда. Если Вы знакомы с программированием и сможете достаточно четко формализовать решение данной задачи то возможно даже денег тут заработаете :)
А еще подскажите кто в теме как из виндовсой библиотеки iphlpapi.dll (в частности из ее функции GetIfTable() )получить информацию в скрипт( о состоянии сетевых подключений). За пример буду особенно признателен или хотя бы направление подскажите.
День добрый! Не запускается exe файл с параметрами. От поиска в глазах рябит уже.
os.execute("C:\\Work\\2\\devcon.exe enable USB\Class..") os.execute("C:\\Work\\2\\devcon.exe -enable USB\Class..") os.execute("C:\\Work\\2\\devcon -enable USB\Class..") io.popen -также не спасает на что ругается cmd не вижу поскольку не могу в параметрах ему задать паузу. Квик запущен от админа, в свойствах devcon так же указан запуск с правами админа. Пробовал через батник. Если сам батник запускаю руками из cmd все работает - из скрипта ни как. Что не так делаю подскажите
Готов взять обратно свои слова о слабом быстродействии Qlua. Оптимизацией алгоритма добился того что скрипт обрабатывающий таблицу в 6500 строк делает 15 проходов в секунду. Опять же оговорюсь что это для моего железа - для кого то возможно это так себе показатель. Замедление происходит в основном при взаимодействии виртуальной машины с квиком - при опросе графиков, таблиц, выводах в таблицы, сохранении в файл .... Если эти операции ограничить до необходимой целесообразности то все работает довольно шустро.
Если пишем систему в реальном времени, то функция main должна просто что-то инициализировать и все. Далее все должно выполняться в коллбэках. Если их нет, то и нечего анализировать получается. Пришла свечка - отвечаем на событие, решили, что надо сделать транзакцию, отправили ее. Ждем ответа о ее завершении.
А вот в функции main, видимо, надо как раз анализировать ситуации когда ответа нет. Скажем, нет ответа на транзакцию, значит перебери ордера, чтобы понять, может она прошла. Видимо, так. Я пока не все еще продумал, т.к. не очень знаком с организацие вызовов в qlua, но, наверно, есть ситуации неуловимые коллбэками.
А вот если система не реального времени, а по расписанию, то, как я понимаю, все надо реализовывать в бесконечном цикле main. Скажем, цикл, перебирающий список бумаг каждые 15 минут и рассчитывающий что-то. Правда в этом месте возникает вопрос, а нельзя ли при инициализации скрипта назначить один и тот же коллбэк на получение данных разных инструментов, разных интервалов? Тогда и здесь можно было бы все в этом одном коллбэке делать не утилизируя функцию main. Судя по описанию нельзя. Т.е. я вынужден каждые 15 минут заново перибирать список инструментов, получать данные, считать. А если бы в коллбэк приходил не только индекс, но признак чей это индекс, то можно было бы сохранив ранее DS каждого инструмента, отреагировать именно на него.
Колбеки нельзя перегружать кодом, можешь завесить Квик. Процесс main это один поток, рядом в потоке сам квик с колбеками. В одном OnTransReply анализируй все. Сначала отфильтруй повторный вызов колбека, потом фильтруй по бумаге если нужно, потом фильтруй по своим ID.
Вы можете разместить ваш терминал на серверах биржи или где то поблизости исключив тем самым некоторую зависимость от временной задержки сигнала- но это нельзя назвать прямым доступом. Все равно ваша заявка будет сначала попадать на сервер квик потом уже на биржу. Для непосредственно прямого доступа нужно использовать PLAZA2, FAST/FIX или что там может уже новое есть. Но там уже используются не Квик а другие терминалы и скорее всего там нужно писать на "С". Но еще нужно сказать что это будет вам стоить дополнительных денег. Если вы уверены в своей стратегии то необходимости самому учить "С" нет - можно же заказать. В свое время то же планировал выйти на прямой доступ но потом отказался от этой затеи - после обсуждения возможностей стратегии которую хотел использовать с теми кто уже занимался тем же.
Проблему можно было бы решить легко, например в операторе сравнения номеров использовать "<=" для случая когда не делаем ни чего, это было бы справедливо если бы номера инициированных сделок по фьючу были больше номера сделок по спреду, что казалось мне логичным пока не увидел в таблице сделок что номер сделки по спреду больше. Поэтому вопрос - это случайность или закономерность?
Кажется дошло. За сделками по спреду автоматически следуют сделки по фьючам и видимо повторные вызовы по спреду приходят уже после колбека по фьючу. А поскольку я сохранял один номер только последний то он забивался фьючем перед приходом повторного по спреду Нужно запоминать несколько номеров а не один.
День добрый всем! В обозначенном колбеке обрабатываются сделки по указанному класскоду. При этом есть фильтр для отсеивания повторных вызовов с одинаковыми номерами. Но в результате " ни когда такого не было и вот опять" - прошла одна сделка по FUTSPREAD и получил два срабатывания колбека.
function OnTrade (trade) if tr_num~=trade.trade_num then tr_num=trade.trade_num; new_trade=1
if (trade.sec_code==spreadPara) and (string.match(trade.brokerref,"limit")) then local lot=math.abs(trade.qty) --================================================================= if bit.band(trade["flags"],4)>0 then
SendOrder("S",lot,bid-500,"M", "market", fF,M_SellFF,"SPBFUT") SendOrder("B",lot,bid+500,"M", "market", nF,M_BuyNF,"SPBFUT") end end end end Это что какие то особенности FUTSPREAD.Возможно появление сделок по фьючам которые следуют за спредом несут признаки сделки по спреду?
Андрей спасибо за помощь. На сколько я помню МТ работает на исторических данных мне это не подходит. Да и не вспомню сейчас насколько он гибок в настройках, уж сам то я сваяю что мне в голову взбредет. На данный момент есть несколько наметок как развязать узелок. Возможно обойдусь оптимизацией алгоритма. За ссылки спасибо - "С" думаю все равно нужен будет со временем.
lergen написал: Возникла необходимость ускорить обработку данных в написанном тестере стратегий
А как тестер писали ? он на Луа у Вас ?
По теме, можно на С++ он запускает Луа скрипты спокойно, только нужно будет источники данных делать думаю и скрипты квика переписывать под тестер. По сути программа - тестер. (первое что в голову пришло)
Писал сам на lua. С "С" вариант мне не подходит пока с ним не работал. Дело не в языке даже а во взаимодействии его с виндой и с lua. Во все это вникнуть это отдельная тема - пока такой задачи не ставлю - со временем свободным не так хорошо как хотелось бы. Хочу пока с lua разобраться какие варианты есть передать параметры из скрипта работающего в квике скрипту который запущен в винде.
Возникла необходимость ускорить обработку данных в написанном тестере стратегий поскольку на том железе что я имею мой бот с таблицей необходимгого мне размера плохо справляется - всего 4 прохода в секунду(весь скрипт). По личному опыту знаю что аналогичный скрипт исполняемый не в квике а запущенный в винде работает в десятки раз быстрее. Подскажите есть какие нибудь варианты связать два скрипта работающие в квике и в винде кроме как через запись в файл? Вариант с С# пока не подходит поскольку с ним пока не работал.
if #st.tax < m then for r = #st.tax + 1 ,m - #st.tax do st.open_poz[r] = 0; st.open_fut[r] = 0; st.nh[r] = 0; st.h_r[r] = 0; st.tax[r] = 0; st.n_f[r] = 0; st.state_max[r] = 0; st.state_min[r] = 0; end end ....... ....... Потом та строка которая вызывает ошибку. Что не так?
И даже вот так if tonumber(st.n_f[i])>tonumber(0) then st.open_fut[i] = offer_Fut elseif tonumber(st.n_f[i])<tonumber(0) then st.open_fut[i] = bid_Fut end результат тот же
День добрый! Строка: if st.n_f[i] > 0 then st.open_fut[i] = offer_Fut elseif st.n_f[i] < 0 then st.open_fut[i] = bid_Fut end вызывает ошибку: attempt to index field 'n_f' (a number value)
lergen написал: Складывается впечатление что обновление open_interest несколько запаздывает. Это может быть так?
Уточните, относительно чего определяется запаздывание?
Во втором посте пример, цифра перед "//" показывает количество в последней заявке, после "//" - новое количество открытых позиций и в последних строках оно не меняется. Вопрос - количество открытых позиций пересчитывается после каждой сделки, может ли этот пересчет запаздывать?
И еще дополню свой вопрос : если я в этом же колбеке(OnAllTrade) буду обрабатывать все сделки по одному из инструментов то в моменты сильных движений колбек вероятно будет вызываться в связи с новой сделкой до того как я успею обработать старую. Не будут ли теряться при этом данные. т.е. новый вызов колбека не прервет работу старого или данные будут сохраняться в стеке?
lergen написал: Складывается впечатление что обновление open_interest несколько запаздывает. Это может быть так?
Уточните, относительно чего определяется запаздывание?
Во втором посте пример, цифра перед "//" показывает количество в последней заявке, после "//" - новое количество открытых позиций и в последних строках оно не меняется. Вопрос - количество открытых позиций пересчитывается после каждой сделки, может ли этот пересчет запаздывать?
Теоретически можно предположить что это все встречные сделки - в смысле открытие об закрытие и наоборот. Но столько подряд как то мало вероятно. А скажите какой строка в таблице параметров сделки может указывать на открытие или закрытие позиции?
Есть задача вычислять онлайн количество лонговых и шортовых открытых позиций. Для этого в OnAllTrade вставил код просчета опираясь на open_interest и qty. Предварительно делаю снимок потока этих данных по нужному мне инструменту. Складывается впечатление что обновление open_interest несколько запаздывает. Это может быть так? В колбеке поставлена защита от повторных срабатываний.
Анатолий написал: Совсем неожиданно образовалась еще одна проблема. Данная функция сработала до начала торговой сессии. В чем проблема? И как избежать таких срабатываний?
Обычное дело. Решение простое - время работы скрипта установи.С колбеками то же обычное дело - фильтруй по маркерам, например так: if tr_num~=trade.trade_num then tr_num=trade.trade_num .............. end Идентификатор обрабатываемого события сохраняем в глобальной переменной и повторный колбек с тем же идентификатором отсеивается.
Нужно что бы висела лимитная заявка!!! И при частичном исполнении снялся остаток. Можно этого добиться просто установив нужные параметры заявки. Если да то какие?
transaction={ ["TRANS_ID"]="111", ["ACTION"]="NEW_ORDER", ["CLASSCODE"]="SPBFUT", ["SECCODE"]="SiU7", ["EXECUTION_CONDITION"]= "KILL_BALANCE", ["OPERATION"]="B", ["QUANTITY"]="50", ["ACCOUNT"]=account, ["PRICE"]= price, } Заявка появляется в таблице как снятая. Подскажите что не так делаю?
Пример кода: .... function ...(dp) for i=-8.8,-0.8 do --message(i.."/"..dp) if dp==i then ..... end end end ... Для проверки совпадения переменных включил оператор message, совпадения происходят а проход через if нет. Оговорюсь что пару дней назад все работало. Файлы dat и info.log удалял не помогло, откат обновления не делал. Это что америка начала воплощать хакерские угрозы :D Или это подтверждение существования практики двойных стандартов и программировании:D
Отправлять пока ни чего не стал. Откатился на версию 70410. История та же. Может быть дело в инструменте (календарный спред) ? Глюк вылазит после сделок с ним. Странно но на первом терминале все работает. Еще на терминале где проявляется глюк заведен счет с единой денежной позицией - может в этом дело? Или просто мой брокер мне кислород перекрывает?
Письмо на этот адрес не доходят: "Извините, мы вынуждены информировать Вас, что письмо, которое Вы отправили, не может быть доставлено одному или нескольким адресатам"
При сохранении проблемы просьба прислать архив рабочего места QUIK с открытыми таблицами "Заявки" и "Позиции по клиентским счетам" с видимыми параметрами "Акт.покупка", "Акт. продажа". без файлов ключей и файла справки info.chm на адрес: quiksupport@arqatech.com указав в письме ссылку на данную ветку форума.
Уточните про архив с открытыми таблицами. Может скрин окна квика с открытыми таблицами?
Версия терминала 7122. Часто проявляется такой баг заявок активных нет а в таблице открытых позиций FORTS висит актуальная покупка или продажа. Иногда это уходило после удаления дат файлов. Сегодня ни чего не помогает. В результате система отвергает заявки - превышен лимит по инструменту.