Николай Камынин пишет: если выставление стопов соответствует их названию, то можно определить по расположению цены сделки предшествующей срабатыванию стопа по отношению к расположению позиции относительно рынка.
В общем случае это неверно. В большинстве случаев так прикинуть можно, но далеко не всегда.
Поэтому утвердительно ответить на первоначальный вопрос нельзя.
"в хранилище данных терминала порядок будет отличаться от того что представлен в визуальной таблице"
Таким образом, подыживаем:
Использовать для накопления истории и работы с таблицей всех сделок терминала (getitem) в готовом виде невозможно по причине неопределенной последовательности сделок в ней. Отследить в луа все возможные моменты, когда может измениться порядок следования сделок нереально.
Единственный выход который я вижу, это открыть 50 графиков нужных мне акций, назначит каждому графику свой идентификатор и получать значение цены с этих графиков с помощью функции getCandlesByIndex. Это единственный выход?
Нет. Это не единственный выход. Данные по инструментам или их параметрам можно собирать в реальном времени обычным скриптом lua и сохранять их в своей базе данных. Простейшая база - это csv файл. И уже из этой базы использовать необходимые значения для расчета вашего индикатора.
Однако в процессе вы столкнетесь с проблемами шаринга файлов и несинхронного обновления данных на вашем графике и поступления их в вашу базу. Проблемы решаемы, если делать все аккуратно.
green_X5 пишет: swerg , да нет проблем, уже есть быстро решенная задача. ) Назначаю имена принудительно, чтобы потом ловить events по Name в общем обработчике. Появилась потребность запускать несколько экземпляров скрипта для работы с разными бирж. тикерами и patch-ми к файлам обмена. Соотв. решил задачу как описал выше. Можно конечно было решить по-другому - дать именам самогенерироваться и потом их перехватить в переменные. Но так получилось комплекснее под мои задачи. Ваша qvcl, что на базе vcl 0.5.0, c хаком от Михаила.
А не проще в качестве уникального идентификатора взять номер потока, исполняющего main?
Sergey Gorokhov пишет: Здравствуйте Михаил, В рамках одного инструмента хронология всегда соблюдена, если это не так то это форс мажорная ситуация.
Да, Сергей, это понятно. Вопрос звучал про "по разным инструментам".
Пример. в таблице всех сделок заказаны сбер и газп. Судя по колбекам ничто не мешает сделке по сберу раньше, чем сделка по газп при том, что таймштамп газа раньше. Тем не менее в таблице всех сделок, построенных по этим 2 инструментам, порядок хронологический. Значит, идет какая-то обработка. Вот и вопрос - каков ее принцип?
Колбеки оналлтраде приходят по разным инструментам не обязательно в порядке возрастания времени. Таблица всех сделок терминала на взгляд формируется сразу в хронологическом.
Какой подход использует терминал для упорядочивания?
green_X5 пишет: Есть функция, возвращающая путь, по которому находится исполняемый скрипт - getScriptPath(). Можно прочитать литеру диска и имена папок. А имя самого файла-скрипта можно как-то получить? Может быть средствами LUA? Спасибо.
s_mike@rambler.ru пишет: SetColumnWidth(id,column,width) очень нужен, Сергей
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Viktor MMM пишет: не работал дальше пока не придет подтверждение. Это и есть синхронная работа. Но просто завешивать его циклом (а вместе с ним, наверное, и другие скрипты) я не хочу.
Виктор.
Цикл ожидания вида
Код
answer_present = false
while not answer_present do
sleep(100)
answer_present = проверяйте ваше условие
end
будучи запущенным в функции main или любой другой вызванной в конечном итоге из main, остановит только эту функцию.
Всем остальным скриптам от этого не холодно и не жарко.
Использование корутин в вашем случае даст только более элегантный код в том случае, если вы с этим механизмом подружитесь. в конце концов, Такой же цикл ожидания все равно будет присутствовать в коде, только уровнем выше (до диспетчера корутин)
Поэтому если вам нужно именно синхронное исполнение транзакции - смело используйте цикл с ожиданием внутри него.
В колбеках так писать нельзя - это подвесит терминал.
Теперь я подписываюсь на onalltrade и смотрю, что мне дают. Поля count в таймштампе здесь нет. Синхронизации результатов подписки и колбека невозможна, хотя напрашивается.
Если не секрет, и простите если за возможную глупость, но зачем синхронизировать OnAllTrade и колбэк DataSource для сделок?
Например, арбитражная синтетика, где важны не только цены, но и порядок следования сделок. alltrade даёт последовательность, а datasource - готовые таймсерии по ногам.
s_mike@rambler.ru пишет: В колбеках типа onalltrade изменений не было?
Добрый день, Михаил. А что там не так?
Михаил, Здравствуйте.
Возможно, я чего-то не понимаю, но мне кажется странной такая ситуация.
Получая таймсерию инструмента по подписке, я вижу в результатах поле count, что позволяет корректно работать со сделками, имеющими одиаковое время. Тут все хорошо.
Теперь я подписываюсь на onalltrade и смотрю, что мне дают. Поля count в таймштампе здесь нет. Синхронизации результатов подписки и колбека невозможна, хотя напрашивается.
Насколько я ничего не понимаю, если копнуть поглубже, исходные данные для обоих источников информации изначально одни и те же. Если это так - поле count хотелось бы увидеть и в соответствующих on-колбеках.
Еще странность. Если мне не изменяет память, то в данных, которые мы получаем по подписке, отсутствует поле микросекунд, а в результатах колбека это поле есть.
Пользуясь случаем. В вашем даташтампе фигурирует поле week_day, в стандарном datetime формате lua 5.1 - wday
Юрий пишет: Подскажите пож-та, можно ли где-то взять набор функций Qlua , что бы добавить в стандартный набор функций Автозаполнения в программу SciTe (наверное не важно в какую программу).
Создание таблицы текущая прибыль/убыток и высчитывать по позициям в терминале, Сегодня невозможно понять текущее состояние счета, пересчет происходит с долгими задержкам, что добавляет еще большего психологического давления
sam063rus пишет: ну понятно. ничего нового я не услышал
Да что тут сложного-то?
Завели флаг. Для простоты пусть это будет файл.
далее натравливаете на этот файл корутину , которая сопровождает этот файл. (крутится в цикле и на каждой итерации проверяет существование файла или его содержимое и делает yield).
С нужной периодичность эту корутину оживляете. Ну просто же.
Если хочется покрасивше - возможностей миллион, включайте фантазию.
Не стоит ждать от разработчиков, чтобы они вот такие хотелки всовывали в qlua. В чем проблема такое сварганить самому?
Не нравится файл - проблем нет - С++ в руки и обмен в резидентной программе ддл-ки. Нет С++ - через сом-объект.
Все это не нравится - поднимите именованные пайпы Пайпы - не устраивают - сокеты вам в руки.
В чём отличие с require() в плане подключения своих функций?
dofile, loadstring и аналогичные просто выполняют код на языке lua, который вы ему подсовываете (с использованием upvalues или без них).
require - это более сложный механизм, предназначенный для подключения универсальных модулей (написанных на lua или С++ и соответствующим образом оформленных)
os.time() выдает время не локальное, а UTC. То есть по гринвичу. Соответственно, оно отличается т вашего локального на смещение часового пояса. В момент написания примера на моем компьютере был часовой пояс +4, на вашем сейчас +3
Вычтите из 1379097615 - 1379094015. Получится 3600 - это 60*60 или 1 час
Pavel пишет: Бывает квик выдаёт ошибку, к примеру надо снять ордер, а этот ордер уже исполнился. Выскакивает сообщение, что нет возможности снять такой ордер и при этом скрипт останавливается. Не могу найти в описании такого, чтобы продолжить выполнение программы(типа какого нибудь исключения).
Это означает, что в ваш скрипт при невозможности снять заявку ведет себя соответствующим образом. Или возникает ошибка исполнения (типа индексация пустого значения) или преднамеренное неаварийное завершение работы.
Читать описания бесполезно, нужно анализировать сам скрипт на вопрос что происходит в нем при отказе в исполнении транзакции.
Ну интересно. А как результат просеивания через патерн распределить по разным переменным? ([%d%.]+) - тут нет ошибки в смысле определения количества цифр в числе?
Ну вы даёте.
a,b,c,d,e,f = string.match(xxx,yyy)
([%d%.]+) - нет ошибки. Что мешает попробовать и убедиться?
s_mike@rambler.ru пишет: Поэтому. Склад В НИКАК не может сообщить складу С(курьером, который тоже едет не мгновенно), что ВСЕ помидоры, отгруженные со склада А, достигли склада С.Он просто этого не знает. И никакие технические ухищрения этому не помогут.Помидоры могут быть в пути между А и В. Более того, за время, когда курьер едет с соообщением об окончании помидоров, новая партия может быть уже отправлена.
Это все понятно. Никто не просит сообщать о помидорах, не доехавших до В. Люди хотят знать, сколько помидоров было на складе В (т.е. сколько записей в таблице на сервере брокера) только на момент подключения к нему терминала С. И нужно это потому, что процесс передачи данных от сервера (В) до терминала (С) сразу после подключения занимает некоторое время, причем неопределенное. В это время на терминал передаются в основном данные, накопленные сервером раньше, а не только что приехавшие с биржи. И люди хотят иметь механизм точного определения того, что данные, находившиеся на сервере брокера (В) на момент установления связи с терминалом (С), наконец-то загрузились с сервера на терминал.
И это тоже невозможно принципиально. Немного поразмыслив, Вы тоже придете к этому заключению.
Все рассуждения на тему, что пока этот пакет дойдёт до клиента, количество записей может измениться, расценивается, как "отмазка", чтобы ничего не делать.
Серж.
Представьте модель.
Склад А (биржа). Склад В (сервер) Склад С (терминал)
Со склада А на склад В везут помидоры. Склад В не имеет понятия, когда помидоры к нему прибудут и прибудут ли вообще. Они имеют информацию о прибытии только в момент, когда оприходована приходная накладная.
Со склада В на склад С ИМЕЮЩИЕСЯ помидоры отправляются на склад С.
Надо иметь ввиду, что дорога между складами тоже занимает время.
Поэтому. Склад В НИКАК не может сообщить складу С (курьером, который тоже едет не мгновенно), что ВСЕ помидоры, отгруженные со склада А, достигли склада С. Он просто этого не знает. И никакие технические ухищрения этому не помогут. Помидоры могут быть в пути между А и В. Более того, за время, когда курьер едет с соообщением об окончании помидоров, новая партия может быть уже отправлена.
Поэтому любые поиски технического решения задачи бессмысленны. Такого решения нет. Именно поэтому разработчики и не в состоянии установить в складе С (терминале) никакие флаги "об окончательной загрузке" или "об актуальности данных"
Герман Виноградов пишет: Прошу вас сделать так, что бы метки сделок (зеленые и красные метки) о покупке и продажене исчезали с началом новой сессии, а всегда оставались на графике или хотя бы неделю.
сергей пишет: Таблица истории формируется на сервере QUIK опросом состояния параметров торгов через малые интервалы времени и может пропускать изменения параметров, следующие одно за другим в течение малого промежутка времени (например, несколько последовательных сделок по одному инструменту