Михаил Филимонов (Все сообщения пользователя)

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

Страницы: Пред. 1 2 3 4 5 6 7 След.
Эвента на изменение таблицы "Клиентский портфель"
 
Цитата
Anton написал:
Цитата
Михаил Филимонов написал:
"мгновенно"
Он и будет получать настолько же "мгновенно", как и в случае бродкаста, не заваливая всю систему кучами бесполезных сообщений. Перечитайте еще раз, "раз в секунду" это процесс обнаружения клиента, как только он обнаружен, сообщения посылаются ему немедленно из колбеков. Если думаете, что пройтись по  своему  списку окон медленнее, чем винда пройдется по списку  всех  окон, то это заблуждение.
Антон!
То, что Вы предлагаете - очень здорово, но как мой скрипт (LUA) будет принимать сообщения от клиентов?
Эвента на изменение таблицы "Клиентский портфель"
 
Цитата
Anton написал:
Цитата
Михаил Филимонов написал:
запускать в Квике 42
Ну это как-то в лоб решение. Клиенты могут раз в секунду, скажем, рассылать бродкаст WM_APP_QUIK_CLIENT_CONNECT (название условное) с хэндлом своего окна в wparam, скрипт (один) в квике их слушает, сохраняет хэндл клиента в список подписантов и отвечает WM_APP_QUIK_SERVER_CONNECT со своим хэндлом. И все, клиент прекращает спамить, а сервер в колбеках шлет PostMessage по списку. Ну то есть стырить идею в том же дде, чуть поправив.
X-mmm.
Вы сами-то торгуете несколькими роботами?
Сделки от разных роботов совершаются достаточно часто, а средства для всех роботов одни.
Перед сделкой роботы проверяют достаточность средств на счете для совершения оных.
Поэтому каждый робот должен "мгновенно" получать инфу о состоянии счете (наличие свободных средств)
Эвента на изменение таблицы "Клиентский портфель"
 
Цитата
Владимир написал:
СОРОК ДВА РОБОТА?! Куда уж прожорливее - хоть с какой стороны смотреть. У меня как-то и один скрипт справляется. Думаю, как и у всех нормальных людей. Ресурсов практически не жрёт - ему же не надо рассылать данные по 42 направлениям. ::  
"Нормальных" людей?
Вы себя к ним опрометчиво причислили.
Кстати, у меня на ФОРТС,  работают 2 терминала МТ5, в сумме 86 роботов, и ничего не виснет...
Эвента на изменение таблицы "Клиентский портфель"
 
Цитата
Anton написал:
Очень прожорливо из колбеков бродкасты отправлять. Оно ж буквально все окна в системе обходит в каждом колбеке.
Прожорливо, если используется 1 робот. Я использую 42 робота.
Гораздо прожорливее будет запускать в Квике 42 скрипта да еще заморачиваться, чтобы указать handle принимающего приложения (как это реализовано
в экспорте в МТ5, но там все просто)
Потом PostMessage() тем и хорош, что он не ждет ответа - отослал и "забыл" о ней, а все 42 робота получат данные.
"Прожорливо", так это с какой стороны смотреть :)  
Эвента на изменение таблицы "Клиентский портфель"
 
Цитата

Что такое минимальные задержки, это каждый понимал по-своему ) ну, ежли задача стоит показать, как "квик тормозит в сравнении с метатрейдером", то верной дорогой пойдено.
При чем тут задача показать как "квик тормозит в сравнении с метатрейдером"?

Я реально торгую на Е-Б-С счете через квик,
Выводил данные через DDE в свое приложение (работало очень медленно),
поэтому я и решил брать данные из МТ5 Стало гораздо быстрее...
Эвента на изменение таблицы "Клиентский портфель"
 
Вообщем остановился на таком варианте

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 написал:
Текст сообщения*





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




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





Ей-богу виснет
Эвента на изменение таблицы "Клиентский портфель"
 
Цитата
BlaZed написал:
Цитата
Михаил Филимонов написал:
I-7 6850К завис после запуска скрипта  
В общем, значение слипа надо ставить минимум 1, тогда ничего не виснет.
А выбирать адекватное значение уже в зависимости от требований конкретно вашей стратегии.
Понятно, спасибо
Поставил 100
Эвента на изменение таблицы "Клиентский портфель"
 
Цитата
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К завис после запуска скрипта  
Эвента на изменение таблицы "Клиентский портфель"
 
А что на глаз не видно?
МТ5 vs Квик
Эвента на изменение таблицы "Клиентский портфель"
 
Цитата
swerg написал:
Чем вы измеряли высокую скорость и чему она равна?
Скундомером в руках :)
Эвента на изменение таблицы "Клиентский портфель"
 
Высокоскоростная передача данных из МТ5 в свое приложение
Экспорт из МТ5
Эвента на изменение таблицы "Клиентский портфель"
 
Цитата
swerg написал:
Цитата
BlaZed написал:
Другими словами, конструкция без слипа, типа такой
 
Код
      function    main ()
  a  =    0  
  is_run   =     true  
    while   is_run   do  
    a  =  a  +    1  
    end  
  end  
    
 может легко повешать квик.

Нет.
Если процессор одноядерный - да, это будет заметно в скорости общей работы.
Если процессор многоядерный (а это нынче стандарт де-факто) - то никто ничего даже не заметит, кроме термометра на процессоре.
Так сколько ставить, чтобы бедолаге было комфортно?
Эвента на изменение таблицы "Клиентский портфель"
 
Смотрим как Квик внутри себя обновляет таблицы
Обновление таблицы "Клиентский портфель"
Эвента на изменение таблицы "Клиентский портфель"
 
и последний вопрос.
Я никогда не использую функцию sleep, но в скриптах LUA, как я понял, это необходимость

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

function OnStop()
 is_run = false
end

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

Какое значение в sleep(??) лучше ставить, чтобы скрипт работал как можно быстрее
Эвента на изменение таблицы "Клиентский портфель"
 
Цитата
Владимир написал:
Nikolay, Да что бы то ни было! Если чел торгует сам и не знает, что у него творится в портеле - это уже к ветеринару!
Ты уже был там, пенек?
Эвента на изменение таблицы "Клиентский портфель"
 
Цитата
swerg написал:
Цитата
Михаил Филимонов написал:
Это колонка в таблице "Клиентский портфель"

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

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

Всем пофик.

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

Попробуйте OnFuturesClientHolding
Я же уже писал, что торгую на Един. Бр. Счете, а изменение средств (свободных) для этого типа счета видны только в таблице "Состояние счета" (не доступно для LUA) и "Клиентский портфель"
OnFuturesClientHolding щас попробую...
Эвента на изменение таблицы "Клиентский портфель"
 
Неужели нельзя сделать редактирование сообщений?
Эвента на изменение таблицы "Клиентский портфель"
 
Нужна эвента
Эвента на изменение таблицы "Клиентский портфель"
 
  • 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
Эвента на изменение таблицы "Клиентский портфель"
 
Цитата
Nikolay написал:
Если говорить о доступных call back, то их список описан в документации.
Не очень ясно, что требуется. Но можно предположить, что если речь про денежные средства, а не позиции, может подойти: OnMoneyLimit.

Но можете и сами организовать вызов некой функции при изменении данных портфеля, сделав регулярную проверку оного.
Да интересует изменение в таблице "ПланЧистПос", но не одна из call back функций (
  • OnAccountBalance
) не работает  
Эвента на изменение таблицы "Клиентский портфель"
 
Добрый день!

Как-нибудь можно реализовать такое?
PostMessage из LUA
 
Цитата
swerg написал:
Цитата
Не обращайте внимание, это местный клоун.
Вы слишком мягко отозвались об этом полном придурке.
Конкретно больной на всю голову!
PostMessage из LUA
 
Цитата
swerg написал:
А можно поинтересоваться: почему бы в МТ5 не торговать тогда? Какие плюсы у этого франкинштейна?
Дело в том, что торговать на Едином Брокерском Счете можно только в Квик.
Я написал свою программу, которая получала данные из Квик по DDE, а приказы отправляла через trans2quik.dll,
Данные по DDE передаются ОЧЕНЬ медленно, да и МТ5 получает маркет дата в разы быстрее, поэтому я соорудил
очень быструю передачу данных из МТ5 в свое приложение.
Не хватало только свободных средств на счете в Квик
PostMessage из LUA
 
Всем спасибо!
Все же удалось получать данные из МТ5 + (Деньги Ед. Бр. Сч. из Квик) и торговать в квик из своего приложения.
PostMessage из LUA
 
Цитата
Nikolay написал:
getItem позволяет получать данные только из определенных таблиц и формат ее вызова не такой.

http://luaq.ru/getItem.html

Чтобы получить данные по деньгам, позициям надо обратиться к определенной таблице и просканировать строки, либо использовать специализированные функции для получения денежных лимитов, позиций и т.д., допустим getMoneyEx или getPortfolioInfoEx.
Спасибо, getPortfolioInfoEx позволяет получить данные из таблицы "Клиентский портфель"
PostMessage из LUA
 
А к таблице "Клиентский портфель" есть доступ?
PostMessage из LUA
 
Всем спасибо.
PostMessage из LUA
 
Цитата
Nikolay написал:
getItem позволяет получать данные только из определенных таблиц и формат ее вызова не такой.

http://luaq.ru/getItem.html

Чтобы получить данные по деньгам, позициям надо обратиться к определенной таблице и просканировать строки, либо использовать специализированные функции для получения денежных лимитов, позиций и т.д., допустим getMoneyEx или getPortfolioInfoEx.
Да никак не получится потому что ...
Ответ (здесь на форуме) Романа Азарова (сотрудник Арка )

""Ликвидная стоимость" и "Прибыль дня" являются параметрами таблицы "Состояние счета".
Доступ к параметрам данной таблицы с помощью Lua не представляется возможным."

Вот и все, приехали
PostMessage из LUA
 
Есть еще функция TABLE getMoney (STRING client_code, STRING firmid, STRING tag, STRING currcode)
Но не понятно что такое STRING tag и STRING currcode
PostMessage из LUA
 
Цитата
swerg написал:
Цитата
Михаил Филимонов написал:
Это у Вас такой юмор?

Не обращайте внимание, это местный клоун.
Цитата
Михаил Филимонов написал:
Как получить свободные средства????

1) Непосредственно к таблице "Состояние счета" доступа через Lua API нет.

2) То, что вы выделили - это не совсем "свободные средства", это остаток на денежном счете. Впрочем, это вопрос терминологии.
Вы можете увидеть ту же цифру (на сколько я понимаю) через таблицу "Таблица лимитов по денежным средствам". Откройте её. (просто для того, чтобы понятнее было и нагляднее что там и как; для того, чтобы получить информацию в Lua открывать указанную таблицу конечно не обязательно).
Далее см. в QLUA.chm раздел "Таблицы, используемые в функциях «getItem», «getNumberOf» и «SearchItems»", там вам нужна "Позиции участника по деньгам"
Дело в том, что это Единый Брокерский Счет и останок средств (свободных средств) находится только в этой стандартной таблице "Состояние счета".
Когда я запрашиваю

acc_value =  getItem("45826 MC0139600000 [Состояние счета]", 0)
возвращется NIL
PostMessage из LUA
 
Цитата
Владимир написал:
Михаил Филимонов, Как получить свободные средства????

Занятный вопрос... ЧЬИ средства? Чужие? НИКАК! Если есть такая возможность, то нужно подвешивать за яйца всех разработчиков софта! Свои? Свои не хило бы знать самому! С какой радости скрипт должен "в LUA получить значение, указанное на картинке"? Какое его собачье дело? Скрипт должен знать, сколько ИМЕННО ЕМУ дозволено тратить, а вовсе не всё, что лежит на счёте! И эта цифирь НИКАК не связана с "картинкой"!
Это у Вас такой юмор?
Картинка прикреплена, чтобы было понятно в какой таблице находится, как Вы говорите "цифирь".
PostMessage из LUA
 
Как в LUA получить значение, указанное на картинке?


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
end

function OnStop()
 is_run = false
end

function main()
 while is_run do

--   A_double = Как получить свободные средства????

   lpParam = A_double * 100
   w32.PostMessage(HWND_BROADCAST, WM_EBS_MONEY, WParam, lpParam)
   sleep(100)
 end
end
Посоветуйте панель для расчета риска в МТ4/МТ5
 
Цитата
Instant Trade написал:
Всем привет! Занимаюсь удаленным заработком и недавно увлекся темой Форекса, но знаний для самостоятельного трейдинга у меня не хватает. Поделитесь пожалуйста кто какой панелью пользуется для расчета риска в МТ4/МТ5?
Вам нужно задать это вопрос на на сайте МТ5
PostMessage из LUA
 
А в QPILE тоже "танцы с бубном" чтобы вызвать WINAPI функцию, или в нем можно напрямую приаттачить свою DLL?
PostMessage из LUA
 
Цитата
swerg написал:

Вот как сделаете свою dll - так сразу и поймёте. Ну или хотя бы документацию к Lua прочитаете (как к таковому языку Lua, не в привязке к QUIK)
Почитал Ваш форум и ... какой ОТСТОЙ этот Квик вместе с LUA
и кастрированным API tans2quik.dll
PostMessage из LUA
 
Цитата
swerg написал:
Михаил Филимонов , вы читать умеете?
Зачем вам User32.dll - понятно.
Но  ваш  вопрос был про другое: почему не получится
user32 = require("User32.dll")

Вот как сделаете свою dll - так сразу и поймёте. Ну или хотя бы документацию к Lua прочитаете (как к таковому языку Lua, не в привязке к QUIK)
Спасибо
PostMessage из LUA
 
Цитата
swerg написал:
Цитата
Хозяин барин.
Зачем, если есть даже готовые исходник - вот бы понять.
Впрочем, пишите. За одно и вот этот вопрос отпадёт:

Цитата
Почему нельзя
user32 = require("User32.dll")
Да затем, чтобы вывести inputbox, например.
PostMessage из LUA
 
Что-то на подобии InputBox
PostMessage из LUA
 
Цитата
swerg написал:
Цитата
Михаил Филимонов написал:
Тогда проще написать свою DLL, чем "цеплять" чужие

Взять готовое - всегда проще  надежнее.
Тем более если нужна только PostMessage
Спасибо, но мне проще самому написать.
И еще вопрос.
Есть ли в LUA ввод числа от руки?
PostMessage из LUA
 
Цитата
s_mike@rambler.ru написал:
Цитата
Михаил Филимонов написал:
Вы пишите, чтобы подключить w32
w32 = require("w32")

Почему нельзя
user32 = require("User32.dll")
потому что связывание в луа идёт по собственным правилам.

Для использования  системные библиотек необходима lua расширение alien.
вот пример использования:

http://bot4sale.ru/blog-menu/qlua/415-win32api-lua.html
Тогда проще написать свою DLL, чем "цеплять" чужие
PostMessage из LUA
 
Вы пишите, чтобы подключить w32
w32 = require("w32")

Почему нельзя
user32 = require("User32.dll")
PostMessage из LUA
 
Что за ерунда?
Заменили Единый Ерокерский Счет на звездочку !
PostMessage из LUA
 
Если можно подключить w32. то почему нельзя user32.dll ?
Я вообще LUA не работал совсем, просто возникла необходимость
передовать состояние ДЕПО через PostMessage из Квик, т.к в МТ5 нет  *  счетов.
Экспорт из МТ5 работает гораздо быстрее DDE
PostMessage из LUA
 
Цитата
swerg написал:
Не очень понятно про что вопрос.
Вызвать функцию WinAPI PostMessage ?
Если про это - то вот,  w32 библиотека
Канечно нужно вызвать PostMessage из User32.dll
А без библиотеки разве нельзя обойтись?
Почему нельзя сразу подключить user32.dll ?
Страницы: Пред. 1 2 3 4 5 6 7 След.
Наверх