Вячеслав + написал: Если между вызовами Си функций из Lua, то можно сохранить это значение в LUA_REGISTRYINDEX - это специальная таблица, видимая только из Си и хранящая важную информацию (удалять из неё что-то не своё точно не надо). См. API idx = luaL_ref(L, LUA_REGISTRYINDEX) luaL_unref(L, LUA_REGISTRYINDEX, idx) lua_rawgeti(L, LUA_REGISTRYINDEX, idx)
Спасибо, эти функции у меня в коде есть. Меня насторожило то, что если сохранить ссылку
Код
idx = luaL_ref(L, LUA_REGISTRYINDEX) ,
потом вытолкнуть её из стека
Код
lua_pop(L, 1 ),
затем попытаться вернуть
Код
lua_rawgeti(L, LUA_REGISTRYINDEX, idx) ,
то Quik падает при выполнении таких операций.
Видимо, при удалении единственной ссылки на таблицу, Lua удаляет её содержимое.
Видимо, выходом в такой ситуации будет, как Вы писали:
Код
lua_setglobal(L, "myDS" );
Правда, в этом случае, придётся склеивать индивидуальное символьное имя для каждого источника данных.
Про разные потоки callback'ов и main'a знаю, но про синхронизацию доступа пока не думал. Нужно будет это учесть.
А все callback'и выполняются в одном потоке?
Стек в луа - это просто область памяти, указатель на которую находится по адресу L->base При вталкивании в стек данные записываются по адресу, который записан в L->top Сначала там записан L->base, после каждого заталкивания L->top=L->top+1 При выталкивание происходит обратное действие. При этом происходит контроль границ стека и если адрес выходит за границы выдается сообщение луа. ------------------------------- Таким образом, КВИК падать не может из-за операций со стеком. ---------------------------- Если у Вас квик падает без сообщений, то ошибка в Вашем коде CИ, которай приводит к фатальной ошибке, которую никто не обрабатывает. Возможно Вы в своей программе куда-то не туда чего-то пишите. -------------------------------- Все колбеки выполняются в одном потоке. Но вот открытие источников надо делать в main. Не знаю для чего так сделано, но уж сделано.
Вызов lua_CFunction из С++
Пользователь
Сообщений: Регистрация: 30.01.2015
24.03.2016 16:30:18
Я тоже передаю данные и туда и обратно, но это не мешает использовать и си функции и луа. Из опыта могу сказать что на Си надо делать то, что нет в луа например работу с различными форматами, потоками памятью.
ZeroBrane Studio Lightweight IDE for your Lua needs, полезная для новичков среда разработки со всеми необходимыми качествами
Пользователь
Сообщений: Регистрация: 30.01.2015
24.03.2016 16:27:36
редактор текста SciTE Version 1.75 Apr 25 2009 11:30:59 by Neil Hodgson. December 1998-November 2007.
Lua scripting language by TeCGraf, PUC-Rio
имеет встроенный отладчик луа. очень простой в применении и удобный в работе. Написан полностью на луа. Можно встраивать свои средства. Пользую и Вам советую.
Вызов lua_CFunction из С++
Пользователь
Сообщений: Регистрация: 30.01.2015
24.03.2016 14:37:31
а еще лучше , не делать на Си то, что можно сделать на луа
Вызов lua_CFunction из С++
Пользователь
Сообщений: Регистрация: 30.01.2015
24.03.2016 14:36:27
а еще проще не вставлять в DLL, а поместить в скрипт и вызывать из dll
Баг приводит к закрытию Quik - код индикатора прилагается, Баг-репорт
Пользователь
Сообщений: Регистрация: 30.01.2015
24.03.2016 07:57:14
прошу прощение, перепутал параметры номер линии и число отсчетов в функции getCandlesByIndex (давно не использовал) поэтому замечание о приеме всех свечей в исходном примере ошибочно. ----------------------------------- Но про последний индекс замечание остается Поэтому я предлагаю сделать так:local t_ind2={}
Код
local t_ind2={}
local len2;
function OnCalculate (index)
if index == 1 then
t_ind2={};
len2=0;
else
local len=getNumCandles (Settings.ID)-len2;
if len>0 then
local t,n,l = getCandlesByIndex (Settings.ID,0,len2,len )
if n>0 then
local i=0; while n>i do len2=len2+1; t_ind2[len2]=t[i] i=i+1; end
end
return t_ind2[len2].close
end
end
end
Баг приводит к закрытию Quik - код индикатора прилагается, Баг-репорт
Пользователь
Сообщений: Регистрация: 30.01.2015
24.03.2016 07:44:41
Код
local t_ind2={}
local len2;
function OnCalculate (index)
if index == 1 then
t_ind2={};
len2=0;
elseif getNumCandles (Settings.ID) >=index then
local t,n,l = getCandlesByIndex (Settings.ID,len2 ,index - 1 , 1 )
if n>0 then
local i=0; while n>i do len2=len2+1; t_ind2[len2]=t[i] i=i+1; end
return t_ind2[len2].close
end
end
end
Баг приводит к закрытию Quik - код индикатора прилагается, Баг-репорт
Пользователь
Сообщений: Регистрация: 30.01.2015
24.03.2016 07:42:00
Код
local t_ind2={}
local len2;
function OnCalculate (index)
if index == 1 then
t_ind2={};
len2=0;
elseif getNumCandles (Settings.ID) >=index then
local t,n,l = getCandlesByIndex (Settings.ID,len2 ,index - 1 , 1 )
if n>0 then
local i=0; while n>i do t_ind2[#t_ind2+1]=t[i] i=i+1; end
return t_ind2[#t_ind2].close
end
end
end
Баг приводит к закрытию Quik - код индикатора прилагается, Баг-репорт
Пользователь
Сообщений: Регистрация: 30.01.2015
24.03.2016 07:40:41
и еще Вы на каждый тик читаете весь массив свечей с другого графика а это 3000 штук. в результате большой тормоз. Вот примерный код, как надо сделать (не отлаживал ошибки исправьте сами)
Код
local t_ind2={}
local len2;
function OnCalculate (index)
if index == 1 then
t_ind2={};
len2=0;
elseif getNumCandles (Settings.ID) >=index then
local t,n,l = getCandlesByIndex (Settings.ID,len2 ,index - 1 , 1 )
if n>0 then
local i=0; while n>i do t_ind2[#t_ind2+1]=t[i] i=i+1; end
return t_ind2[#t_ind2]
end
end
end
:
Баг приводит к закрытию Quik - код индикатора прилагается, Баг-репорт
Пользователь
Сообщений: Регистрация: 30.01.2015
24.03.2016 07:28:45
попробуйте так:
Скрытый текст
function OnCalculate (index) if index == 1 then --здесь делаем инициализацию переменных при изменении масштаба этого графика elseif getNumCandles (Settings.ID) >=index then t,n,l = getCandlesByIndex (Settings.ID, 0 ,index - 1 , 1 ) if t[ 0 ].doesExist == 1 then --проверяем если свечки нет, рассчет не ведется if t[ 0 ].close~= 1e10 then --проверяем если новое значение свечки не получено, рассчет не ведется if t[ 0 ].close~= value then value = t[ 0 ].close end t[ 0 ].close = 1e10 return value end end end end
Баг приводит к закрытию Quik - код индикатора прилагается, Баг-репорт
Пользователь
Сообщений: Регистрация: 30.01.2015
24.03.2016 07:16:32
Возможно проблема возникает в операторе t,n,l = getCandlesByIndex (Settings.ID, 0 ,index - 1 , 1 ) если index-1 ,больше, чем число свечей на первом графике?
Баг приводит к закрытию Quik - код индикатора прилагается, Баг-репорт
Пользователь
Сообщений: Регистрация: 30.01.2015
24.03.2016 07:07:32
Цитата
написал: почему бы просто не использовать Функции O, H, L, C, V, T -
Потому что читается не родной график, а другой.
Понял, спасибо.
Баг приводит к закрытию Quik - код индикатора прилагается, Баг-репорт
Я использую простой самописный индикатор "A" для отрисовки линии на графике. Значения для отрисовки этой линии индикатор берет из другого индикатора "Б" по его идентификатору. Оба индикатора расположены на разных графиках. Эти графики имеют разный таймфрейм и расположены в разных окнах одной вкладки.
Первый индикатор "A" копирует значения второго индикатора. Для отрисовки текущей свечки индикатор "A" берёт значение предыдущей свечки индикатора "Б".
В торговое время после запуска индикатора "A" может пройти от 20 минут до 4 часов и Quik стабильно зависает (в заголовке Quik появляется "программа не отвечает"). Приходится завершать процесс info.exe (не отвечает более 30 минут), размер потребляемой опер. памяти не увеличивается от нормы. Зависание происходит только когда включен индикатор "A". Баг проявляется, если в качестве индикатора "Б" использовать любой индикатор (например, встроенный индикатор простой скользящей средней).
Код индикатора "А" с комментариями:
Код
local t = {}
local n = 0
local l = 0
local value = 0
function OnCalculate (index)
if index = = 1 then return end --проверяем если первая свечка, расcчёт не ведется
if getNumCandles (Settings.ID) = = 0 then --Settings.ID содержит название идентификатора, которое задаёт пользователь
return --проверяем если индикатор "Б" не содержит свечек, рассчёт не ведется
else
t,n,l = getCandlesByIndex (Settings.ID, 0 ,index - 1 , 1 )
if t[ 0 ].doesExist = = 1 then --проверяем если свечки нет, рассчет не ведется
if t[ 0 ].close~ = 1e10 then --проверяем если новое значение свечки не получено, рассчет не ведется
if t[ 0 ].close~ = value then value = t[ 0 ].close end
t[ 0 ].close = 1e10
return value
end
end
end
end
Помогите определить почему после запуска индикатор "A" может работать от 20 минут до 4 часов в торговую сессию, а потом Quik зависает. Никаких ошибок в окне сообщений нет. Торгуемый инструмент USDRUB_TOM.
Версия Quik: 7.0.4.10 (англ. интерфейс) Версия OS: Windows 7 SP1 (англ. интерфейс)
Ужасный пример индикатора!!!! ------------------------- getNumCandles (Settings.ID) = = 0 then --Settings.ID содержит название идентификатора, которое задаёт пользователь NUMBER getNumCandles (STRING tag) -Возвращает число – количество свечек по выбранному идентификатору а Settings.ID содержит название идентификатора - что за ....? ---------------------------------------- t,n,l = getCandlesByIndex (Settings.ID, 0 ,index - 1 , 1 ) - зачем читать набор свечей через ЭТО. -------------------------------- почему бы просто не использовать Функции O, H, L, C, V, T - Функции в качестве параметра принимают индекс свечи и возвращают соответствующее значение. Время свечи возвращается с точностью до миллисекунд в виде таблицы с полями: ----------------------------------------- .
LUA C++
Пользователь
Сообщений: Регистрация: 30.01.2015
22.03.2016 14:21:33
Пользуюсь всеми механизмами совместного использования памяти
LUA C++
Пользователь
Сообщений: Регистрация: 30.01.2015
21.03.2016 19:07:15
Цитата
seltor написал: Для начала - да. Добавьте к этому работу с разделяемой памятью, ну и с заявками.
Я все это пользую в луа.
LUA C++
Пользователь
Сообщений: Регистрация: 30.01.2015
21.03.2016 13:41:32
попробую объяснить dll -это библиотека и не важно на чем она написана. Lua позволяет подключать dll. Поэтому подключайте и работайте.
удивительное рядом!!!
Пользователь
Сообщений: Регистрация: 30.01.2015
21.03.2016 12:28:16
полагаю, что это был глюк сервера брокера при формировании свечей. свечи формирует сервер и обновил на открытие утренней сессии, а таблица сделок осталась без изменений. Вот и получили сделки там, где нет цен.
работа с фьючерсами
Пользователь
Сообщений: Регистрация: 30.01.2015
19.03.2016 22:25:27
Ну тогда надо почитать что-нибудь. И узнать, что клиринг пересчитывает позиции и суммирует Вам в Лимиты вар маржу. Получается, что считать маржу надо лишь от клиринга до клиринга. Т е всего за полдня , даже если Вы в позиции 3 месяца.
Будет ли работать КВИК (рабочее место пользователя)на дешевых Windows планшетах, Quik на windows планшете
Пользователь
Сообщений: Регистрация: 30.01.2015
19.03.2016 22:21:20
Цитата
Grasp Grasp написал: в описании рабочего места квика сказано, что он работает с более 2 ГБ оперативки
Я Вам написал из собственного опыта и указал, что требуется оптимизация винды и настройка квика. ------------------------------------ А в описании сказано, что если 2 есть, то и валенок сможет работать.
Михаил, а где Вы взяли такое название "Сертифицированный наставник QUIK" ? Сами придумали? или Вы проводите сертификацию? Но Ваш уровень я понял. ------------------------- Лучше быть, чем казаться.
Будет ли работать КВИК (рабочее место пользователя)на дешевых Windows планшетах, Quik на windows планшете
Пользователь
Сообщений: Регистрация: 30.01.2015
19.03.2016 18:13:23
А какая винда? ---------------------- например на XP можно работать с 1 гб , если правильно настраивать винду и квик.
работа с фьючерсами
Пользователь
Сообщений: Регистрация: 30.01.2015
19.03.2016 18:09:07
Надо играть здесь и сейчас, а не вспоминать былые победы и поражения. Как Вы думаете, зачем на фьючерсах клиринг устраивают в 14 и в 19? ------------------------- не правильный у Вас бутерброт.
проверка статуса стопзаявки по битовым флагам, доступ к таблице "stop_orders"
Пользователь
Сообщений: Регистрация: 30.01.2015
19.03.2016 18:04:32
немного поправим: ------------------ for Index = 0,getNumberOf("stop_orders") - 1 do local any = getItem("stop_orders",Index) if any and bit.band(any.flags, 1) > 0 then local OrderNumber = any.order_num message("Стопзаявка № = "..tostring(OrderNumber).." активна",1) end end
Вопрос по синтаксису Lua на пару строчек, Встретил в справочнике такое вот:
Пользователь
Сообщений: Регистрация: 30.01.2015
18.03.2016 20:38:54
error message
Вопрос по синтаксису Lua на пару строчек, Встретил в справочнике такое вот:
Пользователь
Сообщений: Регистрация: 30.01.2015
18.03.2016 20:38:28
читаем документацию: It returns a new file handle, or, in case of errors, nil plus an error message.
ДемоКвик радует неожиданностями, Перестала работать функция
Пользователь
Сообщений: Регистрация: 30.01.2015
18.03.2016 20:36:12
поставьте в месседже вывод кода инструмента при входе в колбек
ДемоКвик радует неожиданностями, Перестала работать функция
Пользователь
Сообщений: Регистрация: 30.01.2015
18.03.2016 20:34:48
а где присваиваются значения p_classcode и p_seccode
Индикатор
Пользователь
Сообщений: Регистрация: 30.01.2015
18.03.2016 18:07:19
пардон, опечатка: почта на сайте
Индикатор
Пользователь
Сообщений: Регистрация: 30.01.2015
18.03.2016 18:06:33
могу, присылайте на почту тех задание и свою цену, если приемлемая, то обсудим детали. почта на сайте
видимо баг в getNumCandles и getCandlesByIndex
Пользователь
Сообщений: Регистрация: 30.01.2015
17.03.2016 18:58:04
1) а это что за библилотека?require ('math') 2) поставьте slep больше от 200
удивительное рядом!!!
Пользователь
Сообщений: Регистрация: 30.01.2015
17.03.2016 13:20:40
Цитата
Imersio Arrigo написал: А на сайте биржи какие цены за этот период?
плиз, ткните, где их можно увидеть?
удивительное рядом!!!
Пользователь
Сообщений: Регистрация: 30.01.2015
17.03.2016 10:01:49
Добрый день, Последнее время получаю вот такие фокусы. Вчера на вечерней сессии совершены сделки. А сегодня я вижу, что таких цен вчера не было, а сделки по таким ценам есть. т е цены были 10730, а мне впапродали по 10830. брокер меня разводит или биржа химичит или КВИК портачит? Ваше мнение?
Звуки, Вопрос
Пользователь
Сообщений: Регистрация: 30.01.2015
16.03.2016 20:27:08
еще добавить синтезатор речи с регулировкой интенсивности и голосовое управление. Например, ты ему говоришь: QUIK -деньги!!! А он тебе в ответ: Размечтался!!!
MOVE_ORDERS
Пользователь
Сообщений: Регистрация: 30.01.2015
15.03.2016 19:36:30
Операция в таблице всех сделок, покупка или продажа - это как?
Пользователь
Сообщений: Регистрация: 30.01.2015
15.03.2016 13:03:53
пояснение рыночной заявка называется потому, ее цена будет заведомо самой лучшей и она совершит сделку с первой в противоположной очереди.
Операция в таблице всех сделок, покупка или продажа - это как?
Пользователь
Сообщений: Регистрация: 30.01.2015
15.03.2016 13:02:12
поправка к пред ответу: не хуже, а лучше.
QUIK версия 7.1 (вопросы)
Пользователь
Сообщений: Регистрация: 30.01.2015
12.03.2016 19:16:55
все иконки на рабочем столе дрожат. Наверное чувствуют, что надвигается что-то ...
QUIK версия 7.1 (вопросы)
Пользователь
Сообщений: Регистрация: 30.01.2015
12.03.2016 19:15:39
при запуске квика (перед открытием окна квик) дергается изображение на двух мониторах.
QUIK версия 7.1 (вопросы)
Пользователь
Сообщений: Регистрация: 30.01.2015
12.03.2016 18:51:32
пардон alt/L закрепить , alt+B - убрать. Но блокировка выскакивает нажимаешь alt+B заголовок не появляется нажимаешь alt+L - происходит блокировка с запросом пароля нажимаешь alt+B - появляется заголовок окна. примерно так
QUIK версия 7.1 (вопросы)
Пользователь
Сообщений: Регистрация: 30.01.2015
12.03.2016 18:48:11
При попытке включить заголовок окна Alt/L иногда включается блокировка компьютера. Прикольно.
Ошибка "Неверный код клиента" при выставлении заявок, Не проходят заявки выпадает ошибка
Пользователь
Сообщений: Регистрация: 30.01.2015
12.03.2016 18:25:05
брокер забыл Вас подключить. потом вы напомнили о себе. бывает и круче.
QUIK версия 7.1 (вопросы)
Пользователь
Сообщений: Регистрация: 30.01.2015
12.03.2016 18:10:57
Добрый день, Поставил для тестирования версию 7.1.0.381 (юниор) Вопрос 1: При открытии окна меню сначала мелькает окно цветное, потом становится черно-белое (настройки цветов в дистрибутиве) ---------------------- Вот это мелькание так и будет? или это баг, который уберут? ---------------------- При этом заметил следующий прикол Если окно терминала на первом мониторе, то мелькает пустое белое окно, а если на втором то мелькает окно, в котором виден рабочий стол. ---------------------------------
std::recursive_mutex и cинхронизация потоков в Lua
Вячеслав написал: Да, создаются 2 системных потока, да, в каждом из них выполняется lua_pcall
Всегда, при разговоре на эту тему - разделяйте понятия: системный поток - это НЕ LUA-поток, а поток ОС LUA-поток - это не поток ОС. LUA-поток - сродни корутинам.
В самой LUA - никакие системные потоки - не создаются
почему LUA-поток - сродни корутинам. это и есть корутины других луа потоков я не знаю а Вы?
std::recursive_mutex и cинхронизация потоков в Lua
Пользователь
Сообщений: Регистрация: 30.01.2015
11.03.2016 06:51:42
все решается с помощью одного event, функций sinsert и sremove и использованием глобальных переменных.
std::recursive_mutex и cинхронизация потоков в Lua
Пользователь
Сообщений: Регистрация: 30.01.2015
11.03.2016 06:48:11
причем лишь запись данных.
std::recursive_mutex и cинхронизация потоков в Lua
имеется ввиду, что функции из lapi.c вызывают внутренние функции в библиотеке Lua, и их же вызывает luaV_execute напрямую. Например, вызывает , которую напрямую (через макрос) вызывает luaV_execute.
Причем здесь вызов функций? Синхронизировать надо обращение к данным, а не к коду функций. Вы что-то путаете.
Тиковый график строится по таблице обезличенных сделок самим терминалом а не сервером. Поэтому заказав тиковый график Вы тем самым заказываете таблицу обезличенных сделок Так как это одно и тоже.
Данное утверждение Sergey Gorokhov оказалось не соответствует реальности. Открытие источников тиков не привело к работе OnAllTrade, пока не отрыл таблицу ТВС. Прошу уточнить, как заставить работать OnAllTrade из QLUA на тиках без открытия ТВС Спасибо
ошибка в изображении сделок
Пользователь
Сообщений: Регистрация: 30.01.2015
10.03.2016 14:05:26
Уточняю Торговая сессия на фьючерсах сегодня начинается вечером вчера У меня всегда, сделки, совершенные вчера после 19-00, отображаются сегодня. Т е вчера в 23-50 закончили торговать комп выключили сегодня в 9-55 -комп включили запустили квик и торгуем Сделки от вчера вижу и сейчас.