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

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

Страницы: Пред. 1 ... 4 5 6 7 8 9 10 11 12 13 14 ... 19 След.
как мне скомпилировать или достать luasql
 
Если я правильно помню luasql от keplerproject под win32. Возьмите сборку под x64, хотя бы от swerg https://github.com/swerg/qlua-luasql
Либо сами внесите изменения.

И соберите через make или прямо в VC.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Это не мой тест. Я просто запустил вышеприведенный чужой код на чистом луа. И вижу, что я также ничего не вижу.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Странный спор.

Берем тот же скрипт, приводим к универсальному виду:
Код
_G.message = _G.message or _G.print

_G.message('begin: '..tostring(os.clock()))
local t = {}
for i = 1,150000 do
    t = os.time()
end
_G.message('end: '..tostring(os.clock())..', memory: '..tostring(collectgarbage("count")))

В чистом lua:

begin: 0.0
end: 0.006, memory: 25.41796875

В Квике 8.13

begin: 1796.016
end: 1796.032, memory: 39.4013671875

В Квике 9.3

begin: 31.48
end: 31.499, memory: 39.4013671875


Да, разница с чистым lua есть, но не сказал бы, что это как-то мешает. Тем более, что накладные расходы при запуске скрипта в окружении терминала есть.

Что касается хранения таблиц, то, как правило, необходимы последние для расчета чего-то в скользящем окне. Остальное то зачем держать - вычистить, сборщик уберет со временем.
Работает ли Lua с ИТП (Иностранной Торговой Площадкой)?
 
Если данные транслируются в ТТТ, то и getParamEx вернет их. Укажите корректный код класса и код инструмента. Можете увидеть их в информационном окне: правая клавиша в строке ТТТ - информация об инструменте.
string.dump не верно работает
 
Ну так

Код
local f = assert(load([[print('hello')print('world')]]))
string.dump не верно работает
 
Как уже правильно сказали выше, файл должен быть в бинарном представлении открыт.

Вот отрывок из книги создателя языка:

Lua принимает предкомпилированный код практически везде, где он допускает исходный код. В частности, loadfile и load принимают предкомпилированный код.

Мы можем написать упрощенную версию luac непосредственно на Lua:


Код
p = loadfile(arg[1]) 
f = io.open(arg[2], "wb") 
f:write(string.dump(p)) 
f:close() 


Основная функция здесь — это string.dump: она получает функцию Lua и возвращает ее предкомпилированный код как строку, правильно оформленную для ее обратной загрузки в Lua.


Т.к. в Квике теперь две версии lua, то необходимо запускать все в одной версии.
Редактор для LUA
 
visual stidio code + plugins:
https://marketplace.visualstudio.com/items?itemName=keyring.Lua
https://marketplace.visualstudio.com/items?itemName=sumneko.lua
https://marketplace.visualstudio.com/items?itemName=actboy168.lua-debug
ну и для git  https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens

Или IntelliJ IDEA + EmmyLua

Дело вкуса. Но idea тормоз, особенно при глобальном поиске.
Таблица сделок, номер заявки превращается в число e+
 
Если версия Квика 7, то там lua 5.1. А вот с ним уже не все так очевидно. Он, действительно, может не переварить номер из 19 символов. Поэтому, собственно, и был переход на lua 5.3. https://forum.quik.ru/forum10/topic5119/
Поэтому обновляйте версию.
Таблица сделок, номер заявки превращается в число e+
 
Если тип number и предположительно целое, то достаточно такой конструкции
Код
if type(x) == "number" and (math.floor(x) == x) then
        return _VERSION == "Lua 5.1" and string.format("%0.16g", x) or tostring(math.tointeger(x) or x)
end

Что же касается получения данных из таблиц Квика, то вызов getItem необходимо свести к минимуму. Один вызов на индекс и запомнить в переменной. Иначе большой расход памяти.
Изменение настроек (Settings) внутри кода индикатора, В окне свойств пользовательских настроек не отображается новое значение
 
А зачем изменять два раза параметр? Одного раза достаточно. Что касается видеть - то нет. Это либо ошибка, либо разработчики не предполагают изменение вне настроек.
Правда если Вы хотите изменять и в коде и в поле настроек, то это уже другая задача: необходимо как-то "сказать коду", что поле изменено в форме и не изменяй его.

Впрочем, Вы можете решить данную задачу используя две (три) переменные.

Одна - в структуре Settings. Вторая - прошлое используемое значение (чтобы понимать, что в форме его изменили). Ну и третья - рабочая, значение которой берется из прошлых двух.
Изменение настроек (Settings) внутри кода индикатора, В окне свойств пользовательских настроек не отображается новое значение
 
Если это чисто внутренние данные, то может тогда и не хранить их в Settings.
А если необходимо именно в них, то можно перед выходом из функции Init установить необходимое значение и оно будет использоваться в расчетах.

Правда возникнет неоднозначная ситуация - в окне ввода параметров будет отображаться то, что ввел пользователь, а расчет будет вестись от переопределенного значения.
Но это уже вопрос к разработчикам - Settings явно кешируется и выдается в форме ввода из кеша, не учитывая, что параметры изменены в коде.
Не понятная ошибка помогите, луа самп тут, (exception) and (error)
 
Возможно, но чтобы понять проблему необходимо видеть код  функции inicfg.load.

Хотя, как правило, если нет уверенности, что данные корректны, то стоит проверять значения прежде чем их использовать. Как минимум убедиться что type(updateIni) == 'table'. Но это не решит проблемы загрузки(записи по указанному пути) файла через сеть.
Не понятная ошибка помогите, луа самп тут, (exception) and (error)
 
Видимо, все же стоит обратиться на форум для того продукта, где этот скрипт используется. Поиск дает ответ, что это какая-то игра GTA.
Это форум посвящен совсем другому продукту.
Как создать экземпляры класса в цикле?
 
Ну так это и есть хеш таблица - интерфейс ассоциативного массива

https://habr.com/ru/company/vk/blog/493642/
Как создать экземпляры класса в цикле?
 
Таблицы lua - это хэш таблицы. Точнее весь lua - это операции над таблицами.
Поэтому банально
t[1] = что-то
t[2] = что-то
....

Или

t['что-то'] = вот-это
t['еще'] = другое

Можно даже в качестве индекса другую таблицу указать

tbl = {}
t[tbl] = 'что-то'

Так что как сохранить - это больше вопрос как лучше сохранить в данном случае.
Ошибка запуска скомпилированного файла
 
Цитата
nikolz написал:
Ну да, типа скрыть тот ужас, который нагородили  в роботе, который сливает депозит, но за деньги заказчика.
Чтобы не было мучительно стыдно за такой развод.
Тогда обязательно.  
В принципе да. Но покупать алгоритм - то еще занятие. Тем более, что они все давно исследованы вдоль и поперёк. Для примера, если кто не видел - https://oxfordstrat.com/rd-blog/
Как создать экземпляры класса в цикле?
 
Не в даваясь в подробности, зачем и где хранить, то - как обычно, через метод конструктор. Он же у Вас объявлен.
Ошибка запуска скомпилированного файла
 
Если себе, то смысла никакого. Если на заказ, то уже имеет смысл.
Как все таки сделать http запрос из Lua?
 
В папке mime находится dll. За поиск динамических библиотек отвечает путь package.cpath

Его тоже необходимо указать.

Чтобы искать во вложенных папках можно использовать такую маску

для package.path:      path .."\\?.lua;"..path.."\\?\\?.lua;"

для package.cpath:    path .."\\?.dll;"..path.."\\?\\?.dll;"
Как все таки сделать http запрос из Lua?
 
Чтобы скрипт нашел библиотеку в каталогах отличных от предопределенных, необходимо дополнить путь искателя

Можно напрямую указать:

package.path=package.path..';C:\QUIK\LuaIndicators\QET\EnterTradeLib\\\?.lua;'

require же должен знать где искать файлы.
Ошибка запуска скомпилированного файла
 
Проверьте, что запускаете в корректной версии. В последних версиях Квика две версии lua 5.3.5 и 5.4.1. Если не выбираете в версию при запуске, то выбирается по умолчанию из настроек.
Как все таки сделать http запрос из Lua?
 
Что значит зачем. Lua не имеет встроенной поддержки web soсket. Поэтому необходимы библиотеки (а не программы), чтобы сие действие стало доступно.
Ссылки на сборки библиотек недавно обсуждались.
статус заявки: выставленной по стоп-лоссу, снята, а не активна
 
Если речь про срочный рынок, то цену активации необходимо задавать конкретным значением. Например, рассчитать как сдвиг стоп-цены на 100-200 шагов цены, помня о зависимости ГО от цены.
Но, как уже обсуждалось, не факт, что проскальзывание будет меньше. Поэтому контролировать связанный лимитный ордер необходимо.

Также ситуацию когда стоп ордер исполнен, а лимитный ордер не установлен, тоже необходимо контролировать. При этом учитывать, что просто может долго приходить ответ об его установке, а не кидаться и закрывать позицию самому. А то в итоге выйдет уже не закрытие позиции.
статус заявки: выставленной по стоп-лоссу, снята, а не активна
 
Не на всех рынках есть понятие "По рынку". Если после активации ордера лимитный ордер не смог пройти контроль лимитов цен, достаточности средств, то он не будет зарегистрирован.
Правда, статус стоп-ордера должен быть "исполнен" т.е. не активный и не снят. А вот биты 10 и 11 как раз могут говорить о причине проблемы.
Перестал работать SERVERTIME. не могу понять в чём проблема
 
Проще можно, но когда сервер начнет возвращать данные не в ожидаемом формате, то придется уже разбирать формат.

Если же для себя пишешь, то конечно, можно упрощать. Правда надо помнить, что 9 утра сегодня - это больше чем 22:00 вчера. Если же просто время сравнивать, то будет ошибка.
Вопрос по написанию скрипта
 
Пишите скрипт с интерфейсом. Он будет показывать сигналы (для примера https://github.com/nick-nh/qlua/tree/master/scriptMonitor).
Пишите скрипт, отправляющий сигналы на почту, телеграм.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Ну появился он в 5.2

https://www.lua.org/wshop18/Ierusalimschy.pdf
Баги QUIK 8.13
 
Да, так можно проверять. Собственно уже сколько лет так и проверяется.

Но необходимо учитывать еще, что есть настройка "Получать данные раз в секунд".

Если там установлено не 0, то необходимо это учитывать. Впрочем, параметр у Вас есть для этого.

Также еще необходимо учитывать, что SERVERTIME не всегда возвращается в виде 8-и символов.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Для уточнения: о каких функциях речь? Любых пользовательских, или только о подписанных колбеках и функциях qlua?

Не скажу, что у меня тысячи функций, но я предпочитаю разбивать код. Поэтому у меня их достаточно много. Какой-то существенной нагрузки не наблюдаю.
Не всегда исполняется require в начале скрипта
 
Пару раз словил странное явление:
Есть скрипт использующий библиотеки.
Был запущен один, который использовал библиотеку, расположенную в одной из папок отладки.
Потом был запущен другой скрипт, использующий ту же библиотеку (то же имя), но уже из рабочей папки.

Второй скрипт при этом не использовал корректную библиотеку, а тоже использовал отладочную от прошлого запуска другого скрипта. Не показалось (как можно было бы подумать), т.к. у меня все модули выводят в лог свою версию.

Перезапуск терминала решил проблему.

Так что про кэш мысли возникали.
комппиляция под 9 квик
 
А, речь про компиляцию скрипта. Да, синтаксис такой же.

luac.exe -s - o luac_file_name file_name

Точно запускаете в той же версии? Я иногда забываю нажать список выбора версии lua.
комппиляция под 9 квик
 
Не очень понятна проблема. Если речь про lua 5.4, то все как обычно - использовать lua54.lib и include h файлы.
Тейк профит и стоп-МАРКЕТ заявка для луа, стоп-заявка проскальзывает, так как стоит стоп-лимит
 
Скорее всего просто нарушено форматирование при сохранении или уже при чтении проблема алгоритма.


Лучше пойти путем хранения самого контекста скрипта.
Для примера, есть некое состояние, скажем State - это таблица с необходимыми данными. Мы ее сохраняем в файл в виде сериализованой таблицы.
Тогда чтение будет через одну единственную команду loadfile.

Для сериализации таблицы состояния можно воспользоваться любым итерационным (рекурсивным) методом:http://lua-users.org/wiki/TableSerialization

Лишь бы он позволял хранить восстанавливаемые данные через loadfile.

Файл должен выглядеть примерно так:

return {
   filed = 1,
   field2 = 'some_string',
   inner_t = {
       b = 2,
       c = 3
   }

}

т.е. как простой код lua
Quik - чтение почты
 
Цитата
Иван написал:
Спасибо за развернутый ответ.
Можно пример с вашей консольной программы.
Она написана на C#. Я её ещё не выкладывал в открытый доступ.

Но, все можно найти в примерах MailKit: https://github.com/jstedfast/MailKit
Quik - чтение почты
 
Речь не про консольную команду, а про консольную программу - читай сервис постоянно работающий и читающий почту.

В примере, что был приведен, видны зависимости:
Код
local imap4     = require 'imap4' 

local ssl       = require("ssl") 

т.е. необходимо иметь библиотеку imap4, ссылка на которую была приведена.
Также, если используется ssl, то необходима ssl.

Если посмотреть на код библиотеки imap, то видно, что для ее работы необходима socket

Код
local socket = require 'socket'

Поэтому необходимый минимум - это библиотеки imap и socket, что и было написано выше.
Тейк профит и стоп-МАРКЕТ заявка для луа, стоп-заявка проскальзывает, так как стоит стоп-лимит
 
Цитата
Предпочитаю именно этот подход
Да, но важно отметить, что в таком случае важно обеспечить постоянную работоспособность алгоритма, вне зависимости от отключения связи и электропитания.
Тейк профит и стоп-МАРКЕТ заявка для луа, стоп-заявка проскальзывает, так как стоит стоп-лимит
 
Есть варианты:
- увеличивать отступ исполнения стоп-ордера, чтобы была больше вероятность исполнения отправленной лимитной заявки (но, возможно, больше будет ГО)
- не ставить стоп физически, а отслеживать цену алгоритмом и закрывать "по рынку" исходя из текущей ситуации, если алгоритм решил, что стоп сработал.
- более сложный вариант отслеживания активации стопа. После того как получен признак что стоп исполнен, проверять установку связанного с ним лимитного ордера и его исполнение. Если он не исполнен, снимать его алгоритмом и ставить новый исходя из текущей цены. Т.е. реализовать алгоритм "гонки за ценой". Т.к. мы никогда не знаем какая в будущем будет ситуация в момент активации стопа (т.е. угадать отступ), то, по хорошему, какой-то вариант "гонки" все равно необходимо реализовать.

Также не стоит забывать про битовые флаги 10 и 11 стоп ордера:

бит 10 (0x400)      -   Стоп-заявка сработала, но была отвергнута торговой системой
бит 11 (0x800)      -   Стоп-заявка сработала, но не прошла контроль лимитов

Ордер может исполнится, а лимитный ордер вообще не прошел. Позиция останется, если это не контролировать.
Основные библиотеки для QLua 5.4.1
 
С одно стороны да, иметь как вариант неплохо было бы. Но стабильность всего этого дела (одна сборка работает, другая нет - это про ssl), уже давно заставила пойти другим путем. А именно - написание программ реализующих отправку, прием запросов. А терминал(ы) уже с ней общается. В таком варианте все уходит в NET (я выбрал C#). А там уже все "их коробки".

Из-за специфики Lua библиотеки мало кто поддерживает. Они старые. Если бы разработчики терминала реализовали бы методы HTTP requset, доступные в qlua, многие бы вопросы ушли.
Как часто у вас вызывается DataSource:Callback?
 
Более информативным был бы скрипт где есть три потока:
Получение данных LAST для цены последней сделки
Данные таблицы обезличенных сделок
Данные от CreateDataSource

Последний самый медленный. Между его обновлениями десятки сделок могут пройти. Исключение Тиковый график, он равносилен обезличенным сделкам.
QUIK QLua подстановка с описанием для редакторов Lua
 
Я так понимаю это просто файл макет, чтобы он был проиндексирован LS с поддержкой аннотаций как Lua от sumneko (сам им пользуюсь).
ищу программиста создать программу на платной основе, выгружать данные OHLC и индикаторы в файлик
 
Нашел у себя старый скрипт, причесал немного. Вроде делает, что хотите.

https://nick-nh.github.io/2021-11-24/barsSaver-post
Quik - чтение почты
 
Если не использовать SSL, то достаточно
socket - найдете здесь https://forum.quik.ru/forum10/topic6902/
imap - https://github.com/vrld/imap4.lua

Если же использовать SSL, то необходимо иметь luasec. Я стабильно работающую с 5.4 и 5.3 не нашел.

Поэтому, чтобы не зависеть от библиотек lua, уже давно написал себе консольную программку, читающую почту и записывающую в файлы, которые уже скрипт читает и обрабатывает.
ищу программиста создать программу на платной основе, выгружать данные OHLC и индикаторы в файлик
 
Речь про то, что если с графика, то график необходимо открыть, установить идентификаторы, индикаторы и т.д.

А если данные заказать, то ничего открывать не надо.
Единственное когда это имеет смысл - это если есть какой-то экзотический индикатор без известного алгоритма.
Основные библиотеки для QLua 5.4.1
 
Просто сборкой там не обойтись, надо код править.
Основные библиотеки для QLua 5.4.1
 
Это я собирал для lua 5.1. Для 5.3 и 5.4 не собирал luaseс. Для 5.4 надо заняться.
ищу программиста создать программу на платной основе, выгружать данные OHLC и индикаторы в файлик
 
А Вы точно хотите с графика данные брать?
Если алгоритмы простые, то можно сделать через заказ данных. Тогда можно в списке задать настройки построения и пусть себе выгружает без открытия графика. Кажется я такое делал, надо поискать.
ищу программиста создать программу на платной основе, выгружать данные OHLC и индикаторы в файлик
 
Работы на час-два, а столько слов сказано. Опять ударились в обсуждение зачем это надо. Просто задача малоинтересная, на самом деле.
Основные библиотеки для QLua 5.4.1
 
Что касается базы данных, то хотелось бы, конечно, видеть стабильно работающий luasql odbc. Я пока для 5.4 не собирал. 5.3 падал постоянно.
А драйверы для конкретных баз - это хорошо, но очень уж узко-применимо.
Определение экземпляра терминала в скрипте в офлаине
 
Какова цель? Если разделить контекст запуска, что лучше через путь к рабочему каталогу терминала. Они разные будут.
По каким критериям определять, что сервер QUIK сдох
 
Не очень понятна терминология, но т.к. сервер передает данные, то, видимо, решением вопроса будет контроль параметров, позволяющих оценить, что данные идут.

В частности, можно проверять время сервера и время последнего пришедшего пакета, и разницу между ними.
Страницы: Пред. 1 ... 4 5 6 7 8 9 10 11 12 13 14 ... 19 След.
Наверх