Можно ли узнать, что скрипт qlua не дополучает инфо по onalltrade/onquote?
Пользователь
Сообщений: Регистрация: 30.01.2015
09.02.2024 20:23:24
Цитата
Serge123 написал: Насколько я понял, размер таблицы обезл. сделок можно получить через
Код
getNumberOf ( 'all_trades' )
А как скрипту прочитать эту таблицу? По-моему, никак...
функцией «getItem», или «SearchItems»
Можно ли узнать, что скрипт qlua не дополучает инфо по onalltrade/onquote?
Пользователь
Сообщений: Регистрация: 30.01.2015
09.02.2024 16:36:22
можно поставить счетчик вызова колбека и сравнить его с размером таблицы обезличенных сделок.
Можно ли узнать, что скрипт qlua не дополучает инфо по onalltrade/onquote?
Пользователь
Сообщений: Регистрация: 30.01.2015
09.02.2024 16:07:48
Цитата
Serge123 написал: Я как-то заказал в Квике отчёт по всем заявкам или сделкам клиента за день, Квик задумался на 10 сек., а потом в файле, куда скрипт писал обезличенные сделки/содержимое стаканов за эти 10 сек. не было записей.
КВИК докачивает пропущенные значения. Но я не проверял попадают ли они в колбек. Их можно получить из таблицы обезличенных сделок.
Serge123 написал: Ксати, powershell это делает: start-process "C:\Program Files\Far Manager\Far.exe" -verb runas Причём, винда не спрашивает подтверждения разрешений для Фара, как она это делает при таком запуске с пом. иконки. Но неудобно запускать powershell и вводить команду...
Интересно, как Вы собираетесь изменять системные часы?
Можно ли узнать, что скрипт qlua не дополучает инфо по onalltrade/onquote?
Пользователь
Сообщений: Регистрация: 30.01.2015
09.02.2024 13:46:01
Цитата
Serge123 написал: Если скрипт в коллбэке как-то притормаживает, то теряются эти сообщения. Неужели в Квике нет очереди, чтобы их не терять? Есть ли гарантированное время (скажем, 5 мс), что если коллбэк в него вписывается, то потерь данных гарантированно не будет? (Думаю, что его нет, т.к. интенсивность вызова коллбэка может быть высокой.) А если они были, можно ли как-то об этом узнать?
Они не теряются.
Робот в виде скрипта индикатора
Пользователь
Сообщений: Регистрация: 30.01.2015
08.02.2024 19:45:31
2024 Февраль Сегодня
2024 Январь и Февраль
os.execute с правами админа
Пользователь
Сообщений: Регистрация: 30.01.2015
08.02.2024 14:37:16
Цитата
Serge123 написал: 1. Как можно (если можно) вызвать из qlua ехе программку с правами админа, напр., чтобы скорректировать часы ПК? А если эта программка сидит в dll, то тогда как? Видимо, можно как-то повысить права вызываемой программы?
2. Верно ли, что с ключом /nowait можно вызывать программы так, чтобы вызывающая программа продолжала работать и не ждала завершения вызываемой программы?
Запустите КВИК с правами админа и все функции в нем,в т ч и в ваших dll , будут исполнятся с этими правами.
Что за хрень версия 10...
Пользователь
Сообщений: Регистрация: 30.01.2015
07.02.2024 20:19:20
Цитата
funduk написал: Скорее всего формат котировок немного поменялся (их можно вручную перенести, формат хоть и секретный, но очевидный), иначе нет смысла его затирать. Конечно перед апдейтом надо было бэкап делать. 11 версия уже есть. Название файла локализации менялось от версии к версии, подчерк убирался. Долгая загрузка часто значит, что много ошибок пишется в окно сообщений (см. размер tmsg.dat), почему-то это долгая операция.
Давно пытался разобраться в формате но не получилось. Если есть формат выложите. Напишу программу конвертации архива из текста в файлы dat и выложу в свободном доступе. А то потерялась статистика за 2 года, а я на ней робота обучаю.
Как исправить ошибки после зависания?
Пользователь
Сообщений: Регистрация: 30.01.2015
07.02.2024 15:35:05
У меня на компе стоят три версии 8 10 11 10 11 - демо сервер 8 - рабочая
Как исправить ошибки после зависания?
Пользователь
Сообщений: Регистрация: 30.01.2015
07.02.2024 15:34:02
Цитата
Serge123 написал: Это некорректно из-за записей/удалений ключей в реестре... Видно, придётся поставить Квик на другой ПК и сравнить файлы оттуда с моими...
Квик не пишет ключей в реестр.
Что за хрень версия 10...
Пользователь
Сообщений: Регистрация: 30.01.2015
07.02.2024 15:32:59
Нашел файл в бекапе за 21 год. Но проблема осталась. КВИК стал загружаться на 10 секунд и исчезать ----------------------- Удалил все лишнее ---------------------- В итоге вернулся на версию 8.7 но уничтожился архив с котировками. ---------------------- Ув Разработчики сделайте так , чтобы архив не затирался вашими глючными новыми версиями. ----------------------------------------- Буду ждать 11 версию, 9 и 10 успешно пропускаем.
Что за хрень версия 10...
Пользователь
Сообщений: Регистрация: 30.01.2015
07.02.2024 14:14:54
Решил сдуру поменять нормально работающую версию 8.7 на новую у сбербанка 10.... в итоге получился вроде бы тормоз. --------------- Стал из бекапа восстанавливать и нате вам :
Ну и что теперь делать?
Как исправить ошибки после зависания?
Пользователь
Сообщений: Регистрация: 30.01.2015
07.02.2024 12:32:09
Цитата
Serge123 написал: Можно брать только у моего брокера, т.к. она настроена у него только на работу через этого брокера и для его клиентов использование Квика бесплатно. Но у брокера нет версии в зипе, а есть только установщик в ехе...
сделайте архив своего каталога. После этого установите КВИК в другой каталог. Потом заберите что хотите из него в свой каталог.
Serge123 написал: Не надо писать ерунду, разумеется, я перезагружал... А то, что микрософты пишут, что их NTFS ведёт журнал и при загрузке винды исправляет транзакции при зависании (синем экране), это тоже ерунда. Я давно ещё на вин хр видел, что после синего экрана винда не исправила попорченный файл ярлыка, имя ярлыка стало короче и его папка не открывалась. А после прогона scandisk имя ярлыка восстановилось и его папка стала рабочей.
Поэтому моё сообщение остаётся в силе: где взять последние версии исполняемых файлов Квика?
А разве на сайте брокера их нет? Тогда скачайте с этого сайта. Еще можете их взять у любого брокера, у которого такая же версия как у Вас.
Как исправить ошибки после зависания?
Пользователь
Сообщений: Регистрация: 30.01.2015
06.02.2024 11:55:17
Цитата
Serge123 написал: Сегодня загрузил Квик, в меню Сервисы опять увидел левые иконки слева от строк меню. Перезагрузил Квик - иконки исчезли. Такое ощущение, что где-то подпортились файлы. Это сам info.exe или какие-то ещё?
Как можно обновить этот info.exe, dll и другие исполняемые файлы? Почему никто не ответил?
Вы не можете испортить программы exe и dll. Вы можете испортить лишь то, что в памяти. Если перезагрузка КВИК не помогает, то попробуйте перезагрузить комп.
Верно понимаем, что описанное поведение больше не воспроизводилось?
верно
Индикатор Delta
Пользователь
Сообщений: Регистрация: 30.01.2015
01.02.2024 19:25:58
Добрый день, Написал индикатор Delta. Скрипт 60 строк. Пока он работает только для текущего дня. Сам я им не пользуюсь, поэтому особенно не придумывал. Вот такая картинка получилась для Сбера (нижний график ). Рисует объему купить продать для тайма графика и накопительную функцию. Работает быстро, если запустить с начала дня. Если не сначала, то задумывается при запуске, так как для Сбера например получилось 35 тысяч сделок сегодня. --------------------- Если кому надо, то пишите могу выложить nkDelta.luac на какой-нибудь файлообменник.
Робот в виде скрипта индикатора
Пользователь
Сообщений: Регистрация: 30.01.2015
01.02.2024 19:16:20
Цитата
Александр написал: Это очень хорошо. А как транзакции отслеживать Пробовали? События приходят?
Да, закончил отлаживать модуль для торговли. События в индикаторах не используются. Все делается по таблицам. Без проблем. ------------------------------ Скрипт 110 строк. ---------------- Модуль в виде функции. Входные параметры сигнал купить/продать и текущий номер свечи. --------------------- Алгоритм такой : ----------------------- Проверяем есть ли активная заявка. Если есть, то проверяется время ее активности. Если время ее активности истекло (задается в параметрах индикатора) то заявка снимается. ---------------------- Если активных заявок нет , то определяется текущая позиция и возможное количество для совершения сделки. ----------------------------- В зависимости от направления позиции, сигнала, допустимого максимума в позиции и разрешения на шорт, определяется количество в новой заявке. ----------------------------- Выбор цены сделки пока вопрос открытый. Есть различные варианты. Пока остановился на last+-step. После этого выставляется новая заявка. ------------------------ Тестил на демо сервере примерно 500 сделок , полет нормальный.
Не выставляются заявки после открытия сессии.
Пользователь
Сообщений: Регистрация: 30.01.2015
31.01.2024 19:12:00
Цитата
НиколайН написал: Обновил QUIK до 11 версии. Проблема не исчезла. Продублировал вопрос тут -
Предположу, что в скрипте зависает при определении начала сессии. Гипотеза такая: Возможно Вы используете функцию соединения с сервером, а она у вас срабатывает до открытия сессии и потом все зависает. Когда вы разрываете соединение и снова соединяетесь, то функция срабатывает при открытой сессии и все работает.
Комиссии в системе
Пользователь
Сообщений: Регистрация: 30.01.2015
31.01.2024 16:06:07
Предлагаю реализовать
Пользователь
Сообщений: Регистрация: 30.01.2015
31.01.2024 14:12:24
Хвалюсь, с индикаторами
Предлагаю реализовать
Пользователь
Сообщений: Регистрация: 30.01.2015
31.01.2024 13:41:39
это тоже не проблема.
Предлагаю реализовать
Пользователь
Сообщений: Регистрация: 30.01.2015
31.01.2024 13:40:14
Цитата
Kolossi написал: Никому такая реализация нахрен не нужна, что с ней не так?
Поясняю ... 1) Зачем загромождать робота функциями индикаторов, если есть внутренние в КВИКЕ. 2) Все что напишите на луа будет на порядок медленнее чем встроенные. 3) Написанные индикаторы сожрут память для их хранения и ее надо в 2 раза больше , чем для встроенных. ------------------ У меня нет других проблем. Но писать индикаторы на луа, которые уже написаны на СИ и встроены - это "производственный ан..изм."
1) Вы можете загрузить Lua-скрипты индикаторов, аналогичных встроенным, с нашего сайта и вносить необходимые изменения в их код; 2) не совсем поняли, о каких идентификаторах идет речь. Просьба описать пожелание более подробно.
Не буду ругаться, но зачем давать очевидные советы. ---------------------- Я специально подчеркнул что речь о встроенных индикаторах. Вам объяснить в чем разница?
Предлагаю реализовать
Пользователь
Сообщений: Регистрация: 30.01.2015
31.01.2024 08:15:15
Добрый день, Ув. разработчики Предлагаю реализовать возможность: --------------------------- 1) изменять параметры встроенных индикаторов из скрипта индикатора. ------------------------- 2) устанавливать идентификатор индикатора из скрипта индикатора.
Индикаторы. OnCalculate. Количество полных проходов по всем свечам
Действительно, в описанных Вами ситуациях вызов OnCalculate происходит дважды. Мы исправим данную ошибку в одной из очередных версий ПО.
Это сейчас серьезно? Почему же все эти годы не исправлялось. Сообщения были об этом очень-очень давно.
Вполне серьезно. проблема была выявлена при появлении VMLua в КВИКЕ. Пришлось сделать костыли.
Более быстрый перебор ключ - значение в таблице
Пользователь
Сообщений: Регистрация: 30.01.2015
29.01.2024 10:07:37
Цитата
Цитата
Serge123 написал: Вот загадочное и интересное сообщение: См. также typedef struct Table в Можно ли как-то получить адрес этой структуры таблицы в программе на Lua и C, чтобы, скажем, напрямую читать *array; /* array part */ ? Т.е. в случае C минуя rawgeti и стек Lua?
Можно. Делал это на 5.3.
таблица "depo_limits" . Что не так?
Пользователь
Сообщений: Регистрация: 30.01.2015
29.01.2024 10:05:41
сейчас все нормально.
таблица "depo_limits" . Что не так?
Пользователь
Сообщений: Регистрация: 30.01.2015
29.01.2024 09:25:24
Добрый день, ----------------------- Проблема с чтением позиции по инструментам ---------------- В терминале позиция SBER есть со сроком расчета T0 позиция 120
--------------- При чтении таблицы в скрипте
Код
local s="depo_limits";
local N1=getNumberOf(s)-1
for j=0,N1 do local x=getItem(s,j);
if x and x.sec_code==sec then Qp=x.currentbal; jdep=j;
Log:write(value2text(x,"depo=").."\n");Log:flush(); -- вывод в лог файл
end;
end
есть только с limit_kind <0, естественно позиция НОЛЬ
При запуске Квик работет в процессах , в приложениях его нет . В окне нет ., Кошмарит уже год , два .
Пользователь
Сообщений: Регистрация: 30.01.2015
27.01.2024 19:38:28
Цитата
Александр Васильев написал: Да как то , у вас таблица процессов , там нихера ничего сделать нельзя , а нет квика в приложениях , и фиг вы его увидите .
Приложение QUIK называется info.exe
Робот в виде скрипта индикатора
Пользователь
Сообщений: Регистрация: 30.01.2015
27.01.2024 19:35:57
Написал робота. Получилось 180 строк, примерно 200 операторов. --------------------- Робот позволяет написать правило для индикаторов на графике и по сигналам этого правила покупает или продает заданное количество. При этом снимает заявки, если они не исполняются заданное время. ------------------- Сейчас процесс отладки. ----------------- Отладил режим советника. Вот картинка сигналов робота. На графике два мувинга . это основная часть робота-индикатора:
Код
paths = "D:/QUIK_SCRIPT/" -- путь к файлу nkbot24_func.luac
dofile(paths.."nkbot24_func.luac")
Settings.account=""; Settings.client=""; --вписать счет и клиент
Settings.Nind=2;
function OnCalculate(i)
Hi,Li=H(i),L(i);
if i==1 then _nkInit(); return end--инициализация
_getI(i); --читаем значения индикаторов
f=_cross(1,1,2,1,i); -- сигнал пересечение линий индикаторов
_torg(f,i); --выставляем заявки по пересечению
return SE,BU; -- отображаем сигналы в режиме советника
end
Хотел выложить nkbot24_func.luac, но форум не принимает такие файлы. --------------
При запуске Квик работет в процессах , в приложениях его нет . В окне нет ., Кошмарит уже год , два .
Пользователь
Сообщений: Регистрация: 30.01.2015
27.01.2024 19:23:12
Цитата
Александр Васильев написал: Ну тогда внимательно читаем заголовок , в процессах квик есть , работает , а в приложениях его НЕТ ( не развернуть , не свернуть ) а из процесса его никак не выдернуть в окно . Смыл сообщения , я столько мучился и во на тебе , нашёл в 2016 году . А ведь всегда искал . А скрипт дело 10 е пару дней пока .
Ну внимательно читаем - написано на картинке Приложений(7) седьмое- это КВИК. Что не так,
Индикаторы. OnCalculate. Количество полных проходов по всем свечам
Пользователь
Сообщений: Регистрация: 30.01.2015
27.01.2024 17:57:58
можно еще проще сделать:
Код
function OnCalculate(index)
if index == 1 then
_ds = getDataSourceInfo()
--....
end
return 0
end
вообще не определять, будет глобальным.
При запуске Квик работет в процессах , в приложениях его нет . В окне нет ., Кошмарит уже год , два .
отвечу на заголовок: приложения - это процессы. И КВИК там и работает. Вот картинка диспетчера задач: Читаем внимательно надписи вкладок и открытого окна ==================== Относительно ошибок при загрузке скрипта. Уверен, что ошибки в Вашем скрипте. Покажите Ваш скрипт, если хотите их иcправить.
Индикаторы. OnCalculate. Количество полных проходов по всем свечам
Пользователь
Сообщений: Регистрация: 30.01.2015
27.01.2024 17:06:13
Цитата
Илья написал: Есть ли вариант сохранения состояния расчета между вызовами OnCalculate?
Вчера пытался в таблицу Settings добавить свою таблицу рассчитанных при первом проходе значений, чтобы при следующих просто из нее вытащить. Знаю, что в руководстве написано "Типы пользовательских параметров: числа и строки" До перезапуска терминала (накидал скрипт, пока терминал работал), вроде, получилось: значения и сохранялись, и выбирались. Но при последующем запуске терминала выводилась ошибка об отсутствии моей таблицы. Хотел сделать через замыкание, но, опять же, где хранить этот объект?
Опишите переменную вне функции OnCalculate. Например, у Вас выше написано так:
Код
function OnCalculate(index)
local _ds = nil
if index == 1 then
_ds = getDataSourceInfo()
--....
end
return 0
end
переменная _ds всегда затирается при входе в OnCalculate чтобы этого не было сделайте так:
Код
local _ds;
function OnCalculate(index)
if index == 1 then
_ds = getDataSourceInfo()
--....
end
return 0
end
Робот в виде скрипта индикатора
Пользователь
Сообщений: Регистрация: 30.01.2015
26.01.2024 14:21:04
Добрый день, Рассказываю, как просто сделать робота в виде скрипта индикатора. Сначала картинка работы такого робота.
В чем достоинство такого робота по сравнению с роботом на основе колбеков. Робот значительно проще написать Он загружается на график торгуемого инструмента, Если для реализации алгоритма торговли достаточно встроенных в QUIK индикаторов, то нет надобности их программировать. ---------------- Пример варианта основного фрагмента такого робота:
Код
name="nkbot24"
Settings={["Name"] =name,["line"] ={},["account"]="",["client"]="",["Q"]=1;["wt"]=1000,["short"]=0}
Settings.Nind=0;
paths = "D:/QUIK_SCRIPT/"
package.cpath =package.cpath ..";"..paths.."?.dll";
package.path =package.path..paths.."?.lua;"
fnlog=paths..name..".log"; Log=io.open(fnlog,"w")
loadfile(paths.."nkbot24_func.lua")
function nkbuy(i,f)
---алгоритм покупки
-- f=cross(1,1,2,1,1);
return f;
end
function nksell(i,f)
--алгоритм продажи
-- f=cross(1,1,2,1,1);
return f;
end
function nobuy(i,f)
--фильтр покупки
return f;
end
function nosell(i,f)
--фильтр продажи
return f;
end
function OnCalculate(i)
local i1=i-1;
if i==1 then nkInit(); return end
if i~=i_ then getI() end
N,torder=order(N); Q=depo();
if #t==0 then
-- f,j=cross(1,1,2,1,5); --пересечение двух индикаторов
if i~=i_ then torg(nkbuysel(i));end
M=os.clock();
else
del_ord(M);
end
i_=i;
return M1,M2;
end
Продолжение вероятно следует...
Сдвиговые регистры, циклические массивы. Экономим память
Пользователь
Сообщений: Регистрация: 30.01.2015
24.01.2024 09:06:53
чтобы массив был ограничен по размеру, его надо закольцевать. Очевидно, Виктор это не проходил.
Сдвиговые регистры, циклические массивы. Экономим память
Пользователь
Сообщений: Регистрация: 30.01.2015
24.01.2024 09:04:09
, Я ранее написал, что Ваш вариант - это недоделанный циклический массив, тест которого я привел вторым. Рекомендую доделать, тогда будет работать , но чтение из него в луа, как тоже уже писал, медленнее чем из сдвигового.
Сдвиговые регистры, циклические массивы. Экономим память
Пользователь
Сообщений: Регистрация: 30.01.2015
24.01.2024 09:00:14
, Можете пояснить, как в вашем варианте прочитать весь массив с 1 по последний и сколько времени на это уйдет по сравнению с чтением типа t[i] где i от 1 до #t. -------------- И для какой задачи Вы планируете его применять. ------------- Я определил область применения моего варианта. А как применять Вашу очередь?
Сдвиговые регистры, циклические массивы. Экономим память
Пользователь
Сообщений: Регистрация: 30.01.2015
24.01.2024 08:43:49
, вот результаты тестов: это тест моих функций сдвиговый массив.
Код
local M=1000000
local t=newCA(1024)
for i=1, M do setCA(t,i) end
count1 = collectgarbage("count") print("объем занятой памяти",count1//1);
--------------------------------
collectgarbage("collect") count1 = collectgarbage("count") print("объем занятой памяти после сборщика мусора",count1//1);
результат:
Код
>D:/lua53/lua53.exe -e "io.stdout:setvbuf 'no'" "Test_List.lua"
объем занятой памяти 82.0
объем занятой памяти после сборщика мусора 76.0
>Exit code: 0
тест циклический массив:
Код
local M=10000000
local t=nk_newV(1024)
for i=1, M do nk_push(t,i) end
count1 = collectgarbage("count") print("объем занятой памяти",count1//1);
collectgarbage("collect") count1 = collectgarbage("count") print("объем занятой памяти после сборщика мусора",count1//1);
результат:
Код
>D:/lua53/lua53.exe -e "io.stdout:setvbuf 'no'" "Test_List.lua"
объем занятой памяти 97.0
объем занятой памяти после сборщика мусора 91.0
>Exit code: 0
тест для Вашей функции
Код
local M=10000000
local list=List.new()
local count1 = collectgarbage("count") print("начальный объем занятой памяти",count1//1);
--------------------------
for i=1, M do List.pushlast(list,i) end
collectgarbage("collect") count1 = collectgarbage("count") print("объем занятой памяти после сборщика мусора",count1//1);
результат:
Код
>D:/lua53/lua53.exe -e "io.stdout:setvbuf 'no'" "Test_List.lua"
начальный объем занятой памяти 65.0
объем занятой памяти после сборщика мусора 262203.0
>Exit code: 0
Какой еще тест сделать?
Уникальный номер заявки
Пользователь
Сообщений: Регистрация: 30.01.2015
24.01.2024 08:06:53
Цитата
bespalex написал: это конечно вариант, но мне он не нравится отсутствием изящества, громоздкостью что ли. Кроме того, как справедливо раньше вы подметили, при работе с питоном приходится экономить операции. На эту проблему накладывается возможное отсутствие trans_id в сообщениях, который я поддерживаю уникальным на своей стороне. Городить два индекса совсем не хотелось. И что делать, если order_num не приходит? Ждать? Сколько? получается заявка в неопределенном статусе может находиться неопределенное время.
Можете показать пример громоздкости или затрат на вычисления? --------------------- Вся история предыдущих дней в худшем случае обрабатывается один раз до начала торгов. в лучшем случае обрабатывается вчера.
Сдвиговые регистры, циклические массивы. Экономим память
Пользователь
Сообщений: Регистрация: 30.01.2015
24.01.2024 08:03:27
Если Вы считаете, что Вы правы, то просто покажите свой тест и результаты и будет предмет обсуждения. Пока же у Вас лишь программа и ваша вера, что она экономит память.
Сдвиговые регистры, циклические массивы. Экономим память
Пользователь
Сообщений: Регистрация: 30.01.2015
24.01.2024 08:02:49
Если Вы считаете, то просто покажите свой тест и результаты и будет предмет обсуждения. Пока же у Вас лишь программа и ваша вера, что она экономит память.
Сдвиговые регистры, циклические массивы. Экономим память
Стек — это коллекция, элементы которой получают по принципу «последний вошел, первый вышел» (Last-In-First-Out или LIFO). Это значит, что мы будем иметь доступ только к последнему добавленному элементу.
Очереди очень похожи на стеки. Они также не дают доступа к произвольному элементу, но, в отличие от стека, элементы кладутся (enqueue) и забираются (dequeue) с разных концов. Такой метод называется «первый вошел, первый вышел» (First-In-First-Out или FIFO). То есть забирать элементы из очереди мы будем в том же порядке, что и клали. Как реальная очередь или конвейер.
Двусторонняя очередь (Double-ended queue), или дек (Deque), расширяет поведение очереди. В дек можно добавлять или удалять элементы как с начала, так и с конца очереди. Такое поведение полезно во многих задачах, например, планирование выполнения потоков или реализация других структур данных.
Позже мы рассмотрим вариант реализации стека с помощью двусторонней очереди .
Будем считать, что у нас разные определения этих понятий. ------------------------------ Но это не важно. Важно, что ваш вариант не работает.