nikolz (Все сообщения пользователя)

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

Страницы: Пред. 1 ... 11 12 13 14 15 16 17 18 19 20 21 ... 72 След.
GetCell жрет память
 
Цитата
kbrobot.ru написал:
Цитата
nikolz написал:
 
Цитата
kbrobot.ru  написал:
 
Цитата
 Владимир   написал:
меняться - например, при выполненной сортировке по какому-либо столбцу, или при изменении видимого количества строк. Скрипт прорисовывает таблицу сам и прекрасно знает, что и в какой ячейке у него лежит.
  Все эти параметры определяются выше

function Window:InsertValue(id,value)
value=tostring(value)
if value==nil then
return
end
rows,columns=GetTableSize(self.hID)
i=1
j=1

while (i <= columns)  do
j=1
 while (j <= rows)  do
 x=GetCell(self.hID, j, i)
    if x~=nil then
    if x["image"]==id then
SetCell(self.hID, j+1, i,value)
    end
end

 j=j+1
 end
i=i+1  
end

end
 Зачем Вы обходите встю таблицу по столбцам и строкам. Вы разве не знаете в каком столбце у вас id?
----------------------
Если у вас инструменты не гуляют произвольно по строкам таблицы, то создайте для них  table[seccode]  в которой запишите номера строк.
В итоге Вы просто будете выбирать из этой table номер строки инструмента по его seccode.
А по другому эту проблему никак не решить?
я не использую такие таблицы в скриптах, поэтому лень писать тест.
Если выложите работающий скрипт с Вашим вариантом поиска ячейки я скажу как исправить, либо соглашусь с Вами , что жрет.
Выгрузка библиотек
 
попробуйте в dll ,которую надо выгрузить
в функции  WINAPI DllMain(HINSTANCE hinstDLL ...
после
          case DLL_PROCESS_ATTACH:
вставить
DisableThreadLibraryCalls(hinstDLL);
Внимание! Тормоза в версиях 9 и 10.
 
Цитата
MAV написал:
Буду стараться откатить назад к 7-й версии,там всё отлично работает.
если 64 бит то последняя нормальная версия это 8.7
GetCell жрет память
 
Цитата
kbrobot.ru написал:
Цитата
Владимир написал:
меняться - например, при выполненной сортировке по какому-либо столбцу, или при изменении видимого количества строк. Скрипт прорисовывает таблицу сам и прекрасно знает, что и в какой ячейке у него лежит.
Все эти параметры определяются выше

function Window:InsertValue(id,value)
value=tostring(value)
if value==nil then
return
end
rows,columns=GetTableSize(self.hID)
i=1
j=1

while (i <= columns)  do
j=1
 while (j <= rows)  do
 x=GetCell(self.hID, j, i)
    if x~=nil then
    if x["image"]==id then
SetCell(self.hID, j+1, i,value)
    end
end

 j=j+1
 end
i=i+1  
end

end
Зачем Вы обходите встю таблицу по столбцам и строкам. Вы разве не знаете в каком столбце у вас id?
----------------------
Если у вас инструменты не гуляют произвольно по строкам таблицы, то создайте для них  table[seccode]  в которой запишите номера строк.
В итоге Вы просто будете выбирать из этой table номер строки инструмента по его seccode.
Тест. Данные в другое приложение.
 
в Scite  написан скрипт на луа, в которой  читаются данные из QUIK
т е тест передачи данных из приложения QUIK в приложение LUA53 в котором исполняется этот скрипт.
Тест выводит эти данные в окно реадактора SCiTe.
Тест. Данные в другое приложение.
 
Цитата
A.T. написал:
То есть что-то вроде Shared Memory.
Надо будет разобраться.

Все дело в строчках
Код
  package.cpath  = paths .. "?.dll;"require"nkthread"  
как понимаю.
Что за nkthread ? Это для Lua? Он-то и мутит Shared memory, отсюда такая скорость, тут очевидно.

Что за "тест" в SciTE? В смысле мини-скрипт на Lua?

Что за мутный SciTE? Это именно редактор или IDE внутри которой что-то еще запущено?

Чем плох Notepad++, обычный Notepad или простой и понятный Emacs ?
nkthread - это моя библиотека дополнительных функций ( типа QLUA)
В ней много чего есть в том числе и многопоточность для луа и передача данных в другие приложения и вызов в луа функций СИ из сторонних dll .
Тест. Данные в другое приложение.
 
подробно с примерами можно почитать в книге Дж.Рихтер "Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows"
Тест. Данные в другое приложение.
 
Цитата
A.T. написал:
Ну я же написал  file mapping.
CandleExist не работает - можно привести рабочий и простой пример?
 
Цитата
A.T. написал:
Начнем с того, что Candle не может Exist. Оно может только Exists.
Поэтому первая и очевидная ошибка для пишущего программиста, о которой выясняется только наступив на грабли.

Это к уровню знания английского и камень в огород разработчиков.

Второе и самое главное.
Можно привести простой(!!!) - это ключевое слово - простой и очевидный пример.
Кто нибудь, пожалуйста.

Хочу написать что-то вроде


Код
   function   OnCalculate (idx)   -- вход 

 if  CandleExist(idx)  =  =   true   then    -- имеется в виду если свечка существует на графике, то есть ее какой-нибудь O(idx) ~= nil 
    бла - бла - бла расчеты с переменными
 end   -- мне даже else тут не нужен, вместо него или nil или молчаливый игнор свечки 

 end   

Всё. То есть просто отсеивать ошибку не существования свечки на графике с  галкой "Показывать пустые интервалы".
Пользователя бывают дятлы.

Без интервалов, конечно, все прекрасно работает.

Симптом: Квик упорно игнорирует условие CandleExist(idx) и залезает во внутрь бла-бла и как итог появляется ошибка с красным крестом attempt to perform arithmetic on a nil value, чего быть не должно.
Смысл только в подавлении этой ошибки наименьшим фильтром и геморроем для программиста.
Вопрос только в этом.
В документации какой-то ад.
Хочу простой игнор свечки по простому условию.


Не работающий пример из примера документации:

Код
  Settings = {}
Settings.Name  =   "SimpleMA" 
Settings.mode  =   "C" 
Settings.period  =   5 
Settings.str_field  =   "STRING field" 
 
 
 function   dValue (i,param)
     local  v  =  param  or   "C" 
     if  v  =  =   "O"   then 
         return  O(i)
     elseif  v  =  =   "H"   then 
         return  H(i)
     elseif  v  =  =   "L"   then 
         return  L(i)
     elseif  v  =  =   "C"   then 
         return  C(i)
     elseif  v  =  =   "V"   then 
         return  V(i)
     elseif  v  =  =   "M"   then 
         return  (H(i)  +  L(i))/ 2 
     elseif  v  =  =   "T"   then 
         return  (H(i)  +  L(i) + C(i))/ 3 
     elseif  v  =  =   "W"   then 
         return  (H(i)  +  L(i) +  2  * C(i))/ 4 
     else 
     return  C(i)
     end 
 end 

 function   Init ()
     return   1 
 end 

 function   OnCalculate (idx)
 if  CandleExist(idx)  then     -- добавляю тут это и намеренно делаю пустые интервалы в квике 

     local  per  =  Settings.period
     local  mode  =  Settings.mode
     local  lValue  =  iValue
     if  idx  >  =  per  then 
         local  ma_value =  0 
         for  j  =  (idx - per) +  1 , idx  do      -- и он все равно лезет в эту ветку 
            ma_value  =  ma_value + dValue(j, mode)
         end 
         return  ma_value/per
     else 
         return   nil 
     end 

 end 
 end   



Опыт программирования именно на Lua - меньше недели.
C/C++ и C# знаю хорошо.

Спасибо.
Напишите , что Вы хотите делать русскими словами,   напишу, как это сделать в индикаторе на луа.
Ошибка "Order depth should be positive", Ошибка "Order depth should be positive"
 
Цитата
Kalmar написал:
Цитата
nikolz написал:
попробуйте посмотреть в интернете, если не найдете, то расскажу.
можете считать что не нашел.
можете считать, что рассказал.
Ошибка "Order depth should be positive", Ошибка "Order depth should be positive"
 
Цитата
Kalmar написал:
Цитата
nikolz написал:
нет, не стакана, а рынка. (есть такое понятие).
Так так.
И что же это за такое понятие?
Расскажите нам плиз, раскройте, тксть глаза?
попробуйте посмотреть в интернете, если не найдете, то расскажу.
Ошибка "Order depth should be positive", Ошибка "Order depth should be positive"
 
Цитата
Kalmar написал:
Цитата
nikolz написал:
Нсколько я понимаю, в сообщении речь идет не о цене, а о глубине рынка."Order depth"
Типа глубина стакана отрицательная?))))
нет, не стакана, а рынка. (есть такое понятие). но здесь order, а не market.
Поэтому нет вариантов.
Ошибка "Order depth should be positive", Ошибка "Order depth should be positive"
 
Цитата
Вадим Никитин написал:
Здравствуйте.

Сегодня система QUIK на отправленную транзакцию выдала ошибку  "Order depth should be positive" .
Все предыдущие транзакции с такими же параметрами успешно исполнялись.
Язык QUIK - английский.

Подскажите пожалуйста, что значит данная ошибка?
Вадим Никитин ,
Вы  получили это сообщение, в колбеке или в окне сообщений.
Ошибка "Order depth should be positive", Ошибка "Order depth should be positive"
 
Нсколько я понимаю, в сообщении речь идет не о цене, а о глубине рынка."Order depth"
Как подавить вывод командного окна при запуске exe-файла из Lua?, popen execute
 
Создайте не консольное приложение, а оконное и в нем отключите отображение окна.
Как подавить вывод командного окна при запуске exe-файла из Lua?, popen execute
 
Создайте не консольное приложение, а оконное и в нет отключите отображение окна.
Неверные флаги в функции OnOrder, флаги показывают что лимитная заявка снята, хотя её состояние Активна
 
Поэтому , для тех кто не понял, уточняю

OnTransRepley  и OnOrder Приходят многократно, но ПЕРВЫМ всегда приходит первый  OnTransReple
В нем нет номера заявки потому что на еще не пришла с сервера биржи
Остальные сигналы приходят как угодно но они не первые.
Неверные флаги в функции OnOrder, флаги показывают что лимитная заявка снята, хотя её состояние Активна
 
Цитата
Sergey Gorokhov написал:
Цитата
Цитата
nikolz написал:
так как это ответ сервера брокера, а ответ onOrder - это трансляция сервера биржи сервером брокера.
тоже нет, ответ на транзакцию содержит номер заявки. QUIK не может его знать, только биржа его может сообщить, значит это ответ биржи, а не сервера брокера.
Добрый день,
мы с Вам говорим о разном.
Вы говорите о OnTransRepley в котором есть номер заявки.
------------------------------
Я говорю о OnTransRepley,  в которых нет номерf заявки.
Эти сигналы всегда приходят раньше onOrder.
Так как ответ от биржи еще не пришел.
---------------------------
Именно этот ответ всегда приходит раньше
Именно его я и использую для фиксации момент выставления заявки.
-------------
Неверные флаги в функции OnOrder, флаги показывают что лимитная заявка снята, хотя её состояние Активна
 
более того, ответ на транзакцию OnTransRepley всегда приходит первым,
так как это ответ сервера брокера, а ответ onOrder - это трансляция сервера биржи сервером брокера.
Я именно в  OnTransRepley ловлю исполнение транзакции на выставление заявки всегда до прихода onOrder.
Неверные флаги в функции OnOrder, флаги показывают что лимитная заявка снята, хотя её состояние Активна
 
Цитата
Kalmar написал:
Цитата
nikolz написал:
Нет. если Вы не в дата центре.
Да, если ответ на транзакцию и заявка пришли вместе.
Вы невнимательно читаете.
Специально для Вас вопрос был такой:
1) Возможно ли что функция OnOrder выполняется через 1 мс после отправки sendTransaction(transaction) ??
------------------
Читайте внимательно в вопросе время отсчитывается от отправки , а не от прихода.
---------------------
Прочитали, теперь снова напишите свой ответ на данный вопрос.
Неверные флаги в функции OnOrder, флаги показывают что лимитная заявка снята, хотя её состояние Активна
 
Alexey написал:
1) Возможно ли что функция OnOrder выполняется через 1 мс после отправки sendTransaction(transaction) ??
Нет. если Вы не в дата центре.
Ошибка "Order depth should be positive", Ошибка "Order depth should be positive"
 
Цитата
Вадим Никитин написал:
Если нужна какая-то ещё информация, то могу попробовать предоставить, если это будет возможно. Но судя по всему на форуме такой ошибки ещё не было.
полагаю, что это ошибка с биржи.
Что бы разобраться надо ее поймать и потом выложить скрипт и скрип экрана со стаканом
Ошибка "Order depth should be positive", Ошибка "Order depth should be positive"
 
Цитата
Вадим Никитин написал:
Если перевести ошибку, то да, смысл может быть такой.

Но цена была равна лучшей заявке на продажу, и встречные завки в стакане присутствовали.

И как можно выставить заявку вне очереди, тем более по одному из самых ликвидных фьючерсов CNY-6.23?

Возможно глюк системы, но хотелось бы всё-таки уточнить у разработчиков в чём смысл данного сообщения и в каких случаях QUIK может его выдавать, потому как в английском интерфейсе он выдаёт одни и те же сообщения на разные ошибки транзакций?
Все возможно, но кроме текста сообщения Вы ничего конкретного не выложили.
Лишь Ваше убеждение, что у Вас все правильно.

 
Ошибка в простом скрипте
 
АндрейКД,
Дам Вам бесплатный совет.
----------------------
Если действительно желаете научиться писать для КВИКА скрипты на луа то Вам надо:
--------------------
1) Изучить язык программирования Луа . Те проштудировать книжку и сделать кучу примеров без привязки к QUIK.
-----------------------
2) Изучить функции библиотеки QLUA. Проштудировать документа документацию на QLUA.
-------------------------
3) Научиться писать индикаторы и скрипты на луа с использованием библиотеки QLUA.
-----------------
Вы стали сразу что-то писать. Поэтому и не понимаете.
Ошибка в простом скрипте
 
Цитата
АндрейКД написал:
Цитата
nikolz написал:
В 54 строке nil в арифметической операции. Какая строка 54?
 sum = sum + dValue(i, Settings.value_type)
проверьте диапазон i
и значение dValue(...)
Ошибка в простом скрипте
 
В 54 строке nil в арифметической операции. Какая строка 54?
Ошибка "Order depth should be positive", Ошибка "Order depth should be positive"
 
Цитата
Вадим Никитин написал:
Order depth should be positive
предположу, что Вы пытаетесь выставить вне очереди заказов.
Посмотрите что в стакане и куда вы хотите поставить заявку.
Неверные флаги в функции OnOrder, флаги показывают что лимитная заявка снята, хотя её состояние Активна
 
почитайте это:
https://forum.quik.ru/forum1/topic8018/
Выгрузка библиотек
 
Alexander,
Добрый день,
Объясняю как это сделать.
----------------------
1) Вам надо написать отдельную dll, в которой одна функция - выгрузить dll по ее имени
-------------------------
2) в этой функции вам надо найти хендл выгружаемой dll и выгрузить ее столько раз, сколько ее вызывали до этого.
---------------------
3) При сборке dll, которую Вы будете в дальнейшем выгружать, вам надо отключить оповещение о вызове этой dll
----------------
И будет вам счастье.
QIUK 9.8.0.11 выходит при attach MSVC 2019 debugger - защита или проблема?
 
Цитата
Delv написал:
Цитата
nikolz написал:
 
Цитата
Delv  написал:
И как продвигается? Пока приходится использовать старый Quik для такой отладки. А какие другие варианты есть??? Не отлаживать dll?
 Отлаживаю DLL вне QUIK.
В чем пролема?
Никогда не пробовал отлаживать dll для Quik вне Quik. Даже в голову такое не приходило. Но звучит интересно. Поделитесь опытом, как там и что.
Рассказываю кратко.
--------------------
DLL для скрипта Луа состоит  из функций C и обертки для вызова этих функций из Луа.
--------------------------------
Можно делать - мухи отдельно, котлеты отдельно.
-----------------------------
Можно сделать функцию интерфейса вызова функций С из луа и не делать оберток вообще.
---------------------------------
Но делают обычно все в одну кучу, т е пишут функцию на С с интерфейсом для Луа и внутри нее реализацию алгоритма на СИ.
Этот вариант  отлаживается путем создания тестового скрипта на Луа с вызовом в нем функций из DLL.
=============================
Я делаю это в редакторе SciTe, который написан на луа
и имеет встроенные надстройки для вызова и компиляции скриптов Луа.
----------------------
При этом в функциях  СИ можно ставить контрольную печать для любых переменных СИ
и они будут отображаться , так же как и печать переменных Луа, в окне вывода SciTe.
Т е можно выводить состояние любых переменных Луа и СИ и даже ASM в окно редактора SCITE.
-------------------------
Кратко все.
В какой таблице найти информацию о short
 
Цитата
МихаилКа написал:
Доброго времени суток!
Подскажите, пожалуйста, есть ли возможность видеть признак торгуемости актива в шорт именно в таблице Текущие торги?
Нормальная ручная торговля, просмотр графиков, постановка заявок проходят из этой таблицы, хотелось бы не искать инструмент в другой таблице Купить/Продать, а сразу видеть признак в Текущих торгах.
это зависит от брокера. Шорт - это кредит бумагами у брокера . Если его клиенты этими бумагами не торгуют, то он вам их и не даст.
Брокер ничего своего в долг не дает.
Поэтому просто спросите у брокера даст он Вам в долг эти бумаги или нет и сколько это будет стоить.
По закону это должно быть в регламенте брокера.
Вы регламент брокера внимательно читали?
Отладка кодов индикаторов, Отладка кодов индикаторов
 
демо счет можно получить на этом сайте разработчиков QUIK без проблем и быстро.
Отладка кодов индикаторов, Отладка кодов индикаторов
 
Цитата
Александр Клименко написал:
Здравствуйте. Столкнулся с проблемой отладки кода простенького индикатора.
Без данных брокера отладить не представляю как.
Quik - 10
Операционка - w7х64.

decoda  не работает.


Кто и что может посоветовать толкового?
На демо счете все отлаживается без проблем
используйте лог файл.
Торговый робот на LUA, Робот классический сеточник для торговли акциями
 
Цитата
muyuyu написал:
Робот должен усреднять позицию в 1,5 раза после покупки акции в случае снижения на 1% и продавать по ТП 33 (все цифры назначаются в параметрах). Вход авто или ручной.
Можно без бла-бла-бла выложить на форуме, или в личку или файлообменник тех задание, бюджет и сроки.  
------------------------
Без обид, но угадывать Ваши хотелки бесплатно нет желания.
Синхронизация QUIK с NTP
 
Добрый день,
Для контроля  реального времени прихода сделок с биржи синхронизирую компьютер с сервером точного времени.
Не удается получить погрешность менее 20 ms.



Майкрософт декларирует возможность 1 ms.
----------------
Если кому-то это удалось, подскажите как Вы это достигли.
QIUK 9.8.0.11 выходит при attach MSVC 2019 debugger - защита или проблема?
 
Цитата
Delv написал:
И как продвигается? Пока приходится использовать старый Quik для такой отладки. А какие другие варианты есть??? Не отлаживать dll?
Отлаживаю DLL вне QUIK.
В чем пролема?
Тест. Данные в другое приложение.
 
Добрый день,
Неоднократно на форуме интересовались передачей данных из  QUIK  в другое приложение(процесс).
Есть много способов.
Наиболее универсальным является file mapping
Этот метод позволяет обмениваться данными практически любого объема.
Использую этот метод не только для QUIK
------------------
В названии метода есть слово файл.
Уверен, что многие скривятся и скажут, что метод медленно работает.
А вот и нет. .
---------------------------------
Что нам рассказывает об этом методе Майкрософт:
--------------------------
Это объединение содержимого файла с частью виртуального адресного пространства процесса.
Система создает объект сопоставления файлов (также известный как объект раздела) для поддержания этой связи.
Просмотр файла - это часть виртуального адресного пространства, которую процесс использует для доступа к содержимому файла.
Сопоставление файлов позволяет процессу использовать как случайный ввод-вывод (I / O), так и последовательный ввод-вывод.
Это также позволяет процессу эффективно работать с большим файлом данных, таким как база данных,
без необходимости отображать весь файл в памяти.
Несколько процессов также могут использовать файлы, сопоставленные с памятью, для обмена данными.

Процессы считывают данные и записывают в файловое представление, используя указатели, точно так же, как они делали бы с динамически выделяемой памятью.

Использование данного метода повышает эффективность, поскольку файл находится на диске, а представление файла - в памяти.

===========================

Тест для измерения задержки передачи данных из скрипта QUIK  в приложение.

скрипт Теста в SciTe:

Код
paths = "D:/nkarray/"
package.cpath =paths.."?.dll;"
require"nkthread"
----------------------
local T=0; while true do local T1,dt,hms,s,num,HMS,ss=nkmx.gsm(0,T); if T1 then T=T1; print(0.1*dt,hms,s,num,HMS,ss); end  end

фрагмент скрипта в QUIK:
Код
function OnAllTrade(t)
   local c,s=t.class_code,t.sec_code;  local z=ds[c..s]; local num=t.trade_num;
   if z then   local d=z[1]; local n=z[2]; local f=z[3];
      local Ti=t.datetime; local HMS=(60*(60*Ti.hour+Ti.min)+Ti.sec)+0.001*Ti.ms;
      local D=os.date("*t"); local hms=60*(60*(D.hour-shH)+D.min)+D.sec-shS;
      local dt= hms-HMS+n;
      local size=d:Size();
      local T1=d:T(size);   local HMS1=(60*(60*T1.hour+T1.min)+T1.sec)+0.001*T1.ms;
      if HMS==HMS1 and z[4]~=num then
         local dt1=0.01*math.floor(100*dt);   if 0>dt then dt=0 end   count=count+1;   count1=count1+1;
         local m=math.floor(dt)+1;
         local ss=tostring(hms)..","..tostring(s)..",num="..tostring(num)..",size="..tostring(size)..",HMS="..tostring(HMS)..",dt="..tostring(dt1)..",n="..tostring(n)..",m="..tostring(m)..",clock="..(os.clock()-clockOS);
         nkmx.ssm(0,hms,s,num,HMS,ss); -- Log:write(ss.."\n"); Log:flush();
         if sts[m] then sts[m]=sts[m]+1; else sts[m]=1    end
      end
      z[4]=num;
   end
end

результат вывода параметров в SciTe:
Код
0.0   46972   MTSS   4794253307   44952.0   46972,MTSS,num=4794253307,size=2390,HMS=44952.0,dt=2020.0,n=0,m=2021,clock=8.4760000000024
0.1   46972   MTSS   4794253308   44952.0   46972,MTSS,num=4794253308,size=2391,HMS=44952.0,dt=2020.0,n=0,m=2021,clock=8.4760000000024
0.1   46972   FIVE   4794253618   44971.0   46972,FIVE,num=4794253618,size=2756,HMS=44971.0,dt=2001.0,n=0,m=2002,clock=8.4760000000024
0.1   46972   FIVE   4794253619   44971.0   46972,FIVE,num=4794253619,size=2757,HMS=44971.0,dt=2001.0,n=0,m=2002,clock=8.4760000000024
0.1   46972   FIVE   4794253620   44971.0   46972,FIVE,num=4794253620,size=2758,HMS=44971.0,dt=2001.0,n=0,m=2002,clock=8.4760000000024
0.1   46972   FIVE   4794253621   44971.0   46972,FIVE,num=4794253621,size=2759,HMS=44971.0,dt=2001.0,n=0,m=2002,clock=8.4760000000024
0.1   46972   MTSS   4794253982   44990.0   46972,MTSS,num=4794253982,size=2394,HMS=44990.0,dt=1982.0,n=0,m=1983,clock=8.4760000000024
0.1   46972   MTSS   4794255354   45061.0   46972,MTSS,num=4794255354,size=2396,HMS=45061.0,dt=1911.0,n=0,m=1912,clock=8.4760000000024
0.1   46972   MTSS   4794255355   45061.0   46972,MTSS,num=4794255355,size=2397,HMS=45061.0,dt=1911.0,n=0,m=1912,clock=8.4760000000024
0.1   46972   MTSS   4794255356   45061.0   46972,MTSS,num=4794255356,size=2398,HMS=45061.0,dt=1911.0,n=0,m=1912,clock=8.4760000000024
0.1   46972   MTSS   4794255903   45095.0   46972,MTSS,num=4794255903,size=2402,HMS=45095.0,dt=1877.0,n=0,m=1878,clock=8.4770000000026
0.1   46972   MTSS   4794255904   45095.0   46972,MTSS,num=4794255904,size=2403,HMS=45095.0,dt=1877.0,n=0,m=1878,clock=8.4770000000026
0.1   46972   FIVE   4794256157   45107.0   46972,FIVE,num=4794256158,size=2763,HMS=45107.0,dt=1865.0,n=0,m=1866,clock=8.4770000000026
0.1   46972   FIVE   4794256158   45107.0   46972,MTSS,num=4794256215,size=2405,HMS=45110.0,dt=1862.0,n=0,m=1863,clock=8.4770000000026
0.1   46972   MTSS   4794256215   45110.0   46972,MTSS,num=4794256215,size=2405,HMS=45110.0,dt=1862.0,n=0,m=1863,clock=8.4770000000026
0.1   46972   MTSS   4794256220   45111.0   46972,MTSS,num=4794256220,size=2407,HMS=45111.0,dt=1861.0,n=0,m=1862,clock=8.4770000000026
0.1   46972   VSMO   4794213402   42862.0   46972,VSMO,num=4794213402,size=2696,HMS=42862.0,dt=4110.0,n=0,m=4111,clock=8.4770000000026
0.1   46972   VSMO   4794213403   42862.0   46972,VSMO,num=4794213403,size=2697,HMS=42862.0,dt=4110.0,n=0,m=4111,clock=8.4770000000026
0.1   46972   VSMO   4794213404   42862.0   46972,VSMO,num=4794213404,size=2698,HMS=42862.0,dt=4110.0,n=0,m=4111,clock=8.4770000000026
0.1   46972   VSMO   4794213405   42862.0   46972,VSMO,num=4794213405,size=2699,HMS=42862.0,dt=4110.0,n=0,m=4111,clock=8.4770000000026
0.1   46972   VSMO   4794213406   42862.0   46972,VSMO,num=4794213406,size=2700,HMS=42862.0,dt=4110.0,n=0,m=4111,clock=8.4770000000026
0.1   46972   VSMO   4794213881   42889.0   46972,VSMO,num=4794213881,size=2702,HMS=42889.0,dt=4083.0,n=0,m=4084,clock=8.4770000000026
0.1   46972   VSMO   4794214435   42919.0   46972,VSMO,num=4794214435,size=2704,HMS=42919.0,dt=4053.0,n=0,m=4054,clock=8.482
0.0   46972   VSMO   4794214436   42919.0   46972,VSMO,num=4794214436,size=2705,HMS=42919.0,dt=4053.0,n=0,m=4054,clock=8.482
0.1   46972   VSMO   4794214729   42935.0   46972,VSMO,num=4794214729,size=2707,HMS=42935.0,dt=4037.0,n=0,m=4038,clock=8.482
0.1   46972   VSMO   4794214730   42935.0   46972,VSMO,num=4794214730,size=2708,HMS=42935.0,dt=4037.0,n=0,m=4038,clock=8.482
0.1   46972   VSMO   4794214732   42936.0   46972,VSMO,num=4794214732,size=2710,HMS=42936.0,dt=4036.0,n=0,m=4037,clock=8.482
0.1   46972   VSMO   4794214733   42936.0   46972,VSMO,num=4794214733,size=2711,HMS=42936.0,dt=4036.0,n=0,m=4037,clock=8.482
0.1   46972   VSMO   4794214734   42936.0   46972,VSMO,num=4794214734,size=2712,HMS=42936.0,dt=4036.0,n=0,m=4037,clock=8.482
0.1   46972   VSMO   4794214735   42936.0   46972,VSMO,num=4794214735,size=2713,HMS=42936.0,dt=4036.0,n=0,m=4037,clock=8.482
0.0   46972   VSMO   4794214736   42936.0   46972,VSMO,num=4794214736,size=2714,HMS=42936.0,dt=4036.0,n=0,m=4037,clock=8.482
0.1   46972   VSMO   4794214737   42936.0   46972,VSMO,num=4794214737,size=2715,HMS=42936.0,dt=4036.0,n=0,m=4037,clock=8.482
0.1   46972   VSMO   4794214738   42936.0   46972,VSMO,num=4794214738,size=2716,HMS=42936.0,dt=4036.0,n=0,m=4037,clock=8.482
первое число в стоке - задержка передачи параметров из QUIK в приложение в мкс.
--------------------
Резюме:  задержка передачи методом file mapping параметров из QUIK в другое приложение составляет 0.0000001 сек.

Как получить графу Прибыль/Убыток из getPortfolioInfoEx, часть возвращаемой таблицы пустая, хотя в визуальной таблице QUIK данные есть.
 
опечатка:
т е параметры с 6 по 22
Как получить графу Прибыль/Убыток из getPortfolioInfoEx, часть возвращаемой таблицы пустая, хотя в визуальной таблице QUIK данные есть.
 
Цитата
awkozlov написал:
Пытаюсь получить из таблицы "Клиентский портфель [SUR]" данные из графы << Плечо >> по строке Т2  Использую для этого код:  
Код
   local  PortfolioInfoExTable =  getPortfolioInfo Ex (gFIRMID, gCLIENT_CODE,  2 )  -- https://luaq.ru/getPortfolioInfoEx.html 
 local  zPortfolio_value = PortfolioInfoExTable.portfolio_value  -- Стоимость портфеля 
 local  zCash_leverage = PortfolioInfoExTable.cash_leverage  -- Плечо 
 message (tostring(zPortfolio_value) .. '\n\n' .. tostring(zCash_leverage))   
   Но значение плеча zCash_leverage нулевое, хотя я вижу этот размер плеча   явно   в таблице "Клиентский портфель [SUR]" в строке Т2.  При этом мне успешно показывается стоимость портфеля - zPortfolio_value.  У меня такое ощущение, что в синтаксисе команды getPortfolioInfoEx должно быть ещё указание на валюту т.к. она указана в титуле окна.  На самом деле мне нужна графа <<Прибыль/Убытки>>, но для упрощения вопроса спрашиваю про графу <<Плечо>>.  Как мне получить размер Плеча или Прибыль/Убыток с начала дня по спотовому рынку?
В документации сказано:
Функция возвращает таблицу Lua с параметрами
таблицы «Клиентский портфель».

Дополнительно возвращаются следующие параметры:  

ПараметрТипОписание
1init_marginSTRINGЗначение начальной маржи. Заполняется для клиентов типа «МД»Нач.маржа
2min_marginSTRINGЗначение минимальной маржи. Заполняется для клиентов типа «МД»Мин.маржа
3corrected_marginSTRINGЗначение скорректированной маржи. Заполняется для клиентов типа «МД»Скор.маржа
4client_typeSTRINGТип клиентаТип клиента
5portfolio_valueSTRINGСтоимость портфеля. Для клиентов типа «МД» возвращается значение для строк с  максимальным сроком расчётов limit_kindСтоимость портфеля
6*start_limit_open_posSTRINGЛимит открытых позиций на начало дняЛимОткрПозНачДня
7*total_limit_open_posSTRINGЛимит открытых позицийЛимОткрПоз
8*limit_open_posSTRINGПланируемые чистые позицииПланЧистПоз
9*used_lim_open_posSTRINGТекущие чистые позицииТекЧистПоз
10*acc_var_marginSTRINGНакопленная вариационная маржаНакопВарМаржа
11*cl_var_marginSTRINGВариационная маржа по итогам промклирингаВарМаржаПромклир.
12*opt_liquid_costSTRINGЛиквидационная стоимость опционовЛиквСтоимОпционов
13*fut_assetSTRINGСумма оценки средств клиента на срочном рынкеСумАктивовНаСрчРынке
14*fut_total_assetSTRINGСумма оценки собственных средств клиента на фондовом и срочном рынкахПолнСтоимостьПортфеля
15*fut_debtSTRINGТекущая задолженность на срочном рынкеТекЗадолжНаСрчРынке
16*fut_rate_assetSTRINGДостаточность средствДост. Средств
17*fut_rate_asset_openSTRINGДостаточность средств (под открытые позиции)Дост. Средств (ОткрПоз)
18*fut_rate_goSTRINGКоэффициент ликвидности ГОКоэффЛикв ГО
19*planed_rate_goSTRINGОжидаемый коэффициент ликвидности ГООжид. КоэффЛикв ГО
20*cash_leverageSTRINGCash LeverageCash Leverage
21*fut_position_typeSTRINGТип позиции на срочном рынке. Возможные значения  
  • «0» – нет позиции;
  • «1» – фьючерсы;
  • «2» – опционы;
  • «3» – фьючерсы и опционы
ТипПозНаСрчРынке
22*fut_accured_intSTRINGНакопленный доход с учётом премии по опционам и биржевым сборамНакопДоход
23rcv1STRINGНорматив покрытия риска 1. Рассчитывается как разница параметров «Стоимость  портфеля» и «Начальная маржа». Для клиентов типа «МД» и «МД+»НПР1
24rcv2STRINGНорматив покрытия риска 2. Рассчитывается как разница параметров «Стоимость  портфеля» и «Минимальная маржа». Для клиентов типа «МД» и «МД+»НПР2

* - параметр заполняется для  клиентов с настроенной единой денежной позицией и для клиентов срочного рынка  без единой денежной позиции

т е параметры с 6 по 20 заполняются лишь для
клиентов с настроенной единой денежной позицией и для клиентов срочного рынка без единой денежной позиции
если Вы не такой клиент, то будет ноль.
Пример
 
Цитата
cudi написал:
Цитата
cudi написал:
[img]file:///C:/Users/family/Desktop2.png[/img]
теперь после повторного соединения его уже нет
Надо не прикреплять файл, загружать картинку с компьютера, иначе  плохое качество
-----------------------
Посмотрите внимательно у вас нет спроcа и предложения (bid, offer) по двум валютам 2 и 3 строка
поэтому результат пустой. В ТТП нули, т е валюты либо не торгуются либо вы их не выбрали в заказе данных
Нечем торговать.
Подключение к Quik, Как подключиться к quik для получения информации с графика и формирования заявок?
 
Цитата
Юрий написал:
Цитата
nikolz написал:
замечу два момента.1) если речь идет о фильтрации обезличенных сделок, то ваш вариант неправильный. Так как при большом числе сделок вы будете долго искать.На основе своих исследований данной проблемы могу сказать, что задача решается проще. Повторная сделка приходит всегда следом за первой сделкой.Но особенность в том, что следующая сделка по данному инструменту это не следующая сделка в потоке сделок после первой.-----------------------2) Вы зря не хотите реализовать через файлы. Это просто и быстро. Более того, такие методы как   Pipe и mailslot  тоже используют запись чтение файлов. Поэтому когда набьете руку (голову) на файлах ,то легко решите задачу с Pipe или mailslot и им подобным.

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

А тут столько блин специалистов и никто не может пример написать. Все жадные до кода :)  
1) Для OnTrade, OnOrder,onStopOrder, OnTransReply  вообще нет проблем с повторением.
------------------------------------
Но так как это колбеки, то У Вас проблема в алгоритме обработки.
-----------------------------------
Если хотите конкретной помощи, то задавайте конкретные вопросы и выкладывайте совй скрипт.
Иначе будете бла бла бла с Владимиром. Он Вам будет хвалится что все решил и уговаривать писать на "чистом" Луа, а сам тайно использует dll QLUA, которая написана на C.
____________________________  
2) Вот даже вы ошибаетесь.  Файлы они в памяти, И реально Вы и будете передавать через память, если это короткие сообщения и разрешен параллельный доступ к файлам.
Рекомендую Вам не гадать, а написать короткий тест и измерить скорость обмена через файлы.
-----------------
Повторю еще раз.
Хотите помощи - пишите сами получайте ошибки выкладывайте свое произведение и задавайте вопросы.
Примеры как писать читать файлы на C вы найдете в интернете.
Зачем вам C++, если для луа надо писать на С?
С++ еще сложнее чем С. Вы хоть понимаете, что такое классы в программировании?
Если нет или Вы пишите без них то Вам С++ не нужен.
Подключение к Quik, Как подключиться к quik для получения информации с графика и формирования заявок?
 
Владимир,
На форуме я выкладывал пример скрипта в котором любые функции из dll на СИ я вызываю буз использования C fo Lua.
---------------
Для этого я написал очень маленькую  dll .
если Вы крутой программист то напишите аналогичную, а не рассказывайте байки  
Подключение к Quik, Как подключиться к quik для получения информации с графика и формирования заявок?
 
Цитата
Владимир написал:
повторная сделка не только не всегда приходит следом за первой сделкой, они ещё и приходят "крест-накрест собачьим шагом", особенно красиво это выглядит, если заявка реализуется в десяток-другой сделок. Но это не Ваш уровень - я уже задолбался советовать Вам заняться чем-нибудь кроме программирования - вдруг Вы в какой-то области деятельности и в самом деле что-то соображаете.
Полагаю Вы все путаете.
Есть повторение обезличенных сделок в колбеке onAllTrade
Именно об этом я и написал. Проблема решается сравнительно просто, но Вы ее не решите.
---------------------------
Получение исполненных сделок в OnTrade меня вообще не волнует.
------------------------
Есть повторение заявок onOrder
Это вообще не проблема.
==================
И кончайте размазывать сопли по экрану.
Если хотите сравнить Вашу писанину с моей, то предлагаю напишите передачу параметров между процессами.
Я это давно уже написал во всех вариантах
Когда напишите то сравним  
Пример расчёта индекса Московской биржи, Инструкция по созданию в QUIK
 
если Вам надо формат xlsx, то с биржи можно скачать Архив ребалансировки
https://fs.moex.com/files/15237
Подключение к Quik, Как подключиться к quik для получения информации с графика и формирования заявок?
 
Цитата
Юрий написал:
Цитата
У меня уже все работает через библиотеку 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 и им подобным.

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

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

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

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

Нужно в отдельную программу. Там слишком много завязано на нее другого разного.
А какой-нибудь наименее сложный механизм в виде примера в коде на C++ можно увидеть?  
Что Вам мешает вызвать функцию из dll в своей программе на C++?
Кто сможет объяснить необъяснимое?
 
Цитата
Даниил Волошин написал:
Цитата
nikolz написал:
Что-то разработчики  молчат.
Ay!!!

Добрый день,

Просим прощения, немного поторопили Вас. На демо-доступе QUIK Junior идёт эмуляция торгов - так называемый игровой полигон, следовательно причины могут отличаться от таковых на реальных торгах.

Просим Вас всё же в аналогичном формате привести в пример: номер сделки, которая пришла с запозданием, её время и время её появления на терминале, но с реального рынка (подключаясь к Сбербанку). Также укажите обязательно дату и сервер (его адрес) к которому Вы подключались.
Так мы сможем обратиться к Вашему брокеру и совместно с ним разобрать возможную задержку обезличенных сделок.
Добрый день,
Понятно.
Но хотел бы услышать Ваше объяснение применительно к Вашему демо серверу.
Судя по данным , приведенным мною выше, Вы отправляете обезличенные сделки пакетом.
Для демо сервера размер пакета получается в 1 минуту.
Полагаю, что на рабочем сервере отправка пакетами остается но возможно, что интервал меньше.
Это так?
----------------------------------
Кроме того, могу выложить задержки по свечам.
На 1 минутных свечах на демо сервере у Вас задержки до 20 секунд.
======================
Для свечей я наблюдал аналогичные задержки и на рабочем сервере. Обычно это задержка до 10 секунд.
-------------------------------
Поясните механизм возникновение этих задержек.
-------------------------------
Задержка интернет и загрузка процессора исключаются, так как их величина на несколько порядков меньше.
------------------
Страницы: Пред. 1 ... 11 12 13 14 15 16 17 18 19 20 21 ... 72 След.
Наверх