Serge123 написал: Ксати, powershell это делает: start-process "C:\Program Files\Far Manager\Far.exe" -verb runas Причём, винда не спрашивает подтверждения разрешений для Фара, как она это делает при таком запуске с пом. иконки. Но неудобно запускать powershell и вводить команду...
Интересно, как Вы собираетесь изменять системные часы?
Serge123 написал: Если скрипт в коллбэке как-то притормаживает, то теряются эти сообщения. Неужели в Квике нет очереди, чтобы их не терять? Есть ли гарантированное время (скажем, 5 мс), что если коллбэк в него вписывается, то потерь данных гарантированно не будет? (Думаю, что его нет, т.к. интенсивность вызова коллбэка может быть высокой.) А если они были, можно ли как-то об этом узнать?
Serge123 написал: 1. Как можно (если можно) вызвать из qlua ехе программку с правами админа, напр., чтобы скорректировать часы ПК? А если эта программка сидит в dll, то тогда как? Видимо, можно как-то повысить права вызываемой программы?
2. Верно ли, что с ключом /nowait можно вызывать программы так, чтобы вызывающая программа продолжала работать и не ждала завершения вызываемой программы?
Запустите КВИК с правами админа и все функции в нем,в т ч и в ваших dll , будут исполнятся с этими правами.
funduk написал: Скорее всего формат котировок немного поменялся (их можно вручную перенести, формат хоть и секретный, но очевидный), иначе нет смысла его затирать. Конечно перед апдейтом надо было бэкап делать. 11 версия уже есть. Название файла локализации менялось от версии к версии, подчерк убирался. Долгая загрузка часто значит, что много ошибок пишется в окно сообщений (см. размер tmsg.dat), почему-то это долгая операция.
Давно пытался разобраться в формате но не получилось. Если есть формат выложите. Напишу программу конвертации архива из текста в файлы dat и выложу в свободном доступе. А то потерялась статистика за 2 года, а я на ней робота обучаю.
Serge123 написал: Это некорректно из-за записей/удалений ключей в реестре... Видно, придётся поставить Квик на другой ПК и сравнить файлы оттуда с моими...
Нашел файл в бекапе за 21 год. Но проблема осталась. КВИК стал загружаться на 10 секунд и исчезать ----------------------- Удалил все лишнее ---------------------- В итоге вернулся на версию 8.7 но уничтожился архив с котировками. ---------------------- Ув Разработчики сделайте так , чтобы архив не затирался вашими глючными новыми версиями. ----------------------------------------- Буду ждать 11 версию, 9 и 10 успешно пропускаем.
Решил сдуру поменять нормально работающую версию 8.7 на новую у сбербанка 10.... в итоге получился вроде бы тормоз. --------------- Стал из бекапа восстанавливать и нате вам :
Serge123 написал: Можно брать только у моего брокера, т.к. она настроена у него только на работу через этого брокера и для его клиентов использование Квика бесплатно. Но у брокера нет версии в зипе, а есть только установщик в ехе...
сделайте архив своего каталога. После этого установите КВИК в другой каталог. Потом заберите что хотите из него в свой каталог.
Serge123 написал: Не надо писать ерунду, разумеется, я перезагружал... А то, что микрософты пишут, что их NTFS ведёт журнал и при загрузке винды исправляет транзакции при зависании (синем экране), это тоже ерунда. Я давно ещё на вин хр видел, что после синего экрана винда не исправила попорченный файл ярлыка, имя ярлыка стало короче и его папка не открывалась. А после прогона scandisk имя ярлыка восстановилось и его папка стала рабочей.
Поэтому моё сообщение остаётся в силе: где взять последние версии исполняемых файлов Квика?
А разве на сайте брокера их нет? Тогда скачайте с этого сайта. Еще можете их взять у любого брокера, у которого такая же версия как у Вас.
Serge123 написал: Сегодня загрузил Квик, в меню Сервисы опять увидел левые иконки слева от строк меню. Перезагрузил Квик - иконки исчезли. Такое ощущение, что где-то подпортились файлы. Это сам info.exe или какие-то ещё?
Как можно обновить этот info.exe, dll и другие исполняемые файлы? Почему никто не ответил?
Вы не можете испортить программы exe и dll. Вы можете испортить лишь то, что в памяти. Если перезагрузка КВИК не помогает, то попробуйте перезагрузить комп.
Добрый день, Написал индикатор Delta. Скрипт 60 строк. Пока он работает только для текущего дня. Сам я им не пользуюсь, поэтому особенно не придумывал. Вот такая картинка получилась для Сбера (нижний график ). Рисует объему купить продать для тайма графика и накопительную функцию.
Работает быстро, если запустить с начала дня. Если не сначала, то задумывается при запуске, так как для Сбера например получилось 35 тысяч сделок сегодня. --------------------- Если кому надо, то пишите могу выложить nkDelta.luac на какой-нибудь файлообменник.
Александр написал: Это очень хорошо. А как транзакции отслеживать Пробовали? События приходят?
Да, закончил отлаживать модуль для торговли. События в индикаторах не используются. Все делается по таблицам. Без проблем. ------------------------------ Скрипт 110 строк. ---------------- Модуль в виде функции. Входные параметры сигнал купить/продать и текущий номер свечи. --------------------- Алгоритм такой : ----------------------- Проверяем есть ли активная заявка. Если есть, то проверяется время ее активности. Если время ее активности истекло (задается в параметрах индикатора) то заявка снимается. ---------------------- Если активных заявок нет , то определяется текущая позиция и возможное количество для совершения сделки. ----------------------------- В зависимости от направления позиции, сигнала, допустимого максимума в позиции и разрешения на шорт, определяется количество в новой заявке. ----------------------------- Выбор цены сделки пока вопрос открытый. Есть различные варианты. Пока остановился на last+-step. После этого выставляется новая заявка. ------------------------ Тестил на демо сервере примерно 500 сделок , полет нормальный.
Предположу, что в скрипте зависает при определении начала сессии. Гипотеза такая: Возможно Вы используете функцию соединения с сервером, а она у вас срабатывает до открытия сессии и потом все зависает. Когда вы разрываете соединение и снова соединяетесь, то функция срабатывает при открытой сессии и все работает.
Kolossi написал: Никому такая реализация нахрен не нужна, что с ней не так?
Поясняю ... 1) Зачем загромождать робота функциями индикаторов, если есть внутренние в КВИКЕ. 2) Все что напишите на луа будет на порядок медленнее чем встроенные. 3) Написанные индикаторы сожрут память для их хранения и ее надо в 2 раза больше , чем для встроенных. ------------------ У меня нет других проблем. Но писать индикаторы на луа, которые уже написаны на СИ и встроены - это "производственный ан..изм."
1) Вы можете загрузить Lua-скрипты индикаторов, аналогичных встроенным, с нашего сайта и вносить необходимые изменения в их код; 2) не совсем поняли, о каких идентификаторах идет речь. Просьба описать пожелание более подробно.
Не буду ругаться, но зачем давать очевидные советы. ---------------------- Я специально подчеркнул что речь о встроенных индикаторах. Вам объяснить в чем разница?
Добрый день, ----------------------- Проблема с чтением позиции по инструментам ---------------- В терминале позиция 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, естественно позиция НОЛЬ
Александр Васильев написал: Да как то , у вас таблица процессов , там нихера ничего сделать нельзя , а нет квика в приложениях , и фиг вы его увидите .
Написал робота. Получилось 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, но форум не принимает такие файлы. --------------
Александр Васильев написал: Ну тогда внимательно читаем заголовок , в процессах квик есть , работает , а в приложениях его НЕТ ( не развернуть , не свернуть ) а из процесса его никак не выдернуть в окно . Смыл сообщения , я столько мучился и во на тебе , нашёл в 2016 году . А ведь всегда искал . А скрипт дело 10 е пару дней пока .
Ну внимательно читаем - написано на картинке Приложений(7) седьмое- это КВИК. Что не так,
отвечу на заголовок: приложения - это процессы. И КВИК там и работает. Вот картинка диспетчера задач: Читаем внимательно надписи вкладок и открытого окна
==================== Относительно ошибок при загрузке скрипта. Уверен, что ошибки в Вашем скрипте. Покажите Ваш скрипт, если хотите их иcправить.
Илья написал: Есть ли вариант сохранения состояния расчета между вызовами 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
Добрый день, Рассказываю, как просто сделать робота в виде скрипта индикатора. Сначала картинка работы такого робота.
В чем достоинство такого робота по сравнению с роботом на основе колбеков. Робот значительно проще написать Он загружается на график торгуемого инструмента, Если для реализации алгоритма торговли достаточно встроенных в 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
VPM, Я ранее написал, что Ваш вариант - это недоделанный циклический массив, тест которого я привел вторым. Рекомендую доделать, тогда будет работать , но чтение из него в луа, как тоже уже писал, медленнее чем из сдвигового.
VPM, Можете пояснить, как в вашем варианте прочитать весь массив с 1 по последний и сколько времени на это уйдет по сравнению с чтением типа t[i] где i от 1 до #t. -------------- И для какой задачи Вы планируете его применять. ------------- Я определил область применения моего варианта. А как применять Вашу очередь?
VPM, вот результаты тестов: это тест моих функций сдвиговый массив.
Код
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
bespalex написал: это конечно вариант, но мне он не нравится отсутствием изящества, громоздкостью что ли. Кроме того, как справедливо раньше вы подметили, при работе с питоном приходится экономить операции. На эту проблему накладывается возможное отсутствие trans_id в сообщениях, который я поддерживаю уникальным на своей стороне. Городить два индекса совсем не хотелось. И что делать, если order_num не приходит? Ждать? Сколько? получается заявка в неопределенном статусе может находиться неопределенное время.
Можете показать пример громоздкости или затрат на вычисления? --------------------- Вся история предыдущих дней в худшем случае обрабатывается один раз до начала торгов. в лучшем случае обрабатывается вчера.
Если Вы считаете, что Вы правы, то просто покажите свой тест и результаты и будет предмет обсуждения. Пока же у Вас лишь программа и ваша вера, что она экономит память.
Если Вы считаете, то просто покажите свой тест и результаты и будет предмет обсуждения. Пока же у Вас лишь программа и ваша вера, что она экономит память.
Стек — это коллекция, элементы которой получают по принципу «последний вошел, первый вышел» (Last-In-First-Out или LIFO). Это значит, что мы будем иметь доступ только к последнему добавленному элементу.
Очереди очень похожи на стеки. Они также не дают доступа к произвольному элементу, но, в отличие от стека, элементы кладутся (enqueue) и забираются (dequeue) с разных концов. Такой метод называется «первый вошел, первый вышел» (First-In-First-Out или FIFO). То есть забирать элементы из очереди мы будем в том же порядке, что и клали. Как реальная очередь или конвейер.
Двусторонняя очередь (Double-ended queue), или дек (Deque), расширяет поведение очереди. В дек можно добавлять или удалять элементы как с начала, так и с конца очереди. Такое поведение полезно во многих задачах, например, планирование выполнения потоков или реализация других структур данных.
Позже мы рассмотрим вариант реализации стека с помощью двусторонней очереди .
Будем считать, что у нас разные определения этих понятий. ------------------------------ Но это не важно. Важно, что ваш вариант не работает.
VPM написал: nikolz, Это я и хотел сравнить, сделать один размер массивов, один размер окна прогнать на скорость на память, на время исполнения?
Цитата
nikolz написал: и еще... ваша стек-очередь напоминает недоделанный циклический массив. Если его доделать, то он будет делать ровно тоже самое, что и мой вариант сдвига массива выше. -------------------- Циклический массив работает быстрее, чем сдвиг массива. Но в луа из него медленнее брать данные. Его интереснее делать на C и встраивать сразу в индикаторы и фильтры. Но это уже другая тема.
Вы нем поняли. В вашем случае нельзя сделать размер постоянным. Он будет лишь увеличиваться при записи в конец. Но не будет уменьшаться. ---------------- Это я показал Вам в своем тесте. Там в конце Ваша очередь-стек имеет ноль элементов , но размер памяти занятый массивом остался такой же как при записи миллиона элементов. -------------------- В моем варианте Вы изначально фиксируете длину массива и она остается всегда такой же.
Владимир, Вы прежде, чем писать херню, прочитали бы о чем тема. ------------------------------- Специально для вас, поясняю. Речь идет о работоспособности функций библиотеки QLUA, а не о написании примитивных вычислений.. ------------------------------- Вы уже написали свой "гениальный" шедевр очереди, которая стек и которая лишь увеличивает размеры используемой памяти. Но почему молчите о том что написали говно? ------------------ Если у Вас проблема с написанием таких программ, то пишите конкретно вопрос, а не скулите. -------------- Программатор Вы наш.
и еще... ваша стек-очередь напоминает недоделанный циклический массив. Если его доделать, то он будет делать ровно тоже самое, что и мой вариант сдвига массива выше. -------------------- Циклический массив работает быстрее, чем сдвиг массива. Но в луа из него медленнее брать данные. Его интереснее делать на C и встраивать сразу в индикаторы и фильтры. Но это уже другая тема.