Эвента на изменение таблицы "Клиентский портфель"

Страницы: 1 2 След.
RSS
Эвента на изменение таблицы "Клиентский портфель"
 
Добрый день!

Как-нибудь можно реализовать такое?
 
Если говорить о доступных call back, то их список описан в документации.
Не очень ясно, что требуется. Но можно предположить, что если речь про денежные средства, а не позиции, может подойти: OnMoneyLimit.

Но можете и сами организовать вызов некой функции при изменении данных портфеля, сделав регулярную проверку оного.
 
Цитата
Nikolay написал:
Если говорить о доступных call back, то их список описан в документации.
Не очень ясно, что требуется. Но можно предположить, что если речь про денежные средства, а не позиции, может подойти: OnMoneyLimit.

Но можете и сами организовать вызов некой функции при изменении данных портфеля, сделав регулярную проверку оного.
Да интересует изменение в таблице "ПланЧистПос", но не одна из call back функций (
  • OnAccountBalance
) не работает  
 
  • OnAccountPosition,
  • OnDepoLimit
  • OnMoneyLimit
  • Не работают
  • Регулярная проверка, это тоже самое, что
  • function main()
  •  while is_run do
  •    a_table = getPortfolioInfoEx("ххххх", "ххххх", 2)
  •    A_double = a_table.limit_open_pos
  •    lpParam = math.floor(A_double * 100)
  •    w32.PostMessage(HWND_BROADCAST, WM_EBS_MONEY, WParam, lpParam)
  •    sleep(10)
  •  end
  • end
 
Нужна эвента
 
Неужели нельзя сделать редактирование сообщений?
 
Вот же дался вам это клиентский портфель.
Не надо в него смотреть с точки зрения программирования на Lua. Не надо.

Попробуйте OnFuturesClientHolding
 
Цитата
swerg написал:
Вот же дался вам это клиентский портфель.
Не надо в него смотреть с точки зрения программирования на Lua. Не надо.

Попробуйте OnFuturesClientHolding
Я же уже писал, что торгую на Един. Бр. Счете, а изменение средств (свободных) для этого типа счета видны только в таблице "Состояние счета" (не доступно для LUA) и "Клиентский портфель"
OnFuturesClientHolding щас попробую...
 
Цитата
Михаил Филимонов написал:
Я же уже писал, что торгую на Един. Бр. Счете, а изменение средств (свободных) для этого типа счета видны только в таблице "Состояние счета" и "Клиентский портфель"

Вы говорите какую-то неправду.
 
Что такое "Един. Бр. Счет" ?
 
Nikolay, Не иначе, чувак по чужим счетам лазить намылился, потому как для свои счетов это чистейший БСК.  :smile:  
 
Не работает
 
Цитата
swerg написал:
Что такое "Един. Бр. Счет" ?
Единый Брокерский Счет (брокер Открытие)
Это счет, на котором можно одновременно торговать фьючерсами и акциями, при этом нет раздела средств по секциям
средства для фьючерсов и акций  - едины.
 
Цитата
Михаил Филимонов написал:
Не работает

Всем пофик.

Вот честное слово хочется именно так вам кратко отвечать на ваши краткие и и очень небрежно заданные вопросы.
 
Цитата
Михаил Филимонов написал:
Да интересует изменение в таблице "ПланЧистПос", но не одна из call back функций (

Нет такой таблицы "ПланЧистПос"
 
Цитата
swerg написал:
Цитата
Михаил Филимонов написал:
Не работает

Всем пофик.

Вот честное слово хочется именно так вам кратко отвечать на ваши краткие и и очень небрежно заданные вопросы.
Не вызывается OnFuturesClientHolding при изменении Таблицы "Клиентский портфель"
 
Цитата
swerg написал:
Цитата
Михаил Филимонов написал:
Да интересует изменение в таблице "ПланЧистПос", но не одна из call back функций (

Нет такой таблицы "ПланЧистПос"
Это колонка в таблице "Клиентский портфель"
 
Цитата
Михаил Филимонов написал:
Не работает

Точно, перепутал я. Т.к.  "ПланЧистПос" - это параметр таблицы "Ограничения по клиентским счетам", то вам нужен OnFuturesLimitChange

PS
Я пишу этот ответ в такой форме лишь в надежде на то, что вы свои вопросы в преть будете столь же полно и ясно формулировать.
 
Единый счет - это конструкция, когда данные собираются из разных мест. Вы бы сказали хоть какие изменения должны вызывать событие.
Если деньги - это одно. Если позиции по бумагам - это другое. Портфель - слишком общее понятие.
 
Цитата
Михаил Филимонов написал:
Это колонка в таблице "Клиентский портфель"

С точки зрения программирования на Lua и, тем более, событий, надо опираться на другие, базовые таблицы. Из информации которых формируются уже "Клиентский портфель" и "Таблица состояния счета".
  • Для срочного рынка:
    • Ограничения по клиентским счетам  --> OnFuturesLimitChange
    • Позиции по клиентским счетам  --> OnFuturesClientHolding
  • Для рынка ценных бумаг и валютного рынка:
    • Таблица лимитов по денежным средствам   --> OnMoneyLimit
    • Таблица лимитов по бумагам  --> OnDepoLimit
 
Nikolay, Да что бы то ни было! Если чел торгует сам и не знает, что у него творится в портеле - это уже к ветеринару!
 
Цитата
swerg написал:
Цитата
Михаил Филимонов написал:
Это колонка в таблице "Клиентский портфель"

С точки зрения программирования на Lua и, тем более, событий, надо опираться на другие, базовые таблицы. Из информации которых формируются уже "Клиентский портфель" и "Таблица состояния счета".
 Для срочного рынка:
 Ограничения по клиентским счетам  --> OnFuturesLimitChange
 Позиции по клиентским счетам  --> OnFuturesClientHolding
   Для рынка ценных бумаг и валютного рынка:
 Таблица лимитов по денежным средствам   --> OnMoneyLimit
 Таблица лимитов по бумагам  --> OnDepoLimit
Спасибо, понятно
 
Цитата
Владимир написал:
Nikolay, Да что бы то ни было! Если чел торгует сам и не знает, что у него творится в портеле - это уже к ветеринару!
Ты уже был там, пенек?
 
Михаил Филимонов, Я, лапуль, ВСЕГДА знаю, сколько у меня чего куплено, когда и почём, и сколько денег имеется - как свободных, так и потенциально свободных (тех, которые я могу освободить без продажи в убыток при необходимости). И так по каждой валюте и по каждому тикеру. Программист я или дерьмо беспомощное?
 
и последний вопрос.
Я никогда не использую функцию sleep, но в скриптах LUA, как я понял, это необходимость

В конструкции

function OnStop()
 is_run = false
end

function main()
while is_run do
  sleep(??????)
 end
end

Какое значение в sleep(??) лучше ставить, чтобы скрипт работал как можно быстрее
 
Цитата
Михаил Филимонов написал:
Я никогда не использую функцию sleep, но в скриптах LUA, как я понял, это необходимость

Нет
 
Цитата
Михаил Филимонов написал:
и последний вопрос.
Я никогда не использую функцию 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 секунды
 
О, Господи! Скрипту ДО ЛАМПАДЫ! Этот цикл нужен юзеру для эмуляции отсутствующих прерываний по таймеру. У меня это раз в секунду, раньше было раз в полторы секунды, у многих это составляет доли секунды - столько, сколько нужно Юзеру. В любом случае, на скорость работы скрипта это не влияет НИКАК - во время sleep код скрипта не интерпретируется вообще.
Цитата
while f do -- бесконечный цикл до остановки скрипта
r(); -- раз в секунду запускаем утилиту опроса
sleep(1000); -- текущих данных и принятия решений по ним
end; -- конец бесконечного цикла
 
Цитата
BlaZed написал:
Другими словами, конструкция без слипа, типа такой
Код
   function   main ()
  a =  0 
  is_run  =   true 
   while  is_run  do 
    a = a +  1 
   end 
 end 
  
может легко повешать квик.

Нет.
Если процессор одноядерный - да, это будет заметно в скорости общей работы.
Если процессор многоядерный (а это нынче стандарт де-факто) - то никто ничего даже не заметит, кроме термометра на процессоре.
 
Смотрим как Квик внутри себя обновляет таблицы
Обновление таблицы "Клиентский портфель"
 
Если в мейне ничего не делается толкового, то единственный критерий -  это сколько скрипт провисит после нажатия кнопки стоп. В этом случае  одна секунда нормально. Если прицеплена длл, появляются варианты: а) создать  событие и ждать на нем, тогда мейн вообще не просыпается до завершения  скрипта, в OnStop выставляем событие; б) в  мейне цикл сообщений, тут все как обычно в винде, из OnStop посылаем  сообщение потоку мейна, что пора на выход. Окон можно не создавать и использовать PostThreadMessage; в) кому охота приключениев, тот может заценить вариант с портом завершения.

Цитата
swerg написал:
то никто ничего даже не заметит
одно ядро полностью будет занято, это скорей теоретическая возможность, чем то, что надо делать. Даже слип(0) уже получше будет, поток будет сниматься и вставать в конец очереди, давая прочим потокам тоже ядро поюзать. Но тоже из области поиграть с этим.
 
Если есть интерфейс у скрипта, ставить задержку меньше 50млс не рекомендуется.
А если поставить 0, то по идее влиять не должно, раз у нас много ядер, но Квик все же "висит". Поэтому хоть что-то да лучше поставить.
 
Цитата
swerg написал:
Цитата
BlaZed написал:
Другими словами, конструкция без слипа, типа такой
 
Код
      function    main ()
  a  =    0  
  is_run   =     true  
    while   is_run   do  
    a  =  a  +    1  
    end  
  end  
    
 может легко повешать квик.

Нет.
Если процессор одноядерный - да, это будет заметно в скорости общей работы.
Если процессор многоядерный (а это нынче стандарт де-факто) - то никто ничего даже не заметит, кроме термометра на процессоре.
Так сколько ставить, чтобы бедолаге было комфортно?
 
Высокоскоростная передача данных из МТ5 в свое приложение
Экспорт из МТ5
 
Цитата
Anton написал:
одно ядро полностью будет занято, это скорей теоретическая возможность, чем то, что надо делать. Даже слип(0) уже получше будет, поток будет сниматься и вставать в конец очереди, давая прочим потокам тоже ядро поюзать. Но тоже из области поиграть с этим.

Мы таки про прозвучавшие в вопросе минимальные задержки говорим или просто рассуждаем?
 
Цитата
Nikolay написал:
Если есть интерфейс у скрипта, ставить задержку меньше 50млс не рекомендуется.
При чем тут "интерфейс у скрипта"? Что это вообще такое "интерфейс у скрипта"?

Цитата
Nikolay написал:
раз у нас много ядер, но Квик все же "висит".
Где вы такое висение наблюдали? в каких условиях?
 
Цитата
Михаил Филимонов написал:
Высокоскоростная передача данных из МТ5 в свое приложение
Чем вы измеряли высокую скорость и чему она равна?
 
Цитата
swerg написал:
Чем вы измеряли высокую скорость и чему она равна?
Скундомером в руках :)
 
Цитата
swerg написал:
минимальные задержки
и поллинг - вещи несовместные в общем-то. Отдать одно ядро просто на бесполезный цикл - слишком роскошный вариант, не продакшен-квалити точно.
 
А что на глаз не видно?
МТ5 vs Квик
 
swerg,
Цитата
Что это вообще такое "интерфейс у скрипта"?
Это способность скрипта реагировать на события (клики мышкой, нажатие клавиш). Существует и верхняя граница: "Задержка свыше 5 секунд вызывает раздражение, свыше 15 - нервные расстройства". У меня, например, возможна секундная задержка реакции на событие, а при смены режима выдачи талицы задержка может достигать 15 секунд, и это уже слегка раздражает, несмотря на то, что необходимость в это операции возникает очень редко.
 
Цитата
swerg написал:
Цитата
BlaZed написал:
Другими словами, конструкция без слипа, типа такой
 
Код
      function    main ()
  a  =    0  
  is_run   =     true  
    while   is_run   do  
    a  =  a  +    1  
    end  
  end  
    
 может легко повешать квик.

Нет.
Если процессор одноядерный - да, это будет заметно в скорости общей работы.
Если процессор многоядерный (а это нынче стандарт де-факто) - то никто ничего даже не заметит, кроме термометра на процессоре.
Попробуйте, запустите
Ryzen 5 3500x на 6 ядер, квик скопытился после запуска
 
Цитата
BlaZed написал:
Цитата
swerg написал:
 
Цитата
BlaZed  написал:
Другими словами, конструкция без слипа, типа такой
 
Код
         function     main ()
  a   =      0   
  is_run    =       true   
     while    is_run    do   
    a   =   a   +      1   
     end   
   end   
      
  может легко повешать квик.
 
Нет.
Если процессор одноядерный - да, это будет заметно в скорости общей работы.
Если процессор многоядерный (а это нынче стандарт де-факто) - то никто ничего даже не заметит, кроме термометра на процессоре.
Попробуйте, запустите
Ryzen 5 3500x на 6 ядер, квик скопытился после запуска
I-7 6850К завис после запуска скрипта  
 
Цитата
Михаил Филимонов написал:
I-7 6850К завис после запуска скрипта  
В общем, значение слипа надо ставить минимум 1, тогда ничего не виснет.
А выбирать адекватное значение уже в зависимости от требований конкретно вашей стратегии.
 
Цитата
BlaZed написал:
Цитата
Михаил Филимонов написал:
I-7 6850К завис после запуска скрипта  
В общем, значение слипа надо ставить минимум 1, тогда ничего не виснет.
А выбирать адекватное значение уже в зависимости от требований конкретно вашей стратегии.
Понятно, спасибо
Поставил 100
 
Цитата
BlaZed написал:
Ryzen 5 3500x на 6 ядер, квик скопытился после запуска

Цитата
Михаил Филимонов написал:
I-7 6850К завис после запуска скрипта  

Едрёна-батона... А я еще подумывал сменить комп на поновее-получше. Неужто опять враньё с этими ядрами/гигагерцами?!

Запустил скрипт этот с бесконечным цикл на своем Intel Pentium E2180 2ГГц, два ядра, прошу заменить. 2Гб оперативы.
Да, проц грузится на 50%, это понятно, но QUIK совершенно без задержек реагирует на мышь, графики едут, к северу подключаюсь / отключаюсь, таблички сделок моргают, рукописные Lua-индикаторы работают.
Неужели у вас на указанном железе в самом деле висит?!
Определённо обманываете.
 
Цитата
swerg написал:
Текст сообщения*





Загрузить файл или картинкуПеретащить с помощью Drag'n'drop




Перетащите файлы





Ей-богу виснет
 
Вообщем остановился на таком варианте

w32 = require("w32")

is_run = false
HWND_BROADCAST = 0xFFFF
A_double = 0.0
WParam = 2
lpParam = 1

WM_EBS_MONEY = w32.RegisterWindowMessage("WM_EBS_MONEY")

if WM_EBS_MONEY >= 0xC000 then
 is_run = true
else
 message("Message not registered!")
end

 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)

function OnStop()
 is_run = false
end

function OnMoneyLimit(m_limit)
 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 OnDepoLimit(d_limit)
 a_table = getPortfolioInfoEx("MCXXXXXXX", "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 OnFuturesClientHolding(f_holding)
 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)  
-- message("Working!")
end


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 написал:
Отдать одно ядро просто на бесполезный цикл - слишком роскошный вариант
Надо делать так, как надо. А как не надо - делать не надо.
Страницы: 1 2 След.
Читают тему
Наверх