paluke (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 След.
Подписка и отписка SetUpdateCallback, Подписка и отписка SetUpdateCallback
 
Поддержка вместо 1. #### и 2.#### предлагала SetEmptyCallback() перед Close().
Ошибка снятия заявки. [GW][3] "Сейчас эта сессия не идет."
 
А sendTransaction ничего не возвращает?
Подписка и отписка SetUpdateCallback, Подписка и отписка SetUpdateCallback
 
https://forum.quik.ru/messages/forum10/message68501/topic7641/#message68501
При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)
 
Можно провести тест - попробовать сломать lua, принудительно вызвав gc в main и коллбеке одновременно.
При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)
 
Кажется, следует предполагать, что синхронизации в gc нет. И поэтому gc останавливают при вызове коллбеков. А также поэтому категорически нельзя в main вызывать collectgarbage('restart').
При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)
 
Цитата
TGB написал:
nikolz забыл вас спросить: вы понимаете почему разработчики QUIK при выполнении коллбеков останавливают сборку мусора?
Сборка мусора не потокобезопасна? Ванильный lua вообще то однопоточный, threads там - это просто короутины, которые выполняются по очереди в одном реальном потоке ос, с явным переключением coroutine.resume()/coroutine.yield()
Для поддержки многопоточности надо как минимум задефайнить свои макросы lua_lock()/lua_unlock(). Но блокировка идет только на время работы интерпретатора (то есть просто читать/писать в переменные параллельно можно), а вызовы С функций не блокируются. В том числе и встроенные функции insert/remove/sort не блокируются. Откуда и растут ноги у sinsert/sremove/ssort. На время сборки мусора видимо тоже нет блокировки. Так что если она запустится одновременно в main и колбеке - будет жопа.
Так что лучше не трогать collectgarbage('stop')/collectgarbage('restart'). Ведь если вы его на время выключаете, то наверное и включаете потом? А если в этот момент выполняется колбек - сборщик мусора может запуститься в нем.
При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)
 
lua_State это, как написано в документации и в комментарии в исходниках, "per thread state". Структура, одно из полей которой  - указатель на global_State. Этот global_State общий для всех потоков, и именно в нем лежит все, связанное с  с управлением динамически выделяемой памятью, сборкой мусора и глобальными переменными. У каждого потока есть свой стек, но на стеке живут только локальные переменные  - их время жизни до выхода из функции, не сборщик мусора их освобождает.
При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)
 
Цитата
nikolz написал:

Т е в каком стеке Вы вызовите сборщик, тот стек он и будет чистить.
Динамическая память - это не стек. Или имелся ввиду поток? Ну мы же можем передавать объекты между потоками. Не может быть разделения по потокам для сборки мусора.
Цитата
Each Lua state has one or more threads, which correspond to independent, cooperative lines of execution. The type lua_State (despite its name) refers to a thread. (Indirectly, through the thread, it also refers to the Lua state associated to the thread.)  
При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)
 
Код вызова колбеков наверное не на lua. Надо в C api смотреть: lua_gc(...)
Терминал 11.4.0.54 Ошибка формата файла заявок для Кармана транзакций
 
Цитата
Сергей написал:
В анонсе версии 12.2 действительно указано что "Ошибка при попытке загрузить в Карман транзакций заявки из файла" исправлена
Но в последней версии 12.2.1.2 во всплывающем меню из Кармана нет опций "Загрузить заявки из файла", "Загрузить стоп-заявки из файла", "Загрузить адресные/безадресные заявки из файла"  которые есть в версии 11.3.4
Есть только "Загрузить транзакции из tri-файла"
Ну так решили же проблему с ошибками. Нет возможности загрузить из файла - нет ошибок при загрузке. То есть закрыта проблема "ошибки при загрузке", а не "невозможно загрузить".
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
nikolz написал:
Цитата
Nikolay написал:
Просто t[i-3] = nil
Такая операция не освобождает память
Вы просто в записываете тип элемента равным 0.
Но элемент остается в таблице.
Код
t = {'a','b','c'}
t[2] = nil
for k,v in pairs(t) do print(k,v) end

элемента с номером 2 нет

Автоматизация авторизации через СМС, Автоматизация авторизации через СМС
 
Отключить у брокера двухфакторную авторизацию?
Еще один вопрос про потоки
 
Сожрались символы:
io.output('CONOUT$')
io.input('CONIN$')
Еще один вопрос про потоки
 
Кстати о консоли без dll:
Код
package.loadlib('kernel32.dll','AllocConsole')(true)
io.output('CONOUT$')
io.input('CONIN$')

теперь можно читать из io.input и писать в io.output
в конце надо закрыть потоки и аналогичным способом вызвать FreeConsole
Создать заявку с признаком - полностью или отклонить через формат .tri-файла
 
Цитата
Роман Н написал:
А если же такую же заявку я выставлю в ручном режиме в терминале с признаком "полностью или отклонить", то такая заявка будет ждать снижения цены и встречного предложения и не отменится.
Так не должно быть. Если вы выставляете заявку  с признаком "полностью или отклонить", а она ждет - это ошибка.
API: ордер - Book-or-Cancel, вопрос дублирует аналогичные, но задается касаемо API
 
1. Да
2. Нет

Обещанного, как известно, три года ждут. Но вот тут например https://forum.quik.ru/messages/forum8/message76866/topic95/#message76866 между "будет рассмотрено и, возможно, реализовано в одной из следующих версий" и "было реализовано в версии..." прошло 9 лет.
Как обрезать число типа float до 2х знаков после запятой
 
Код
(math.modf(num + (num >= 0 and 0.5 or -0.5)))
Как обрезать число типа float до 2х знаков после запятой
 
Цитата
VPM написал:
Да заметил не точность вот так будет работать  
Код
   -- Округление для любого числа 
     local  rounded  =   math.floor (num  *  mult  +   0.5   * (num  >  =   0   and   1   or   -  1 )) / mult  
round(-12.34, 2)) == -12.35
Работа терминала QUIK в Wine
 
Цитата

У меня тоже Linux и тоже проблема с некорреткным обновлением файла vcomp110.dll.
Обновляется всё, кроме него. Из-за чего,  каждый раз при загрузке крика всплывает сообщение о необходимости обновить квик.
Запустите winecfg и на вкладке libraries добавьте эту библиотеку.
Kaк убрать uid cверху окна?, Надпись сверху окна
 
Скачать надо w32.dll где-то там https://quik2dde.ru/viewtopic.php?id=78
А скрипт нужно написать. Примерно так:
Код
w32 = require("w32")
QuikMainWindowHandle = 0

function OnInit()
  QuikMainWindowHandle = GetMainWindowHandle()
end

function main()
  if QuikMainWindowHandle ~= 0 then
    -- тут можно писать, что вашей душе угодно
    w32.SetWindowText(QuikMainWindowHandle, "Testing....")
  end
end

function GetMainWindowHandle() -- Получить дескриптор главного окна QUIK
  local CurrentProcessId = w32.GetCurrentProcessId()
  local hWnd=0
  while true do
    hWnd = w32.FindWindowEx(0, hWnd, "InfoClass", "")
    if hWnd == 0 then break end -- Окно не найдено
    local ThreadId, ProcessId = w32.GetWindowThreadProcessId(hWnd)
    if ProcessId == CurrentProcessId then break end -- Окно найдено
  end
  return hWnd
end
Kaк убрать uid cверху окна?, Надпись сверху окна
 
Цитата
Kypat написал:
Да добавьте в настройках галочку убрать uid , и добавьте время или бегущую строку мировых индексов типа типа  hang seng nasdaq moex и ТД чтоб можно было видеть в % изменении и объем  
Можно lua скриптом писать в заголовок окна все, что вам хочется...
Стакан, кнопка max
 
Цитата
СергейК написал:
Цитата
Roman Koledin написал:
что то не понятно - причем тут винда
Я сейчас уже точно не помню, в Windows чтобы окно можно было перемещать у него должен быть специальный атрибут. Если его нет, то окно не двигается, как сейчас закреплённый стакан. Если этот атрибут вернуть, окно может выглядеть немного иначе, что впрочем не должно быть проблемой.  
В Windows, чтобы окно можно было перемещать, у него должен быть заголовок. Тот, который с кнопками.
Заявки в QUIK
 
Цитата
ДмитрийР написал:
а есть ли способ поставить лимитную заявку так, что бы если в этой цене окажется противоположная заявка, она не исполнилась как рыночная, а просто отменилась?
Условие исполнения: "Только пассивная"
Перенос заявки, не работает
 
Все поля надо писать кириллицей.  
текущий современный способ сделать робота без ежемесячных расходов?
 
Цитата
funduk написал:
API брокеров бесплатны, как я понимаю. Есть у тинька и финама, но у финама альфа версия и можно забыть про миллисекунды.
У финама есть transaq connector https://www.finam.ru/howtotrade/soft/tconnector/
У алора есть Atentis https://www.alorbroker.ru/blog/atentis
сообщение в Telegram - это просто
 
Цитата
Андрей написал:
Цитата
paluke написал:
 
Цитата
Андрей  написал:
 
Цитата
  Благодарю за помощь!

Я бы хотел иметь возможность в LUA видеть статус отправки сообщений в Телегу и если сообщения перестали уходить, то получить какой-то message,
Версия с  io.popen  это позволяла бы сделать, как в приведённом выше примере, но он не работает :(.
Ваш вариант отличный, но он позволит только постфактум узнать о проблемах. Но все равно, Вам огромное спасибо за идею в принципе! Это просто прекрасное решение почти всех моих запросов!  
 Не знаю, что у вас не так, у меня io.popen работает, и ответ от curl я получаю. Может, дело в версии curl
у меня io.popen вообще ничего не возвращает и команду не выполняет. Я пробовал просто dir отправить. У вас windows какой версии?
У меня в win10 работает. И под wine в линуксе тоже работает.
Просто dir работать не будет, надо "cmd /c dir"
Можно попробовать добавить в начало "cmd /c 2>&1 " перед curl - получите вывод сообщений об ошибках.
Ну или в файл ошибки отправлять "cmd /c 2>errorfile.txt "
сообщение в Telegram - это просто
 
Цитата
Андрей написал:
Цитата
nikolz написал:
 
Цитата
Андрей  написал:
os.execute (curl .. mes .. '"');   --отправляем  
 Что именно хотите увидеть?
можете сделать так:  
Код
    file  =   "D:/bot.log" 
curl  =   "C:/Windows/System32/curl.exe  --silent --output "  .. file .. '"' .. "https://api.telegram.org/bot" .. token .. "/sendMessage?chat_id =  "..chat_id.."  & text = "     
 В file будет записан ответ робота.
Благодарю за помощь!

Я бы хотел иметь возможность в LUA видеть статус отправки сообщений в Телегу и если сообщения перестали уходить, то получить какой-то message,
Версия с  io.popen  это позволяла бы сделать, как в приведённом выше примере, но он не работает :(.
Ваш вариант отличный, но он позволит только постфактум узнать о проблемах. Но все равно, Вам огромное спасибо за идею в принципе! Это просто прекрасное решение почти всех моих запросов!  
Не знаю, что у вас не так, у меня io.popen работает, и ответ от curl я получаю. Может, дело в версии curl
Ошибка выставления ордера
 
Цитата
Михаил Филимонов написал:
   FmemoStr:= 'SendOrder: Ордер ' + ExpData.FutData.SecCode + ' отправлен.';
А в логе SetEnterOrder. Это другой код.
Ошибка: Значение "" превышает допустимый размер, постоянно пишется ошибка: Значение "" превышает допустимый размер
 
Цитата
Александр написал:
при обращении скриптом к его заявке постоянно пишется ошибка:
А что в скрипте то?
сообщение в Telegram - это просто
 
Потом подключаетесь к своему боту, пишите ему что-нибудь, дергаете api (можно прямо в браузере открыть) и ищите там chat id.
Изменено: Yaroslav Grebennikov - 24.07.2024 14:18:04
сообщение в Telegram - это просто
 
Пишите botFather /start
потом /newbot
придумываете имя, получаете токен
сообщение в Telegram - это просто
 
Открываете в телеграмм https://telegram.me/BotFather
сообщение в Telegram - это просто
 
Аккуратно обрабатываем спецсимволы:
Код
function tgmsg(text)
  local curl = 'curl.exe'
  local token = '.....'
  local chatid = '....'

  text = string.gsub(text, '[^0-9a-zA-Z\x80-\xff._~-]', function(chr) return string.format("%%%02x", string.byte(chr)) end)
  local h, e, c = io.popen(curl .. ' -X POST --data-raw text="' .. text .. '" https://api.telegram.org/bot' .. token .. '/sendMessage?chat_id=' .. chatid)
  if h then
      local a = h:read('a')
      return a, h:close()
  else
      return false, e, c
  end
end

Где скачать TRANS2QUIK.dll x64 ? есть пример использования на delphi выставления заявки?
 
Обработку внешних транзакций в  quik запустили? "Сервисы / Экспорт/импорт данных / Внешние транзакции"
Работающая библиотека LuaSec
 
К этой сборке надо libcrypto-1_1-x64.dll и libssl-1_1-x64.dll где-то еще взять.
Работающая библиотека LuaSec
 
Если доверяете бинарникам, скачанным и неизвестных источников - https://transfiles.ru/332ez
Работающая библиотека LuaSec
 
При наличии mingw64 можно собрать как-то так, в каталоге src:
Код
x86_64-w64-mingw32-gcc -O2 -fPIC  *.c luasocket/buffer.c luasocket/io.c luasocket/timeout.c luasocket/wsocket.c -shared -Wl,-s -o ssl.dll -I. -L. -lssl -llua -lcrypto -lws2_32
Ну только в -I надо путь к заголовкам, а в -L к библиотекам от openssl и нужной версии lua (я просто все накидал рядом с исходниками).
По хорошему конечно надо makefile подправить для mingw сборки, а не так вручную.
Стоп по исполнению
 
Цитата
Pride написал:
Стоп-заявка "по исполнению" вводится на основе заявки на покупку или продажу у которых срок действия ( в моем случае) несколько дней.
А где вы в quik нашли заявки, у которых срок несколько дней?
Где взять значения ACCOUNT, CLIENT_CODE для создания транзакции через QLua ?
 
Когда руками заявку выставляете, как заполняете поля "Торговый счет", "Код клиента"?
Условная заявка по исполнению в другом инструменте
 
В transaq можно выставлять стоп-заявки по исполнению в другом инструменте.
Из документации:
Цитата

При вводе связанного стопа его направление (покупка/продажа) устанавливается  противоположным направлению активной заявки, поля Инструмент,  Режим и Клиент также копируются из активной заявки, но при  необходимости могут быть изменены.

Связь по исполнению может быть использована как способ автоматизации торговых  операций в одном финансовом инструменте по условию цены в другом инструменте.  Выставляется «триггерная» заявка на минимальный объём в индикативном  инструменте, и к ней привязывается стоп по исполнению, открывающий или  закрывающий позицию в торговом инструменте. К этой же «триггерной» заявке можно  привязать стоп, который автоматически закроет позицию, возникшую при ее  исполнении

Условная заявка по исполнению в другом инструменте
 
Сейчас есть условные стоп-заявки по исполнению. Но там всегда один инструмент. А для арбитражных стратегий хочется иметь возможность при исполнении лимитной заявки в одном инструменте автоматически активировать лимитную/рыночную заявку в другом.
Как определить Код класса (CLASSCODE) по коду инструмента (SECCODE)?
 
Вопрос не почему такое значение, а как его получить в программе. Вручную я его по alt-I вижу.
Как определить Код класса (CLASSCODE) по коду инструмента (SECCODE)?
 
В securities есть и с TQTF, и с TQTF_F, и с EQRP_INFO...
Разница только в settle_date.  
Как определить Код класса (CLASSCODE) по коду инструмента (SECCODE)?
 
Повторю свой вопрос.  Я нажимаю alt-I в таблице "Состояние счёта" и вижу информацию об инструменте по конкретному классу. Как мне получить этот класс в lua? getSecurityInfo('', 'тикер') дает другой класс.
Вряд ли на этот вопрос может ответить брокер.
Как определить Код класса (CLASSCODE) по коду инструмента (SECCODE)?
 

ВТБ


Другой брокер - класс без 'F' в конце
Как определить Код класса (CLASSCODE) по коду инструмента (SECCODE)?
 
https://imgur.com/M6GbyLl.png
LUA: Узнать цену утреннего аукциона во время самого аукциона
 
Ну если вы видите нужные значения в таблице, то в чем проблема? Включаете в настройках "Формальное представление заголовков строк и столбцов", копируете всю таблицу, вставляете куда-нибудь и смотрите, как называется нужная колонка.
Как определить Код класса (CLASSCODE) по коду инструмента (SECCODE)?
 
Цитата
Andrey Bezrukov написал:
Здравствуйте, Василий.

Текущая цена инструмента таблицы "Состояние счёта" берётся из параметров таблицы текущих торгов для данного класса/инструмента. Для данного показателя позиции используются следующие параметры ТТТ:

1. Цена последней сделки по инструменту из таблицы «Текущие торги». Если такой цены нет, то цена закрытия.
2. Для срочного рынка – цена последней сделки. Если такой цены нет, то указывается расчетная цена.
3. Для облигаций значение указывается в % от номинала, для срочных контрактов – в пунктах.
4. Для клиентов типа «МП»: лучшая цена спроса / предложения из таблицы «Текущие торги»

То, из какого именно класса берутся данные параметры - настраивается на стороне сервера QUIK. Получить эту цену, Вы можете обратившись к таблице текущих торгов с указанием класса и инструмента при помощи функций getParamEx и getParamEx2.
Вопрос актуальный - как именно этот класс, настроенный на стороне сервера, получить? Я нажимаю alt-I (информация об инструменте) в таблице "Состояние счёта" и вижу один конкретный класс. Как его получить в lua?
Три дня назад у LQDT ETF был класс TQTF, а сегодня у ВТБ стал класс TQTF_F, а у другого брокера по прежнему TQTF. Поэтому вариант "зафиксировать класс где-то в настройках" не рабочий, класс может меняться.
Что будет, если внешняя dll изменит содержимое строки Lua?
 
Меняют конечно. Как минимум, туда добавлено несколько функций: os.sysdate(), table.sconcat(), table.sremove(), table.sinsert(), table.ssort().
А еще должна быть какая-то непустая реализация макросов lua_lock()/lua_unlock() в llimits.h
Ошибки использование функции 'unpack')
 
https://www.lua.org/manual/5.2/manual.html#8.2
Цитата
Function unpack was moved into the table library and therefore must be called as table.unpack.
Страницы: 1 2 3 След.
Наверх