Если говорить о доступных call back, то их список описан в документации. Не очень ясно, что требуется. Но можно предположить, что если речь про денежные средства, а не позиции, может подойти: OnMoneyLimit.
Но можете и сами организовать вызов некой функции при изменении данных портфеля, сделав регулярную проверку оного.
Пользователь
Сообщений: Регистрация: 29.07.2015
03.02.2021 17:26:25
Цитата
Nikolay написал: Если говорить о доступных call back, то их список описан в документации. Не очень ясно, что требуется. Но можно предположить, что если речь про денежные средства, а не позиции, может подойти: OnMoneyLimit.
Но можете и сами организовать вызов некой функции при изменении данных портфеля, сделав регулярную проверку оного.
Да интересует изменение в таблице "ПланЧистПос", но не одна из call back функций (
Вот же дался вам это клиентский портфель. Не надо в него смотреть с точки зрения программирования на Lua. Не надо.
Попробуйте OnFuturesClientHolding
Пользователь
Сообщений: Регистрация: 29.07.2015
03.02.2021 18:13:37
Цитата
swerg написал: Вот же дался вам это клиентский портфель. Не надо в него смотреть с точки зрения программирования на Lua. Не надо.
Попробуйте OnFuturesClientHolding
Я же уже писал, что торгую на Един. Бр. Счете, а изменение средств (свободных) для этого типа счета видны только в таблице "Состояние счета" (не доступно для LUA) и "Клиентский портфель" OnFuturesClientHolding щас попробую...
Пользователь
Сообщений: Регистрация: 02.02.2015
миру мир!
03.02.2021 18:17:20
Цитата
Михаил Филимонов написал: Я же уже писал, что торгую на Един. Бр. Счете, а изменение средств (свободных) для этого типа счета видны только в таблице "Состояние счета" и "Клиентский портфель"
Вы говорите какую-то неправду.
Пользователь
Сообщений: Регистрация: 02.02.2015
миру мир!
03.02.2021 18:18:42
Что такое "Един. Бр. Счет" ?
Пользователь
Сообщений: Регистрация: 25.09.2020
03.02.2021 18:21:38
Nikolay, Не иначе, чувак по чужим счетам лазить намылился, потому как для свои счетов это чистейший БСК.
Единый Брокерский Счет (брокер Открытие) Это счет, на котором можно одновременно торговать фьючерсами и акциями, при этом нет раздела средств по секциям средства для фьючерсов и акций - едины.
Точно, перепутал я. Т.к. "ПланЧистПос" - это параметр таблицы "Ограничения по клиентским счетам", то вам нужен OnFuturesLimitChange
PS Я пишу этот ответ в такой форме лишь в надежде на то, что вы свои вопросы в преть будете столь же полно и ясно формулировать.
Пользователь
Сообщений: Регистрация: 27.01.2017
03.02.2021 18:30:41
Единый счет - это конструкция, когда данные собираются из разных мест. Вы бы сказали хоть какие изменения должны вызывать событие. Если деньги - это одно. Если позиции по бумагам - это другое. Портфель - слишком общее понятие.
Пользователь
Сообщений: Регистрация: 02.02.2015
миру мир!
03.02.2021 18:37:21
Цитата
Михаил Филимонов написал: Это колонка в таблице "Клиентский портфель"
С точки зрения программирования на Lua и, тем более, событий, надо опираться на другие, базовые таблицы. Из информации которых формируются уже "Клиентский портфель" и "Таблица состояния счета".
Для срочного рынка:
Ограничения по клиентским счетам --> OnFuturesLimitChange
Позиции по клиентским счетам --> OnFuturesClientHolding
Для рынка ценных бумаг и валютного рынка:
Таблица лимитов по денежным средствам --> OnMoneyLimit
Таблица лимитов по бумагам --> OnDepoLimit
Пользователь
Сообщений: Регистрация: 25.09.2020
03.02.2021 18:37:36
Nikolay, Да что бы то ни было! Если чел торгует сам и не знает, что у него творится в портеле - это уже к ветеринару!
написал: Это колонка в таблице "Клиентский портфель"
С точки зрения программирования на Lua и, тем более, событий, надо опираться на другие, базовые таблицы. Из информации которых формируются уже "Клиентский портфель" и "Таблица состояния счета". Для срочного рынка: Ограничения по клиентским счетам --> OnFuturesLimitChange Позиции по клиентским счетам --> OnFuturesClientHolding Для рынка ценных бумаг и валютного рынка: Таблица лимитов по денежным средствам --> OnMoneyLimit Таблица лимитов по бумагам --> OnDepoLimit
Спасибо, понятно
Пользователь
Сообщений: Регистрация: 29.07.2015
03.02.2021 18:42:41
Цитата
Владимир написал: , Да что бы то ни было! Если чел торгует сам и не знает, что у него творится в портеле - это уже к ветеринару!
Ты уже был там, пенек?
Пользователь
Сообщений: Регистрация: 25.09.2020
03.02.2021 19:02:02
Михаил Филимонов, Я, лапуль, ВСЕГДА знаю, сколько у меня чего куплено, когда и почём, и сколько денег имеется - как свободных, так и потенциально свободных (тех, которые я могу освободить без продажи в убыток при необходимости). И так по каждой валюте и по каждому тикеру. Программист я или дерьмо беспомощное?
Пользователь
Сообщений: Регистрация: 29.07.2015
03.02.2021 19:19:48
и последний вопрос. Я никогда не использую функцию sleep, но в скриптах LUA, как я понял, это необходимость
В конструкции
function OnStop() is_run = false end
function main() while is_run do sleep(??????) end end
Какое значение в sleep(??) лучше ставить, чтобы скрипт работал как можно быстрее
Пользователь
Сообщений: Регистрация: 02.02.2015
миру мир!
03.02.2021 19:40:45
Цитата
Михаил Филимонов написал: Я никогда не использую функцию sleep, но в скриптах LUA, как я понял, это необходимость
Нет
Пользователь
Сообщений: Регистрация: 20.12.2020
03.02.2021 19:42:11
Цитата
Михаил Филимонов написал: и последний вопрос. Я никогда не использую функцию sleep, но в скриптах LUA, как я понял, это необходимость
В конструкции
function OnStop() is_run = false end
function main() while is_run do sleep(??????) end end
Какое значение в sleep(??) лучше ставить, чтобы скрипт работал как можно быстрее
sleep необходим чтобы дополнительный поток квика не загрузил ядро процессора наглухо.
Другими словами, конструкция без слипа, типа такой
Код
function main()
a=0
is_run = true
while is_run do
a=a+1
end
end
может легко повешать квик.
А значение выбирается исходя из разумности и целесообразности для конкретно вашей стратегии торговли.
Для кого-то раз в час нормально, а кому-то 10 раз в секунду надо проверять.
Естественно, чем меньше значение тем меньше задержка. 1 значение = 1/1000 секунды
Пользователь
Сообщений: Регистрация: 25.09.2020
03.02.2021 19:51:26
О, Господи! Скрипту ДО ЛАМПАДЫ! Этот цикл нужен юзеру для эмуляции отсутствующих прерываний по таймеру. У меня это раз в секунду, раньше было раз в полторы секунды, у многих это составляет доли секунды - столько, сколько нужно Юзеру. В любом случае, на скорость работы скрипта это не влияет НИКАК - во время sleep код скрипта не интерпретируется вообще.
Цитата
while f do -- бесконечный цикл до остановки скрипта r(); -- раз в секунду запускаем утилиту опроса sleep(1000); -- текущих данных и принятия решений по ним end; -- конец бесконечного цикла
Пользователь
Сообщений: Регистрация: 02.02.2015
миру мир!
03.02.2021 19:56:50
Цитата
BlaZed написал: Другими словами, конструкция без слипа, типа такой
Код
function main ()
a = 0
is_run = true
while is_run do
a = a + 1
end
end
может легко повешать квик.
Нет. Если процессор одноядерный - да, это будет заметно в скорости общей работы. Если процессор многоядерный (а это нынче стандарт де-факто) - то никто ничего даже не заметит, кроме термометра на процессоре.
Пользователь
Сообщений: Регистрация: 29.07.2015
03.02.2021 20:05:02
Смотрим как Квик внутри себя обновляет таблицы
Пользователь
Сообщений: Регистрация: 21.08.2015
03.02.2021 20:05:43
Если в мейне ничего не делается толкового, то единственный критерий - это сколько скрипт провисит после нажатия кнопки стоп. В этом случае одна секунда нормально. Если прицеплена длл, появляются варианты: а) создать событие и ждать на нем, тогда мейн вообще не просыпается до завершения скрипта, в OnStop выставляем событие; б) в мейне цикл сообщений, тут все как обычно в винде, из OnStop посылаем сообщение потоку мейна, что пора на выход. Окон можно не создавать и использовать PostThreadMessage; в) кому охота приключениев, тот может заценить вариант с портом завершения.
одно ядро полностью будет занято, это скорей теоретическая возможность, чем то, что надо делать. Даже слип(0) уже получше будет, поток будет сниматься и вставать в конец очереди, давая прочим потокам тоже ядро поюзать. Но тоже из области поиграть с этим.
Пользователь
Сообщений: Регистрация: 27.01.2017
03.02.2021 20:06:11
Если есть интерфейс у скрипта, ставить задержку меньше 50млс не рекомендуется. А если поставить 0, то по идее влиять не должно, раз у нас много ядер, но Квик все же "висит". Поэтому хоть что-то да лучше поставить.
написал: Другими словами, конструкция без слипа, типа такой
Код
function main ()
a = 0
is_run = true
while is_run do
a = a + 1
end
end
может легко повешать квик.
Нет. Если процессор одноядерный - да, это будет заметно в скорости общей работы. Если процессор многоядерный (а это нынче стандарт де-факто) - то никто ничего даже не заметит, кроме термометра на процессоре.
Так сколько ставить, чтобы бедолаге было комфортно?
Пользователь
Сообщений: Регистрация: 29.07.2015
03.02.2021 20:13:20
Высокоскоростная передача данных из МТ5 в свое приложение
Пользователь
Сообщений: Регистрация: 02.02.2015
миру мир!
03.02.2021 20:23:33
Цитата
Anton написал: одно ядро полностью будет занято, это скорей теоретическая возможность, чем то, что надо делать. Даже слип(0) уже получше будет, поток будет сниматься и вставать в конец очереди, давая прочим потокам тоже ядро поюзать. Но тоже из области поиграть с этим.
Мы таки про прозвучавшие в вопросе минимальные задержки говорим или просто рассуждаем?
Пользователь
Сообщений: Регистрация: 02.02.2015
миру мир!
03.02.2021 20:25:24
Цитата
Nikolay написал: Если есть интерфейс у скрипта, ставить задержку меньше 50млс не рекомендуется.
При чем тут "интерфейс у скрипта"? Что это вообще такое "интерфейс у скрипта"?
Цитата
Nikolay написал: раз у нас много ядер, но Квик все же "висит".
Где вы такое висение наблюдали? в каких условиях?
Пользователь
Сообщений: Регистрация: 02.02.2015
миру мир!
03.02.2021 20:27:16
Цитата
Михаил Филимонов написал: Высокоскоростная передача данных из МТ5 в свое приложение
Чем вы измеряли высокую скорость и чему она равна?
Пользователь
Сообщений: Регистрация: 29.07.2015
03.02.2021 20:30:01
Цитата
swerg написал: Чем вы измеряли высокую скорость и чему она равна?
Это способность скрипта реагировать на события (клики мышкой, нажатие клавиш). Существует и верхняя граница: "Задержка свыше 5 секунд вызывает раздражение, свыше 15 - нервные расстройства". У меня, например, возможна секундная задержка реакции на событие, а при смены режима выдачи талицы задержка может достигать 15 секунд, и это уже слегка раздражает, несмотря на то, что необходимость в это операции возникает очень редко.
написал: Другими словами, конструкция без слипа, типа такой
Код
function main ()
a = 0
is_run = true
while is_run do
a = a + 1
end
end
может легко повешать квик.
Нет. Если процессор одноядерный - да, это будет заметно в скорости общей работы. Если процессор многоядерный (а это нынче стандарт де-факто) - то никто ничего даже не заметит, кроме термометра на процессоре.
Попробуйте, запустите Ryzen 5 3500x на 6 ядер, квик скопытился после запуска
написал: Другими словами, конструкция без слипа, типа такой
Код
function main ()
a = 0
is_run = true
while is_run do
a = a + 1
end
end
может легко повешать квик.
Нет. Если процессор одноядерный - да, это будет заметно в скорости общей работы. Если процессор многоядерный (а это нынче стандарт де-факто) - то никто ничего даже не заметит, кроме термометра на процессоре.
Попробуйте, запустите Ryzen 5 3500x на 6 ядер, квик скопытился после запуска
В общем, значение слипа надо ставить минимум 1, тогда ничего не виснет. А выбирать адекватное значение уже в зависимости от требований конкретно вашей стратегии.
В общем, значение слипа надо ставить минимум 1, тогда ничего не виснет. А выбирать адекватное значение уже в зависимости от требований конкретно вашей стратегии.
Понятно, спасибо Поставил 100
Пользователь
Сообщений: Регистрация: 02.02.2015
миру мир!
03.02.2021 21:03:48
Цитата
BlaZed написал: Ryzen 5 3500x на 6 ядер, квик скопытился после запуска
Едрёна-батона... А я еще подумывал сменить комп на поновее-получше. Неужто опять враньё с этими ядрами/гигагерцами?!
Запустил скрипт этот с бесконечным цикл на своем Intel Pentium E2180 2ГГц, два ядра, прошу заменить. 2Гб оперативы. Да, проц грузится на 50%, это понятно, но QUIK совершенно без задержек реагирует на мышь, графики едут, к северу подключаюсь / отключаюсь, таблички сделок моргают, рукописные Lua-индикаторы работают. Неужели у вас на указанном железе в самом деле висит?! Определённо обманываете.
function OnFuturesLimitChange(f_change) a_table = getPortfolioInfoEx("MCXXXXXX", "XXXXX", 2) A_double = a_table.limit_open_pos lpParam = math.floor(A_double * 100) w32.PostMessage(HWND_BROADCAST, WM_EBS_MONEY, WParam, lpParam) end
function main() while is_run do a_table = getPortfolioInfoEx("MCXXXXXX", "XXXXX", 2) A_double = a_table.limit_open_pos lpParam = math.floor(A_double * 100) w32.PostMessage(HWND_BROADCAST, WM_EBS_MONEY, WParam, lpParam)
sleep(100)
end end
Установка ордера фьючерса отрабатывается (свободные средства изменяются), а акции проверю завтра, сегодня на счете мало средств (а это не Junior, а реал)
swerg написал: Неужели у вас на указанном железе в самом деле висит?!
Когда Lua только внедрили в QUIK sleep был обязателен в циклах, иначе QUIK зависал. Позже это дело поправили. В 8-й версии sleep снова стал обязательным. На одном и том же компьютере.
Но делать без sleep вообще, согласен с Антоном:
Цитата
Anton написал: Отдать одно ядро просто на бесполезный цикл - слишком роскошный вариант
Надо делать так, как надо. А как не надо - делать не надо.