есть задача отслеживать кол-во транзакций. при приближении к 100000 остановить робота (чтобы не получить штраф от биржи)
не могу найти доступа к таблице транзакций через lua Можно было бы еще попробовать решить эту задачу через кол-во сообщений. Но тоже не нашел как можно подчситать
Можете помочь?
Посчитайте число заявок в таблице заявок. Если заявка снята, то считайте ее за две.
Serge123 написал: Кр. игроку иногда нужны месяцы, чтобы нарастить позицию/скинуть акции. Чтобы не обнаружить себя и не двинуть цену против себя, он долгле время продаёт/покупает небольшими частями. Вопрос в том, как обнаружить, что в этом инструменте действует кр. игрок, и что он делает, чтобы узнать, куда он резко двинет цену.
Вы о каком типе крупного игрока рассуждаете? Они разные есть.
Serge123 написал: Вопрос о том, как угадать, куда поведёт цену крупный игрок после периода накопления. В периоде накопления (боковике) рыночными или лимитными заявками крупный игрок накапливает позицию? Как ещё можно определить его действия?
Сомневаюсь что-то в такой гипотезе, Предположу, что в боковике он либо просто поддерживает позицию, либо вообще на другом рынке торгует.
Под утечкой памяти обычно понимают неконтролируемое ОС сокращения объема оперативной памяти. Т е приложение занимает память, а когда завершается, то возвращает меньше, чем занимало. В итоге память в системе безвозвратно сокращается.
В данном случае речь о стеке луа, а не о стеке функций С. Поэтому утечка памяти вообще не причем. Утечка памяти связана с функциями malloc calloc realloc.
Serge123 написал: 1. Будет ли утечка памяти, если C dll при работе со стеком Lua не будет вызывать lua_pop? Ведь сказано, что Lua при каждом вызове подпрограммы из C dll создаёт этот стек заново.
2. Решит ли проблему с возможной утечкой памяти, если не вызывать lua_pop, а в конце работы со стеком вызвать lua_settop(0)? Я думаю, что решит, т.к. lua_pop это макрос, который вызывает lua_settop.
3. Я попытался увидеть сборку мусора и написал такой код:
Код
function main ()
s = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
local s1 = '' .. collectgarbage( "count" ) .. '\n'
s = nil
s1 = s1 .. collectgarbage( "count" ) .. '\n'
collectgarbage( "collect" )
sleep ( 10000 )
s1 = s1 .. collectgarbage( "count" ) .. '\n'
message (s1)
end
Получил такой вывод:
37.5439453125 37.619140625 36.046875
Видно, что памяти освободилось меньше, чем занимала строка s. Как это объяснить?
утечки памяти не будет, но возможно переполнение стека. pop возвращает стек на начало. Без него размер стека меньше на число параметров в нем.
Serge123 написал: Хм, а я как-то не обращал внимание на эти функции. Тогда выходит, что можно не загружать ЦП коллбэком OnAllTrade, если всё это можно брать напрямую из таблицы all_trades?
=== Набор битовых флагов Параметр Тип Описание бит 0 (0x1) - Сделка на продажу бит 1 (0x2) - Сделка на покупку ===
Такое чувство, что я всё время неправильно определяю направление (buy или sell). Я считал, что если младший бит = 0, то buy, а если младший бит = 1, то sell.
А из этого объяснения вроде бы следует, что если мл. бит = 1, то это sell, а если следующий за младшим битом бит = 1, то это buy, так? Вроде бы можно было обойтись одним мл. битом...
Так вроде все ясно из описания флагов: бит 0 (0x1) - продажа т е flags@1 ~=0 бит 1 (0x2) - покупка flags@2 ~=0
Serge123 написал: Я как-то заказал в Квике отчёт по всем заявкам или сделкам клиента за день, Квик задумался на 10 сек., а потом в файле, куда скрипт писал обезличенные сделки/содержимое стаканов за эти 10 сек. не было записей.
КВИК докачивает пропущенные значения. Но я не проверял попадают ли они в колбек. Их можно получить из таблицы обезличенных сделок.
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, естественно позиция НОЛЬ
Александр Васильев написал: Да как то , у вас таблица процессов , там нихера ничего сделать нельзя , а нет квика в приложениях , и фиг вы его увидите .