funduk написал: if order_info.sec_code == Emit and order_info.account == MyAccount and CheckBit(order_info.flags, 0) == 1 and (order_info.brokerref == "LimitLevels") then
если в операторе if order_info.sec_code == Emit and order_info.account == MyAccount and CheckBit(order_info.flags, 0) == 1 and (order_info.brokerref == "LimitLevels") then то надо просто добавить первым в него order_info
Код
if order_info and ....
Про поток, если Вы про main, то это лишь гипотеза, т к функции QLua в общем стейте и потокобезопасные. А если про какой-то другой, то это глюк квика.
Генрих написал: Друзья, Мой брокер ссылается на какие-то рекомендации от квика по поводу «запуска серверов и технических окон». Суть в том, что я зачисляю деньги на свой счет, а в терминале они у меня появляются с лагом в несколько часов. Особенно ночью. Я мучал брокера, но он утверждает, что так и задумано. Есть ли какие-то рекомендации от АРКИ, по запускам систем? Можно ли где-то ознакомиться? Help деск брокера мне такого не даст. Спасибо
Прикольно, но у меня всегда деньги на счет зачисляются в течении нескольких минут иногда и быстрее. Вне зависимости какой брокер. -------------------- Меняйте брокера или банк откуда переводите. Кто-то из них пешком деньги Ваши относит.
1) В дельнейшем не копируйте из интернета, а дайте ссылку например, так: https://github.com/ajsher/luafuzzy ============================== 2) здесь можно сначала почитать, чтобы потом предметно обсуждать. https://habr.com/ru/articles/113020/ ================== 3) А Вы базу знаний откуда будете брать для DSS? ================== Метод нечетких множеств - это всего лишь инструмент. -------------- Подобно мясорубке. На выходе всегда фарш. А вот сможете его есть или нет, зависит от того, что на входе т е от базы знаний.
Ясно. А как сейчас торгуют крупные игроки, можно где-то почитать/послушать? Чтобы набраться опыта в торговле и попробовать что-то заработать программным путём...
В ту пору не было HFT роботов. Про сейчас можно почитать на анг язычных сайтах. Сравнительно давно читал рассказы трейдеров крупных игроков недружественных стран как им приходится подстраиваться под HFT роботов. Жаловались что трудно стало потому что быстро меняются позиции и заявок много но мелких. Поэтому когда крупный игрок приходит за товаром, то он не смотрит по сторонам. Кто сидит в "яме", тот это видит. А буратинам потом рассказывают как круто вчера рынок двигался и можно легко огребать бабло.
Сергей написал: Добрый день. Заметил странность в работе math.ceil(). Почему math.ceil(14.0)=14, а math.ceil(15.0)=16?
Для выставления цены с заданным количеством знаков после запятой, использую округление:
Код
function round_step_price (price, ty)
local x = 0
if (ty = = "sell" ) -- Продаем ->округлить в бОльшую сторону
x = math.ceil (price/options.price_step) * options.price_step
else -- Покупаем - округлим в меньшую сторону
x = math.floor (price/options.price_step) * options.price_step
end
return x * 1
end
Задача, при шаге цены 0.1, для продаж округлять так: 1.400 ->1.4, 1.4001 ->1.5, и так же 1.50->1.5, 1.50001->1.6. Но мой код, не работает, как ожидалось.
Как вы округляете в большую/меньшую сторону, с заданным количеством десятичных знаков?
Если правильно понят, то вот пример.
Код
local step=0.1;
local p=1.2; while 2>p do p=p+0.01;
local price=p-(p % step);
price1=price price2=price
if p-price>0 then p1=p+0.1; price1=p1-(p1%step); p1=p-0.1; price2=p1-(p1%step); end
print(p,price1, price2)
end
nikolz написал: Вы о каком типе крупного игрока рассуждаете? Они разные есть.
Я не знаком с ними, я смотрел видео от опытных трейдеров. Они говорят о 3-х фазах рынка - накоплении, движении цены и распределении. Если боковик идёт месяцами, то я не установлю, что это кто-то один что-то там копит. На графиках видно, что перед взлётом цены она какое-то время идёт в узком канале вбок. Возможно, что здесь кт-то что-то копит...
Это не они говорят, а пересказывают Вам своими словами Метод Ричарда Вайкоффа , который он написал в своей книге 100 лет назад ( в начале 20-го века) ,
Serge123 написал: Я в 9:50 при выставлении заявок несколько раз программно повторяю одну заявку, т.к. не сразу узнаЮ, выполнилась она или нет, и получаю такие ошибки (всего штук 14) trans_reply.result_msg:
1. ОШИБКА: (133) Торги по этому финансовому инструменту сейчас не проводятся. 2. Данный инструмент запрещен для операции шорт 3. Скорректированное значение НПР1 -1540915.18 (RUB) меньше 0
2-е и 3-е сообщения это явно не от биржи, скорее, от брокера. А может быть, это Квик на моём ПК сообщает? Он же может проверять такие ошибки?
Терминал проверяет правильность правильность строки запроса. ------------------- п3 Проверяет точно сервер брокера, так как на бирже все деньги клиентов - это деньги брокера. ----------------------- а вот п1 и 2 может проверять и КВИК и биржа, знают лишь те кто его делал - разработчики QUIK
nikolz написал: в таблице заявок+ число строк в таблице стоп заявок +число снятых заявок+число с
если вы отправляете некорректную заявку (цена выше установленного лимита) - она не фиксируется ни в какой таблице. Но считается транзакцией. Если робот будет в течении дня несколько раз в секунду отправлять подобную заявку - в конце дня будет огромное кол-во "пустых" транзакций. Но штраф за них будет
Она либо вообще не уходит из терминала (получаете ошибку транзакции) либо не уходит на биржу. Ну а если Ваш робот лишь такие заявки может посылать то сначала отлаживайте его на демо сервере. Например я отлаживал. более 200 тысяч транзакций на демо и ноль ошибок.
есть задача отслеживать кол-во транзакций. при приближении к 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 сделок , полет нормальный.
Предположу, что в скрипте зависает при определении начала сессии. Гипотеза такая: Возможно Вы используете функцию соединения с сервером, а она у вас срабатывает до открытия сессии и потом все зависает. Когда вы разрываете соединение и снова соединяетесь, то функция срабатывает при открытой сессии и все работает.