Видео, где видно, как меняется «Вх. стоим-ть» в таблице «Состояние счета» , см. по ссылке https://disk.yandex.ru/i/g3xJRnt79WaNng (снято вечером 11.03.2021).
Чтобы ликвидировать изменение «Вх. стоим-ть» и добиться правильного расчета «Прибыль дня», я пошел испытанным путем – переустановил Quik с сайта брокера (версия у него прежняя – 8.11.0.66). После этого все нормализовалось .
Потом вспомнил о ваших рекомендациях – «закрыть терминал, удалить все файлы с расширениями .log \ .dat (кроме файлов alerts.dat, metastok.dat, portfolio.dat и scripts.dat), и заново запустить программу». Проделал все это с проблемным терминалом, который сохранил, и тоже все нормализовалось.
На фото внизу приведена правильная таблица «Состояние счета» после переустановки Quik. Это фото получено примерно через 10 минут после видео от кривоватого терминала. Видно , что на фото и видео «Вх. стоим-ть» значительно отличается. Инструменты на фото и видео одни и те же, только их порядок следования почему-то разный.
Теперь становится ясно, почему «Прибыль дня» на дефектном терминале меняется редко, а главное – почему она считается неверно. Потому что «Вх. стоим-ть» меняется синхронно с «Тек. Средства», причем на одну и ту же величину, так что их разность, равная «Прибыль дня», не меняется. А считается «Прибыль дня» неверно из-за неверного расчета «Вх. стоим-ть».
В дополнение к моему сегодняшнему сообщению о том, что неверно рассчитывается прибыль дня, еще привожу такие наблюдения: в таблице «Состояние счета» постоянно меняется итог «Вх. стоим-ть» с той же периодичностью, как «Ликв. ст-сть», «Свободно» и «Нереал. pl», т.е. примерно каждые 30 сек. Как же этот итог может меняться, если это стоимость на начало дня и она должна быть неизменна? Мистика!
При этом в итогах таблицы разность «Ликв. ст-сть»- «Вх. стоим-ть» не равна «Прибыль дня». Что и неудивительно, поскольку «Прибыль дня» меняется гораздо реже.
Данные в таблицах «Клиентский портфель» и «Состояние счета» друг другу соответствуют, т.е. «Прибыль/убыток»= «Прибыль дня», а «Вход средства» = «Вх. стоим-ть» .
В таблице «Состояние счета» присутствуют акции, облигации, и деньги в рублях (валютные позиции нулевые).
Вот уже второй день в таблице «Cостояние счета» неправильно вычисляется прибыль дня в итогах – ее значение явно завышенное . При этом прибыль дня меняется редко, примерно один раз в 5-10 минут, в то время как остальные данные («Ликв. ст-сть», «Свободно», «Нереал. pl») меняются примерно каждые 30 сек.
Версия терминала 8.11.0.66.
Что бы это значило?
P.S. Проверил на калькуляторе – просуммировал все строки в столбце «Ликв. стоимость». Сумма сошлась с итогом «Ликв. ст-сть» внизу таблицы (с точностью до копеек). Супер!
Опять таки в версии 8.11.0.66 сегодня столкнулся с таким явлением. Открываю позицию (рыночную) по акциям, появляется сообщение, что заявка исполнена. Но нигде нет никакого следа, что это так – в таблице заявок и сделок пусто, в таблице «состояние счета» акция не появилась, на графике нет символа треугольника открытой позиции. Подождал минут 10, но ничего не изменилось. С открытой позицией по фьючерсам то же самое. Вошел в мобильное приложение «ВТБ мои инвестиции» и вижу, что там новые открытые позиции присутствуют. Тогда закрыл терминал и перезапустил его с сервера 1 (первоначально был запущен с сервера 2). На этот раз новые открытые позиции появились.
Кроме этого, в новостной ленте при нажатии на заголовок темы не открывается текст – появляется сообщение «запрашиваемая новость отсутствует на сервере»/
Это что – программные ошибки или недоработки версии или что-то еще?
Roman Azarov написал: В таком случае, предполагаем, что дело было в повреждении одного из служебных файлов и/или файла настроек.
Спасибо за совет, буду иметь виду.
В версии 8.11.0.66 заметил еще 2 негативных момента:
1) Если выставить 2 заявки – одну стоп лимит, а другую тейк-профит, отдельно в разное время, то при срабатывании стоп-лимита тейк профит автоматически не снимается. Это странно, т.к. если сработала стоп-лимит, то в тейк-профите уже нет смысла. Если чел потерял бдительность и забыл снять тейк-профит, то например при длинной позиции может получить в «подарок» ненужный шорт. Правда в случае ввода обоих заявок в одном окне, когда выбираешь «тейк-профит и стоп-лимит», при исполнении стоп-лимита тейк-профит автоматически снимается, и на том спасибо.
2) В таблице «состояние счета» неактивны кнопки «закрыть» и «перевернуть», если стоит «на дату Tx». При этом кнопка «закрыть все» активна. Правда, эта проблема решается просто: если изменить Tx на Т2, то все кнопки становятся активны (потом можно обратно поставить на Tx).
В руководстве указана одна из причин этого:
«Значение вида лимита в поле «На дату» не совпадает с видом лимита, установленным в настройках Библиотеки расчета лимитов по классу, выбранному для оценки текущей позиции».
Но не знаю - где посмотреть и изменить эту настройку Библиотеки расчета лимитов?
Уже предпринял шаги до вашего ответа: скачал Quik той же версии что и была (т.е. 8.11.0.66) с сайта брокера. По опыту переустановка системы с сайта брокера обычно помогала в случае каких-то неполадок. Конечно ушло время на восстановление настроек, вкладок, окон и т.п., зато с вводом заявок по фьючерсам теперь проблем нет и переключение между графиками и вкладками идет быстрее (правда графики фьючерсов переключаются раз в 5 медленнее, чем графики акций, явно из-за того, что для фьючерсов добавил открытые позиции).
Так что дело не в версии терминала. Непонятно только, почему заявки по акциям выставлялись, а по фьючерсам нет (на фьючерсном счете денег было достаточно и открытых позиций не было).
После этого случая с невозможностью выставления заявок я установил мобильное приложение от брокера «ВТБ мои инвестиции». Если что, то на худой конец теперь можно закрыть позицию с мобильника. Как говорил один бывалый трейдер - надо заранее продумать, что делать в экстренных ситуациях, как то: сбой торговой системы, нет электричества, нет Интернета, сломался компьютер, землетрясение...
Спасибо. Все получилось. Скачал вашу библиотеку и положил в корень Quik, а звуковой файл - в каталог scripts (вместо простого beep выбрал имитацию капли дождя, размер файла 32 К) . "err=" можно убрать - тоже работает. Звуковой файл скачал с https://soundslibmp3.ru/load/721-besplatnye-zvukovye-effekty.shtml - может кому пригодится. В итоге код может быть такой:
Я наверно не очень четко объяснил, в чем проблема. Скрипт вызывается непосредственно из терминала Quik (автономно его вызывать нет необходимости). Раньше упомянутые выше операторы по генерации звука работали. Но видимо в Quik сделали какое -то обновление и теперь они не работают.
Все же я попробовал скачать файл qlua.exe по вашей первой ссылке, положил его в корень Quik и запустил. Но звук так и появился.
Да, еще обратил внимание, что при попытке заполнения окна ввода заявки по фьючерсам в заголовке окна появляется дополнительно «(Не отвечает)». Так что скорее всего теперь заявку вообще выставить не получится.
В новой версии 8.11.0.66 возникли и новые казусы. Буду излагать их в порядке важности.
Последние время терминал лагает неимоверно. При переключении между инструментами из таблицы текущих торгов графики загружаются очень долго – 10-15 сек (якорем к таблице текущих торгов привязаны 2 графика с минутным и дневным интервалом). Даже переключение между вкладками, например «котировки» и «портфель», занимало те же 10 сек. При этом крутится голубое колесо, как будто что-то загружается. Сегодня между вкладками переключается быстро, по акциям переключение между графиками разных акций ускорилось и можно считать в норме. Однако переключение между графиками разных фьючерсов по-прежнему идет долго.
Но хуже всего то, что при заполнении окна выставления заявки по фьючерсам то же самое лагание. Окно вызываю из таблицы текущих торгов правой мышью. Пытаешься заполнить поле «количество» - ничего не происходит, пытаешься поставить флаг «рыночная» - то же результат. Точнее, если подождать несколько минут, то заявка вроде заполнена и готова к исполнению. Но сами понимаете - цена уже не та. При заполнении полей обычно крутится то же голубое колесо. Даже если просто вызвать окно выставления заявки а потом ничего не заполнять и попытаться закрыть его, нажав на крест, то оно не закрывается! Появляется второе окно «рабочее место информационно-торговой системы Quik», в котором предлагается закрыть программу, ожидать отклика и т.д. Кое-как удается не перезагружать терминал. Сами понимаете, о торговле в таких условиях и речи быть не может.
Про другие проблемы напишу в следующий раз, чтобы не перегружать информацией.
Roman Azarov написал: В версии 8.11 данные пункты были перенесены в Система/Настройки/Основные настройки/Получение данных/Котировки и Система/Настройки/Основные настройки/Получение данных/Обезличенные сделки соответственно.
Да, теперь вижу. Если быть совсем точным, то эти пункты находятся в «Система/Настройки/Основные настройки/Программы/Получение данных».
Проверил на сделках - в новой версии терминала 8.11.0.66 количество лотов и суммы в таблицах сделок и «состояние счета» теперь совпадают.
Сделал все как вы написали: создал резервную копию старого терминала, скачал новую версию 8.11.0.66 по вашей ссылке, взял в новой версии все файлы из корня без вложенных папок и скопировал их в свой терминал с перезаписью. Все запустилось нормально, система предложила принять обновление программы, и я их принял (подождал пока загрузятся разные файлы, и перезагрузил терминал).
Пока на новом терминале позиции не открывал и не проверял, совпадает или нет количество лотов и суммы в таблицах сделок и «состояние счета».
Но заметил следующее: в меню «система»-«заказ данных» отсутствуют пункты «поток котировок» и «поток обезличенных сделок». В старом терминале они были.
Опять заново все переустановил, на случай вдруг где-то ошибся, но все равно эти пункты отсутствовали. Поэтому пока решил с торговлей на новом терминале подождать, до выяснения причин отсутствия этих пунктов меню.
Roman Azarov написал: 2) сделать резервную копию всей (со всем содержимым) папки с терминалом
Прошу прощения, делать резервную копию и перезаписывать только файлы в корне? Или кроме них также и все вложенные папки (archive, backup, и т.д.)?
И если позволите, второй вопрос: как я уже писал, флаг «проверять наличие обновлений» в настройках у меня включен, но обновление при каждом запуске Quik не предлагается. Почему? Раньше при запуске Quik переиодически предлагалось сделать обновления и я их делал. Может имеет смысл дождаться автоматического обновления на новую версию или его не будет?
Roman Azarov написал: - включить настройку Система/Настройки/Основные настройки/Программа - "Проверять наличие обновлений"
Флаг «проверять наличие обновлений» в настройках у меня уже был включен, но обновление при каждом запуске Quik не предлагается.
Цитата
Roman Azarov написал: - запросить новую версию у Вашего брокера если программа не обновится самостоятельно
У моего брокера (ВТБ) на его сайте предлагается скачать версии Quik 8.8 и 8.4. Их техподдержка утверждает, что более новая версия – это 8.8. А вы пишите, что надо скачать версию 8.11.0. Значит с 8.8 связываться не стоит?
Цитата
Roman Azarov написал: - если брокер не сможет предоставить нужную версию, скачать ее с нашего ftp: ftp://ftp.quik.ru/public/updates/8.11/quik_8.11.0_upd.zip В последнем случае, необходимо будет закрыть QUIK, сделать резервную копию папки, где он находится и скопировать все содержимое архива в первоначальную папку с подтверждением замены всех файлов.
Вот здесь не понял. В папке, где находится Quik, я вижу еще 10 вложенных папок и порядка 80 файлов. Что, надо сделать резервную копию всех этих файлов без вложенных папок? А потом скопировать эти файлы (без вложенных папок) в папку нового терминала? А если я сохраню только ключи доступа и скачаю вашу версию 8.11.0, то что будет? Если пропадут мои настройки, то это не проблема. Можно вручную их восстановить. Главное, чтобы система работала.
P.S. Вчера на другом компе (в другом районе города), где установлена такая же версия Quik (8.10.1.1), открыл позицию и там было все нормально, т.е. количество лотов в таблице сделок и «состояние счета» совпадало. Сегодня снова открыл позицию на первом компе и опять повторилась та же проблема. Но интересное дело: я успел заметить, что вначале в таблице «состояние счета» количество лотов было правильное, а буквально через секунду оно и сумма удвоились. При этом количество свободных денег не изменилось. Вверху таблицы стояло «на дату Tx» (где-то прочитал, что Tx есть только у брокера ВТБ) . Тогда я поменял Tx на T2 и c количествами все нормализовалось. Обратно поменял на Tx и опять все ОК. Из всего этого стало ясно, что ориентироваться надо на таблицу сделок, а закрывать позицию лучше путем встречной заявки, а не из таблицы «состояние счета».
Roman Azarov написал: Уточните, пожалуйста, версию используемого терминала.
Версия 8.10.1.1
Еще заметил одну вещь, может это поможет разобраться. После закрытия позиции из таблицы "состояние счета" я вызвал из меню "расширения" - "отчеты" отчет по всем сделкам клиента. В этом отчете была только первая сделка на покупку, а сделки на продажу не было. Она появилась в отчете примерно через полчаса. Неравенство количества лотов в таблицах сделок и "состояние счета" я первый раз обнаружил 13.01.2021, когда открыл позицию на покупку по ММК. До этого все было нормально..
У меня возникает такая ситуация при открытии и закрытии сделки:
Например, сегодня открыл сделку на покупку акций Сбербанка объемом 10 лот по рынку. В таблице сделок в столбце кол-во стояло «10», как и должно быть. Однако в таблице «состояние счета» в столбце «позиция» почему-то стояло «200», как будто я купил в 2 раза больше акций (если бы в настройках таблицы был выбран флаг «количество в лотах», то стояло бы наверно «20»). В столбце «стоимость» сумма была тоже в 2 раза больше, чем я реально купил, если судить по таблице сделок.
Но это еще не все. Когда я закрыл сделку из таблицы «состояние счета» (нажав на «С Закрыть»), то было продано 20 лот, а не 10. В результате открылась нежелательная позиция в 10 лот на продажу. Я это случайно заметил, и закрыл ее, но уже не из таблицы «состояние счета», а путем выставления заявки на покупку на 10 лот.
Прикладываю скриншот таблицы сделок. К сожалению скриншот таблицы «состояние счета» сделать забыл.
Просьба прокомментировать, как такое могло случиться?
У меня тоже вопрос по таблице обезличенных сделок (ОС), связанный с большим объемом данных– как очищать ее, точнее файл alltrade.dat, от уже ненужных акций?
Если в окне «заказ данных»- «поток обезличенных сделок» выбрать например «МБ ФР Т+Акции др» и в фильтре инструментов оставить только 1 акцию, то файл alltrade.dat от ненужных акций не очищается.
Это явно тормозит расчет в моем индикаторе из-за большого количества лишних строк в таблице ОС. Ведь, как я понимаю, функция getItem("all_trades",i) обращается именно к файлу alltrade.dat, который от ненужных акций автоматически не очищается.
Чтобы очистить файл alltrade.dat, необходимо в упомянутом окне нажать «получать заново данные по обезличенным сделкам». Но после этого данные даже по одной акции загружаются в таблицу ОС довольно долго, особенно в конце дня.
Логично было бы, чтобы при удалении ненужных акций в упомянутом окне или через фильтр при редактировании таблицы ОС файл alltrade.dat автоматически от них очищался.
Короче, вопрос в том, можно ли очищать таблицу ОС (файл alltrade.dat ) от ненужных акций, но при этом чтобы не тратилось время на повторную загрузку нужных акции?
Еще вопрос на эту же тему, что в таблице текущих торгов присутствуют не все данные: уже года два нет котировок по иностранным индексам и валютным парам – см. скриншот. В списке классов инструментов в «заказ данных – поток котировок» их нет.
Так и должно быть или есть какие-то настройки или зависит от брокера?
Вопрос видимо к разработчикам Quik. В таблице текущих торгов для облигаций ОФЗ присутствуют не все данные. На скриншоте видно, что не заполнены столбцы «кол-во сделок», «длительность купона» и «доходность». В то же время для облигации ВТБ Б-1-48, которая к ОФЗ не относится, эти данные есть.
При этом на другом терминале Quik по второму брокерскому счету таблица текущих торгов для ОФЗ полностью заполнена.
Кроме того, на этом втором терминале при редактировании таблицы текущих торгов в выпадающем списке почему-то больше разных ОФЗ, чем в первом терминале.
На первом (проблемном) терминале у меня раньше был ИИС, который я закрыл, но потом открыл новый ИИС и привязал его к этому же терминалу.
Anton написал: , раз уж зашли в таблицу символов, выбрали символ BEL (007 который) и все. Или просто зажали альт и набрали 007, как сказано выше.
Да, теперь получилось (beep двойной, а под управлением Quik был одиночный). Не знал, что в таблице надо было выбрать bel. С нажатым alt+007 в Notepad++ тоже получилось – надо было включить NumLock (в блокноте это почему-то не срабатывает).
Правда выдает сообщение «echo не является внутренней или внешней командой, исполняемой программой ил пакетным файлом» - см. скриншот. Конечно, хотелось бы от него избавиться, по возможности.
Пояснение: я запускаю файл t.bat, в котором строка ..\lua.exe t1.lua. В файле t1.lua единственная строка os.execute("beep.bat"). Файлы t.bat, t1.lua и beep.bat находятся на d:/lua/f, а lua.exe на d:/lua.
Что-то не получается. Например, если в редакторе «блокнот» нажать и удерживать alt и на правой клавиатуре набрать 007, то ничего не происходит, т.е. после «echo» ничего не добавляется.
А в редакторе Notepad++ не понимаю, что я должен сделать. В меню «правка» вхожу в таблицу символов и выбираю символ ^ (94-й) и что еще я должен ввести – 007 или 7? Пробовал и то и другое, но выдает ошибку «echo007 не является внутренней или внешней командой, исполняемой программой ил пакетным файлом». Вы пишите, что это ^7 – это один символ. Как же мне это ввести в Notepad++?
Мне надо адаптировать свою программу тестирования на исторических данных так, чтобы она запускалась не из Quik, а интерпретатором lua.exe из командной строки (типа ..\lua.exe myprogram.lua). В конце программы запрограммирован звуковой сигнал beep для оповещения, что программа завершила работу. Это сделано 2-мя операторами: require("w32") и w32.MessageBeep(w32.MB_OK). Я записал в каталог, где сидит lua.exe, библиотеку w32.dll. Однако lua.exe выдает ошибку “запуск программы невозможен, так как на компьютере отсутствует файл qlua.dll”. Если добавить этот файл, то тогда требует еще какой-то файл QCtrls.dll. Что все это значит – я не понимаю.
В каталоге, где сидит lua.exe, есть файл lua54.dll. Это видимо какая-то своя библиотека? Пробовал заменить в вышеупомянутых 2-х операторах w32 на lua54, т.е. написал require("lua54”) и lua54.MessageBeep(lua54.MB_OK). Но этот финт не помог - выдает ошибку Error loading module ‘lua54’ from file ‘D:\lua\lua54.dll’.
В общем сдаюсь. Может кто-то знает- как сделать, чтобы при запуске программы с помощью lua.exe работал сигнал beep?
Если задать тип линии TYPE_DASH или TYPE_POINT, то штрихи и точки идут очень близко друг к другу. Когда сжимаешь график, то они сливаются в сплошную линию.
Можно ли как-то регулировать ширину пробелов между точками или штрихами, чтобы сделать их реже?
Раньше в Quick можно было вывести графики по иностранным индексам, акциям и фьючерсам. Но с начала этого года их нет в списке инструментов. Техподдержка брокера ВТБ говорит, что теперь эти данные им не поставляют.
Мне нужны минутные данные в виде таблицы. На американских сайтах такая информация платная (на одном например подписка стоит $ 450 в год).
Может кто знает, где можно скачать минутные данные по наиболее ликвидным американским акциям и фьючерсам хотя бы за предыдущий торговый день?
Еще раз спасибо за помощь. Проверил - на положительных числах работает правильно. Только надо помнить, что если шаг цены=1, то надо задавать P=0 (а не 1).
Я сделал по другому – см. код ниже. При этом в качестве Р надо всегда задавать шаг цены, например если шаг цены=1, то надо задавать P=1. К остатку remnant добавляется +1.E-9 для корректировки. Дело в том, что иногда remnant принимает значения типа 0.3199999999999 вместо 0,32. Именно так получилось для числа 78.82 при step=0.5. Если +1.E-9 не добавлять, то в случаях типа 0.3199999999999 могут получиться неверные (заниженные) результаты.
Код
function main()
step=0.5
v1=FROUND(78.15,step) -- дает 78
v2=FROUND(78.25,step) -- дает 78.5
v3=FROUND(78.43,step) -- дает 78.5
v4=FROUND(78.61,step) -- дает 78.5
v5=FROUND(78.75,step) -- дает 79
v6=FROUND(78.82,step) -- дает 79
end
function FROUND(v,step)
remnant=math.fmod(v, step)
v=v-remnant
if (remnant+1.E-9)/step>=0.5 then
v=v+step
end
return v
end
Спасибо вам, Майк и Сергей. Да такого кода я бы точно не додумался.
Отрицательных чисел у меня нет, поэтому я написал по варианту Майка и немного упростил - убрал tonumber, а вместо (p or 0) написал просто p. Получилось так:
Код
function round(value, p)
local e = 10 ^ p
return math.floor(value * e + 0.5) / e
end
x0=round(123.456,0) -- дает 123
x2=round(123.456,2) -- дает 123,46
Правда моя задача немного сложнее - надо округлить выражение (high+low+close)/3 до шага цены. Если шаг цены равен 1 или 0,01 или 0,0001, то проблем нет, т.к. каждому шагу цены легко сопоставить параметр p, например: шаг=1 - p=0; шаг=0,01 - p=2; шаг=0,0001 - p=4.
Но что если шаг цены равен к примеру 0,5? Тогда число 78.61 следовало бы округлить до 78,5, но при p=1 оно округлится до 78,6, а при p=0 до 79. Хотя это уже мои проблемы, если найду решение, то напишу.
У меня тоже вопрос по математическим функциям. В руководстве не нашел функции округления до целого. Например, как сделать, чтобы 5,7 округлялась до 6, а 5,2 - до 5?
math.ceil(5.2) округляет вверх и дает 6 (а неплохо бы иметь 5)
math.floor(5.7) округляет вниз и дает 5 (а неплохо бы иметь 6)
выражение 5.2-5.2%1 отбрасывает дробную часть и тоже дает 5.
Или надо самому писать функцию округления по нормальным математическим правилам?
vgi написал: Что Вы подразумеваете под "клеткой"?Если это "пробел", то сделайте в "Опции - Настройки... - Синтаксисы - Настройка Табуляции - Размер табул. 1 и √ Заменить пробелом" и табайте блоки на один пробел влево-вправо.
Спасибо за помощь. Да, мне как раз и нужно сдвигать на 1 пробел.
Чтобы не открывать новую тему, задам свой вопрос здесь. В редакторе Notepad++ иногда нужно сдвинуть большие блоки текста вправо, например, когда добавил цикл и хочешь его выделить для облегчения восприятия. Приходится делать это для каждой строки блока и на это уходит много времени. Конечно, можно выделить блок текста и нажать Tab. Но тогда сдвигает блок на целых четыре клетки.
Вопрос: можно ли сдвинуть блок текста вправо всего на одну клетку?
Я вызывал функцию CreateDataSource из индикатора, а в списке доступных из индикатора функций ее нет. Видно в этом и есть причина, что не работает. Однако функции getCandlesByIndex тоже нет в этом списке, но она в индикаторе работает нормально. Если вызвать CreateDataSource из скрипта, то сообщения "attempt to call global 'CreateDataSource' (a nil value)" уже нет, но извлечь элементы таблицы data_source не получается. Полный код приведен ниже. Операторы message и PrintDbgStr выдают сообщение S=function: 152CAE70 Cl=nil Пробовал получить цену close 1-й свечи так: Cl=data_source[1].С и тоже безуспешно.
Код
function main()
data_source=CreateDataSource("TQBR","SBER",INTERVAL_M1)
S=data_source.Size -- кол-во свечей
Cl=data_source.C(1) -- Close 1-й свечи
PrintDbgStr("Size=" .. tostring(S) .. " Close1=" .. tostring(Cl))
message("Size=" .. tostring(S) .. " Close1=" .. tostring(Cl))
end
А если это так, то для накапливания истории сверх 3000 свечей надо ежедневно вызывать графики всех интересующих акций на всех интересующих интервалах, что трудоемко и практически нереализуемо. Если же в течение дня график акции не просматривал, или не запускал терминал, то должна образоваться дыра истории. В Lua есть функция CreateDataSource для заказа данных по нужному интервалу. По идее если написать скрипт с перебором интересующих акций и интервалов и запускать его ежедневно 1 раз, то можно накопить историю. Но и здесь я столкнулся с непонятной проблемой: функция не работает - выдает сообщение "attempt to call global 'CreateDataSource' (a nil value)".
Мне надо выполнить тестирование на исторических данных по акциям на 10 минутном графике, но не хватает глубины истории и из-за этого нельзя получить статистически значимые результаты.
В руководстве в разделе "перезаказ данных" написано, что на рабочем месте QUIK хранится до 65000 свечей. Такое количество свечей имеется только на минутном графике, а с увеличением периода оно уменьшается. На примере акций Сбербанка картина такая: 1 минута - 66061 свечей с 27.12.2017 5 минут - 21642 свечей с 10.05.2017 10 минут - 3106 свечей с 30.04.2018 1 час - 4270 свечей с 16.09.2016 1 день - 3142 свечей с 12.12.2005 В целом наблюдается закономерность: чем больше интервал графика, тем глубже история свечей. Поэтому непонятно, почему на 10 минутном графике история начинается позднее, чем на 1 и 5 минутном графиках и свечей на порядок меньше. Может это связано с тем, что раньше я постоянно работал с 1м, 5м, 1ч и 1д, а 10 минутные графики никогда не вызывал?
Вопрос такой: можно ли увеличить глубину истории на 10 минутном графике соразмерно с другими периодами, скажем до 10000-15000 свечей? может где-то есть архивы исторических данных?
Спасибо за помощь. Если в Settings задать Type=TYPE_CANDLE, то уровни линией не соединяются. Уровни рисуются пунктиром и хорошо видны при толщине 1. Странно, что в руководстве в списке типов линий TYPE_CANDLE вообще нет.
Когда в индикаторе с помощью функции SetRangeValue задаю горизонтальные отрезки на разных уровнях, то эти отрезки почему-то соединяются линией. Если ввести такой блок:
то получится картина, как на скане внизу слева, а по идее в точке sz-4 должно быть пусто. Попробовал добавить оператор SetValue(sz-4,1,nil), который казалось бы должен стереть эту линию, но это ничего не дает.
Все-же от ненужной линии можно избавится, если в Settings задать Type=TYPE_POINT. Тогда вместо линии будут точки, как показано на другом скане внизу справа. Вроде на этом можно и забить кол, однако разве душа трейдера может смириться с этим? - Точки то совсем блекнут при растягивании графика, то сливаются в яркую линию при сжатии графика, в отличие от нормальной линии.
Интересно, есть ли другое решение этой проблемы, с использованием Type=TYPE_LINE?
Egor Zaytsev написал: Проверьте в пункте меню Система - Заказ данных - Поток обезличенных сделок, есть ли в списке данный режим торгов. Если его нет, то брокер Вам не предоставил права на получение обезличенных сделок по данному классу.
Похоже, что не предоставил. Есть режим "РПС: Размещение: Адресные заявки (облигации)", но он к фьючерсам не относится. Других "РПС" нет.
Кстати биржа ответила на вопрос о несоответствии трансляции открытого интереса и объема так: "Термины SPBFUT и PSFUT относятся к работе QUIK, на бирже эти термины не используются. С данным вопросом вам следует обратиться к ARQA Technologies, разработчику ПО QUIK."
Вопрос был задан бирже в такой форме: "В Quik биржа транслирует открытый интерес фьючерса без привязки к классу, т.е. суммарно по классам SPBFUT и PSFUT, а объем транслирует только по классу SPBFUT. Можно ли узнать открытый интерес только по классу SPBFUT , либо объем по классу PSFUT, либо суммарный объем по классам SPBFUT и PSFUT? А если да, то возможно ли это в режиме реального времени на минутном графике? "
Видимо биржа не поняла вопрос или сделала вид, что не поняла.
Sergey Gorokhov написал: известен, он в таблице обезличенных сделок транслируется, опять же по классу PSFUT
Вызвал таблицу обезличенных сделок в конце дня и ни одной сделки по фьючерсам класса PSFUT я в ней не нашел. Все сделки там только класса SPBFUT. Проверил это по нескольким фьючерсам, результат один и тот же. При вызове таблицы обезличенных сделок я выбрал группу "FORTS: Фьючерсы", затем "Фильтр ценных бумаг" и добавил фьючерсы, потом добавил поле "Код класса". Может что-то сделал не так?
Sergey Gorokhov написал: это режим переговорных сделок по фьючерсам.
По определению режим переговорных сделок – это режим сделок без предварительного депонирования средств с отложенной датой исполнения, предусматривающий возможность заключения адресных и безадресных сделок. Заключать сделку с отложенной датой исполнения имеет смысл для хеджирования и тогда такие сделки должны быть крупными. Если запустить индикатор отношения изменения открытого интереса к объему F=dOI/V на дневном или часовом графике, то аномалия F>1 наблюдается только на старых барах, где объемы совсем малы. В то время еще действовал другой более ближний контракт и спекулянтов на текущем контракте было мало, а доминировали именно переговорные сделки. Это тоже говорит в пользу того, что переговорщики - это хеджеры. Как показывает расчет на минутном графике, неравенство F>1 выполняется на малом количестве минутных баров, всего 6-14% от их общего количества, в зависимости от фьючерса. Если верно то, что переговорные сделки крупные, то они должны составлять примерно такой же небольшой процент от всех сделок. Правда все эти наблюдения никак не решают проблему несоответствия dOI и V в трансляции данных биржей. Ведь объем переговорных сделок как я понимаю неизвестен.
Sergey Gorokhov написал: Вопрос к бирже. Она транслирует открытый интерес по инструменту без привязки к какому-либо классу. А объем в разрезе конкретного класса. Т.е. если инструмент в классе SPBFUT и PSFUT Вы увидите суммарный открытый интерес по обоим классам а объем только по инструменту из SPBFUT.
Тогда еще позволю себе задать 3 вопроса: 1. Что такое класс PSFUT? 2. Есть ли еще другие классы у фьючерсов кроме SPBFUT и PSFUT? 3. Где можно посмотреть какие бывают классы у фьючерсов?
Случайно обнаружил, что у фьючерсов отношение F= OI / V, где OI- пределы изменения открытого интереса на баре (т.е. high - low), а V – объем, бывает больше 1. По идее F должно быть не больше 1. F=1 может быть только в 2-х случаях: если все контракты на баре заключаются между новым покупателем и продавцом, либо все они закрываются между старым покупателем и продавцом. Если запустить приведенный ниже индикатор на минутном графике, то обычно F изменяется от 0 до 2, но у некоторых фьючерсов достигает и 100 (чтобы индикатор работал, надо для графика указать идентификатор Open_int – об этом подробнее было написано раньше 19.02.18) . Получается, что изменение открытого интереса превышает объем. Как такое может быть?
Код
Settings=
{Name="voi",
line={Name="F",
Color= RGB(0,128,255),
Type=TYPE_LINE,
Width=1}
}
function Init()
return 1
end
function OnCalculate(i)
sz= Size()
if i==1 then
Id="Open_int"
nc=getNumCandles(Id)
t=getCandlesByIndex (Id, 0, 0, nc)
end
if i<sz then
i1=i-1 -- нумерация для доступа к свече открытого интереса начинается от 0, а к свече объема от 1
if V(i)>0 then
F=(t[i1].high-t[i1].low)/V(i)
else
F=0
end
end
return F
end
SG написал: Это позиция, существующая несколько торговых дней. Для неё нужно рассчитывать вариационную маржу отдельно за каждый торговый день.
Спасибо за пример. По этой методике расчета все сошлось. Таким образом если позиция открыта несколько дней, то для контрактов, связанных с долларом (нефть, золото, индекс РТС), для расчета прибыли/убытка по позиции надо делать расчет вариационной маржи за каждый день из-за разных индикативных курсов и стоимости шага цены. Расчетная цена – это цена закрытия в 18-44 на минутном графике или в 18 ч на часовом. Архив расчетных цен содержится на сайте биржи в таблице фьючерсов по ссылке http://www.moex.com/ru/derivatives/contracts.aspx (надо нажать «итоги» по нужному фьючерсу). Для остальных контрактов достаточно просто вычесть из цены закрытия цену открытия.
Sergey Gorokhov написал: Да это возможно. Доступ происходит по тому же принципу что и к графику цены и объема. Если через getCandlesByIndex, то на нужном графике надо указать идентификатор. Если через CreateDataSource, то в четвертом параметре надо указать имя параметра, для открытого интереса это "numcontracts"
Спасибо за помощь. Первым способом через getCandlesByIndex получилось. На всякий случай поясню, если кто не знает как на графике указать идентификатор (в свое время сам не сразу это понял): правой мышью на графике жмешь «редактировать», в левом поле окна выбираешь диаграмму «кол-во открытых позиций», дальше «дополнительно», в поле «идентификатор» задаешь его, например Open_int. Код может быть такой:
Код
Id="Open_int"
nc=getNumCandles(Id)
t,n,l=getCandlesByIndex (Id, 0, 0, nc)
oi=t[nc-1].close -- закрытие самой новой свечи открытого интереса
Не могу понять еще такую вещь - что показывает объем в свече на графике открытого интереса?
SG написал: Сначала по терминологии: сделка не может длиться несколько дней, она совершается мгновенно, когда ваша заявка сводится в стакане с другой заявкой противоположного направления. В результате сделки появляется открытая позиция, которая будет существовать, пока вы её не закроете другой сделкой противоположного направления, или пока не наступит экспирация фьючерса. Комиссия за заключение сделки списывается в ближайший клиринг. Комиссия за исполнение фьючерса на экспирации - в клиринг, когда произошло исполнение. За удержание открытой позиции комиссия не берётся. Обратите внимание, комиссия за заключение сделки и комиссия за исполнение - это разные комиссии.
Спасибо за подробные разъяснения. Я думал, что кроме брокерской и биржевой комиссии за открытие и закрытие позиции берется еще комиссия за клиринг. Получается, что комиссия за исполнение фьючерса (согласно "Тарифы * организации ..." п. 7 раздела V) берется только в случае, если додержал контракт до исполнения. А за перенос (удержание) открытой позиции комиссия не берется.
Все же при расчете прибыли/убытка по позиции у меня не сходится с остатком собственных средств, когда позиция закрывается после 19 ч (реальный остаток немного меньше расчетного). Брокерскую и биржевую комиссию при этом учитываю в равной мере за открытие и закрытие. Может беру в расчет не тот индикативный курс? К примеру, если позиция по фьючерсу на нефть закрылась 15.02.2018 в 19-10, то какой индикативный курс надо брать для расчета прибыли/убытка – курс основного клиринга на 18-30 или промежуточного клиринга на 13-45 на дату 16.02.2018? По идее надо брать курс на 18-30.
Обратил внимание, что если позицию открыл до 14 ч, а закрыл после 14 ч того же дня, то в отчетах для фьючерсов, связанных с долларом (нефть, золото, валюты) объем сделки вычисляется на основании разной стоимости шага цены. Это вводит в заблуждение при расчете прибыли/убытка. Ведь на самом деле при этом расчете надо брать одну и ту же стоимость шага цены по состоянию на 18-30.
В отчете по всем сделкам в Quik биржевая комиссия присутствует дважды, даже если открытие и закрытие произошло в тот же день, что опять вводит в заблуждение. В брокерском отчете и в реестре комиссий в личном кабинете биржевая комиссия в данном случае встречается только один раз, как и должно быть.
У свечей на графике открытого интереса фьючерса такие же параметры как у свечей цены - H,L,O,C,V,T. Можно ли в Lua получить доступ к свечам открытого интереса, например к закрытию C?
Возможно, это вопросы к НКЦ (национальному клиринговому центру), но если кто знает, то просьба ответить хотя бы на часть вопросов насчет комиссии за клиринг по фьючерсам: 1) Когда начисляется и списывается со счета эта комиссия - в дату заключения сделки? в дату закрытия сделки? в каждый клиринг, включая дневной (если сделка длится несколько дней)? 2) Верно ли то, что комиссия за клиринг по фьючерсам на российские акции равна 0,00425% от суммы контракта? 3) Чему равна комиссия по фьючерсу на золото - 1 или 2 руб? 4) Где я могу посмотреть комиссию за клиринг по своим сделкам? (в брокерском отчете, в личном кабинете в реестре комиссий и в отчетах в Quik эта комиссия не указана)
На сайте http://www.moex.com/s93 в п. 4 даются ссылки, где смотреть клиринговые тарифы по фьючерсам. В "Тарифах клирингового центра" в п. 36.4 на стр. 65 говорится, что комиссия начисляется в дату ЗАКЛЮЧЕНИЯ сделки. В другом документе "Тарифы * кредитной организации ..." в п. 7 раздела V говорится, что комиссия начисляется в дату ИСПОЛНЕНИЯ фьючерсного контракта. По золоту в упомянутом разделе V тарифов указано 1 руб., а в таблице "клиринговые сборы за исполнение срочных контрактов (вызывается по одноименной ссылке в п. 4 сайта) - 2 руб. Разобраться в этих замечательных документах не так то просто.
По теме отсутствия данных на графике еще 1 один вопрос: На графике «кол-во открытых позиций» у фьючерсов не отображается часть данных с начала сессии, если вошел в терминал через некоторое время после открытия сессии. Если через какое-то время выйти из терминала и снова войти, то картина не меняется, т.е. данные отсутствуют на том же самом интервале. На следующий день пробел в данных прошлого дня заполняется. Так и должно быть или есть способ получить пропущенные данные? График с пропуском данных «кол-во открытых позиций» выглядит так: