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

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

Страницы: Пред. 1 ... 33 34 35 36 37 38 39 40 41 42 43 ... 80 След.
Lua - C++ - примеры
 
ну как знаете
я Вам пишу со своих работающих исходников
Lua - C++ - примеры
 
я использую 5.3 так как это работает для всех версий КВИК
а 5.4 лишь начиная с 9.X но пока там много ошибок
и там можно включить 5.3
для 5.4 не помню, возможно и так как у вас.
Lua - C++ - примеры
 
Цитата
Serg_ написал:
Цитата
nikolz написал:
у вас ошибка в
Ну так написано у Swerg`а.
у него для разных версий есть
посмотрите для какой вы взяли пример
надо брать не ниже 5.3
Lua - C++ - примеры
 
у вас ошибка в
----------------------
extern "C" LUALIB_API int luaopen_lua_dll_x64_name(lua_State * L) {
   lua_newtable(L);  
   luaL_setfuncs(L, ls_lib, 0);
   lua_pushvalue(L, -1);
   lua_setglobal(L, "lua_dll_x64_name");
   return 0;
}

-- для LUA5.3 надо так:

//=== Регистрация реализованных в dll функций, чтобы они стали "видимы" для Lua ================================//
luaL_Reg ls_lib[] = {
   {"TestFunc", forLua_TestFunc},
   {NULL, NULL}
};

//=== Регистрация названия библиотеки, видимого в скрипте Lua ==================================================//
extern "C" LUALIB_API int luaopen_lua_dll_x64_name(lua_State * L) {
luaL_newlib(L,ls_lib);
lua_setglobal(L,  "lua_dll_x64_name");
  return 1;
}
Lua - C++ - примеры
 
в редакторе используйте print
и контрольную печать в СИ
в SCITE будет видно все
Lua - C++ - примеры
 
вообще-то лучше делать все в SciTe
это редактор на луа с отладциком
пока вам квик не нужен
напишите тест для луа
Lua - C++ - примеры
 
сделайте так:
---------------------
lua_dll_x64_name = require("lua_dll_x64_name")

message((tostring(lua_dll_x64_name)) -- печатает что это таблица если правильно
message(tostring(lua_dll_x64_name.TestFunc())) -- напечатает результат
Откртый интереса за текущий день, Раньше был виден график ОИ, а теперь пропал
 
посмотрите возможно у вас указан период в настройках диаграммы
Lua - C++ - примеры
 
изучите исходники w32 sweg
там все понятно
Lua - C++ - примеры
 
Цитата
Serg_ написал:
Цитата
nikolz написал:
https://quik2dde.ru/viewforum.php?id=14
Сделал по примеру swerg:  https://quik2dde.ru/viewforum.php?id=14

выдает ошибку.
какую?
Lua - C++ - примеры
 
Цитата
Serg_ написал:
Цитата
nikolz написал:
 
Цитата
Serg_  написал:
Подскажите, есть ли какие ни будь условно официальные примеры, как связать С++ с Quik ?
Как сделать dll ?
 Все есть безусловно официально.
В КВИК встроена виртуальная машина луа без каких либо изменений исходников
поэтому читайте API C для  lua.
-------------------------
Я так пишу функции для QUIK  на СИ от  колбек
до многопоточной обработки данных в LUA.
----------------------
QLUA - это библиотека написанная на API C.
--------------------
Или в чем то другом проблема?
Не могу понять, как через dll - все это делать. Откроено говоря - это неМного геморрой. Продукту 20 лет, а нормального API почему то нет.
Вообще-то есть даже учебники о том как использовать API C
------------
как писать dll
поясняю
-------------------
берете любой компилятор СИ
---------------
Я например последнее время для dll луа использую Pelles C
Очень хороший пакет именно для СИ
--------------
иногда использую MVC.
================
Далее в любимом IDE выбираете создать DLL
и пишите программу на CB
Функции СИ пишите как обычно для СИ
А для вызова их из луа делаете обертку
--------------
типа такой:
--------------------
static int stop(lua_State *L) {  
//здесь вставляете преобразование данных луа в данные СИ
QueryPerformanceCounter(&count1);

lua_pushinteger(L,(count1.QuadPart-count.QuadPart)); //это преобразование целого  в формат луа и запись в стек
return 1;  -- это число возвращаемых параметров
}
Все функции API C
здесь
http://antirek.github.io/luabook/api.htm
если любите C++
то читайте это:
https://habr.com/ru/post/237503/
-------
QUIK (версия 7.0.1.5), function OnTrade(trade), трехкратный вызов на одно событие.
 
Цитата
Alexander написал:
Я не рассчитывал на то, что колбэки могут отправляться по нескольку раз. Прочитал эту тему, понял, что могут и причём неограниченное число раз. Я не заморачивался и не тестил чем конкретно отличаются пришедшие в колбэках таблицы, но вижу, что OnOrder() где order.balance == 0 - 2 раза, и OnTrade() 3 раза и слава богу цена в нём одна и та же.

Вопросы:
1) Возможен ли вызов OnTransReply() на мою поданную заявку с моим TRANS_ID, с trans_reply.trans_id == 0, nil, "0", "" или же trans_reply.trans_id всегда содержит номер заявки? Этот номер заявки измениться не может?
2) OnTransReply() вызывается только один раз?
3) Возможен ли случай, когда сначала первой будет вызов OnOrder(), а потом уже вызов OnTransReply()? Вроде бы как-то один раз такое проскочило, когда скрипт вылетел с ошибкой исполнения. Но точно не помню, возможно было и так, даже скорее всего так, что был вызов только OnTrade(), а  OnTransReply() не вызвался, хотя по факту заявка выставилась. Из-за этого дублирую сохранение номера заявки не только в OnTransReply(), но и в OnOrder().
4) Могу ли я быть уверен, что имея самый первый OnOrder() c order.balance == 0, последующие OnOrder() не изменят значение  order.balance?
5) Могут ли приходить сначала OnTrade() без  trade.price, а потом с  trade.price? От этого зависит какие именно я могу использовать вызовы OnTrade(), т.е. нужно ли вообще проверять установлено ли в них поле  trade.price, или это поле заполнено ценой всегда и не меняется в следующих вызовах?
6) Могу ли я быть уверен, что имея самый первый OnTrade() с ценой исполнения trade.price, последующие OnOrder() не изменят значение trade.price?
7) Могу ли я с учётом своего алгоритма контроля исполнения использовать только самые первые вызовы OnOrder(), OnTrade(), OnTransReply(), отфильтровывая все последующие, где я фактически смотрю только на изменение баланса в заявке и жду появления сделки с номером заявки?
8) Может быть вообще как-то по другому изменить алгоритм контроля исполнения заявки(приход сделки)? Какой алгоритм контроля посоветуют разработчики с учётом всех этих многочисленных вызовов?

Все эти 0, nil, "0", "", которые могут прийти в trans_id в разных частных случаях в OnTrade() или в OnOrder() как я понял для меня не критичны, так как во всех колбэках я проверяю поля таблиц trans_id со своим номером транзакции TRANS_ID
1)  OnTransReply - это колбек об отправке транзакции. Т е транзакция ушла с сервера брокера и попала на сервер биржи.
единственный параметр в ней который не изменится это trans_id.
------------------------
Его надо использовать для идентификации транзакций.
Все остальное может бить или не быть в зависимости от того как обрабатывается эта транзакция на сервере биржи.
---------------------
2) Надо делать программу так, чтобы число срабатывания колбеков не влияло на результат.
Для этого надо не считать число срабатываний, а реагировать на события о которых сообщается в информации принятой колбеком.
Если новая информация не изменяет состояния Вашего робота (конечного автомата) то какая разница, сколько раз сработает колбек.
состояние не изменится.
------------------
3) OnOrder может приходить много-много раз. Например Вы поставили лимитную заявку 100 лотов , а встречные заявки  содержат по 1 лоту.
Сколько раз сработает OnOrder? Правильно... много.
Поэтому читайте ответ 2)
-------------------
4) см 2)
5)см 2)
6) см 2)
7) нет
8) ДА
------------------
Lua - C++ - примеры
 
Цитата
Serg_ написал:
Подскажите, есть ли какие ни будь условно официальные примеры, как связать С++ с Quik ?
Как сделать dll ?
Все есть безусловно официально.
В КВИК встроена виртуальная машина луа без каких либо изменений исходников
поэтому читайте API C для  lua.
-------------------------
Я так пишу функции для QUIK  на СИ от  колбек
до многопоточной обработки данных в LUA.
----------------------
QLUA - это библиотека написанная на API C.
--------------------
Или в чем то другом проблема?
Lua советник
 
если кому-то нужен индикатор прибыли/убытков,
или есть пожелание, что надо добавить
пишите вежливо.
Lua советник
 
это картинки работы советника на Сбербанке.
второй график - индикатор прибыли(зеленый) убытков(красный) итого (белый)
--------------------
интервал 30 минут:

интервал 5 минут:
Предлагаю углубить, Расширение функций библиотеки QLUA
 
Добрый день,
Предлагаю добавить в библиотеку QLUA функцию установки идентификатора для графика цена и индикатора .
---------------------
Объясняю зачем:
--------------------
1) Для установки идентификатора не надо будет лазить в меню окна.
Причем очень достает устанавливать этот идентификатор для индикатора при отладке индикатора.
----------------------------
2) идентификатор графика цены нужен для вывода меток на график.
Если это график с якорем, то отображаемый инструмент будет изменяться при изменении активной строки в таблице, а идентификатор при этом не меняется.
С помощью предлагаемой функции можно в скрипте динамически изменять идентификатор, например, указывая в нем имя инструмента.
В итоге можно метки на графике разделить по инструментам.
------------------------------
3) идентификатор индикатора нужен для чтения параметров индикатора в скрипте луа.
Сейчас для этого   надо лазить в меню окна и прописывать идентификатор в Settings.
В итоге идентификатор для индикатора можно будет динамически привязывать к инструменту, интервалу и алгоритму индикатора.
Lua советник
 
Добрый день,
---------------------------
Пример простого, универсального советника на луа на основе любых индикаторов.
------------------------------
Советник - это программа,
которая формирует сигналы "купить/продать" и показывает их, но не совершает сделки.
---------------------
Пример на основе  стратегии  пересечения двух скользящих средних.
Помещаем два индикатора на график цены инструмента
Присваиваем им идентификаторы MOV1 и MOV2  как на рисунке:

   

далее  пишем индикатор  "nk_bot"
Код
Settings={ i1="MOV2",i2="MOV1", Name = 'nk_bot', }
------------------
local function gI(s,j,i)
 local t=getCandlesByIndex(s,j,i-1,1); if t then return t[0].close; else return 0 end
end --значение индикатора
-------------------------
local function cross(s1,j1,s2,j2,i)
   local m=i; local x= gI(s1,j1,m) local x1=gI(s2,j2,m);
    while m>1 and x~=0 and x1~=0 and x>x1 do m=m-1; x=gI(s1,j1,m); x1=gI(s2,j2,m) end
    if m>1 and i>m then return m end
end  --пересечение
--------------------------
function OnCalculate(i)
   local Bu,Se; local i1=i-1;
   if i>1 then
      local jU_,jD_=jU,jD;
      jU=cross(Settings.i1,0,Settings.i2,0,i1); --MOV1 пересекает MOV2 снизу вверх
      jD=cross(Settings.i2,0,Settings.i1,0,i1); --MOV1 пересекает MOV2 сверху вниз
      if jU and jU_==nil then jBu=i; Bu=L(i)-0.1; end
      if jD and jD_==nil then jSe=i; Se=H(i)+0.1; end
      if i==Size() then  -- последняя свеча
      end
   end
return Se,Bu;
end
-----
function Init()
local t={};
   t[#t+1]={Name = "Se",Color = RGB(255,0,0),Type = 11,Width =3};   ---sell
   t[#t+1]={Name = "Bu",Color = RGB(0,255,0),Type = 10,Width =3};   ---buy
Settings.line=t;
return #t;
end

и помещаем его на график инструмента
В результате получим на истории торгов сигналы "купить/ продать" на графике инструмента

---------------------
На основе данного примера  Вы можете построить советник для  любых индикаторов,
которые встроены в терминал КВИК  или написаны кем-то.
Что означает ошибка sendTransaction -- Не указан режим транзакции?
 
PRICE для акций и рыночной цене =0.  
Что означает ошибка sendTransaction -- Не указан режим транзакции?
 
CLIENT_CODE
Кривые шибки в QLua
 
У меня всего одна гипотеза относительно почему они мудаки.
Знаний нет, учиться им уже позно, поэтому пишут чушь .
Кривые шибки в QLua
 
был на форуме только один мудак Владимир,
теперь к нему присоединился второй- TGB
Что означает ошибка sendTransaction -- Не указан режим транзакции?
 
CLIENT_CODE, CLASSCODE
Кривые шибки в QLua
 
Цитата
TGB написал:
Цитата
nikolz написал:
Вы ошибаетесь в главном:Разработчики библиотеки QLUA не являются разработчиками VMLua, в исходниках которой вы ковыряетесь.Поэтому все Ваши вопросы про  base_funcs (Lua 5.4.1), не по адресу.
    Похоже, вы ничего никогда не разрабатывали. Нормальный разработчик отвечает за свою разработку независимо от того что он при этом использует. А ненормальный будет рассказывать что у него не работает из того чем он пользуется (например, "кривой" головой). В этом форуме вы пишите лишь бы как то наследить :: .
и еще.
Я это уже указывал ранее на форуме, но для Вас специально повторю.
У колбеков и Main различные локальные стеки.
это именно 'L" которую Вы пытаетесь синхронизировать.
А так как локальные стеки разные, то и синхронизировать их не требуется.
А вот глобальный стек у них один и тот же.
И потоки в QLUA  синхронизируется при обращении к глобальным переменным.
Ранее приводил результаты тестов как и что кого тормозит по этой причине.
---------------------------
Для своего пула потоков я использую неблокирующую синхронизацию.
-----------------------
Относительно того, кто что разрабатывал, Вы тоже ошибаетесь.
--------------------------------------
Поэтому хвалитесь своим, а не завидуйте другим.
--------------------------
У меня например более 20 патентов, а  как с этим у  Вас?
Кривые шибки в QLua
 
TGB,
Вы ошибаетесь в главном:
Разработчики библиотеки QLUA не являются разработчиками VMLua, в исходниках которой вы ковыряетесь.
Поэтому все Ваши вопросы про  base_funcs (Lua 5.4.1), не по адресу.
----------------------
Кроме того, нигде в документации к LUA ( не к QLUA) не указано, что VMLua является многопоточной виртуальной машиной.
Более того, проблема многопоточности VMLua неоднократно обсуждалась в интернете и есть много способов ее решения.
====================
Разработчики QLUA тоже сделали несколько потока безопасных функций.
О них указано в документации на QLUA.
=====================
Немного поясню Вам по приведенному вами коду из исходников VMLua.
-----------------
Вы ошибаетесь,
  api_incr_top(L);                                      //  ##### ? используется L без синхронизирующих
это не функция а макрос.
-------------------------
вот его определение:
/* Increments 'L->top', checking for stack overflows */
#define api_incr_top(L) {L->top++; api_check(L, L->top <= L->ci->top, "stack overflow");}
-------------------
т е еще на стадии компиляции вместо  api_incr_top(L);
 будет записано  L->top++;
===================
Кроме того, отсутствие блокировки еще не означает невозможности работы данного фрагмента в  многопоточной системе.
================
Если в потоке производится лишь чтение данных, то синхронизация практически не требуется.
=================
чтобы понять надо ли синхронизировать обращение  к функции
luaO_str2num(s, s2v(L->top));   //  ##### ? используется L без синхронизирующих скобок
надо смотреть, пытается ли какой-либо другой поток изменить данные в момент обращения.
=====================
но повторю сказанное ранее,
никто Вам не обещал что эта функция потока безопасная.
======================
"Спасение утопающих - дело рук самих утопающих"
Не работают рыночные типы заявок в ALGO
 
Цитата
Egor Denisov написал:
Цитата
nikolz написал:
 
Цитата
Egor Denisov  написал:
 
Цитата
 NoneB   написал:
Служба технической  поддержки от  вашего брохера не помогла ?
  ответили. но там не понимают, что такое рыночная заявка. В принципе неудивительно. Если есть такая проблема
 попробуйте выставлять не рыночную, а по лучшей цене увеличенной , если лонг или уменьшенной если short  на  1-2%.
Фактически это будет рыночная цена, если Вы торгуете ликвидным инструментом.
Проблема в том, что я не знаю лучшую цену в момент, когда инструмент открывается с гэпом (либо времени очень мало, чтобы вводить руками заявки). В поддержки брока предложили лимитный ALGO, но с макс возможной ценой минус небольшое отклонение. Просто не понятно в чем проблема реализовать нормальную рыночную заявку, которая выставляется по расписанию...
При рыночной  заявке проблема в оценке достаточности ваших средств.
-------------------
Поэтому на самом деле выставляется заявка по некоторой цене по которой оценивается  достаточность средств.  
Какой я в очереди
 
в итоге если Вы не крупный, не маркет-мейкер,  не HFT Робот,
то Ваш номер последний.
Какой я в очереди
 
или продавец
не важно, главное крупный
HFT роботы как пираньи .
Какой я в очереди
 
если в стакане крупный покупатель то перед ним встают HFT роботы.
Какой я в очереди
 
первым практически по любой цене как правило встает маркет-мейкер.
На то он и маркет. Его задача стоять против движения рынка чтобы сжимать спред.
Какой я в очереди
 
Цитата
Graf Graf написал:
Коллеги, добрый день!
Есть ли  в Квике возможность увидеть, на каком месте находится заявка в очереди подобных заявок по той же цене?
Например, стоят на покупку 100 лотов по 25,40, я добавляю, скажем, 5 по той же цене. Становится 105. Потом кто-то добавляет ещё 10. Становится 115. Но на каком месте в очереди находятся мои 5 лотов из 115 в заявке на покупку по 25,40 не понятно.
Можно это как-то узнать?
правило такое:
"Кто первым встал, того и тапочки"
Если встали 105 то остальные после вас.
Увидеть это Вы не сможете.
Это видно лишь на сервере биржи да и то лишь избранным.
Не работают рыночные типы заявок в ALGO
 
Цитата
Egor Denisov написал:
Цитата
NoneB написал:
Служба технической  поддержки от  вашего брохера не помогла ?
ответили. но там не понимают, что такое рыночная заявка. В принципе неудивительно. Если есть такая проблема
попробуйте выставлять не рыночную, а по лучшей цене увеличенной , если лонг или уменьшенной если short  на  1-2%.
Фактически это будет рыночная цена, если Вы торгуете ликвидным инструментом.
Как фильтровать график, чтобы избежать перерасхода оперативной памяти?
 
Цитата
NoneB написал:
Цитата
nikolz написал:
закройте квик, удалите из папки archive файлы этого инструмента и снова запустите квикили сделайте перезаказ данных, предварительно сохранив архив на всякий случай
nikolz,  нет смысла перезаказывать данные, которые не желательны для отображения на графике.  В этом конкретном случае, мне нужно сделать доступным для просмотра на графике данные только текущей сессии и убрать исторические данные, тк в них нет периода с 2018 г  по настоящую дату и они в таком виде бесполезны.

Также, как уже обсуждалось в  темах с участием техподдержки (  https://forum.quik.ru/messages/forum1/message62752/topic7015/#message62752   )  и с вашим участием (   https://forum.quik.ru/messages/forum1/message61763/topic7015/#message61763   ),  можно видеть только те исторические данные (педыдущих  сессий), которые сохранены в архивном модуле брокера. Поэтому удаление локального архива не решит вопрос.


Кстати, в этой теме мы обсуждаем проблему, относящуюся к  дополнительному счету, а в 2018 году его у меня не было. Значит и исторических данных за 2018 для этого "нового" счета накоплено быть не могло.



Цитата
Daniil Pozdnyakov написал:
https://forum.quik.ru/messages/forum1/message62752/topic7015/#message62752
Локальное  накопление архивов графиков возможно только при наличии на серверной  части брокера модулей ведения архивов. Ранее мы с Вами выяснили, что у  Вашего брокера соответствующих модулей нет, поэтому у Вас не  накапливается информация локально. К сожалению, каких-либо  альтернативных решений предложить не можем.Приносим извинения за  предоставленные неудобства, а также дезинформацию ранее.
Сервер брокера дает историю максимум 3000 свечей.
Если взять 1 часовые свечи, то 3000 свечей - это история не более 2 лет т е не ранее 2020 года.
-----------------------
. Если вас интересует лишь текущая сессия,
то Вы очевидно берете еще меньший интервал, т е ну никак история с 2018 года на сервере не хранится и к вам не придет.
-----------------------------------
А вот в архиве в квике у вас вполне может быть любое говно.
Перезаказ или полное удаление позволяет это выявить.
Вы бы сделали как вам советую, и потом показали результат, а не разглагольствовали.
Проблема то у вас а не у меня, мне Ваши рассуждения не интересны.
.  
Net error "Удалённый хост принудительно разорвал существующее подключение", Такая ошибка ,как правило, возникает ближе к концу торгов.Подключиться после этой ошибки невозможно в этот день. На пк установлено ещё 2 квика,они при этом работают нормально. Подключение через USB-модем
 
Цитата
Глеб написал:
Здравствуйте, столкнулся с проблемой "Net error: Удаленный хост принудительно разорвал существующее подключение." Не знаю в  чем дело, до этого квик прекрасно работал, так продолжается уже на протяжении недели, с телефона заходит на тот же аккаунт без каких либо проблем. Интернет у меня кабельный, стабильный, минимум 5 м/б. Прошу вас помочь мне с этой проблемой, заходил сегодня, буквально сейчас.  Интересно то, что сначала он заходит, но после некоторой загрузки он выдает эту ошибку.
если есть роутер, то сделайте рестарт.
Потом проверьте скорость интернет
потом сделайте пинг до сервера.
Net error "Удалённый хост принудительно разорвал существующее подключение", Такая ошибка ,как правило, возникает ближе к концу торгов.Подключиться после этой ошибки невозможно в этот день. На пк установлено ещё 2 квика,они при этом работают нормально. Подключение через USB-модем
 
это пробела сети, а не квика
Получить строки таблицы Текущие торги.
 
Цитата
Mikhail Ran написал:
Здравствуйте!
Использую Квик 8.13.3.1, торгую RI.
Заметил, что в таблице Текущие торги % изменения цены рассчитан не от цены окончания вечерней сессии предыдущего дня, а от цены окончания дневной сессии предыдущего дня.
Почему так?
На фьючерсах нет окончание вечерней сессии. Начало вечерней сессии у фьючерсов это начало сессии следующего дня.
Как фильтровать график, чтобы избежать перерасхода оперативной памяти?
 
Цитата
NoneB написал:
В одном из графиков   имелось неудобство - перед "текущей сесией, сегодня" (изображение 12) по  воле брокера отображался график за 2018 год (изображение  11), а период  2018-13.09.2022 вообще не отображался.
Чтобы отодвинуть  часть графика от  2018 года  влево, активировал  фильтр  "Показывать пустые интервалы"  (изображение  13) и расход RAM  вырос почти на 3Гб.

Проблема более подробно описана  в  https://forum.quik.ru/messages/forum1/message65597/topic7619/#message65597  
Как оптимально фильтровать график, чтобы избежать перерасхода оперативной памяти?
закройте квик, удалите из папки archive файлы этого инструмента и снова запустите квик
или сделайте перезаказ данных, предварительно сохранив архив на всякий случай
Прикольно, но ошибка
 
Цитата
Даниил Волошин написал:
В случае, если проблема воспроизведётся вновь, просим Вас создать архив именно в момент, когда дата торговой сессии отличается от фактической, но при этом свечки на графике уже с датой текущего дня, далее прислать его на нашу почту.
ОК!
Проблема с оперативной памятью QuikSharp (QUIK 9.3 Finam)
 
с этим к автору данного шедевра.
Прикольно, но ошибка
 
Цитата
Даниил Волошин написал:
Здравствуйте,

Подскажите, описываемая Вами проблема проявляется в версии терминала 9.4.2.1?
У себя проблему на различных версиях рабочего места QUIK (в том числе на 9.4.2.1) воспроизвести нам не удалось.

Для анализа описываемого поведения просим Вас прислать копию Вашего Рабочего места QUIK.

Инструкция по созданию архива Рабочего места QUIK:
1) воспроизведите проблему, закройте Рабочее место QUIK;
2) убедитесь, что QUIK исчез из списка процессов в диспетчере задач Windows;
3) сделайте копию папки с Рабочим местом QUIK;
4) удалите из копии папки с QUIK файлы ключей *.txk, если они там присутствуют;
5) сделайте архив копии папки с Рабочим местом QUIK, загрузите его на любой удобный Вам файлообменный сервис и пришлите ссылку на файл на нашу почту  quiksupport@arqatech.com .
добрый день,
В начале темы я уже написал.
"От версии КВИКА этот прикол не зависит."
--------------------
Ранее на форуме я указывал что подобную ошибку я обнаружил когда поставил 9.4.
и после этого вернул 8.7
------------------
Но в текущей теме , подобную ошибку получил на версии 8.7.
-----------------
Эта ошибка возникает не постоянно, а эпизодически.
-------------
За последний месяц - два раза.
Но раньше я такую ошибку не получал, да и сейчас она вроде бы не возникает.
-------------------
если объявится, то сообщу.
OnParam и ТТТ
 
таким образом TTT это набор параметров инструментов из таблиц обезличенных сделок, стаканов , листинга торгуемых инструментов, фьючерсных контрактов
--------------
Этот набор формируется через определенные биржей интервалы. Сервер биржи собирает эти наборы в пакеты и отправляет всем брокерам,
а сервер брокера перенаправляет эти срезы клиентам в соответствии с их подпиской.
----------------
Очевидно, что в TTT будут пропуски информации. кроме того, как указывал ранее, информацию их пакетов в терминале будет пропускать Ваш скрипт, если Вы используете sleep.
При этом наиболее часто Вы будете обрабатывать самый старый параметр инструмента т е записанный первым в пакет.
Остальные параметры, которые будут поступать с интервалом примерно 0.000005 сек Вы просто пропустите.
---------------------
В документации QLUA есть пример использования таблицы для создание очереди параметров. изучите его.
OnParam и ТТТ
 
есть еще таблица обезличенных сделок. из нее берется Last.
--------------
OnParam и ТТТ
 
Александр,
еще Вы можете получить лучшую цену предложения из стакана, откуда она собственно и берется в TTT.
но это более затратный способ получения.
----------------
OnParam и ТТТ
 
Цитата
Александр написал:
Цитата
Владимир написал:
А прогрессивная часть человечества использует OnTrade
Так этот колбек вызывается при "получении сделки или при изменении параметров существующей сделки". Т.е. при совершении сделки. А мне зачем это? Мне нужно узнать лучшую цену предложения (продажи) и ее изменение, в случае, если цена предложения изменилась.... Или я что-то не понимаю..
Все верно.
OnParam и ТТТ
 
Цитата
Александр написал:
Цитата
Александр
Программным доступом - это путем подписки через CreateDataSource?
Хм, но CreateDataSource нужен для получения параметров свечей из графика и если свеча сформировалась, значит сделка уже произошла. Нет, это не то...
Вы все правильно понимаете.
-----------------------------
Немного дополню свой ответ ранее.
---------------------
В терминале КВИК понятие таблица относится к двум сущностям.
-------------------------------
Например , TTT называют внутреннее хранилище параметров  инструментов, которые можно разделить на статические и динамические .
и ТТТ называют таблицу отображения этих параметров на экране монитора.
---------------
Есть два режима заказа инструментов и их параметров с сервера
выбор режима определяется в настройках терминала.
На закладке "Формировать список инструментов и параметров"
---------------
В зависимости от выбранного режима, открытие ТТТ на экране, либо будет влиять, либо нет.
OnParam и ТТТ
 
Цитата
s_mike@rambler.ru написал:
По первому вопросу ответ выше вам дали неправильный.

чтобы вы могли получать данные  по параметрам, необходимо, чтобы они приехали в ваш терминал с сервера.

для этого должна быть произведена подписка терминала на нужный параметр. Это можно сделать несколькими способами. Например, открыть ттп с нужной колонкой - в терминале будет сгенерирован запрос на получение соответствующих данных. Можно открыть график этого параметра, точно также будет внутри терминала создан запрос. Можно принудительно из луа исполнить подписку.

надо понимать, что параметры бывают трёх типов. Статические, рассчитываемые и приезжающие с сервера. Все вышенаписанное относится к получаемым с сервера.

статические параметры инструмента доступны всегда, когда инструмент доступен.

что касается рассчитываемых инструментов, то я я точно не помню, всегда ли они доступны или они рассчитываются только при наличии их в наборе параметров открытой ттп. По. Необходимости вы можете это проверить  
т е Вы считаете, что
1) для того чтобы в колбек OnParam поступали изменения по бумагам  НЕ нужно,  чтобы была открыта ТТТ, со столбцами параметры которых хотелось бы получать?
--------------
или иначе говоря, если ТТТ с параметрами откроете, то onParam не будет принимать данные?
====================
Полагаю, что чел изучил работу в КВИК и понял что показывает ТТТ.
Поэтому для начинающего вполне понятно и достаточно открыть эту таблицу с отображением того что надо
и писать скрипт не заморачиваясь источниками и инвми способами смотреть гланды через зад.
main()
 
а также указал что closure вообще не причем в вопросе cинхронизации потоков колбеков и майн.
main()
 
Цитата
swerg написал:
По-моему, в этой ветке смешались разные смыслы слова "захват".
1. Захват как контекст, как обрасть видимости, как closure
2. Захват как блокировка обращения к одной области памяти разными потоками.

Про 2
Не важно как вы определили переменную, поступ и изменение её потокобезопасно в смысле структур Lua, в смысле корректности состояния переменной.
Если тут возникают проблемы и состояние переменной становится невалидным, то это однозначно ошибка QLua и её исправят.

Про 1
Это чисто семантмческие моменты языка Lua, и, насколько я понял первое сообщение, вопрос совсем не про это.
мой ответ касался п.2 в вопросе темы.
Мое мнение в том, что QLUA  - это библиотеки функций и в ней нет необходимости синхронизации локальных переменных функций QLUA
т к локальные переменные функций - не являются общими main и колбеков.
-------------------
Мой оппонент привел пример локальной переменной вне функций,
т е это тоже не по теме, но эти локальные переменные являются копией глобальных
и их использование внутри колбеков или функций вне QLUA не требует их синхронизации
т к в них копии глобальных переменных, которые и синхронизируются.  
OnParam и ТТТ
 
Цитата
Александр написал:
Товарищи ответы несколько вопросов подскажите пожалуйста:
1) для того чтобы в колбек OnParam поступали изменения по бумагам  нужно  ли чтобы была  открыта   ТТТ  со столбцами параметры которых хотелось бы получать или как работает OnParam?
2) Колбек OnParam срабатывает на изменение любого параметра по ценной бумаге, а что если параметры по нескольким бумагам изменяются одновременно? Как отслеживать изменение одного параметра по  нескольким  ценным бумагам если они вдруг изменяются одновременно?
3) OnParam срабатывает именно на изменение любого параметра или просто через определенные временные интервалы?
4) Мне нужно отслеживать цену лучшего предложения. Почитал, люди пишут, что отслеживают цену последней сделки "LAST", но ведь это последняя сделка, а мне надо лучшее предложение, поэтому мне нужно отслеживать параметр "OFFER", верно?
5) Параметрт"OFFER" в ТТТ изменяется одновременно с появлением нового предложения в стакане или всеже с задержками или как этот параметр изменяется?
1) да
---------------
2) 3) данные в TTT приходят срезами в виде блоков. Т е если несколько бумаг или одна бумага изменили(а) свои параметры 10 раз за 1 мс, то терминал квик
а потом еще 100 раз за 10 мс, то все эти данные придут в терминал одновременно в виде пакета данных.
Терминал будет их распаковывать  и отправлять в колбек.
В итоге В колбеке вы получите все эти 110 изменений с интервалом примерно 5 мкс.  
Так как у вас скорее всего в main стоит Sleep, то фактически вы обработаете лишь несколько значений из данного пакета, остальные просто пропустите.
----------------
4) верно
----------------
5) с задержками и срезами. Т е смотри ответ на 2) 3)
main()
 
Цитата
Constantin написал:
Цитата
nikolz написал:
Замыкание связывает код функции с её лексическим окружением (местом, в котором она определена в коде). Лексические переменные замыкания отличаются от глобальных переменных тем, что они не занимают глобальное пространство имён. От переменных в объектах они отличаются тем, что привязаны к функциям, а не объектам.
Правильно. Всё тело файла кода, в луа, считается chunk. Переменные, помечены как local внутри chunk, захватываются функциями, когда эти функции определяются в chunk, и эти переменные разделяются между ними.

На этом все.
Т е согласны, что ваш пример не про захват, а про глобальную переменную.
Ничто ничего не захватывает, в буквальном смысле как Вы это понимаете.
А создается копия.
Поэтому локальная переменная сохраняет значение глобальной и не зависит от изменения глобальной, если это скаляр
а если это таблица то хранит ссылку на глобальную переменную, а не ее значение, а ссылка тоже не изменяется.
в итогу локальная переменная не изменяется при изменении глобальной
и синхронизация нужна лишь для глобальной.
Ema lua
 
Цитата
Дмитрий Бланк написал:
Цитата
Дмитрий Бланк написал:
Exponential Moving Average (EMA)EMAi = (EMAi-1*(n-1)+2*Pi) / (n+1)так какая на самом деле экспонента? :)
 https://en.wikipedia.org/wiki/Moving_average

An exponential moving average (EMA),  also  known as an exponentially  weighted  moving average (E W MA).


А в Квик совсем иной подход к этой экпоненте...
Вы правы,
в КВИК перепутаны либо формулы либо названия  (кому как удобнее).
--------------------------
На самом деле Exponential Moving Average   - они назвали Modified Moving Average (MMA) MMA = (MMAi-1*(n-1) + Pi) / n]]
-----------------------------
а под названием Exponential Moving Average  у них какой-то самопал  наверное это будет должно быть Modified Moving Average.
Страницы: Пред. 1 ... 33 34 35 36 37 38 39 40 41 42 43 ... 80 След.
Наверх