написал: Можно в основном цикле сравнивать локальное время компа с вашими требованиями к работе скрипта по времени. При соответствии выполнять функционал, при несоответствии крутить пустой цикл.
вместо пустого цикла используйте sleep(время ожидания до следующего запуска)
Естественно пустой цикл со слипом, я просто не стал очевидные вещи расписывать
естественно, если в цикле что-то исполняется то это уже не пустой. ------------------ более того, нет надобности еще в одном цикле в main.
Эмуляция крон внутри lua
Пользователь
Сообщений: Регистрация: 30.01.2015
26.09.2022 11:22:47
Цитата
BlaZed написал: Можно в основном цикле сравнивать локальное время компа с вашими требованиями к работе скрипта по времени. При соответствии выполнять функционал, при несоответствии крутить пустой цикл.
вместо пустого цикла используйте sleep(время ожидания до следующего запуска)
Эмуляция крон внутри lua
Пользователь
Сообщений: Регистрация: 30.01.2015
26.09.2022 11:07:49
простейший вариант: sleep + текстовый файл с расписанием
После вызова ds:Close() не работает callback при перезаказе данных
Пользователь
Сообщений: Регистрация: 30.01.2015
26.09.2022 08:48:45
все верно, не работает. ---------------- добавьте в цикл sleep(1) загрузка процессора снижается в 30 раз.
Получение данных о выставленных заявках из таблицы "Состояние счета"
Подскажите есть ли возможность получить данные о выставленных заявках по инструменту из таблицы "Состояние счета". Столбцы "В покупке", "В продаже" При опросе таблицы "заявки" в конце дня из за большого количества строк скрипт начинает дико тормозить.
читайте из таблицы заявок лишь активные, тормозить никогда не будет например у меня в тесте за 4 часа было выставлено и снято 200 тысяч заявок никаких тормозов. ---------------------- ещ можно читать из таблицы Позиции по инструментам
Параметр
Тип
Описание
sec_code
STRING
Код инструмента
trdaccid
STRING
Счет депо
firmid
STRING
Идентификатор фирмы
client_code
STRING
Код клиента
openbal
NUMBER
Входящий остаток
openlimit
NUMBER
Входящий лимит
currentbal
NUMBER
Текущий остаток
currentlimit
NUMBER
Текущий лимит
locked_sell
NUMBER
В продаже. Количество инструментов, заблокированное под исполнение заявок клиента на продажу
locked_buy
NUMBER
В покупке. Количество инструментов в активных заявках клиента на покупку
locked_buy_value
NUMBER
Стоимость инструментов, заблокированных под покупку
locked_sell_value
NUMBER
Стоимость инструментов, заблокированных под продажу
wa_position_price
NUMBER
Цена приобретения
limit_kind
NUMBER
Срок расчётов. Возможные значения:
положительные целые числа, начиная с «0», соответствующие срокам расчётов из таблицы «Позиции по инструментам»: «0» – T0, «1» – T1, «2» – T2 и т.д.;
отрицательные целые числа – технологические лимиты (используются для внутренней работы системы QUIK)
Индикаторы и скрипты, Получение данных с индикаторов
Пользователь
Сообщений: Регистрация: 30.01.2015
22.09.2022 07:38:41
вообще-то, ответ на ваш вопрос в начале темы: МОЖНО. -------------------- вопрос скорее всего в том, почему Вам бы самому не написать эту функцию, если она Вам нужна.
Индикаторы и скрипты, Получение данных с индикаторов
написал: Можно и так через скрипт получить код инструмента с графика, но лучше, конечно, чтобы была функция встроенная в quik, без всяких редактирований таблицы tool как в скрипте:
Код
is_run = true
chart_tag = "tag"
local tool = {
[ "Сбербанк [Price]" ] = "SBER" ,
[ "ГАЗПРОМ ао [Price]" ] = "GAZP" ,
[ "ЛУКОЙЛ [Price]" ] = "LKOH" ,
[ "Роснефть [Price]" ] = "ROSN"
}
function candle ()
allcandles = getNumCandles (chart_tag)
tab, count, leg = getCandlesByIndex (chart_tag, 0 , 0 , allcandles)
for key, val in pairs(tool) do
if key = = leg then
codeSec = val
end
end
return codeSec
end
function main ()
while is_run do
candle()
message (tostring(codeSec), 1 )
sleep ( 1000 )
end
end
Вы что-то путаете или невнимательно читали документацию qLua. Если вы хотите получить данные по инструментам в скрипте (как в вашем примере), а не в индикаторе, то для этого уже есть функции ----------------------- CreateDataSource и O, H, L, C, V, T - Функции в качестве параметра принимают индекс свечи и возвращают соответствующее значение. ----------------------------- и tag вообще не нужен для этого.
Нужно получить код инструмента графика в скрипт, а не через индикатор. В этой функции такого нет. И в других функциях тоже нет. Поэтому хорошо бы было, чтобы такая функция была. А в примере выше показан способ получения кода через имеющуюся функцию, но в нём есть недостаток - нужно вручную вписывать названия подписей инструментов.
Возможно, я не понял, но Ваш вопрос в тексте все время разный. ------------------- Я вообще-то говорю о получении значений параметров свеч, т е цены инструмента и это же Вы получаете в своем примере. --------------------- Но Вы хотите получить нечто иное, а именно: В начале темы это " получать данные переменных индикаторов". а теперь "получить код инструмента графика " Первое понятие "данные переменных индикаторов" - вообще ваше ноу-хау. -------------------- Если хотите получить в скрипт код инструмента на графике, например SBER то как Вы будете выбирать с какого графика, открытого в терминале вы хотите получить код инструмента?
Size()
Пользователь
Сообщений: Регистрация: 30.01.2015
22.09.2022 06:46:57
Цитата
Alexey написал: Прошу помощи у знающих: Кто-нибудь может сказать в чем ошибка: Код условный, суть в том, что когда в качестве второго оператора цикла используется Size индиктор пропадает из вкладки добавления индикатора терминала Quik. Я так понимаю идет какая-то ошибка...
Size = Size()
function Q() dVal = {}; for i = 1, Size, 1 do dVal = 100*i; end return dVal end
dVal = Q()
без полного кода сказать трудно. Но у Вас куча дыр в этом условном коде, которые могут привести к сюрпризам при выходе из этой функции. -------------------- бесплатный совет. ------------------ Не надо писать условных кодов, если проблема реальная. Т к суть проблемы в том, что вы реально, а не условно, не понимаете как писать индикаторы. И это видно из вашего условного кода, -----------------
Индикаторы и скрипты, Получение данных с индикаторов
Можно и так через скрипт получить код инструмента с графика, но лучше, конечно, чтобы была функция встроенная в quik, без всяких редактирований таблицы tool как в скрипте:
Код
is_run = true
chart_tag = "tag"
local tool = {
[ "Сбербанк [Price]" ] = "SBER" ,
[ "ГАЗПРОМ ао [Price]" ] = "GAZP" ,
[ "ЛУКОЙЛ [Price]" ] = "LKOH" ,
[ "Роснефть [Price]" ] = "ROSN"
}
function candle ()
allcandles = getNumCandles (chart_tag)
tab, count, leg = getCandlesByIndex (chart_tag, 0 , 0 , allcandles)
for key, val in pairs(tool) do
if key = = leg then
codeSec = val
end
end
return codeSec
end
function main ()
while is_run do
candle()
message (tostring(codeSec), 1 )
sleep ( 1000 )
end
end
Вы что-то путаете или невнимательно читали документацию qLua. Если вы хотите получить данные по инструментам в скрипте (как в вашем примере), а не в индикаторе, то для этого уже есть функции ----------------------- CreateDataSource и O, H, L, C, V, T - Функции в качестве параметра принимают индекс свечи и возвращают соответствующее значение. ----------------------------- и tag вообще не нужен для этого.
Индикаторы и скрипты, Получение данных с индикаторов
написал: если это индикатор в окне на графике, то можно прочитать значения через идентификатор
Каким образом через идентификатор можно получить значения scd и cld в примере выше? Например, можно через следующий код получить имя линии индикатора: is_run = true
chart_tag = "code" numcandles = 3
-- получение всех свечей function candle() allcandles = getNumCandles(chart_tag) -- диапазон свечей, по которым идёт поиск tab, count, leg = getCandlesByIndex(chart_tag, 0, 0, allcandles) message(tostring(leg), 1) end
function main() while is_run do candle() sleep(1000) end end
здесь выкладывал примеры:
Проблема с подпиской на событие новой свечи в QuikSharp
Пользователь
Сообщений: Регистрация: 30.01.2015
21.09.2022 13:53:27
идите к автору QuikSharp
Индикаторы и скрипты, Получение данных с индикаторов
Пользователь
Сообщений: Регистрация: 30.01.2015
21.09.2022 09:54:52
если это индикатор в окне на графике, то можно прочитать значения через идентификатор
Индикаторы и скрипты, Получение данных с индикаторов
Пользователь
Сообщений: Регистрация: 30.01.2015
21.09.2022 09:53:59
можно. самое простое - запишите в файл в одном скрипте и прочитайте из него в другом.
Добавление вкладки и графика, Добавление вкладки и графика
Пользователь
Сообщений: Регистрация: 30.01.2015
21.09.2022 07:54:49
Добавление вкладки и графика, Добавление вкладки и графика
Просьба к разработчикам: добавить в LUA функции для определения вкладок в QUIK Это нужно для того, чтобы одного и того же робота можно было запускать для разных инструментах, в разных вкладках. Тогда в названии вкладки можно было бы писать код инструмента.
Еще вторая просьба, дать возможность при создании окна указать название вкладки. Потому что-то если ты после запуска робота, переключился на другую вкладку, а робот при этом пересоздал окно, то оно выводится на текущую вкладку, а это не очень удобно.
Заранее спасибо!
Я решаю эту проблему так: Идентификатор вкладки пишите по имени инструмента В индикаторе делает tag по имени инструмента которое читаете в индикаторе(роботе) ------------- В итоге робот-индикатор будет автоматически настраивать на тот инструмент, в окно которого вы установите этот робот-индикатор
Спасибо большое. Теперь мне понятно, что такое сбор за адресную сделку и клиринговая комиссия, жаль что московская биржа так же ловко как вы не могут этого объяснить. Остался небольшой вопрос по сбору за регистрацию сделки. Ответьте пожалуйста ответ цифрой сколько с меня снимут сбор за регистрацию сделки при покупки 10 лотов и продаже 10 лотов на примере индекса РТС. 1) (купил 10 лотов РТС и продал эти 10 лотов через 5 мин (внутри дня)) = ? 2) (купил 10 лотов РТС и продал эти 10 лотов через 5 дней) = ?
Добавлю к предыдущему ответу. Чтобы ответить на Ваш вопрос, вам надо взять регламент брокера и там есть приложение - тарифы В этом приложении находите свой тариф и считаете. Как ранее сказал если торгуете внутри дня то тариф обычно меньше, все расчеты делаются в клиринг по сальдо всех сделок брокером. ---------------- Обращаю ваше внимание на тот факт, что на самом деле торгуете не вы, а брокер. Вы лишь даете поручение ему, а он их либо выполняет либо нет, но за ваши деньги.
написал: надо собирать 5.3 и пример я Вам дал для 5.3 и ссылку на документацию на 5.3
Собсвенно для 5.3.5 - я тоже собирал - ошибка точно такая же.
Я вам все написал как делать. Вы собираетесь делать или рассуждать? если у вас 8.7 то все должно быть 5.3 ------------------- анекдот: Мадам, там кирпич и обрыв,туда нельзя. Но Вам можно.
Создание и вызов DLL из QLua - прошу помощи
Пользователь
Сообщений: Регистрация: 30.01.2015
20.09.2022 20:29:31
и lua 5.3 bin должна быть
Создание и вызов DLL из QLua - прошу помощи
Пользователь
Сообщений: Регистрация: 30.01.2015
20.09.2022 20:28:28
и библиотека должна быть lua53.lib
Создание и вызов DLL из QLua - прошу помощи
Пользователь
Сообщений: Регистрация: 30.01.2015
20.09.2022 20:27:32
надо собирать 5.3 и пример я Вам дал для 5.3 и ссылку на документацию на 5.3
гадать не видя весь код бессмысленно. Сообщение говорит, что функции нет. еще раз скажу, отлаживайте свою функцию без квик. Научитесь сначала писать dll для луа. Полагаю Вы знаете как отладить софт.
Возможен экспорт через DDE в OpenOffice Calc? (Он аналог MS Excel)
Пользователь
Сообщений: Регистрация: 30.01.2015
20.09.2022 12:49:43
аналог - это любое решение, которое может выполнять те же функции. Open Office Calc - аналог Excel в функции создания таблиц. ---------------- В плане экспорта по DDE Open Office вообще не причем.
Возможен экспорт через DDE в OpenOffice Calc? (Он аналог MS Excel)
Вы где в документации прочитали о возможности эксопрта в OpenOffice? Причем же здесь поддержка КВИК? Они что на все придуманные Вами вопросы должны отвечать?
Lua - C++ - примеры
Пользователь
Сообщений: Регистрация: 30.01.2015
20.09.2022 09:06:21
Цитата
nikolz написал: у вас ошибка в ---------------------- 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; }
Вы напишите, как я написал или разбирайтесь как правильно раскрыть макрос -------------- (luaL_newlibtable(L,l), luaL_setfuncs(L,l,0)) и нужно ли удалять значение из стека lua_pushvalue(L, -1); -------------------- у меня один оператор, а умник наплодил три.
Комиссия брокера и московской биржи.
Пользователь
Сообщений: Регистрация: 30.01.2015
20.09.2022 08:20:42
в качестве бесплатного совета. не заморачивайтесь подсчетами , а просто смотрите на результат торгового дня и делайте выводы --------------------
Комиссия брокера и московской биржи.
Пользователь
Сообщений: Регистрация: 30.01.2015
20.09.2022 08:18:16
Цитата
Andrey написал: Добрый день уважаемые форумчане. Помогите пжлста разобраться какая сумма списывается со счета при совершении сделки на срочном рынке московской бирже. Звонил брокеру, сотрудники горячей линии говорят, что согласно моему тарифу комиссия брокера составляет 1р при покупке или при продаже 1 лота на фьючерсном контракте. Т.е. купил затем продал заплатил 1+1=2р. Больше никакой информации по комиссиям они дать не могут. Позвонил в московскую биржу, чтобы узнать какую комиссию снимают они. Мне сказали писать в тех поддержку. Написал в тех поддержку. Тех поддержка дала ссылку, мол читайте и разбирайтесь сами, на сайте все написано. Прошу помочь разобраться на примере фьючерса РТС (RIZ2). На сайте имеется следующая инфа:
Сбор за регистрацию сделки*, руб.
9,27
Сбор за адресную сделку*, руб.
3,09
Клиринговая комиссия за исполнение контракта*, руб.
3,09
Со сбором за регистрацию сделки всё понятно. Что такое сбор за адресную сделку и клиринговая комиссия за исполнения контракта? Хотелось бы понимать, если я купил 10 лотов на фьючерсном контракте РТС (RIZ2) и через 3 минуты продал их. Какова будет комиссия? Если я купил 10 лотов на фьючерсном контракте РТС и продал через 3 дня, то какая будет комиссия?
для Вас актуален лишь Сбор за регистрацию сделки Кроме того сбор на сделки внутри дня ниже чем на сделки результат которых переходит через клиринг. Так как внутри дня до клиринга сделки лишь фиксируются но расчета по ним нет. Это как игра в преф - внутри дня -пишем пульку а расчет в конце игры. ---------------- Сбор за адресную сделку - это когда в заявке вы укажете, что продаете Васе Пупкину, а тот укажет что покупает у Вас --------------- Клиринговая комиссия за исполнение контракта- это когда контракт закончился т е происходит экспирация, а у Вас открытый этот контракт на счете.
Lua - C++ - примеры
Пользователь
Сообщений: Регистрация: 30.01.2015
20.09.2022 08:00:12
возьмите Scite и поставьте контрольную печать и увидите где ошибки
Создает новую таблицу с размером, оптимизированным для хранения всех записей в массиве l(но фактически не сохраняет их). Оно предназначено для использования в сочетании с (см. ).
Он реализован в виде макроса. Массив lдолжен быть фактическим массивом, а не указателем на него.
Lua - C++ - примеры
Пользователь
Сообщений: Регистрация: 30.01.2015
19.09.2022 20:03:23
ну как знаете я Вам пишу со своих работающих исходников
Lua - C++ - примеры
Пользователь
Сообщений: Регистрация: 30.01.2015
19.09.2022 20:02:46
я использую 5.3 так как это работает для всех версий КВИК а 5.4 лишь начиная с 9.X но пока там много ошибок и там можно включить 5.3 для 5.4 не помню, возможно и так как у вас.
у него для разных версий есть посмотрите для какой вы взяли пример надо брать не ниже 5.3
Lua - C++ - примеры
Пользователь
Сообщений: Регистрация: 30.01.2015
19.09.2022 19:50:03
у вас ошибка в ---------------------- 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++ - примеры
Пользователь
Сообщений: Регистрация: 30.01.2015
19.09.2022 19:45:04
в редакторе используйте print и контрольную печать в СИ в SCITE будет видно все
Lua - C++ - примеры
Пользователь
Сообщений: Регистрация: 30.01.2015
19.09.2022 19:43:40
вообще-то лучше делать все в SciTe это редактор на луа с отладциком пока вам квик не нужен напишите тест для луа
написал: Подскажите, есть ли какие ни будь условно официальные примеры, как связать С++ с 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 здесь