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

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

Страницы: 1 2 3 4 5 6 7 След.
Отладка QUIK 9.1
 
BlaZed, глупый вопрос.

Код
randseed.bin
Тут должно быть немного очевидно что эти файлы делают и зачем они нужны. Бороться с этим не надо, если вам эти файлы не нужны то просто игнорируйте их.
Написание автономного бота
 
Mixa, О том что признак окончания зависит от определения разграничения между архивными и текущими данными, а такового разграничения нет. Мозгами подумайте как это чисто технически должно было бы работать вообще, псевдокодом хотя бы изложите - тогда и будет разговор. А то сейчас это полемика уровня "прицепите карбюратор к дизелю".
Написание автономного бота
 
Тут вопрос стоит в том, что нет разницы между "архивными" и "текущими" данными - это что называется абстрактный конструкт. Что вообще понимается под "текущие данные"? Наиболее актуальные? Тогда очень старые данные могут быть "текущими" если ничего нового не пришло. Которые соответствуют текущему моменту времени? Тогда вообще все данные  будут "архивными" потому что к моменту прихода данных к вашему терминалу  они уже устарели. Которые не старше ХХХ времени? Тогда старые данные могут считаться "текущими", которые теперь еще и представляют собой большой блок данных а не одну запись, плюс это конфликтует с понятием об актуальных данных которые могут быть очень старые.


Тут проблема не в технической реализации, а в том что вы расплывчатые фантазии из страны бабочек и единорогов пытаетесь натянуть на действительность с железобетонной логикой.
Синхронизация потоков
 
Цитата
Поясните пожалуйста, если main с бесконечным циклом без С-функций, в конце каждой итерации sleep это будет работать так:
1. Если выполняется код до sleep и приходит колбэк, то колбэк не будет выполняться, пока не начнет выполняться sleep.
2. При начале выполнения sleep, начнут выполняться накопленные колбеки, при этом в основном потоке дальше sleep выполнение не пойдет, пока не выполнятся все накопленные колбеки?
Да. Тут надо уточнить что использование динамической памяти тоже снимает лок - создание новых объектов и строк. При использовании полностью статической памяти и отсутствии манипуляции строк, лок не должен сниматься. Еще надо уточнить что каждый луа-скрипт имеет свой отдельный тред, но колбеки выполняются из главного треда квика, так что пока колбек (любой из них) выполняется или стоит в ожидании, весь терминал будет висеть.
Синхронизация потоков
 
Цитата
Sergey написал:
Спасибо, за ответ. А потоки синхронизировать в Lua можно?
Код, не вызывающий никаких С-функций, выполняется атомарно. Так что можно использовать глобальные переменные в качестве мутексов.
Синхронизация потоков
 
Решение очень простое: не используйте одни и те же данные в разных потоках. Один из примеров практической реализации такого принципа это двойная буферизация.
Опять ошибка получения кол-ва ордеров скриптом
 
Сирануш, всего-то делов погуглить - у каждого автопроизводителя имеется целая куча автомобилей у которых вскрылись пожароопасные дефекты во время эксплуатации. И ничего, живут как-то.

Это как бы к тому, что косяки неизбежны, и критиковать людей по поводу их наличия это как минимум глупо.
Функция Sleep(), Эффективно ли применять фунцкию Sleep() для понижения нагрузки процессора
 
Владимир, при исполнении прерывания планировщика задач изымается управление из текущей задачи и передаётся в одну из стоящих в очереди. Если ничего не выполнялось и процессор простаивал, значит просто запускается стоящая в очереди задача у которой вышел таймер остановки.
Функция Sleep(), Эффективно ли применять фунцкию Sleep() для понижения нагрузки процессора
 
Айдар, технология которую вы имеете ввиду называется CPU spin - когда вместо ожидания процессор загружен циклом, который ничего не делает и только проверяет, настало ли время прервать самого себя. Это как правило обеспечивает высокую точность времени возврата из паузы, но соответственно использует 100% процессора.


Владимир, возврат управления от ОС в приостановленную программу это и есть прерывание по таймеру.
Функция Sleep(), Эффективно ли применять фунцкию Sleep() для понижения нагрузки процессора
 
Sleep передаёт управление процессором обратно операционной системе, с указанием вернуть управление программе не менее чем через указанный период. Операционная система ставит процессор в режим простоя когда он ничем не используется.
Опять ошибка получения кол-ва ордеров скриптом
 
Старатель,  действительно.

В любом случае, nil специально и существует для таких моментов - когда данных просто нет. Проверяйте величину на nil да и все.
Вызов индикатора в скрипте, Использование значений индикаторов при работе со свечками
 
Владимир, то что вы описали это стандартный SMA индикатор.
CreateDataSource в цикле по большому списку, Анализ свечей по большому количеству инструментов
 
BlaZed, я имел ввиду все имеющиеся данные а не только текущие. А так можно отслеживать OnParam, можно GetParam в цикле использовать, можно вообще по данным стакана всё это определять.
Выгрузить в файл / вычитать из файла, Выгрузить в файл / вычитать из файла
 
Важное исправление.
Код
local fileInput = { }

local file, err = io.open ( "path/to/my/file.txt", "r" )
if not file then error ( err ) end
for line in file:lines ( ) do
  fileInput[ #fileInput + 1 ] = line
end

doThingsWith ( fileInput )
Выгрузить в файл / вычитать из файла, Выгрузить в файл / вычитать из файла
 
Цитата
Dr Wed написал:
где искать функции для работы с фалами?
Как, например, выгрузить в файл результаты работы скрипта?
В самом Lua. Есть встроенная библиотека io, в ней есть функции open которая открывает файл, в объкте файла есть функция write которая пишет в файл данные. Сразу оговорюсь что не нужно пользоваться бинарными файлами, используйте простой текст - так гораздо проще плюс файлы можно редактировать без затруднений.

Примерно таким способом можно сбросить в файл одноуровневый массив или строку.
Код
scriptResults = runMyScript ( )

local file, err = io.open ( "path/to/my/file.txt", "w" )
if not file then error ( err ) end
file:write ( type ( scriptResults ) == "table" and table.concat ( scriptResults , "\n" ) or scriptResults )
file:close ( ) 
Код прочтения в массив данных из файла разделенных построчно.
Код
local fileInput = { }

local file, err = io.open ( "path/to/my/file.txt", "r" )
if not file then error ( err ) end
for line in file:lines ( ) do
  fileInput = line
end

doThingsWith ( fileInput )
Выгрузить в файл / вычитать из файла, Выгрузить в файл / вычитать из файла
 
Dr Wed, за исключением пользовательских графических таблиц и скриптов индикаторов, графический интерфейс и программный интерфейс (Lua API) полностью развязаны и не имеют возможности друг с другом общаться. Можете считать программную часть квика отдельной и невзаимосвязанной с графической частью.
CreateDataSource в цикле по большому списку, Анализ свечей по большому количеству инструментов
 
Dr Wed, я инструкцию проштудировал, вроде как других способов нет. Единственная альтернатива которую я вижу это брать данные из открытого графика внутри скрипта индикатора, который к этому графику подцеплен.
CreateDataSource в цикле по большому списку, Анализ свечей по большому количеству инструментов
 
https://forum.quik.ru/messages/forum10/message53483/topic6131/#message53483
Построение индикаторов по нескольким источникам
 
Было бы ПО с открытым исходным кодом, можно было бы самому сделать. У меня как то было такое что в трекере программы которой я пользовался 10!!! лет висел фичреквест, который успешно игнорировался, и в один прекрасный день оно мне тоже потребовалось. Если гора не идет к магомеду, подумал я, и сам выполнил нужный функционал и отправил пулреквест разработчикам, который они вскоре приняли. Не то чтобы сильно важный был функционал, но мне много людей спасибо на том сказали.

Это опять же вопрос к тому, что торговый клиент не должен иметь графического интерфейса, а иметь только цифровой интерфейс, давая возможность любому терминалу присоединиться к нему и обмениваться данными и командами, чтобы соответственно разработкой терминала могли заниматься отдельные люди в том числе пользователи.
Построение индикаторов по нескольким источникам
 
Евгений, разработкой программного обеспечения занимались когда-нибудь? У вас свой план разработки, у пользователей - разношерстные пожелания. Пожелания вносятся на планёрку, там обсуждается вопрос о соотношении усилий к пользе, на этом же основании либо это вносится в баклог как часть плана разработки, либо кладется в долгий ящик.
Построение индикаторов по нескольким источникам
 
Цитата
Andrey Bezrukov написал:
возможность использования функции CreateDataSource, а также вызов callback-функций, связанных с источником данных, полученным через CreateDataSource
внутри скрипта Lua индикатора.
Вопрос от новичка, Как вывести в окно остаток баланс счета?
 
Maksimus, в плане программирования Луа сходен с Си. Разница состоит главным образом в отсутствии строгой типизации - любая переменная может иметь любое значение. Таким образом можно довольно легко делать например именованные структуры данных просто записав произвольные величины в произвольные ячейки массива, деревья данных просто записывая другой массив внутрь имеющегося массива, или делать ООП объекты просто навесив функций на массив. Всё это осуществимо и в Си, но довольно муторно из-а строгой типизации. Еще конечно память тут автоматическая, но это в целом эквивалентно просто использованию статической памяти в Си, с поправкой на то что можно локальные объекты передавать наружу из функций.
Вопрос от новичка, Как вывести в окно остаток баланс счета?
 
Maksimus, можете собственно создать графическую таблицу и туда эти данные затолкать. Тут одна особенность правда есть - сначала надо создать таблицу и добавить колонки, потом создать окно, и уже потом добавлять строки. Иначе не работает.
Вопрос от новичка, Как вывести в окно остаток баланс счета?
 
От себя порекомендую прочитать онлайн-книгу Programming In Lua, и инструкцию QUIK Интерпретатор Языка Lua.
Вопрос от новичка, Как вывести в окно остаток баланс счета?
 
Значения полей можно получать квадртаными скобками, либо если ключ представляет собой валидное имя то через точку.
Код
leverage = money[ 'leverage' ]
leverage = money.leverage
Через квадратные скобки можно в качестве ключа что угодно передавать - число, строку, таблицу, и т.п. Нельзя только nil.
Вопрос от новичка, Как вывести в окно остаток баланс счета?
 
Maksimus, ну да, результат выдается таблицей. Из таблицы надо значения выдёргивать по мере надобности. Чтобы просто всё подряд высыпать можно вот такой например код использовать.

Код
for k, v in pairs ( money ) message ( string.format ( "%s=%s", k, v ) ) end
Некорректное отображение Даты в таблице сделок
 
Текст в таблице набок съехал. Уже вроде починили. Можете пересоздать таблицу, должно нормально быть.
Вопрос от новичка, Как вывести в окно остаток баланс счета?
 
Пардон, в этих таблицах индексы начинаются с нуля.

Код
for i = 0, getNumberOf ( "money_limits" ) - 1 do
Вопрос от новичка, Как вывести в окно остаток баланс счета?
 
Язык прекрасный на самом деле: можно писать как на Си, можно писать как на Паскале, можно писать как Питоне, можно писать как на Джаваскрипте. Встроенные хештаблицы и возможность ставить значения пустых полей по умолчанию через другую таблицу либо вообще функцию. Бинарные строки и отсутствие борьбы с нуль-терминатором, и такие сверхбыстрые строковые сравнения что можно вместо числовых констант строковые использовать. Сборщик мусора быстрый и хирургически точно управляемый. Можно загружать бинарные библиотеки написанные на С++, а через специализированые инструменты - даже при отсутствии у библиотек Луа интерфейса.

Нули у вас потому что неверные параметры заданы. По-хорошему должно ошибку выбрасывать, но в Арке у людей туго с идиоматичным кодом на Луа, так что вот такие перлы повсюду. Советую вам обращаться к табличным данным напрямую через getItem.

Код
for i = 1, getNumberOf ( "money_limits" ) do
  money = getItem ( "money_limits", i )
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Владимир, если не стесняетесь добавить в логику ценовой политики рассчет стоимости плеча и сделок репо, то шорты нетрудно добавить - они просто инверсия лонгов. Не считая ситуаций когда прибыль съедается комиссией, где по лонгам потери там по шортам прибыли.
Построение индикаторов по нескольким источникам
 
Старатель, действительно, мне почему-то показалось что в инструкции было написано что эта функция доступна из скрипта индикатора. Наверное перепутал с getDataSourceInfo.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Владимир, мой робот не реалтаймовый, и я как раз говорил что гораздо важнее иметь получше алгоритм чем побыстрее торговый аппарат. Экономический алгоритмист из меня примерно никакой так что я задействую машинное обучение - результаты пока так себе, но прогресс есть.


BlaZed, сделки будут совершаться по рыночной цене в любом случае, устанавливая цену регулируется в целом только то, в какой момент (или вообще) будет совершена сделка. Лучшая цена сделки обычно движется в одном и том же направлении и после принятия решения совершить сделку можно просто ждать, пока это направление не поменяется. В зависимости от настройки гистерезиса можно и прозевать несколько делений от лучшей цены, но можно и не застрять на локальном минимуме.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Цитата
TGB написал:
 Если заменить в выше написанном «реалтаймовость» на высокочастотность (смотрите ее описание в сети) , то,  с написанным, я, в основном, согласен.
HFT требует реалтаймовость, одно без другого не работает. Я говорил про обычного робота который использует вместо обычной среды - реалтаймовую. В отсутствие джиттера это позволило бы не прозевать пару лишних тиков и получить чуть лучшую сделку по сравнению с роботом, у которого система может вызвать случайные задержки по несколько миллисекунд.
Мин/Макс возможная цена для акций, По фьючам есть а по акциям нет
 
Alexey Ivannikov, просьба решить проблему наличия лимита и снять его.
Добавить возможность отображения пользовательского параметра в легенде идикатора
 
Сюда же: функция AddLabel
Добавить возможность отображения пользовательского параметра в легенде идикатора
 
Можете такого же эффекта достичь выводя дополнительные графики.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Цитата
Владимир написал:
Сами же участники, как правило, легко затыкают подобным шавкам пасть.
На примере вас двоих тут скорее ситуация вида игры в шахматы с голубем - после нескольких попыток даже самые отбитые аутисты перестанут пытаться, а голубь все равно будет считать себя безсомненным победителем всегда и везде в любом случае.
QUIK 8.0
 
Это только бинарник. Дистрибутив luasocket также включает несколько скриптов (главный - с именем socket.lua), которые потом и загружают core.dll.
Построение индикаторов по нескольким источникам
 
Код
datasource:SetUpdateCallback
AddLabel из скрипта-индикатора
 
Да, надо указывать. Можете написать разработчикам, чтобы по умолчанию метки из скрипта индикатора ставились в то окно, в котором он работает.
QUIK 8.0
 
LuaSec работает поверх LuaSocket.

Код
require("socket")
require("ssl")

-- TLS/SSL client parameters (omitted)
local params
 
local conn = socket.tcp()
conn:connect("127.0.0.1", 8888)
 
-- TLS/SSL initialization
conn = ssl.wrap(conn, params)
conn:dohandshake()
--
print(conn:receive("*l"))
conn:close()
Мин/Макс возможная цена для акций, По фьючам есть а по акциям нет
 
Mikhail, из вашего же текста - такая функция имеется, просто некоторые брокеры её выборочно деактивируют. Долбите брокера.
LUA скрипт для "MACD histogram", Уважаемые коллеги помогите с проблемой!
 
Начните с прочтения документации QUIK, там относительно подробно написано что надо делать. Как программировать на Lua там конечно не написано, но для этого есть отдельные ресурсы - онлайн-книга Programming In Lua например. Один нюанс с которым у меня возникли трудности это количество графиков - нужно чтобы количество обозначенных линий в таблице настроек совпадало с числом, возвращаемым из OnInit (например с помощью "return #Settings.line" ), и фактически возвращаемые числа из OnCalculate должны иметь такой же порядковый номер как и обозначеные линии. Вместо чисел можно возвращать nil, тогда в этой точке будет разрыв соответствующего графика. Свечкообразные графики не поддерживаются.

Телеграм-бот должен работать на сервере, так что на Lua врядли много чего получится. Так или иначе нужно получить доступ к боту, который может передавать сообщения, которые он принимает через интернет, например по web API. В его документации надо будет вычитать, как ему отправлять сообщения; надо будет установить LuaSocket и с его помощью отправлять к боту соответствующие сигналы.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Владимир, мне не платят чтобы вам лекции по информатике читать. Направление я показал - дальше сами, гугол в помощь. Сделать свой компилятор лиспа это кстати типовая часть обучения в области компиляторов, ничего особого тут нет.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Владимир, вот такие как вы профессиАналы делают сборщик мусора простым инкрементом, а потом недоумевают почему память течёт. Интересно что вы создателя Лиспа сюда упомянули, при том что в Лиспе сферический в вакууме сборщик мусора, и который тормозит исполнение скрипта, и сканирует все переменые на предмет референсов, и не может поймать острова памяти, и вручную не выключается.


То что ручная работа с памятью быстрее работает это ни у кого сомнений не возникает. Равно как и то, что теперь стоимость лишних серваков из-за медленных языков и в частности сборки мусора гораздо меньше стоимости человекочасов разработчиков, которые могут в таком объеме вручную памятью управлять. С ростом аппаратных мощностей снизился и входной порог в области программирования. Платить больше там где можно получить тот же результат дешево или вообще бесплатно - логически нецелесообразно и экономически неэффективно для всей системы.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Владимир, длина среза торговых данных, с которыми работает робот - один из гиперпараметров. По аналогии можете представить какие другие переменные являются гиперпараметрами.

Вы видимо плохо себе представляете что такое сборщик мусора. Работать не останавливая основной тред они не могут принципиально, так как нужно подсчитать сколько референсов имеется на каждый объект и это невозможно сделать когда соседний тред меняет эти референсы.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Владимир, все сборщики мусора работают в фоне и активируются с некоторой, в целом хаотичной, периодичностью, и во время работы полностью тормозят выполнение основной программы. Это создаёт неприемлимый джиттер даже в системах с низкими требованиями к реалтаймовости - выполнение цикла ГЦ может занимать несколько десятков миллисекунд за раз. Кто помнит перевернувшийся раллийный автомобиль под управлениям робота на джаве? ГЦ завесил программу на долю секунды, именно столько и потребовалось чтобы прошляпить критический момент. А по поводу чего я там не понимаю - давайте не будем отрицать что способность робота вести торговлю в плюс (и размер этого плюса) целиком зависит от настройки гиперпараметров алгоритма.


TGB, робот который торгует в реалтаймовом режиме. Определение реалтаймовости сами найдете я думаю.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Цитата
TGB написал:
   1) программа торгового робота не является программой реального времени);
   2) что торгового робота в Windows, в QUIKе написать невозможно.
Программа, работающая на железке без RTOS и/или написанная на языке со сборщиком мусора - не работает в реальном времени. Написать робота в таких условиях можно, но говорить что он риалтаймовый - нельзя, в определение риалтаймовости не вписывается.


Я считаю реалтаймовость для торговых роботов вещью спорной полезности. Способность отреагировать в строго определенный (и короткий) промежуток времени и совершить транзакцию по цене максимум на 1-2 пункта лучше чем нериалтаймовый робот это ничтожный прирост эффективности на фоне общей турбулентности рынка и вариативности результатов торговли в зависимости от прочих параметров. Занимаясь целенаправленной разработкой таких вещей вы скорее всего потратите больше денег чем заработаете на этой разнице за всё последующее время торговли, исключая уровень оборота миллионами долларов в сутки и выше.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Цитата
TGB написал:
обеспечение предсказуемого времени обработки непредсказуемо возникающих внешних событий
Сборщик мусора луа и системный планировщик задач с этим несогласны. 😂

По этому определению кстати веб-браузеры это тоже ОС.
string.upper(S) - русские буквы, Русские буквы в верхний регистр не получается сделать в string.upper(S) в Lua QUIK версии 8.13
 
Владимир, как раз таки программистам с мозгами юникод проблем не создает никаких, а какая польза с универсального формата должно быть очевидно даже слепому.
Страницы: 1 2 3 4 5 6 7 След.
Наверх