Nikolay написал: При старте внутри торговой сессии уже есть накопленные данные. Их надо перебрать (если надо). Для этого будет написан код.Далее появляются новые записи. Например, через интервал 1 сек., появилось 10-100 записей. Берем и читаем их сразу за один проход, используя тот же, уже написанный, код И это без всяких колбеков.
Но ведь это очередь.
Да хорошо ушел от колбека. Читаю таблицу можно наверное не писать а через присвоение. А что делать с индексацией? Первого нужно вести, желательно и подчистить предыдущие данные.
Ну собственно мысль я Вашу уловил. Буду пробовать.
Ziveleos, Мне не нужен это просто пример, что можно писать другие переменные.
суть другая переменная local path; локализуется в body а присвоение идет в OnInit я так делаю когда переменных >200, если меньше лучше делать как описал Владимир.
function List.popfirst (list) local first = list.first; if first > list.last then --error("list is empty") return nil end local value = list[first] list[first] = nil -- чтобы разрешить сборку мусора list.first = first + 1 return value end
Ну вот пример от автора луа list[first] = nil -- чтобы разрешить сборку мусора
Nikolay написал: Как и в предыдущей структуре скрипта Lua, после его запуска первоначально выполняются сценарии, описанные в , если они присутствуют. Далее происходит вызов обработчика с именем OnInit(), если он присутствует. В обработчике OnInit() пользователь имеет возможность инициализировать все необходимые переменные и библиотеки перед запуском отдельного потока. После завершения функции OnInit() происходит создание отдельного потока РМ QUIK, и в этом потоке начинает выполнение функция main(), которая обязательно должна присутствовать в скрипт
Владимир, Все равно не понятно, вот документация. будет OnInit() или не будет. Из body будет брать и обрабатывать. Так устроен луа, а qlua не приделах. Я думаю это больше к вопросу с видимостью в самом луа.
Nikolay написал: Речь же про колбеки звучит странно, т.к. я слабо себе представляю использование колбеков в алгоритме, если они не обработаны все. Например, запуск в середине торгового дня. Половина колбеков уже прошла, надо читать прошедшие события из таблиц, и здесь уже не важно как инициализировать. Поэтому колбеки - это вспомогательный инструмент, не более. "Прибивать гвоздями" их к логике - не самая лучшая затея. Он может и не прийти, в конечном итоге. Гарантированной доставки в документации не декларируется.
Просто из собственного опыта при запуске от колбека пришло а основной цикл еще не запущен. Прошедшие события читаю и из таблиц перед за основного цикла, после запуска беру из колбека. А какие еще варианты обработать т. всех сделок?
Владимир, Ну конечно брокер, именно он выводит наши заявки на биржу. А выводить или не выводить это его проблема. Вы видимо имеете в виду форексные дома или это про Т+2? Ну акции не просто вывести а переместить их на депозитарий.
Я о другом котировки, объем, открытый интерес и много чего а главное Параметры RM Quik - это биржа именно ее алгоритмы.
Системная математика видимо имеется в виду QUIK, но основную лепту вносит биржа. ARQA Technologies декларирует что дают то и передаем.
Согласен с Вами реализация мягко говоря не "кудышняя", одно пустое обновление версий чего стоит (windows уже отстал). Но QUIK старая система писалась еще для сибирской биржи, вот и латают как могут.
Язык бессмысленно ругать другого нет. Я люблю луа - чтоб делал без него (Qpile).
Какие из торговых алгоритмов применять дело индивидуальное. Я люблю солянку.
Событие не включать имеет мин. риск.
Но мы ведь обсуждаем Вкл. Чтоб сделку совершил, вел ее по установленным правилам RM MM и желательно закрыл в +. Да еще при всем этом желательно чтоб терминал не падал
Ну а если серьезно посмотрите TradingVieW современная более серьезная разработка со своим языком, да и профи привлекают. Правда брокер на ММВБ один Алор.
Для того чтоб слово "Робот" звучало гордо мало одного алгоритма на стек или очередь.
Как минимум нужен RM? управление позицией (MM), сама торговая система (TS) с рядом включенных стратеги и много еще всего. Вы это лучше меня знаете. Одно установления тренда с мин. отставанием чего стоит, молчу уже про применение в стратегии.
История с серебром это хорошо описанная история в экономике, когда один фонд завладел рынком серебра. Вы как программист прекрасно понимаете каких средств и алгоритмов требуется чтоб держать рынок одной бумаги.
Посмотрите договор ММ на ММИБ.
Но мы сильно отошли от темы. Если есть желание давайте отдельный топик заведем. Под названием торговые алгоритмы или еще чего.
Может кто со знатоков Lua посмотрит и протестирует данный функционал.
Хотелось бы универсальные алгоритмы реализации методов получить! Подчеркиваю никто из нас не является конкурентом друг другу.
Чтоб двинуть цену нужны Капиталы! Чтоб двинуть цену нужном направлении нужно понимание, и это не закрытые форумы. Пример тому хорошо освещенная история в трайдинге по серебру.
На Ваш вопрос - В чём преимущество? Хотел сделать поправку на пост. Если скрипт небольшой, не требует особого быстродействия, не затратен по памяти. Вас все устраивает - То ни каких.
Если хотите оптимизировать Вас скрипт посмотрите "Програмирование на Lua" сэкономит много времени. Проверено!
Я не обсуждаю язык, бессмысленно другого нет. Я лишь прислушиваюсь к рекомендациям авторов. Проверить видимость легко, быстродействие скрипта легко с локальными и глобальными. SciTe одно нажатие.
А вот со сбором мусора сложней. Оказывается nil запускает сборщик.
Владимир, так я и обращаюсь к профи, с вопросом как правильно организовать в луа; Список, стек, очередь.
Мне тяжело судить какай язык или РЕ, у меня нет подобных знаний. Пользуемся что есть, хотя мне нравится луа, интуитивно понятен.
Таблица Всех сделок отражает кто сделку организовал, больше взять негде - это собственно "Лента". А Также Количество в сделке. Баланс я имел ввиду именно Количество контрактов в сделках по направлению сделки. А так же отслеживаю крупных игроков ну и другие римочки VSA SmartM.
Я смотрел Ваши посты Как понимаю у Вас свой подход вы не пользуетесь историей данных. А локализация в луа нужна чтоб не засорять для видимости и быстродействия.
Вопрос в организации переменных Вашего скрипта их локализации и видимости.
К примеру, "перед запуском основного потока main" всего 200 локальных переменных я постоянно выхожу за это число. Если как у Космонавта то сам lua ругается порой.
Забыл сказать что получаю в колбеке обработка Main(). И сколько прилетит в колбек неизвестно даже МаркетМейкеру. Отсюда и разница в расходе памяти. один ликвидный другой не очень.
"Простейшим способом реализации очередей в Lua является использование функций ins ert и remove из библиотеки table. Эти функции вставляют и удаляют элементы из произвольной позиции массива, сдвигая остальные элементы для согласования действий. Однако, подобные перемещения могут быть дорогими для больших структур.
Более эффективная реализация использует две индекса, один для первого элемента и один для последнего:
function ListNew () return {first = 0, last = -1} end
Во избежание загрязнения глобального пространства имен мы определим все операции со списком внутри таблицы, которую мы соответственно назовем List (таким образом, мы создадим модуль)."
Код
local List = {};
function List.new()
return {first = 0, last = -1}
end
--Теперь мы можем вставлять и удалять элементы с обоих концов за постоянное время:
function List.pushfirst (list, value)
local first = list.first - 1
list.first = first
list[first] = value
end
function List.pushlast (list, value)
local last = list.last + 1;
list.last = last;
list[last] = value;
--message('List.pushlast: ' ..'; '..tostring(last)..'; '.. tostring(value.price)..'; '.. tostring(value.qty))
end
function List.popfirst (list)
local first = list.first;
if first > list.last then
--error("list is empty")
return nil
end
local value = list[first]
list[first] = nil -- чтобы разрешить сборку мусора
list.first = first + 1
return value
end
function List.poplast (list)
local last = list.last
if list.first > last then error("list is empty") end
local value = list[last]
list[last] = nil -- чтобы разрешить сборку мусора
list.last = last - 1
return val ue
end
Если вы будете использовать эту структуру для обслуживания в порядке поступления, вызывая только pushlast и popfirst, то и first, и last будут постоянно расти.
Однако, так как мы представляем массивы в Lua при помощи таблиц, вы можете индексировать их как с 1 до 20, так и с 16 777 216 до 16 777 236.
Поскольку Lua использует для представления чисел двойную точность, ваша программа можем выполняться на протяжении двухсот лет, делая по миллиону вставок в секунду, прежде чем возникнет проблема с переполнением.
Получаю, сохраняю list и уматываю. function OnAllTrade(at) if is_run and at and at.sec_code==symbol and at.class_code==class then List.pushlast(list, at); end
Получаю из list строку для обработки. function AllTrade() at = List.popfirst(list); end
Все инструмента нормально для обработки одного инструмента, но в процессе работы скрипт накапливает память.
Вопрос к Профи, как нужно сделать чтоб максимально быстро обрабатывалась и очищалась очередь? Кто то может пример показать.
зря ругаете, функция необходима и ключевое здесь OnInit(STRING script_path) В данной функции пользователь имеет возможность инициализировать все необходимые переменные и библиотеки перед запуском основного потока main().
К примеру если обрабатываете колбек OnAllTrade() без нее и не обойтись.
Добрый день! Это давняя проблема! Более точно с версии 7,8,9,10. При аварийном обрыве соединения с сервером и последующим восстановлении. Скриншоты не сохранял. Да нужны ли они? см. арифметику в каком то режиме не сбрасывает в 0.
Если уж начали ремонтировать стакан может посмотрите и такую ошибку: При обрыве связи и последующий перезагрузке в стакане в столбце свои заявки - удваиваются активные заявки. Только их отображение в стакане. Это давняя проблема, Конечно ни на что не влияет, кроме восприятия в моменте. Но как то не солидно.
После обновления терминала quik до версии 10. и выше, перестал работать торговый сервис в таблице котировок (стакан), а именно не реагирует на на выделение строк в столбце Продажа, не выставляет заявки лимитированные на продажу, На покупку выставляет на продажу нет.
Вид стакана 3 в терминале (американский стакан) по строчное расположение котировок.
Подчеркиваю до версии 10 все работало отлично именно с 10 перестало, ошибка не устраняется.