Подключение к Quik

Страницы: 1
RSS
Подключение к Quik, Как подключиться к quik для получения информации с графика и формирования заявок?
 
Появилась потребность создания некого приложения, к примеру на delphi, которое каким-то образом бы получало данные с графика, производило анализ полученных данных и отправляло какую-то заявку обратно. По сути, надо написать торгового робота. Понимаю, что Quik прекрасно работает со скриптами на Lua, однако как организовать работу quik с каким-то внешним приложением не представляю. Подскажите в каком направлении вообще копать.
 
Цитата
Dard_AL написал:
Появилась потребность создания некого приложения, к примеру на delphi, которое каким-то образом бы получало данные с графика, производило анализ полученных данных и отправляло какую-то заявку обратно. По сути, надо написать торгового робота. Понимаю, что Quik прекрасно работает со скриптами на Lua, однако как организовать работу quik с каким-то внешним приложением не представляю. Подскажите в каком направлении вообще копать.
Уже рассказывал на форуме.
-----------------------
Кратко повторю.
----------------------  
Связка будет через dll.  На стороне Квика обязательно будет Lua.
--------------------
Приложение можно написать на любом языке.
-----------------
механизмы обмена  любые механизмы OC
---------------------
например DDE,  Shared memory,memory-mapped files.
===============
Из своего опыта.
Все приложения делаю как Lua скрипт+ dll C функции. Механизмы передачи см выше+ копирование данных из стеков.
--------------------
Приложение загружается в память как самостоятельная задача.
------------------
При необходимости ей передаются данные и она запускается в отдельном потоке, который выделяется из пула потоков.
----------------
Потоков может быть одновременно до 512, но в тестах больше 100 не было надобности.
-------------------
Конструктивная критика приветствуется.
.
 
Выше написано все верно. От себя могу добавить что для обмена еще можно использовать сокеты (socket).
 
nikolz, спасибо большое! Хорошо, когда есть знающие люди
 
Коллеги! А можно это все как-то в виде примера с кодом увидеть? Нужно получать в реалтайме данные о сделках и подробности по бумаге (шаг цены, стоимость, число знаков и т.д.) во внешней программе на C++ через некий lua скрипт и я никак этому не дам ума так как нет опыта :(
 
Цитата
Юрий написал:
А можно это все как-то в виде примера с кодом увидеть?
  Можно: https://quikluacsharp.ru/qlua-c-cpp-csharp/vzaimodejstvie-lua-i-biblioteki-dll-napisannoj-na-c-c/
 
Цитата
Юрий написал:
Коллеги! А можно это все как-то в виде примера с кодом увидеть? Нужно получать в реалтайме данные о сделках и подробности по бумаге (шаг цены, стоимость, число знаков и т.д.) во внешней программе на C++ через некий lua скрипт и я никак этому не дам ума так как нет опыта :(
Сначала получите эти параметры в луа, а потом передадите их в свою функцию на CИ.
Примеры использования Api C for Lua  есть в документации по луа
https://lua.org.ru/manual_ru.html#lua_call
https://www.lua.org/manual/5.3/
или в ссылке выше.
 
Всех благодарю за информацию, буду разбираться.
 
Цитата
TGB написал:
Цитата
Юрий написал:
А можно это все как-то в виде примера с кодом увидеть?
   Можно:  https://quikluacsharp.ru/qlua-c-cpp-csharp/vzaimodejstvie-lua-i-biblioteki-dll-napisannoj-na-c-c/

Я смотрел код lua скрипта, через который подключается и получает данные платформа TigerTrade. Там кроме подключения самой DLL больше ничего нет. Не подскажете как можно таким образом в DLL получать все необходимое?

Код
package.path = ""

--if string.sub(getInfoParam("VERSION"), 0, 1) == '8' then

   package.cpath = getScriptPath() .. "\\TigerTrade.Quik8.dll"

   if _VERSION == 'Lua 5.3' then
      require("TigerTrade_Q8L53")
   else
      require("TigerTrade_Q8L51")
   end

--else
   --message("wrong Quik version: "..string.sub(getInfoParam("VERSION"), 0, 1), 1);
--end
 
Цитата
Юрий написал:

Я смотрел код lua скрипта, через который подключается и получает данные платформа TigerTrade. Там кроме подключения самой DLL больше ничего нет. Не подскажете как можно таким образом в DLL получать все необходимое?
Вы же вроде на С собираетесь писать? То есть как собрать dll знаете?
Экспортировать из dll функцию luaopen_<libname> с прототипом lua_CFunction
В этой функции зарегистрировать lua функции OnInit(), main(), и т.д.
lua функции из С вызываются через lua_call

А можно что-нибудь готовое поискать
 
Готовое решение на платформе 1С Предприятие 8
https://vk.link/tradespeculator
Есть версии с открытым для изменения и доработки кодом
(Сбербанк Брокер)
 
Цитата
paluke написал:
Цитата
Юрий написал:

Я смотрел код lua скрипта, через который подключается и получает данные платформа TigerTrade. Там кроме подключения самой DLL больше ничего нет. Не подскажете как можно таким образом в DLL получать все необходимое?
Вы же вроде на С собираетесь писать? То есть как собрать dll знаете?
Экспортировать из dll функцию luaopen_<libname> с прототипом lua_CFunction
В этой функции  зарегистрировать  lua функции OnInit(), main(), и т.д.
lua функции из С вызываются через  lua_call

А можно что-нибудь готовое  поискать

Благодарю за подсказку. Данные в DLL я получил, а как мне теперь эти данные получить в моей программе exe написанной на C++ в QT5?
 
Любой механизм ipc - сокеты, каналы, разделяемая память, сообщения, dde...
И зачем вообще отдельная программа? Что мешает делать всё прямо в dll?
 
Цитата
paluke написал:
Любой механизм ipc - сокеты, каналы, разделяемая память, сообщения, dde...
И зачем вообще отдельная программа? Что мешает делать всё прямо в dll?

Нужно в отдельную программу. Там слишком много завязано на нее другого разного.
А какой-нибудь наименее сложный механизм в виде примера в коде на C++ можно увидеть?  
 
Цитата
Юрий написал:
Цитата
paluke написал:
Любой механизм ipc - сокеты, каналы, разделяемая память, сообщения, dde...
И зачем вообще отдельная программа? Что мешает делать всё прямо в dll?

Нужно в отдельную программу. Там слишком много завязано на нее другого разного.
А какой-нибудь наименее сложный механизм в виде примера в коде на C++ можно увидеть?  
Что Вам мешает вызвать функцию из dll в своей программе на C++?
 
Цитата
nikolz написал:
Цитата
Юрий написал:
 
Цитата
paluke  написал:
Любой механизм ipc - сокеты, каналы, разделяемая память, сообщения, dde...
И зачем вообще отдельная программа? Что мешает делать всё прямо в dll?
 
Нужно в отдельную программу. Там слишком много завязано на нее другого разного.
А какой-нибудь наименее сложный механизм в виде примера в коде на C++ можно увидеть?  
Что Вам мешает вызвать функцию из dll в своей программе на C++?

Не совсем понимаю как это реализовать, получается функция в DLL вызывается из LUA чтобы передать параметры, и функция в DLL вызывается из программы чтобы эти параметры получить, но как? У меня это не стыкуется в голове как это сделать :( И вообще допустимо ли одновременное подключение DLL и в сторонней программе и в LUA ?
Я потому и прошу пример кода чтобы понять как это все реализовать. Пока что я только смог получить параметры в DLL из LUA.
 
Цитата
Юрий написал:
Цитата
nikolz написал:
 
Цитата
Юрий  написал:
 
Цитата
 paluke   написал:
Любой механизм ipc - сокеты, каналы, разделяемая память, сообщения, dde...
И зачем вообще отдельная программа? Что мешает делать всё прямо в dll?
 
Нужно в отдельную программу. Там слишком много завязано на нее другого разного.
А какой-нибудь наименее сложный механизм в виде примера в коде на C++ можно увидеть?  
 Что Вам мешает вызвать функцию из dll в своей программе на C++?

Не совсем понимаю как это реализовать, получается функция в DLL вызывается из LUA чтобы передать параметры, и функция в DLL вызывается из программы чтобы эти параметры получить, но как? У меня это не стыкуется в голове как это сделать :( И вообще допустимо ли одновременное подключение DLL и в сторонней программе и в LUA ?
Я потому и прошу пример кода чтобы понять как это все реализовать. Пока что я только смог получить параметры в DLL из LUA.
проще всего передать данные через файл.
-------------------------
Для начала можете передавать в текстовом формате.  
Для этого нет надобности делать функцию на С for Lua.
т е пишите в скрипте луа данные в файл, а в своей программе читаете эти данные.  
при этом Вам надо синхронизировать работу с файлом из приложений,  
 
Цитата
nikolz написал:
проще всего передать данные через файл.-------------------------Для начала можете передавать в текстовом формате.  Для этого нет надобности делать функцию на С for Lua. т е пишите в скрипте луа данные в файл, а в своей программе читаете эти данные.  при этом Вам надо синхронизировать работу с файлом из приложений,  

Этот вариант плох тем что программа не будет знать в какой момент в файле появились новые данные. То есть надо будет постоянно опрашивать файл что не есть хорошо. Надо чтобы все было по событиям, появились данные - программа их получила. Ну и скорость опять же.. Вот мне надо получать данные о сделках, а они могут прилетать в функцию OnTrade по несколько штук в секунду. Работа через файл тут явно не лучший вариант.
 
Юрий, Мало того, что они могут прилетать в функцию OnTrade по несколько штук в секунду (точнее, функция может вызываться столько раз) - они ещё и прилетают по несколько штук на одно событие, а могут и минут через десять после события прилетать. И с неверными данными могут. Не занимайтесь фигнёй, пишите на чистом Lua - это самый надёжный, самый быстрый, да и самый простой способ. Язык - говно, но остальные варианты ещё хуже.
 
Цитата
Владимир написал:
Юрий, Мало того, что они могут прилетать в функцию OnTrade по несколько штук в секунду (точнее, функция может вызываться столько раз) - они ещё и прилетают по несколько штук на одно событие, а могут и минут через десять после события прилетать. И с неверными данными могут. Не занимайтесь фигнёй, пишите на чистом Lua - это самый надёжный, самый быстрый, да и самый простой способ. Язык - говно, но остальные варианты ещё хуже.

Ну с дублями я разберусь. Мне нужен механизм получения данных в стороннем приложении из LUA. Фигня не фигня, а надо...
 
Цитата
Юрий написал:
Цитата
nikolz написал:
проще всего передать данные через файл.-------------------------Для начала можете передавать в текстовом формате.  Для этого нет надобности делать функцию на С for Lua. т е пишите в скрипте луа данные в файл, а в своей программе читаете эти данные.  при этом Вам надо синхронизировать работу с файлом из приложений,  

Этот вариант плох тем что программа не будет знать в какой момент в файле появились новые данные. То есть надо будет постоянно опрашивать файл что не есть хорошо. Надо чтобы все было по событиям, появились данные - программа их получила. Ну и скорость опять же.. Вот мне надо получать данные о сделках, а они могут прилетать в функцию OnTrade по несколько штук в секунду. Работа через файл тут явно не лучший вариант.
Я же Вам написал, что надо синхронизировать.
Тогда программа будет знать когда банные изменились.
------------------------
Скорость будет нормальная, так как фалы хранятся в кеш в памяти, если Вы не выгружаете их сразу в файл.
Если надо , то создавайте события.
Все зависит от того, что напишите.
---------------------
Но так как Вы как я понимаю не очень владеете   вопросом, то рекомендую начать с простоя реализации.
----------------------
Рассказывать здесь другие Варианты большого смысла нет. Будут конкретные вопросы , отвечу конкретно.
----------------------
Если желаете изучить как сделать профессионально Ваши хотелки рекомендую изучить
книгу:
Джеффри РИХТЕР  
Создание эффективных WIN32-приложений
с учетом специфики 64-разрядной  версии Windows.
В ней есть почти все, что Вам нужно знать и уметь.

 
и еще..
в книге есть примеры синхронизации потоков и передачи данных между процессами.
 
Юрий, Ишь, как уверенно: "с дублями я разберусь".  :smile: Арка годами не может разобраться, хотя просьба сделать так, чтобы не приходило несколько прерываний на одно событие одна из самых популярных, а Вы... Я, впрочем, разобрался, но для этого мне пришлось завести аж три стека: заявок, сделок и прерываний. А механизм получения данных в стороннем приложении очевиден: либо через файл, либо через ОЗУ двойного доступа, третьего не дано. Оба способа, мягко говоря, неудобные. Поэтому лично я написал ОДИН скрипт на ВСЕ случаи жизни на ЧИСТОМ LUA. И ничего никуда не передаю. Мне ндравицца...
 
Цитата
Владимир написал:
Юрий, Ишь, как уверенно: "с дублями я разберусь".  :: Арка годами не может разобраться, хотя просьба сделать так, чтобы не приходило несколько прерываний на одно событие одна из самых популярных, а Вы... Я, впрочем, разобрался, но для этого мне пришлось завести аж три стека: заявок, сделок и прерываний. А механизм получения данных в стороннем приложении очевиден: либо через файл, либо через ОЗУ двойного доступа, третьего не дано. Оба способа, мягко говоря, неудобные. Поэтому лично я написал ОДИН скрипт на ВСЕ случаи жизни на ЧИСТОМ LUA. И ничего никуда не передаю. Мне ндравицца...

У меня уже все работает через библиотеку trans2quik но мне необходим альтернативный вариант получения данных через lua скрипт. Поэтому вот мучаюсь. С дублями все просто, получил сделку, сравнил по номеру есть ли такая уже в текущей временной табличке в памяти, если нет добавил, если есть пропустил. А после уже из этой таблички делаю с ними что надо.
Но вот как получать данные синхронно из библиотеки, по сути другой программы не связанной с моей, тут я в тупике.. и разобраться без примеров не могу потому как кодер я такой себе.. Кодю по тому что удается нагуглить в примерах.
К сожалению варианты из книги которую посоветовал nikolz я не осилил.. там все очень сложно. А внятных примеров найти не получается пока :(  В принципе уже нашел (https://quikluacsharp.ru/qlua-c-cpp-csharp/vzaimodejstvie-lua-i-biblioteki-dll-napisannoj-na-c-c/com...) как помещать данные в именованную память, но как их оттуда потом доставать в другой программе да еще и синхронно, на С++ пока не нашел примеров :(
 
Цитата
Юрий написал:
Цитата
У меня уже все работает через библиотеку trans2quik но мне необходим альтернативный вариант получения данных через lua скрипт. Поэтому вот мучаюсь. С дублями все просто, получил сделку, сравнил по номеру есть ли такая уже в текущей временной табличке в памяти, если нет добавил, если есть пропустил. А после уже из этой таблички делаю с ними что надо.
Но вот как получать данные синхронно из библиотеки, по сути другой программы не связанной с моей, тут я в тупике.. и разобраться без примеров не могу потому как кодер я такой себе.. Кодю по тому что удается нагуглить в примерах.
К сожалению варианты из книги которую посоветовал  nikolz  я не осилил.. там все очень сложно. А внятных примеров найти не получается пока :(  В принципе уже нашел ( https://quikluacsharp.ru/qlua-c-cpp-csharp/vzaimodejstvie-lua-i-biblioteki-dll-napisannoj-na-c-c/com... ) как помещать данные в именованную память, но как их оттуда потом доставать в другой программе да еще и синхронно, на С++ пока не нашел примеров :(
замечу два момента.
1) если речь идет о фильтрации обезличенных сделок, то ваш вариант неправильный. Так как при большом числе сделок вы будете долго искать.
На основе своих исследований данной проблемы могу сказать, что задача решается проще. Повторная сделка приходит всегда следом за первой сделкой.
Но особенность в том, что следующая сделка по данному инструменту это не следующая сделка в потоке сделок после первой.
-----------------------
2) Вы зря не хотите реализовать через файлы. Это просто и быстро.
Более того, такие методы как   Pipe и mailslot  тоже используют запись чтение файлов.
Поэтому когда набьете руку (голову) на файлах ,то легко решите задачу с Pipe или mailslot и им подобным.

 
 
Юрий, Вот я и получаю данные ТОЛЬКО через lua скрипт. А с дублями все НЕ просто: сделка по номеру может и совпадать, а вот данные в ней могут и отличаться, и придти эта сделка может иногда через МИНУТЫ, и по "текущей временной табличке" (у меня это стек сделок или, если угодно, стек активных заявок) решения принимать нужно, а это не всегда просто, если заявка реализуется в несколько сделок, и проблема "как получать данные синхронно" не реализована даже на уровне самого Квика и, следовательно, для любых других приложений, и все эти проблемы решаются за счёт юзера - разработчикам на глюки, по большому счёту, насрать - для них это лишь повод выпустить очередную версию Квика, то бишь продемонстрировать собственную востребованность - им эти глюки НУЖНЫ и потому будут ВСЕГДА. А nikolz постоянно советует всякую херню потому как сам он в программировании никто и звать его никак. А мой совет, к которому я пришёл практически мгновенно - писать всё на Lua и забыть даже про мой любимый С, не говоря уже про другие языки.

nikolz, Лапуль, повторная сделка не только не всегда приходит следом за первой сделкой, они ещё и приходят "крест-накрест собачьим шагом", особенно красиво это выглядит, если заявка реализуется в десяток-другой сделок. Но это не Ваш уровень - я уже задолбался советовать Вам заняться чем-нибудь кроме программирования - вдруг Вы в какой-то области деятельности и в самом деле что-то соображаете.
 
Цитата
Владимир написал:
повторная сделка не только не всегда приходит следом за первой сделкой, они ещё и приходят "крест-накрест собачьим шагом", особенно красиво это выглядит, если заявка реализуется в десяток-другой сделок. Но это не Ваш уровень - я уже задолбался советовать Вам заняться чем-нибудь кроме программирования - вдруг Вы в какой-то области деятельности и в самом деле что-то соображаете.
Полагаю Вы все путаете.
Есть повторение обезличенных сделок в колбеке onAllTrade
Именно об этом я и написал. Проблема решается сравнительно просто, но Вы ее не решите.
---------------------------
Получение исполненных сделок в OnTrade меня вообще не волнует.
------------------------
Есть повторение заявок onOrder
Это вообще не проблема.
==================
И кончайте размазывать сопли по экрану.
Если хотите сравнить Вашу писанину с моей, то предлагаю напишите передачу параметров между процессами.
Я это давно уже написал во всех вариантах
Когда напишите то сравним  
 
Владимир,
На форуме я выкладывал пример скрипта в котором любые функции из dll на СИ я вызываю буз использования C fo Lua.
---------------
Для этого я написал очень маленькую  dll .
если Вы крутой программист то напишите аналогичную, а не рассказывайте байки  
 
Цитата
nikolz написал:
замечу два момента.1) если речь идет о фильтрации обезличенных сделок, то ваш вариант неправильный. Так как при большом числе сделок вы будете долго искать.На основе своих исследований данной проблемы могу сказать, что задача решается проще. Повторная сделка приходит всегда следом за первой сделкой.Но особенность в том, что следующая сделка по данному инструменту это не следующая сделка в потоке сделок после первой.-----------------------2) Вы зря не хотите реализовать через файлы. Это просто и быстро. Более того, такие методы как   Pipe и mailslot  тоже используют запись чтение файлов. Поэтому когда набьете руку (голову) на файлах ,то легко решите задачу с Pipe или mailslot и им подобным.

1. Я уже говорил что мне надо получать сделки которые прилетают в функцию OnTrade то есть они не обезличенные, так что с количеством проблем нет. Но это не главное...
2. Я не против сделать через файлы для начала, а может и навсегда. Но даже я понимаю что через память быстрее :) Но мне нужен внятный пример в C++ коде. Потому что сам я прогер слабенький, мягко говоря.

А тут столько блин специалистов и никто не может пример написать. Все жадные до кода :)  
 
Цитата
Юрий написал:
Цитата
nikolz написал:
замечу два момента.1) если речь идет о фильтрации обезличенных сделок, то ваш вариант неправильный. Так как при большом числе сделок вы будете долго искать.На основе своих исследований данной проблемы могу сказать, что задача решается проще. Повторная сделка приходит всегда следом за первой сделкой.Но особенность в том, что следующая сделка по данному инструменту это не следующая сделка в потоке сделок после первой.-----------------------2) Вы зря не хотите реализовать через файлы. Это просто и быстро. Более того, такие методы как   Pipe и mailslot  тоже используют запись чтение файлов. Поэтому когда набьете руку (голову) на файлах ,то легко решите задачу с Pipe или mailslot и им подобным.

1. Я уже говорил что мне надо получать сделки которые прилетают в функцию OnTrade то есть они не обезличенные, так что с количеством проблем нет. Но это не главное...
2. Я не против сделать через файлы для начала, а может и навсегда. Но даже я понимаю что через память быстрее :) Но мне нужен внятный пример в C++ коде. Потому что сам я прогер слабенький, мягко говоря.

А тут столько блин специалистов и никто не может пример написать. Все жадные до кода :)  
1) Для OnTrade, OnOrder,onStopOrder, OnTransReply  вообще нет проблем с повторением.
------------------------------------
Но так как это колбеки, то У Вас проблема в алгоритме обработки.
-----------------------------------
Если хотите конкретной помощи, то задавайте конкретные вопросы и выкладывайте совй скрипт.
Иначе будете бла бла бла с Владимиром. Он Вам будет хвалится что все решил и уговаривать писать на "чистом" Луа, а сам тайно использует dll QLUA, которая написана на C.
____________________________  
2) Вот даже вы ошибаетесь.  Файлы они в памяти, И реально Вы и будете передавать через память, если это короткие сообщения и разрешен параллельный доступ к файлам.
Рекомендую Вам не гадать, а написать короткий тест и измерить скорость обмена через файлы.
-----------------
Повторю еще раз.
Хотите помощи - пишите сами получайте ошибки выкладывайте свое произведение и задавайте вопросы.
Примеры как писать читать файлы на C вы найдете в интернете.
Зачем вам C++, если для луа надо писать на С?
С++ еще сложнее чем С. Вы хоть понимаете, что такое классы в программировании?
Если нет или Вы пишите без них то Вам С++ не нужен.
 
nikolz, Полагаю, что я ничего не путаю. Я ни разу в жизни не пользовался обезличенными сделками и колбеком onAllTrade. Меня интересует ТОЛЬКО мои сделки и ТОЛЬКО OnTrade, на onOrder мне тоже насрать, я этим говном тоже ни разу не пользовался. ЗА КАКИМ ХЕРОМ мне передавать параметры между процессами, если это тупейшая ПРИКЛАДНАЯ задача? Мой скрипт ТОРГУЕТ, а не занимается онанизмом с процессами. Я в своё время потратил недели три на перемещение всей арифметики в поток мейна, и с тех пор забыл про все технические проблемы с торговлей. Меряться пиписьками с распальцованным дураком также не имею ни малейшего желания. Мне также нафиг не нужны никакие dll и другие языки - как бы ни был убог Lua, на нём тоже можно организовать торговлю. А как "крутой программист" я писал на трёх разных ассемблерах и на Си действительно серьёзные задачи - сложные базы данных, ОС, низкоуровневые библиотеки, шахматы и т.д.

Ха-ха-ха! Лапуль, Ваши бредни, что я тайно использую dll QLUA меня очень порадовали. Пять баллов! А классы в программировании есть примочка для чайников. Как я писал много лет назад: "Указатель на структуру покрывает все "классовые" потуги Страуструпа как бык овцу".
 
Юрий, Вот как делаю я (упрощённый код, мой скрипт может работать в боевом и тестовом режимах, а также по историческим данным через файл - всё это я убрал).

function OnTrade(n)
local i;
i=a[0]+1;
a[0]=i;
a[i]={};
a[i][0]=n.trans_id;
a[i][1]=n.order_num;
a[i][2]=n.trade_num;
a[i][3]=n.sec_code;
a[i][4]="B";
if bit.band(n.flags,4)~=0 then a[i][4]="S";end;
a[i][5]=tonumber(n.qty);
a[i][6]=tonumber(n.price);
end;

Смысл: a - стек прерываний, в нулевом элементе хранится текущий размер стека. По приходу прерывания забираем оттуда все необходимые данные и уматываем, чтобы не столкнуться со следующим. А сами данные выбираем из этого стека уже в спокойной обстановке - я делаю это по таймеру раз в полсекунды: выбираю очередной элемент и уже здесь разбираюсь, кто там дубль, кто nil, а кто реальные данные. Именно это, как я понимаю, Вам и нужно куда-то передавать и анализировать по Вашей "текущей временной табличке в памяти".
 
Параметры в другой процесс я передал :) Не знаю на сколько правильно но работает :)
Подскажите с определением направление сделки. В LUA работает такая конструкция
Код
if bit.band(order["flags"],4)>0
then
-- заявка на продажу
else
-- заявка на покупку
end
Однако С++ ничего о bit.band не знает. Как определить в C++ направление сделки по битовым флагам подскажите кто знает.
 
Юрий, Так я же показал: в прерывании анализируется этот флаг, а в стек заносится либо "B" (покупка) либо "S" (продажа).
 
Цитата
Владимир написал:
Юрий, Так я же показал: в прерывании анализируется этот флаг, а в стек заносится либо "B" (покупка) либо "S" (продажа).

У меня на lua только подключается библиотека. Все остальное, получаю и обрабатываю данные, в dll и соответственно мне нужно распознать направление сделки средствами C++
 
Юрий,  Здрассьте. А OnTrade Вы как получаете?
 
Цитата
Владимир написал:
Юрий,  Здрассьте. А OnTrade Вы как получаете?

Я начинаю подозревать что nikolz в чем то прав :)

Цитата
paluke написал:
Экспортировать из dll функцию luaopen_  с прототипом lua_CFunctionВ этой функции  зарегистрировать  lua функции OnInit(), main(), и т.д.

Как то так :)
 
Юрий, А Вы не подозревайте - Вы ответьте. Этот коллбек возвращает структуру данных, и если Вы их имеете, то аналог убожеству bit.band в Си - оператор &
 
Если я все правильно понял, на С++ определение направления сделки будет выглядеть так?
Код
if (flag & (4 << 2)) {
    -- сделка на продажу
} else {
    -- сделка на покупку
}
 
Цитата
Юрий написал:
Если я все правильно понял, на С++ определение направления сделки будет выглядеть так?
Код
   if  (flag  &  ( 4   <  <   2 )) {
     -- сделка на продажу 
}  else  {
     -- сделка на покупку 
}  


А нет вру. Вот так наверное правильно:
Код
if (bool((1 << 2) & flag)) {
    -- сделка на продажу
} else {
    -- сделка на покупку
}
 
Юрий,
if (flag & 4) {
   -- сделка на продажу
} else {
   -- сделка на покупку
}
Страницы: 1
Читают тему
Наверх