Suntor (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 След.
Выставление "рыночных" заявок
 
Цитата
Александр написал:
Suntor, прошу прощения - не заметил в своем первом сообщении вообще отсутствующих кавычек у M.
Вы правильно указали на это  
Перепробовал за последнее время все какие мог варианты со всеми параметрами в заявке что уже путаюсь
Вроде уже очевидно было, когда указал на пропущенные кавычки, но судя по дальнейшей переписке нет.

У  вас ошибка в коде. Вы не поставили букву "M" в кавычки. Из-за этого она  воспринимается как переменная со значением nil. И присваивая этот nil  элементу таблицы с именем TYPE, вы просто удаляете его из таблицы, или  точнее вообще его не создаёте. В итоге, у вас остаётся только элемент  PRICE со значением "0". А поскольку TYPE не указан, то по умолчанию  заявка считается «Лимитированной», что вкупе с нулевой ценой приводит к  возврату ошибки: "Цена заявки должна быть положительна". Потому что для  «Лимитированной» заявки нельзя указывать нулевую цену.

Правильно  заполните все поля таблицы транзакции, после этого выведите их на печать  через ф-цию message, убедившись, что все поля присутствуют и имеют  правильные значения, а уже потом вызывайте ф-цию sendTransaction, и  тогда избежите подобных ошибок.

(*) Кавычки можете использовать  любые. Они в Lua сделаны, чтобы вкладываться друг в друга. Двойные в  одинарные и наоборот. Но в данном случае это не нужно.
Выставление "рыночных" заявок
 
Цитата
Александр написал:
При попытке выставления рыночной заявки на фондовом рынке возникает сообщение об ошибке "Цена заявки должна быть положительна".

order = {
ACTION = 'NEW_ORDER',
ACCOUNT = account,
CLIENT_CODE = client_code,
CLASSCODE = 'TQBR',
SECCODE = seccode,
OPERATION = operation,
TYPE = M,
PRICE = "0",
QUANTITY = '1',
TRANS_ID = id
}
Букву 'M' в кавычки поставьте: TYPE = 'M'
Сообщение «Вы уже работаете в системе».
 
Ещё раз всё замерло в 23:30. Подключиться смог уже только в час ночи.
Сообщение «Вы уже работаете в системе».
 
Сервер1 [91.209.122.66:15100] наконец соединился в 20:12.
Графиков только нет начиная с 19:05. Но стаканы бегают и таблицы всех сделок обновились.
Сообщение «Вы уже работаете в системе».
 
Сервер1 [91.209.122.66:15100] теперь выдаёт:
Соединение установить не удалось. Возможно, Вы используете ключи, которые не зарегистрированы на сервере. Сообщение об ошибке: "Connection was closed by peer: Can't get message size from net"
Сообщение «Вы уже работаете в системе».
 
Сегодня целый день у ВТБ проблемы с серверами.

В 13:16 перестали приходить данные торгов. Всё замерло. Отключился от сервера. Потом пытался подключиться ко всем 5-ти по очереди. Ни к одному не смог в течение 11 минут. В ходе этого пару раз выдавало сообщение «Вы уже работаете в системе».

Сейчас в 19:05 перестали приходить данные торгов. Снова отключился. Снова пытаюсь подключиться. И не могу ни к одному. Переодически выдаёт сообщение «Вы уже работаете в системе». Либо что сервер по указанному адресу и порту не обнаружен. И так до сих пор. Уже 19:41.
Импорт данных в QUIK из CVS?, Как можно импортировать данные в QUIK из CVS?
 
Цитата
Nikita написал:
Так все-таки как можно подгрузить котировки к графику? все что мог пересмотрел ничего не нашел)
Никак. Quik это терминал, а не программа для технического анализа. Или, как тут неоднократно писали представители разработчика, программа для «интрадей торговли».
Автоматическое добавление нового символа
 
Присоединяюсь. Нужна такая функциональность.
Глюк Quik 8.0.2.3 — Абракадабра скачет при прокрутке колёсиком вверх в «Дата и время» окна «Новости»
 
Цитата
Egor Zaytsev написал:
Проблема носит постоянный характер?
Нет. Один раз такое выскочило. Больше не повторялось.
Глюк Quik 8.0.2.3 — Абракадабра скачет при прокрутке колёсиком вверх в «Дата и время» окна «Новости»
 
Quik 8.0.2.3
При прокрутке колёсиком вверх в «Дата и время» окна «Новости» прокручивается текст из разных символов.
Столбик «Дата и время», третья строка:
 
Виснет при соединении с сервером и сбрасывается через 5 минут
 
Вот сейчас наблюдаю опять проблемы с работой первого сервера ВТБ [91.209.122.66:15100].

В 12:10:10 остановилось получение данных в таблицах всех сделок по фьючерсам. Например по SiZ9. И графики перестали обновляться по SiZ9. Но при этом графики по USDRUB_TOM продолжают обновляться. Потом вообще стакан по SiZ9 исчез. Подождал три минуты, разорвал соединение и заново подключаюсь к серверу. Опять «висяк» на 7..10 минут. И вот, подсоединился, стакан обновился, таблицы обновились, графики обновились. И что это было только что?
Виснет при соединении с сервером и сбрасывается через 5 минут
 
Да причём тут брокер. За последние 10 лет уже и брокера сменить успел. Перечитайте ещё раз сообщение.
Виснет при соединении с сервером и сбрасывается через 5 минут
 
Всегда были проблемы с соединением. И на текущей версии (8.0.2.3) и на всех предыдущих. Наверно лет 10 наблюдаю одно и тоже.

Очень долго идёт соединение с сервером, Quik блокируется, мышка вертится значком часов. Потом Quik отпускает, и он начинает потихоньку сначала показывать графики, потом загружать все сделки в «таблицы всех сделок» за весь день и пр. Минут через 7 можно что-то делать... но иногда, совсем тяжко. Quik может повисеть и сбросить соединение. Приходится повторять попытку. Но бывают совсем плохие дни, как сегодня, когда невозможно соединиться даже с 10-ой попытки.

Уже пробовал 5 раз, графики подгрузил, часть сделок в таблицы Всех сделок тоже закачалось, но продолжает сбрасывать:
Net error: An existing connection was forcibly closed by the remote host.

Переключился на другой сервер, тоже самое.

Можно что-то сделать? Изменить сетевую часть программы, чтобы она хотя бы не блокировалась на 5-7 минут повисая намертво, а крутила какие-нибудь стрелочки как браузер, кнопочку «стоп» добавить, чтобы останавливать процесс подключения. Сделать какой-нибудь осмысленный вывод сообщений об ошибках, чтобы писало, что она не загрузила, графики, сделки, портфель или ещё что-то.

Честно слово уже достало. Такое впечатление, что сетевую часть клиента писали люди, вообще не умеющие писать такие вещи.
---
Брокер ВТБ:
Сервер1 [91.209.122.66:15100]
Сервер2 [217.14.50.201:15100]
Оповещения пользователя в Квик, Оповещения (алерты), на соблюдение заданных условий на торговых инструментах
 
Можете назвать это «Автооповещения». И добавить также, как это сделано для звуков с галочками по каждому типу событий.
Оповещения пользователя в Квик, Оповещения (алерты), на соблюдение заданных условий на торговых инструментах
 
Звуки это хорошо. Но всё же хотелось бы, чтобы окно выскакивало со стандартным оповещением. Также, как когда его вручную ставишь.
Оповещения пользователя в Квик, Оповещения (алерты), на соблюдение заданных условий на торговых инструментах
 
Можно ли сделать настройку, чтобы оповещение автоматом ставилось по любой заявке и стоп-заявке?
Недельные опционы на смену, где их найти
 
Цитата
Egor Zaytsev написал:
Если опционы вам не нужны вообще, то можно попросить брокера, чтобы он отключим Вам их трансляцию.
Давайте мы лучше исправим ошибки в программе... согласны? А не будем просить брокера что-то там отключать.
И если вы внимательно смотрели на мою картинку, то должны были заметить, что глючат не только опционы, но ещё и фьючи повторно пытаются замениться. О чём это говорит, как вы думаете?

Я могу выложить вам в облако всё что вы хотите, только вот облака у меня нет. И времени его заводить персонально для вас тоже. Если вас интересует помощь пользователей, то стоит со своей стороны помочь им в этом хоть чем-нибудь конкретным. Хотя бы дав ссылку на FTP сервер вашей тех. поддержки, куда можно будет скинуть нужные вам файлы в пару кликов.
Недельные опционы на смену, где их найти
 
 
Недельные опционы на смену, где их найти
 
Цитата
Egor Zaytsev написал:
Такая проблема действительно ранее была и была исправлена, в 8 версии ее быть не должно. Проверьте, что инструменты у Вас нигде не открыты, а ранее замененные уже были заменены. Если все так, то закройте QUIK и пришлите нам на  quiksupport@arqatech.com .
Проблема как раз и возникла при переходе на 8-ую версию. Обновился в июле в один день сначала с 7.16.2.5 до 7.27.2.1, и потом ещё раз с 7.27.2.1 до 8.0.2.3. И сразу же появилась эта проблема. Никакие опционы у меня не открыты и никогда не открывались, я их вообще не использую.

Quik стоит в %ProgramFiles(x86)%\QUIK, рабочие файл с архивами графиков лежат в %APPDATA%\QUIK. Может из-за этого?
Первая папка ~333МБ (с архивами старых версий .\backup ~263МБ). Вторая ~700МБ (из которых .\archive ~582МБ, 1286 файлов).
Я так понимаю вам нужна только вторая папка? Но всё равно многовато для почтовой пересылки.

В .\archive файлов с префиксами SPBOPT нет.
Недельные опционы на смену, где их найти
 
У меня та же самая проблема. Версия 8.0.2.3.

Нашли решение проблемы у автора темы?
Как присвоить значение бару?, Это можно реализовать в скрипте или обязательно делать через написание индикатора?
 
Цитата
sav 312 написал:
Мысль понятна. Не буду заморачиваться с удалением 1-го элемента.
Поскольку данных за торговую сессию будет немного, буду обнулять массив в начале следующего дня. Всем спасибо за советы.
Оно и не получится логически. Если удалите индексный элемент, индекс которого время в секундах, то остальные элементы сдвинутся и поменяют свои индексы, а значит и время. Поэтому, последующие обращения по времени вернут данные не для тех свечей... собственно, поэтому, как я и написал в первом сообщении, просто присваивайте nil элементу таблицы с соответствующим индексом.
Как присвоить значение бару?, Это можно реализовать в скрипте или обязательно делать через написание индикатора?
 
Цитата
sav 312 написал:
Мне нужно удалить именно первую ячейку не ссылаясь на ее ключ.
Первая ячейка есть только для индексированных таблиц, то-есть для массивов. Для них же работают ф-ции table.insert и table.remove, которые понимают этот индекс, и умеют сдвигать остальные элементы таблицы при вставке и удалении элемента, что занимает время и ресурсы, особенно для больших таблиц. Поэтому сама идея, удалить первый элемент таблицы, а потом ждать, пока вся таблица перестроится, не слишком удачная, где она не является самоцелью... так сказать. Когда же вы присваиваете nil, элементу таблицы, то вне зависимости от того, индексная эта таблица или нет, никакого перестроения таблицы не происходит.

Поскольку в качестве ключа вы используете number возвращаемый ф-цией os.time, то ваша таблица индексная, но начинается не с первого элемента, а с 1,5 млрд.-ого... поэтому, особого смысла удалять 1,5 млрд.-ый элемент через table.remove, чтобы 1,5 млрд.+1 элемент и все остальные сдвинулись на его место нет. Заведите переменные хранящие начало и конец вашего массива, и сдвигайте их вперёд по мере удаления старых через nil сначала таблицы и добавления новых к концу вашей таблицы.
Как присвоить значение бару?, Это можно реализовать в скрипте или обязательно делать через написание индикатора?
 
Цитата
sav 312 написал:
Array3Min[os.time(t[N-2].datetime)] = KF
Как удалить первый элемент? Я так понимаю, что table.remove(Array3Min, 1) здесь не прокатит?
Присвоить ему значение nil:
Array3Min[os.time(t[N-2].datetime)] = nil
Заявки "Stop if Bid" и "Stop if Offer"
 
Цитата
denini написал:
Я еще поищу, может как-нибудь можно настроить внешнюю бесплатную трансляцию котировок light, на мне кажется, навряд ли.
Ну да, так вряд ли получится. Котировки должны идти сквозь тот же сервер, где вы ставите стоп-заявки, так как алгоритм их обработки там находится. Поэтому, даже если отдельно в клиент завести котировки из стороннего источника, это не позволит выставлять стоп-заявки по связанной бумаге на самом сервере. Трясите своего брокера, короче. Или, меняйте его. Либо, переходите к написанию своего торгового робота.
котировки с финама+индикаторы
 
Цитата
Let_it_go написал:
Как мне грамотно передать её в функцию индикатора?
Нужно сделать как в примере, выкинуть все поля, кроме нужного поля close?
Не совсем понятен вопрос... В коде примера, можно просто поменять в трёх местах tbl[i] на tbl[i][6] и всё... разве нет?
Ошибка при освобождении памяти строк(LUA C API), Unknown error. Possible unhandled exception.
 
Цитата
null написал:
Это рекомендация стандарта С++ 2003 года, что надо помечать переменные, которые не меняются const, так же как const функции.
Создаётся впечатление, что вы просто не можете объяснить, зачем поставили это ключевое слово в свой код. В итоге, ссылаетесь на некие рекомендации. Даже я уже для себя увидел, одну из причин, зачем оно там нужно, но вот всё-таки хотелось бы автора услышать... ну да ладно.

Цитата
null написал:
Чем владеть я сам разберусь, мне так удобнее, читаемость не меняется.
Разумеется. Это лишь советы и мнения, как и на любом форуме. Тем не менее, своё мнение я высказал, и не меняю его. В вашем коде auto затрудняет читаемость и ничего не даёт взамен. Если вы считаете, что для вас наоборот, читаемость повышается, ну что ж, значит у вас такое восприятие кода...

Цитата
null написал:
Разве где-то я смешиваю new/delete и new[]/delete[] между собой?
Ну, если вы вызываете «delete[] p», и этот p объявлен типом «xxx *», то да, с синтаксической точки зрения. Потому что «delete[] p» можно делать только для p объявленным как «xxx []». Я могу даже вам привести пример коротенькой программы, где такое использование delete[] p приводит к зацикливанию и подвисанию кода. Если хотите. Тем не менее, в вашем случае, с примитивными типами (char, int и т.д.), это сработает. И вызов delete[] отработает для char * также как и для «char []», как впрочем и вызов просто delete, также освободит всю память без утечек для char []. Это только для базовых примитивных типов delete и delete[] равносильны, хотя с точки зрения синтаксиса и идеологии C++ это неправильно. Я даже затрудняюсь сказать, насколько это «specific behavior» и насколько противоречит каким версиям стандарта C++, это нужно глубоко ковырять все ревизии, но тем не менее. Это вообще проблема языка, что он не может возвращать массивы из ф-ций, для этой цели сделали даже std::array шаблон для массивов, который оборачивает их в структуру, и их можно возвращать из ф-ций. То-есть, тема более глубокая и сложная. Но суть я сказал в начале...

Цитата
null написал:
Разве в большинстве компиляторов C++ delete реализован не через free и отличие лишь в том, что delete запускает дескруктор?
Отличие там в дополнительных полях, за пределами массива, куда delete и delete[] лезут, чтобы узнать сколько и чего им удалять. Если вы им подсунете указатель из malloc'а, то это приведёт к ошибке выхода за пределы массива в общем случае. Да и вообще, сами malloc и free реализованы через системные ф-ции типа HeapAlloc, HeapFree и т.д. Как и new и delete. Это разные группы ф-ций работы с памятью, со своими структурами, и вызывать ф-ции одной группы для обработки памяти выделенной из другой просто бессмысленно.
Порядок запуска скриптов при запуске QUIK, как и что поступает, из-за чего скрипт может обработать то, чего ему не надо обрабатывать
 
Цитата
Александр написал:
но с другой стороны хранить кучу уникальных номеров это со временем вырастет в проблему именно количества, что тоже не есть гуд
Хранить только то, что активно. Ставится заявка, номер её сохраняется. Когда по ней идут сделки, соответственно она и обрабатывается. Когда все сделки прошли, позиция закрылась, то и заявка и её номер удаляются, они больше не нужны. Даже если после переподсоединения, или на следующий день, Quik повторно пришлёт по этой заявке обратный вызов, то поскольку её номер уже был удалён, это вызов просто отбрасывается и всё. Робот хранит только несколько номеров нескольких активных заявок с которыми работает в данный момент, всё остальное просто отбрасывается.
Заявки "Stop if Bid" и "Stop if Offer"
 
Цитата
denini написал:
Меня заставила их искать нефть light на ФОРТС.
Тогда ещё вариант есть. Если у вас брокер транслирует отдельно «Мировые рынки: Товарные фьючерсы» или что-то подобное. И там есть котировки фьючерсов на Light с американских бирж. То можно привязаться к их цене, выставив стоп-заявки типа «Стоп-цена по другой бумаге». И выбрав соответствующий фьючерс с мировых бирж в качестве инструмента, из которого будет браться стоп-цена.
Порядок запуска скриптов при запуске QUIK, как и что поступает, из-за чего скрипт может обработать то, чего ему не надо обрабатывать
 
Цитата
Александр написал:
да не, у меня все просто, купил фьюч - сразу поставил стоп, продал - сделал тоже самое
Ну тогда нужно следить за временем и датой в сделках, если у вас внутридневная торговля... А вообще, по хорошему, каждая заявка и сделка имеют уникальные номера. И вот к ним нужно привязываться. И помечать, что заявки и сделки с такими-то номерами были обработаны, чтобы на них повторно не попадать. Это отдельная задача, и не такая простая на самом деле. У меня это вылилось в отдельную торговую библиотеку.
Ошибка при освобождении памяти строк(LUA C API), Unknown error. Possible unhandled exception.
 
Цитата
null написал:
const позволяет компилятору оптимизировать лучше код.
Что вы там оптимизируете? можете объяснить? или вы где-то что-то прочитали и теперь лепите этот const куда ни попади...
Цитата
null написал:
Чем вам C++ 11 не угодил? Синтаксический сахар, очень удобен, особенно когда тип переменной очень длинный, очень облегчает читаемость кода, компилятор сам подставит нужный тип.
Вы сначала классическим способом овладейте написания программ на Си/Си++, а потом уже за сахар новый хватайтесь. Ошибки типизации это бич для новичка. А всякие auto только способствуют этому. И читаемость программы падает, когда вы не видите типа. Для того чтобы повысить читаемость, наоборот, эти типы даже в префиксах переменных нотируют.
Цитата
null написал:
Это с каких пор надо освобождать через delete?
С момента написания Страуструпом своей первой книги. Там, если не ошибаюсь, целая глава есть посвящённая вопросу, почему нельзя смешивать вызовы new/delete и new[]/delete[] между собой и чем это грозит. Вообще, масса тем в сети по этому поводу. Помимо того что это плохой стиль, это вообще «undefined behaviour» в общем случае.

Цитата
null написал:
так как по адресу указателя, или после хранится размерность
никогда, как раз для этого и введён delete[], чтобы этого не делать и оставить совместимость по структуре памяти с чистым Си

Цитата
null написал:
Просто delete c char * у вас оставит утечку памяти.
Я писал про то, что «char *» это просто указатель на какую-то память, которая пришла из недр lua_tostring. Вместо «char *» могло быть объявлено как «void *». Под «char *» часто (стандартная практика) имеется ввиду просто указатель на память и всё. А не то, что там кто-то выделял массив через new char[]. Вот про что речь шла. Какая-то неизвестная ф-ция, вернула вам память неизвестного происхождения, и вы её зафигачили delete[] увидев, что указатель на эту память объявлен типом «char *». Понимаете суть своей ошибки?... более того, внутри lua_tostring по определению не может быть никакого new char[], так как она написана на чистом Си, как и вся Lua! Исходники Lua посмотрите. Там эта память через malloc выделяется, а вы её в delete[] засунули. Так вообще делать нельзя, это уже системная ошибка освобождения памяти выделенной разными библиотеками. Поэтому она вам «Unknown error. Possible unhandled exception.» и выдала... осознаёте суть происходящего?
Порядок запуска скриптов при запуске QUIK, как и что поступает, из-за чего скрипт может обработать то, чего ему не надо обрабатывать
 
Цитата
Александр написал:
Собственно, непонятно, почему вчерашние сделки датированы сегодняшней датой.
Потому что есть «Дата торгов», а есть «Дата сделки». Зайдите в настройки «Таблицы сделок», и добавьте ещё параметр «Дата сделки». Сразу увидите, что они отличаются. Дата торгов, показывает сессию которая началась после вечернего клиринга, она идёт вечером предыдущего дня, и днём следующего, это всё одна сессия торговая. Соответственно, в скрипте, нужно проверять даты сделок, которые приходят в ф-ции обратного вызова. Это во-первых.

А во-вторых, а почему собственно ваш скрипт не может ставить стоп по сделкам за предыдущий день? Может у вас такой алгоритм, в один день покупаете, потом ждёте и на следующий день уже выставляете стопы и закрываете позиции. То-есть, это не вопрос к датам в Quik, это вопрос к ведению позиций в вашем алгоритме. Как вы их храните, считаете, открываете и закрываете. Хоть в текстовый файл информацию сохраняйте...
Ошибка при освобождении памяти строк(LUA C API), Unknown error. Possible unhandled exception.
 
Цитата
null написал:
Что не так и как правильно освободить память?
Всё не так...
1. lua_tostring просто конвертирует элемент на стеке в строку, но эта строка остаётся в рамках памяти сборщика мусора, и после следующего вызова lua_pop попадает в мусор. Между вызовами lua_tostring и lua_pop необходимо выделить память и скопировать туда содержимое строки, если следовать логике вашего кода.
2. операция «delete[] firmid» вообще не имеет смысла по трём причинам: Во-первых потому что как уже выше сказал, lua_tostring возвращает указатель на внутреннюю память освобождаемую сборщиком мусора, во-вторых, потому что у вас в условии, при lua_isnil == true вообще вернётся указатель на константную строку, которую нельзя освобождать через delete, а в-третьих, потому что строку «char *» вообще нельзя освобождать через delete[], так как это не массив «char []», а такие строки выделенные внутри ф-ций, если их и нужно освобождать, то нужно просто через delete.
3. И что это за «const auto»? зачем вам «const»? И «auto» (новодельный С++11) вы тоже зря засунули, пишите честно типы и тогда не будет путаницы с типами и delete и пр...
Заявки "Stop if Bid" и "Stop if Offer"
 
Если это обычные стоп-заявки, но берущие стоп-цену не из последней сделки, а из последней котировки, то скорее всего не получится. Тогда да, ваша идея с «сигнальной заявкой» может сработать. В Quik можно настроить локальное оповещение по цене котировки, но там только окно сможет показать и звуковой файл проиграть. Привязать к нему выставление заявки тоже не получится...
Заявки "Stop if Bid" и "Stop if Offer"
 
Цитата
denini написал:
Спасибо!) Я уже думал об этом; получается выставить сигнализирующую заявку на 1 лот, например, которая при исполнении выставит уже нужную. Маленький убыток, но точно уверен в срабатывании и без плагинов. Наверное, придется так и делать иногда, спасибо!: )
Я вообще другое имел ввиду. Сейчас глянул в сети по вашим названиям, и у меня такое ощущение, что это чисто Форекс-фишка. Расшифруйте, как точно должны эти заявки работать, по какому алгоритму, возможно, в Quik можно соорудить подобное поведение.
Порядок запуска скриптов при запуске QUIK, как и что поступает, из-за чего скрипт может обработать то, чего ему не надо обрабатывать
 
Цитата
Александр написал:
Спасибо) +1 лвл к освоению форума. +10 к карме  Suntor
)))

Цитата
Александр написал:
работаю я с таблицами stop_orders, futures_client_holding и orders и только в колбеках. нет ни какой обработки исторического содержимого этих таблица
Ну таблицы, как внутренние, так и пользовательские в Quik разумеет обновятся актуальными данными при подключении к серверу. Если заявки и стоп-завки сработали в момент отсутствия, то при подключении информация по ним придёт. Просто без картинок, непонятно изначально по каким «лишним стопам» был вопрос.
Заявки "Stop if Bid" и "Stop if Offer"
 
Цитата
denini написал:
Как осуществить создание заявок "Stop if Bid" и "Stop if Offer".
В «Таблице заявок» через меню, пункт «Стоп-заявка "по исполнению"».
 
Сделки которых я не совершал, В клиентском портфеле зафиксированы не мои бумаги
 
Цитата
Сергей написал:
Подскажите.  Что это за таблица и зачем в моем клиентском портфеле инфа о каких-то левых бумагах
С просторов сети:
Цитата
Таблица "Купить/Продать"

Отображение текущих позиций клиента по бумагам и максимально возможном  количестве бумаг для покупки и продажи. В таблице отображаются  инструменты, включенные брокером в списки маржинальных бумаг и  принимаемых в обеспечение, а также инструменты, имеющиеся в портфеле  клиента.
Порядок запуска скриптов при запуске QUIK, как и что поступает, из-за чего скрипт может обработать то, чего ему не надо обрабатывать
 
Цитата
Александр написал:
откуда сюда картинки то можно вставлять?
Прямо под полем ввода текста, ссылка есть «Загрузить картинки». После загрузки, на неё нажимаете, и вставляете в текст.

Цитата
Александр написал:
и вообще это нормально, что скрипт обрабатывает все что было в прошлом, пока терминал был закрыт?
Если он у вас по таблице всех сделок работает, то да. В неё подгружаются все сделки за текущую торговую сессию при соединении Quik с сервером.
Съехали размеры из-за рекламы
 
Моё решение проблемы, маленькая библиотечка QuikBannerKiller.dll и скрипт для её запуска один раз при загрузке Quik.

Файл QuikBannerKiller.c (или .cpp, не важно) для компиляции QuikBannerKiller.dll:
Код
//Copyleft, Suntor, 2018
#include <windows.h>
#include <commctrl.h>

#define LUA_LIB
#define LUA_BUILD_AS_DLL
#ifdef __cplusplus
extern "C" {
#endif
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
#ifdef __cplusplus
}
#endif

#ifndef _countof
#define _countof(_array_)    \
    (sizeof(_array_)/sizeof((_array_)[0]))
#endif

#ifdef __cplusplus
extern "C" 
#endif
LUALIB_API int luaopen_QuikBannerKiller(lua_State *L)
{
    HWND hwndReBar;
    if (hwndReBar = FindWindowEx(FindWindow(TEXT("InfoClass"), NULL), NULL, REBARCLASSNAME, NULL))
    {
        REBARBANDINFO rbi = {sizeof(REBARBANDINFO), RBBIM_CHILD};
        {int i; for(i=0;i<SendMessage(hwndReBar, RB_GETBANDCOUNT, 0, 0) && SendMessage(hwndReBar, RB_GETBANDINFO, i, (LPARAM)&rbi);i++)
        {
            TCHAR szClassName[256];
            if (GetClassName(rbi.hwndChild, szClassName, _countof(szClassName)) && !lstrcmp(szClassName, TEXT("ShowBannerWindow")))
            {
                SendMessage(hwndReBar, RB_DELETEBAND, i, 0);
                break;
            }
        }}
    }

    return 0;
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {return TRUE;}

Файл QuikBannerKiller_Run.lua, из одной строчки:
Код
require "QuikBannerKiller"

Работает идеально, баннер отключается, размеры восстанавливаются. Пользуйтесь, на здоровье!
Запись в файл с одновременным чтением из другой программы?
 
Цитата
qt написал:
Будет ошибка или по очереди запишут?
Будет.
Съехали размеры из-за рекламы
 
Получил ответ от тех. поддержки ВТБ:
Цитата
Добрый день.
Данным баннер размещен в системе до пятницы включительно. В понедельник нужно будет перед включением программы запустить файл clear.cmd находящийся в папке Quik на локальном диске.
С уважением,

Сергей Череваткин
Эксперт
Департамент брокерского обслуживания
Банк ВТБ (ПАО)
Москва, Новая Басманная, 37А
тел: 8 (800) 333-24-24
broker.vtb.ru

Обнулил файл banners.dat, и выставил ему права в системе с запретом на запись, удаление и пр. Баннер исчез при загрузке Quik, но при подключении к серверу, всё равно появляется. Quik пытается сделать запись в файл banners.dat, получает ACCESS DENIED, но баннер всё равно показывает. Пока не знаю, что с этим делать. Можно накидать утилитку, и поменять стиль видимости на окне баннера в панели Quik, но время тратить на это не хочется. С другой стороны переделывать все вкладки тоже не хочется. Видимо придётся до пятницы ждать... в общем, без комментариев.
Запись в файл с одновременным чтением из другой программы?
 
Цитата
qt написал:
Открываю файл в блокноте и запись прекращается. Как открыть файл на запись чтобы можно было читать?
Вроде Блокнот (Notepad.exe) не читает изменения файла после открытия. Он единожды вычитывает файл в память, и всё. Можно во втором Блокноте открыть тот же самый файл, изменить и сохранить, и в первом Блокноте он не изменится, и сам Блокнот даже не предупредит, что файл был изменён извне. Поэтому, возможно у вас запись со стороны Lua идёт, но вы её просто в Блокноте не видите.

Попробуйте Notepad++ для сравнения, он по крайней мере сразу скажет, если файл извне был изменён, и предложит перезагрузить его. Можно опцию ещё поставить:
Settings -> Preferences... -> MISC. -> Update silently
тогда он должен сам автоматом перечитывать, по идее должно работать, но я не проверял...
Съехали размеры из-за рекламы
 
Честно говоря, даже не знаю, как про это писать. Открыл сегодня терминал, и вижу, что съехали все размеры окон на всех вкладках. Появились полосы прокрутки по вертикали и по горизонтали. Думал, что-то с Windows, с шириной панели задач и пр. А нет, оказывается, на панели инструментов Quik появилась реклама, в виде высокой подпанельки, из-за которой все размеры съехали. Попытался её убрать, но сделать это не получилось... Нет, я конечно всё понимаю, надо брокеру жаловаться и т.д. Но, господа разработчики, зачем вы это делаете? Превращаете биржевой терминал в какую-то шараварную утилиту с рекламой, которую нельзя отключить? Если, даёте такой функционал брокеру, выведите, галку в меню тогда. Просто свинство, по отношению к пользователям... больше слов нет никаких...

В меню не отключить:

Что я должен сейчас делать, перетаскивать размеры сотни окон на 30 вкладках?
Вычитание из числа округленного до сотых числа округленного до сотых, В скрипте две переменных, округленные до сотых. Из одной вычитается другая. Результаты математической операции ниже:
 
Цитата
sav 312 написал:
В скрипте две переменных, округленных до сотых. Из одной вычитается другая. Результаты математических операции ниже:
0.14999999999999
Подскажите каким образом получить нормальный результат?
Никак. Даже если напрямую запишите значение 0.15, оно всё равно не будет точным:
Код
local x = 0.15
print(string.format("%.16g", x))
print(string.format("%.17g", x))
Вывод:
Код
0.15
0.14999999999999999
Потому что десятичные дроби не раскладываются точно на двоичные по законам математики.
Lunatic Python проблема (питон+луа)
 
1. Для начала переведите в читаемый формат текст ошибки, который у вас на трёх последних картинках указан. Выделите в буфер «бракозебры» и распознайте их в декодировщике каком-нибудь... типа https://www.artlebedev.ru/decoder/advanced/, или любом другом который найдёте в сети. Или даже попробуйте перед запуском этих команд ввести chcp 1251, и ещё с chcp 866 попробуйте. Должно в итоге либо так либо так показать.

2. Файл lunatic-python-universal-2.1.1.tar.gz, который вы скачиваете через pip или easy_install, содержит только исходники библиотеки Lunatic Python, то-есть файлы:
luainpython.c
luainpython.h
pythoninlua.c
pythoninlua.h
Которые необходимо скомпилировать под Windows, чтобы получить библиотеку python.dll, которую вы потом будете в своём Lua коде подключать через команду:
python = require 'python'
Соответственно, чтобы это сделать, нужно, чтобы setup.py из пакета запустил компилятор типа gcc, которого он видимо не находит. И который вам нужно дополнительно поставить и настроить.

3. Даже когда поставите gcc под Windows, то скорее всего setup.py также не сможет сходу собрать библиотеку python.dll, так как на эту тему на оф. сайте Lua есть шпаргалка: http://lua-users.org/wiki/LunaticPython Внимательно её изучите, видимо придётся ручками по шагам собирать эту python.dll.
Вид бумаги в OnTrade, получить вид бумаги, по которой произошел трейд
 
Цитата
vgi написал:
ARQA не добавила все параметры ТТП в документацию.
это я знаю
Цитата
vgi написал:
Нашел его, сделав по рекомандации АРКИ DDE-экспорт ТТП в Excel с формальными заголовками по всем классам.
хитро и геморно... эт пришлось все классы в одну таблицу добавлять, потом для всех классов добавлять все параметры, потом все дубликаты параметров убирать, чтобы полный список параметров получить...  :cool:
Вид бумаги в OnTrade, получить вид бумаги, по которой произошел трейд
 
Цитата
vgi написал:
Код
local pi = getParamEx(class_code,sec_code ,"sectypestatic")
sectypestatic — откуда такой тип выцепили? не вижу в документации... только SECTYPE вижу
Можно ли одним скриптом луа запустить другой.?
 
Цитата
Алексей написал:
Mutex и MemoryMappedFile не создавая собственного внешнего кода на C (dll)?
Мутексы есть в w32.dll, но там нет memory-mapped файлов.
Поэтому, наверно проще всего через LuaIPC, там всё есть.
Quik + Python
 
Цитата
Let_it_go написал:
Suntor, а как мне её установить?
Тут не подскажу, сам его не ставил. Но судя по всему у вас не находит этот самый  Lunatic Python. Вы его под Windows собрали? Сама библиотека python.dll есть? Может вы просто голые сырцы скачали и пытаетесь их пакетной утилитой поставить, вот она и не находит библиотеку.
функции в функцию
 
Цитата
Archie_ написал:
если прописано fun_1() , то получим ошибку:   attempt to call a nil value (local 'fun_1')
Где-то у вас ошибка значит при вызове main, не подставили правильный аргумент. Вот код, компилируется и работает:
Код
function one()
    print("one")
end

function two()
    print("two")
end

function main(fun_1, fun_2)
        fun_1()
        fun_2()
end

main(one, two)
Вывод:
Код
one
two
Страницы: 1 2 3 4 5 6 7 След.
Наверх