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

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

Страницы: Пред. 1 ... 53 54 55 56 57 58 59 60 61 62 63 ... 81 След.
2-x кратный расчет индикатора
 
Спасибо.
вспомнил.  
2-x кратный расчет индикатора
 
Добрый день,
Если вопрос уже обсуждался,просьба дать ссылку.
Почему скрипт индикатора при его установке в окно рассчитывается два раза
Т е если поставить вывод индекса
то получим его изменение от 1 до мах два раза.
------------
Спасибо
перехват ошибки
 
Добрый день,
возможно проблема решена, тогда просьба дать ссылку.
Писал об этой проблема лет надцать назад, но воз и ныне там.
--------------
Прошу разработчиков решить следующую проблему.
Если в скрипте индикатора есть  сравнение с nil, то выводится окно ошибки ,
которое фактически блокирует возможность снять скрипт особенно в период сессии на боевом квике.
если это не торговый режим,  то хрен редьки не слаще. Приходится ждать всю историю данных..
--------------
Поэтому просьба сделать одно из двух
1) автоматическое снятие скрипта при возникновении подобной ошибки исполнения
2) возможность перехватить ошибку и сделать аварийный выход из скрипта
--------------
Спасибо  
Получение данных таблицы котировок
 
Цитата
Дмитрий написал:
Sergey Gorokhov,спасибо, понятно. В общем связать обезличенные (стакан) и личные (свои заявки) данные можно только по косвенным признакам, то есть цене и объёму, что и явствует из природы этих данных
попробую пояснить основы, которые дают ответ на ваш вопрос.
На бирже вас вообще нет, там есть лишь брокер.
Поэтому ваша заявка фиксируется брокером в своих внутренних записях и фактически возвращается в строку стакана вне зависимоcти от информации с биржи.
Это Вам только кажется что Вы видите свою заявку на бирже. в действительности она даже может и не дойти до биржи,
так называемый механизм встречных заявок в основном использовался на форексе, не факт что используется в КВИКЕ.Но нет проблем его реализовать.
Индикатор Стохастик + Открытые Позиции, Помогите привязать Стохастик к значениям Открытых Позиций
 
Цитата
Imersio Arrigo написал:
Цитата
Николай  Камынин написал:
вообще-то Стохастик - это примитивный полосовой фильтр
Совершенно верно. Что абсолютно не противоречит следующему
не возражаю,
просто не понял, что означает
"надо, чтобы Стохастик брал необходимые данные по Открытым Позициям "
Кто такой стохастик в этом случае?
Возможно Вы хотите отфильтровать значения данных "Открытые позиции" этим фильтром.
В чем проблема?
Возьмите эти данные и вычислите по формуле стохастика. или Вы хотите, чтобы это кто-то для вас сделал?
Индикатор Стохастик + Открытые Позиции, Помогите привязать Стохастик к значениям Открытых Позиций
 
Цитата
Самвел написал:
Приветствую всех! Помогите пожалуйста. Суть вот в чем:
Необходимо с помощью Стохастика, рассчитанного за период в один год, получить данные Открытых Позиций.(Срочный рынок).
Как я понимаю, Стохастик  показывает текущее положение цены закрытия в диапазоне максимальных и минимальных цен за указанный период усреднения.
А  нужно, что бы Стохастик брал необходимые данные по Открытым Позициям.  
вообще-то Стохастик - это примитивный полосовой фильтр, с придуманной байкой о его связи с финансами на бирже.
Вы в это верите? А какие-нибудь доказательства этой галиматье вы видели?
Меньше верьте популярным книжкам И рекламе в интернете.
Где найти описание языка Lua. И другую полезную информацию.
 
Цитата
zv78 написал:
Цитата
Николай  Камынин написал:
 
Цитата
zv78  написал:
Здравствуйте. Где взять какое либо описание языка, и прочую информацию для написания скриптов в Quik. Посмотрел форум. Вижу вопросы на форуме задают. А где взять FAQ и информацию для первых шагов? И не только для первых..
 изучайте луа без привязки к КВИК
QLUA - это библиотека функций для работы с квиком.
----------------------------
начните с этого
 http://ilovelua.narod.ru  
и еще удобно использовать SCITE - редактор текста который написан на луа. В нем можно отлаживать и исполнить скрипты луа.
Спасибо. Ну как бы без привязки он мне не особо нужен)  
попробую объяснить второй раз.
QLUA  -это библиотека функций.
Вы знаете как вызывать функции в луа, какие есть переменные, что такое библиотека, как ее подключать , как работать с фалами, с таблицами и т д?
Нет, потому, что это все - включает в себя язык LUA.
------------------
А чтобы создавать торговых роботов,
кроме языка программирования надо еще знать еще много чего и не первым в этом списке QLUA.
Что же касается изучения QLUA ( если Вы знает язык LUA) то для этого достаточно описание QLUA, которое написали разработчики КВИК и еще описание КВИКА.
------------------
Вы же спросили про изучение луа.
Я Вам про это и сказал.
Уведомление, когда скрипт перестал работать/не запустился
 
наиболее надежно будет если поставить специальное приложение либо настроить службу винды на контроль за состоянием квика.
кроме того, не все ошибки библиотеки QLUA перехватываются квиком. Именно эти ошибки и приводят к полному зависанию либо закрытию квика.
Если надо решить эту проблему то надо ставить свой перехватчик ошибок (это на СИ с использованием API).
------------------
что же касается синтаксических ошибок то их надо отлаживать не на боевом КВИКЕ а в тестовых режимах и например в трансляторе редактора текстов SCITE.
Где найти описание языка Lua. И другую полезную информацию.
 
Цитата
zv78 написал:
Здравствуйте. Где взять какое либо описание языка, и прочую информацию для написания скриптов в Quik. Посмотрел форум. Вижу вопросы на форуме задают. А где взять FAQ и информацию для первых шагов? И не только для первых..
изучайте луа без привязки к КВИК
QLUA - это библиотека функций для работы с квиком.
----------------------------
начните с этого
http://ilovelua.narod.ru
и еще удобно использовать SCITE - редактор текста который написан на луа. В нем можно отлаживать и исполнить скрипты луа.
Описание для горизонтальной линии
 
забыл сказать. время в лог файле компьютера (местное) Компьютер синхронизирован с атомными часами(сервером времени).
Описание для горизонтальной линии
 
Цитата
s_mike@rambler.ru написал:
Из встроенного языка это невозможно. Просьбы об этом были ещё лет 5 назад, разработчикам наплевать.
Специально для Вас проверил сегодня, прав ли я. Действительно, я прав, а Вы как и предполагалось врете и обманываете всех.
----------------------
Вот результаты эксперимента.
В индикатор, который у меня отображается в боевом квике я поставил вывод индекса в лог файл.
Квик я обычно запускаю примерно за 10 минут до торгов (автоматически запускается)
лог файл имеет вид:
...
01/25/19 10:51:57 5855
01/25/19 10:51:57 5856
01/25/19 10:51:57 5857
01/25/19 10:51:57 5858
01/25/19 10:51:57 5859
01/25/19 10:51:57 5860
01/25/19 10:59:49 5861
01/25/19 11:00:05 5862
01/25/19 11:00:05 5862
01/25/19 11:00:05 5862
01/25/19 11:00:05 5862
01/25/19 11:00:05 5862
01/25/19 11:00:05 5862
01/25/19 11:00:06 5862
01/25/19 11:00:06 5862
01/25/19 11:00:06 5862
01/25/19 11:00:06 5862
01/25/19 11:00:07 5862
01/25/19 11:00:07 5862
...
Как видим из лог файла никакого сброса и рестарта не происходит. О чем я ранее написал.
-------------------------
Еще раз повторю для автора темы.
У вас все сделано верно. То что хотите тоже можно сделать.
Получение в индикаторе данных со старшего таймфрейма
 
s_mike@rambler.ru
не надо приписывать другим то, чем занимаетесь сами.
Вполне допускаю, что ошибся. Но хамить не имеет смысла.
Получение в индикаторе данных со старшего таймфрейма
 
Цитата
s_mike@rambler.ru написал:
Цитата
Николай  Камынин написал:
 
Цитата
Andrei  написал:
 
Цитата
     s_mike@rambler.ru   написал:
Считать только на той свече, которая является последней.
  Я так и делаю и работает до начала нового дня, как только начинается новый день предыдущие линии остаются
 когда начинаются новые торги графики не рестартуются.
Поэтому у Вас все правильно. Но если вам мешают линии ранее нарисованные, то сотрите их, либо сделайте рестарт графика а в скрипте поставьте условие рисования линий по времени и дате.
ну как же не рестартуются?

смена торгового дня всегда приводит через процедуру очистки (даже колбек даден - oncleanup).

посмотрите на досуге, как утром в момент подключения все ваши графики становятся черными, ресетятся все экранные таблицы и начинается перестроение графиков.

я вам даже индикатор напишу, вот он:

function oncalculate(i)
message(tostring(i))
end

запустите его на ночь и посмотрите, как происходит пересчет графиков и не обманывайте никого.
откройте квик до начала торгов.
новые торги начнутся без изменения нарисованных графиков.
Но настаивать не буду, возможно Вы и правы - у вас графики стираются, но у меня - нет.
возможности и производительности LUA
 
и еще...
не знаю зачем Вам 300 стаканов.
Прием и сохранения информации из стаканов это самая затратная операция.
Если будете скальпировать то реально не более 3-5 инструментов.
Если вы хотите делать биржевой сканер, то его можно сделать по ТТП
возможности и производительности LUA
 
Цитата
investor investor написал:
Цитата
Николай  Камынин написал:
обновление множества стаканов вы  получите  в пакете, но информация в них будет не одновременная.  следующее обновление будет примерно не ранее чем через 0.1 сек.
Кроме того в винде квант для задачи не менее 10 мс т е квик  получит время процессора не ранее чем через 10 мс
Еще есть алгоритм Нейгла  который может дать вам задержку до 0.2 с
Успехов
спасибо за советы. я не до конца понял смысл поэтому кое-что переспрошу.
вторая мысль о том, что передавать во вне данные для анализа (а потом обратно для сделок) это медленно, мне понятна.

но вот что значит "обновление множества стаканов вы получите в пакете, но информация в них будет не одновременная. следующее обновление будет примерно не ранее чем через 0.1 сек." ???

я правильно понял что:

1) много стаканов (более 100) вы запрашивали, и Квик не виснит от этого?
2) почему пакет с "изменениями стаканов" не будет одновременный? я себе это так представляю: за последнюю 0.1 секунду из 300 стаканов обновился только один(или 2), поэтому он в данном пакете целиком и прилетит. когда обновятся следующие прилетят также и они. Само собой эти данные по времени будут чуть отставать от данных Квика в таблице текущих котировок.

Ваш ответ выглядит наиболее экспертным, поэтому надеюсь Вас не затруднит мне его чуть прояснить. спасибо.
Попробую ответить. Так как подробно отвечать очень долго, то я упрощенно объясню.
1) программа квик - это программа подачи вами заявки брокеру. Все остальное, что в ней реализовано - это бесплатное приложение.  (Это не я придумал, это разработчики так позицируют QUIK уже 20 лет)
2) все ваши заявки идут через сервер брокера для подтверждения лимитов а потом уже на сервер биржи.
Время обработки одной транзакции сервером брокера примерно 1 мс. Но есть очередь и в ней вы не всегда первый. Поэтому если Вы даже мгновенно получите стакан и мгновенно отреагируете, то на бирже будете не первым.
HFT роботы всегда будут впереди вас и будут вас иметь.
3) информация с биржи передается как бы двумя потоками. один - это общедоступная информация, т е то, что для всех одно и тоже - это и стаканы и потоки обезличенных сделок.
Эта информация передается с биржи с определенным интервалом , пакетами. Т е Вы в пакете получаете кучу всего, что произошло за время после предыдущего пакета.
стаканы с биржи передаются в виде изменений в стакане. как я понимаю, эти изменения перерабатывает сервер брокера и в каком-то виде передает в терминал квика.
-----------------------
Так как QUIK - это не программа для высокоскоростной торговли а лишь см п1, то все информация поступает сравнительно медленно. Мои измерения показали, что допустимо считать задержку принятой информации на величину не менее 0.1 сек.
Вот исходя из этой задержки и следует планировать работу торгового робота. В реальности задержка может доходить до 1-3 секунд.
-------------------------
Рекомендую не пытаться делать на квике HFT, а создавать программу, которая способно играть при любых задержках.
-----------------------
Пакеты обновляются на бирже несинхронно, поэтому сколько и когда обновятся сказать невозможно. Приходят заявки на биржу и они ставятся в очередь. Биржа одна , а игроков тысячи и среди них сотни HFT роботов, которые ставят и снимают завки меньше чем за 10 мс.
------------------------
Примерно так.
Получение в индикаторе данных со старшего таймфрейма
 
Цитата
Andrei написал:
Цитата
   s_mike@rambler.ru написал:
Считать только на той свече, которая является последней.
Я так и делаю и работает до начала нового дня, как только начинается новый день предыдущие линии остаются
когда начинаются новые торги графики не рестартуются.
Поэтому у Вас все правильно. Но если вам мешают линии ранее нарисованные, то сотрите их, либо сделайте рестарт графика а в скрипте поставьте условие рисования линий по времени и дате.
возможности и производительности LUA
 
обновление множества стаканов вы  получите  в пакете, но информация в них будет не одновременная.  следующее обновление будет примерно не ранее чем через 0.1 сек.
Кроме того в винде квант для задачи не менее 10 мс т е квик  получит время процессора не ранее чем через 10 мс
Еще есть алгоритм Нейгла  который может дать вам задержку до 0.2 с
Успехов
возможности и производительности LUA
 
Цитата
investor investor написал:
вопрос ко всем экспертам Lua

ранее с Lua/Qpile я не работал. Сейчас прочел хелп по обоим инструментам и пытаюсь оценить подойдут они мне или нет.

Цель: получать данные по большому количеству стаканов 300-500 инструментов. Причем по не самым ликвидным инструментам, так что обновленных значений по этой массе будет около 10 в секунду, с редкими всплесками до 100 в секунду. то есть сам по себе пул информации небольшой по меркам Квика.

для меня доступны два способа:
1) Получать данные по стаканам в LUA и отдавать данные по изменившимся инструментам в таблицу Квик оттуда через DDE во вне (без изменений данных)
2) Делать тоже самое но с обработкой (агрегированием данных стакана) в Lua и уже потом выводить во вне

Общие Вопрос насколько такой план осуществим? Что посоветуете?

Конкретные вопросы:
1) не начнет ли Квик тормозить, сразу после того как я закажу данные стаканов по 300-ам инструментам ( железо современное, но в хелпе написано, что через интерфейс Квик максимум 200 стаканов можно открыть)
2) Из Lua данные отдавать во вне можно только возвращая их в таблицы Квик и оттуда через DDE(ODBC)? или можно как-то напрямую,(как)?
3) Параметры из вне в Lua передают через текстовые файлы? или есть способ лучше?

Всем кто откликнется  заранее спасибо.
мечтать не вредно, но бесполезно.
Рекомендую считать время обновления информации 0.1...0.5  сек. Остальные расчеты сделайте сами
Корректная рекурсия, Как корректно оформить рекурсию в Lua (функция ссылается сама на себя)
 
так как такое решение просто напрочь забивает стек и грузит процессор по самые...
Корректная рекурсия, Как корректно оформить рекурсию в Lua (функция ссылается сама на себя)
 
на самом деле в теме написана не рекурсия, а бесконечный цикл вызова функции с ожиданием события подключения.
Это новон слово в программировании.  Я бы так не догадался сделать цикл.
Особенности функции Size
 
Цитата
s_mike@rambler.ru написал:
Кстати да, так можно.

Подставим костылик очередной. Только закешировать значения исходного графика при этом имеет смысл...

можно еще проще
есть время текущее
сравнивайте время свечи с ним (как говорится - используйте определение свечи) и принимайте решение
---------
еще вариант - не стройте графиков в пустоту.
Не занимайтесь иллюзиями - будущее предсказать невозможно, а воображать его бессмысленно.
Особенности функции Size
 
Цитата
s_mike@rambler.ru написал:
Здравствуйте.

Задача.

Индикатор. Необходимо выполнять определенные действия в oncalculate только на самой правой, текущей свече, игнорируя все предыдущие.

Очевидная попытка решения

function OnCalculate(i)
  if i == Size() then do_it() end
end

к успеху не приводит, если на графике построен какой-либо индикатор, сдвинутый вправо.

При этом Size() показывает увеличенное на величину сдвига число свечей.

Узнать величину этого сдвига возможности нет.

Вопрос. Как решить поставленную задачу?

Спасибо.
можно взять первую не пустую свечу справа Она и будет текущей
Поделитесь, кто как отслеживает факт "готовности свечи"?
 
и еще...
Свеча бывает пустая - т е в ней нет сделок. Но интервал для нее будет выделен.
Момент начала не пустой свечи в действительности равен времени первой сделки, но на графике и параметрах свечи это будет начало интервала.
Все это потому, что свечи - это упрощенное отображения сделок.
А упрощение можно делать до полного безобразия  кому и как вздумается.
Поделитесь, кто как отслеживает факт "готовности свечи"?
 
Цитата
Старатель написал:
Цитата
Николай  Камынин написал:
синхронизируйте время компа по атомным часам.свеча закрывается всегда точно по указанному кванту времени и выдается "задним числом"т е цена закрытия свечи (close) это цена последней сделки время которой не больше времени закрытия свечи.т е как пропикало закрыть свечу - лови подарок от сервера.можешь не ждать а вычислить сам - можешь даже обогнать.

Что даст вам такой фокус, если в начале нового интервала на вашем "синхронизированном" компе сервер пришлёт данные, относящиеся к предыдущему интервалу времени?
Априори нельзя  точно  сказать, когда закрылась свеча, пока не откроется новая.
Причём данные разных потоков не синхронизированы. Т.е., если терминал, например, получил обезличенную сделку с нового интервала, это ещё не значит, что на графике свеча закрылась. Более того, в QUIK обезличенные сделки с одной торговой площадки могут обогнать сделки с другой площадки.
Не проверял, но подозреваю, что на графиках та же история. Поскольку данные графиков формируются на стороне сервера по обезличенным сделкам, то теоретически возможен вариант, когда на одном графике (одной торговой площадки) ещё продолжает формироваться старая свеча, а на другом графике (другой торговой площадки) - уже открылась новая свеча.
Вы не правы.
Поясню в чем у вас ошибка.
---------------------------------
Начну с определения ,которое я написал ранее и поясню подробнее.
Что такое свеча?
Это сжатое отображение сделок на заданном интервале времени и переход от неравномерной временной шкалы к равномерной,.
-------------------------
Т е исходные данные - это поток обезличенных сделок т е цена и время сделки .
Чтобы уменьшить объем данных и отобразить эти данные графически применяются различные методы сжатия
------------------------------
один из них  - это свечи - которые по сути своей есть отсчеты четырех функций от исходного потока.
--------------------------------
Эти отсчеты отображаются на равномерной временной оси.
--------------------
Функции вычисляются следующим образом
поток сделок разделяется на интервалы таймы по оси времени.
Т е в каждый интервал попадут сделки время которых больше левой границы интервала но меньше или равно правой ( знак равенства ставим либо справа либо слева по желанию)
Далее в этом интервале берем первую сделку, последнюю , максимум и миниму.  
Вот и получилась свеча.
------------------------
Каким же образом определить закрытие свечи.
Очень просто. Это граница временного интервала. Сделки время которых за этой границей - это новая свеча.
именно так и определяет сервер биржи.
-----------------------------------
Таким образом, смотрим точное время и когда оно ровно границе - свеча закрылась. Это реальное время.
Если Вы синхронизируетесь с атомными часами и биржа тоже с ними синхронизируется.
То Вы точно знаете в какой момент реального времени свеча закрыта.
------------------------------------------------------------
После этого момента с сервера брокера к Вам поступят свечи, время которых может быть меньше чем время закрытия свечи
и вы их включите в закрытую свечу, но это уже будет не реальное время, а прошлое.
-------------------------------------------
С таким же успехом к Вам могут прийти данные вчерашнего дня, которые у вас отсутствовали и вы тоже их включите в прошлые закрытые свечи.
---------------------------
Поэтому Все сделки ,,которые  Вы получите после границы закрытия свечи  по атомным часам с временем меньшим чем реальное - покажут  Вам отставание Вашей псевдо реальной торговли от реальности.  
------------------------------------
Вы уж определитесь, что Вы хотите узнать -реальность или историю(прошлое).
От этого будет зависеть и способ определения времени закрытия свечи на Вашем компьютере.
Таблица в функцию. Lua
 
Цитата
Archie_ написал:
Цитата
Николай  Камынин написал:
Вы сами поняли что написали?У вас в определении функции Restore() нет формальных параметрова в ее вызове Restore(slot_2) появляются
Я то понял, что написал, а вы если помочь не можете, то и не паясничайте!!!
Извините, что в функцию в примере параметр забыл вписать, но вы и так прекрасно все поняли, что я написал, а если не поняли, то так понятней?
Код
   function  Save (slot)          
     local   t   =   {}
    _G[slot]   =   t
     for   i   =   1  , количества_чего_то   do  
        t[i]  =  Get_Моя_Функция(которая сохраняется)
     end   
 end   

 function    Restore (Slot) 
     local   t   =   _G[Slot]
     for   i   =     1  ,   #  t   do    
        Set_Моя_Функция_которая_восстанавливает(t[i])
         --t[i]  =   nil   -- если надо очистить  
     end   
 end   

  
  
 
Код
  Save(slot_1)    
   код
Save(slot_2) 
   код
Restore(slot_2)
   код
Save(slot_3) 
   код
Restore(slot_3) 
   код 
Restore(slot_1)   
так никто и не понял что вы хотите сделать.
Пока не объясните что надо словами, а не вашими примерами
------------
могу лишь подсказать что в луа таблицы не копируются я передаются указателем поэтому предположу что ваша задача решается проще, но понять ее из ваших примеров невозможно.
Таблица в функцию. Lua
 
Цитата
Archie_ написал:
Решил вот так:
Код
   function   Save (slot)     
     local  t  =  {}
    _G[slot]  =  t
     for  i  =   1 , количества_чего_то  do 
        t[i]  =  Get_Моя_Функция(которая сохраняется)
     end  
 end  

 function   Restore () 
     local  t  =  _G[Slot]
     for  i  =   1 ,  # t  do   
        Set_Моя_Функция_которая_восстанавливает(t[i])
        t[i]  =   nil   -- если надо очистить 
     end  
 end  
  
 
Код
  Save(slot_1) 
   код
Save(slot_2) 
   код
Restore(slot_2)
   код
Save(slot_3) 
   код
Restore(slot_3) 
   код 
Restore(slot_1)  
Вы сами поняли что написали?
У вас в определении функции Restore() нет формальных параметров
а в ее вызове Restore(slot_2) появляются
---------------------------------------------
" это не рыба, не заливная рыба, это стрихнин какой-то"
Многопоточная работа из dll на C с Lua
 
Цитата
Павел Bosco написал:
Добрый день, столкнулся с такой проблемой в последнее время:
думал чтобы поменьше грузить Quik, запустить внутри lua, через средства C отдельный поток std::thread и в нём спокойно обрабатывать запросы стороннего приложения, некий сервер квик-данных реализовать.

Но наткнулся на неприятную проблему, несмотря на то что потковая функция, pipe_thread спокойно работает, если её исполнить в основном main потоке (там тот же самый цикл по while (!stopped)), когда я запускаю её в отдельном потоке, я вижу как квик начинает тормозить: медленно открываются все окна, время начинает драматически отставать, и вообще происходят странные вещи: открытый квик и открые часы Windows 10 начинают "замирать", т.е. показывают секунды 1, 2, 9, 15, вместо 1, 2, 3, 4 ...

Может быть кто-нибудь сталкивался с этим? Не было ли в последней версии каких-то критических изменений связанных с синхронизацией и многопоточностью?
Сейчас код выглядит так:
Код
  int main(lua_State  * L){
   //// тут мы создаём новый state для отдельного потока
   //// см https://kristianrumberg.wordpress.com/ 2010 / 11 / 21 / 135 /
   //// https://stackoverflow.com/questions/ 17817452 /lua -  5  -  2  -  2  - broken - threading - system/ 17818481  #  17818481 
   //// https://forum.quik.ru/ message s/forum10/ message 10476/topic212/ #  message 10476

   //lua_gc(L, LUA_GCSTOP,  0 );
   //lua_State  * tL  =  lua_newthread(L); // здесь tl кладётся в т.ч. стек L
   //int thread_L_ref  =  luaL_ref(L, LUA_REGISTRYINDEX); // создаётся ссылка на объект на верхушке стека
   //lua_pushvalue(L,  -  1 );
   //lua_gc(L, LUA_GCRESTART,  0 );

   //stopped  =   false ;
   //std::thread pipeThread(pipe_thread, tL);
   //lua_function < lua_Number >  lua_Sleep(L,  "sleep" );

   // while  ( ! stopped) {
   //   lua_Sleep(  1000  );
   //}

   // pipeThread.join ();
   //lua_unref(L, thread_L_ref);
   pipe_thread(L);
    message (L,  "QPIPE: скрипт остановлен" );

    return   0 ;
}



  
Если закомментировать вызов pipe_thread и расскомментировать код, который создаёт отдельный поток, то будут тормоза.
Может быть кто-нибудь решал похожую задачу?
давно это было. делал доп потки. ничего не тормозило.
Если не читали,
то советую проштудировать
Джеффри Рихтер .Создание эффективных WIN32 приложений с учетом специфики 64 разрядной версии Windows.
Нужна помощь в прочтении кода на LUA
 
полагаю, что это либо разновидность скользящего,
либо зигзага,
с заглядыванием в будущее.
Поделитесь, кто как отслеживает факт "готовности свечи"?
 
Цитата
Павел Bosco написал:
Если кто пользуется CreateDataSource и свечами из него, как вы решаете задачу, чтобы максимально быстро забрать самую последнюю **законченную** свечу?
Имею в виду, в datasource поседняя свеча всё время меняется, как узнать что она уже "точно сформировалась"?
Есть ли такая возможность? Если нет, может нам попросить разработчиков наконец-то сделать её?
все очень просто.
синхронизируйте время компа по атомным часам.
свеча закрывается всегда точно по указанному кванту времени и выдается "задним числом"
т е цена закрытия свечи (close) это цена последней сделки время которой не больше времени закрытия свечи.
т е как пропикало закрыть свечу - лови подарок от сервера.
можешь не ждать а вычислить сам - можешь даже обогнать.
Пример заявки тэйк-профит и стоп-лимит
 
Цитата
AlexanderKk написал:
дайте пример тэйк-профит и стоп-лимит
transaction = {
ACCOUNT=.....
}
к сожелению, в документации не нашёл
см документацию по квику, а не по QLUA
Lua и dll на C
 
Цитата
Let_it_go написал:
Написал функцию так, чтобы цикл крутился внутри dll:
Код
  static int forLua_AddCircle(lua_State  * L) {
   double d1  =  luaL_checknumber(L,  1 ); //с чего начинать цикл
   double d2  =  luaL_checknumber(L,  2 ); //количество итераций
   double r;
   double i;
    for  (i  =  d1; i  <  =  d2; i +  + )
   {
      r  =  i  +  i;
   }
    return ( 1 );
}  

Код
  package.cpath  =   "C:\\runfast.dll" 
 require ( "runfast" )
iterations =  100000000 
 function   main ()
   start =  os.clock ()
    for  i =  1 ,iterations  do 
      r  =   runfast.AddTwoNumbers (i, i)
    end 
   finish =  os.clock () - start
    message  ( "C dll:"  .. tostring(finish),  1 )
   start =  os.clock ()
    for  i =  1 ,iterations  do 
      r  =  i + i
    end 
   finish =  os.clock () - start
    message  ( "Lua:"  .. tostring(finish),  1 )

   start =  os.clock ()
   r  =   runfast.AddCircle ( 1 ,iterations)
   finish =  os.clock () - start
    message  ( "C dll circle:"  .. tostring(finish),  1 )   
 end   
Результат:


dll с циклом всех победила.
разница в том что в lua данные в виде структур
если хотите оптимизировать луа скрипты, то следите чтобы типы не смешивались.
-------------------
если хотите ускорить вычисления то сделайте столько протоков сколько у вас ядер ,а ядер поставьте по числу инструментов
--------------------
если хотите  ускорить торговлю на бирже,  т е сделать HFT робот, то откажитесь от квика и переходите на прямое подключение к бирже.
-----------------------
Вы не там ищите ускорение,
так как тормоз в каналах связи,
в очередях у сервера брокера
и задержках рассылки биржевой информации сервером брокера
 
Lua и dll на C
 
Цитата
Лже-Дмитрий написал:
Подскажите, пожалуйста, какие накладываются ограничения в QLUA по сравнению с обычным LUA 5.1?
Имею в виду - кол-во local переменных, кол-во и размер пользовательских таблиц, кол-во модулей, размер модулей, и т.д.

Поясню, в чём проблема.
кусок кода, вызываемого по нажатию кнопки из моей .dll:
...
if (code_id == 'process_get_order_list')
then
  -- local test_tbl_ = {}
  local str_tbl_ = {}
  str_tbl_['000'] = '111'
  str_tbl_['111'] = '000'
  return 'ok',str_tbl_
end

Код стабилен. Если раскомментировать строку  'local test_tbl_ = {}' , QUIK рушится с exception'ом, либо сразу после вызова, либо при попытке завершения работы скрипта. Понятно, что сам по себе такой код
безвреден и крешиться не может, но программа разрослась, состоит уже из 8 модулей скучей функций и таблиц.

Отсюда и вопрос: каковы ограничения по сравнению с обычным LUA 5.1? Дело ещё в том, что на мной написанном имитаторе (Borland C++ 6.0 с/без Code Guard, LUA 5.1) тот же самый код стабилен.
Ваш вопрос не корректен.
QLUA - это библиотека,в которой функции для доступа к хранилищу данных на терминале и посылке приему сообщений от сервера брокера.
для того чтобы функции этой библиотеки могли работать   в квик внедрена VM LUA 5.1  
Таблица с ценами бумаг из индекса МосБиржи, Готов оплатить скрипт на Lua, который бы строил таблицу с ценами бумаг из индекса МосБиржи (включая исторические данные о цене)
 
Цитата
Ilya написал:
Мне нужен будет исходный текст.
могу сделать по подробному тех заданию с указанием вами цены и сроков.
С исходным текстом будет на порядок дороже.
Тайминг функциональности QUIK из луа, как правильно замерить
 
Цитата
BlackBoar написал:
Цитата
   s_mike@rambler.ru написал:
ваш запрос к терминалу на получение стакана ставится в терминале в очередь на обработку. И наверняка с низким приоритетом.
Кстати. Я на самом деле не могу ничего возразить ибо понятия не имею что в недрах терминала происходит.
Но вот тот факт что время отклика почти прямо пропорционально размеру стакана наводит на мысль что основные накладные расходы таки при его формировании.
Мысль неконструктивная, способа послиять на формирование стакана не видно. Просто любопытно.
относительно стакана могу предположить следующее
Так как данные стакана с биржи передаются в виде изменений стакана, то в терминале стакан хранится очевидно в виде списка.
Вот из этого списка и формируется таблица луа.
--------------------------
Ваши замеры близки к истине. Попробуйте еще измерить для сравнения время пустого цикла на луа
-----------------------
Но эти замеры мало что дают для оценки быстродействия робота.
Проблема в том что данные с сервера QUIK приходят блоками в которых собирается инфа за некоторое время.
Возникает вопрос на сколько реально полученные данные запаздывают от их появления на бирже.
Собственно успешность HFT робота и зависит от этого запаздывания.
Попробуйте оценить это время и сравнить его со скоростью обработки полученных данных.
% lua hello.lua
 
в винде запустите cmd
и в нем вызывайте lua
% lua hello.lua
 
Цитата
Let_it_go написал:
Хочу систематизировать знания по Луа, читаю книгу Иерузалмиски
Сразу какие-то непонятки:


у меня возникает такая проблема. Почему?


файл лежит в корне луа там где lua.exe

Для работы с луа советую поставить SciTE.
Это текстовый редактор, который написан на луа.
Позволяет легко писать и запускать скрипты на луа и не только.
Есть сборки SCiTe со встроенным отладчиком.
Защита luac-кода от декомпиляции
 
Я вообще сомневаюсь, что на форуме есть у кого-то действительно работающий робот с очень ценным алгоритмов, который надо шифровать.
Поэтому не заморачивайтесь этой проблемой раньше, чем ваш робот проработает год самостоятельно.
Ну а впаривать буратинам игрушечных "прибыльных" роботов можете без шифрования.
Защита luac-кода от декомпиляции
 
Цитата
Денис написал:
Цитата
Николай  Камынин   написал: Когда-то  делал защиту для скриптов на QLUA на уровне запуска задания и подключения dll. Такую защиту снять сложно.
Посмотрите в эту сторону.
Николай  Камынин  , спасибо за совет! Такая защита, с dll, уже реализована. Но я понимаю, что при долгой и кропотливой работе данный скрипт взломать возможно.
Хотелось бы усилить защиту на уровне lua-кода, пусть даже обфусцированного. Чтобы его нельзя было привести к исходному коду.
Нужно понять, какую lua-структуру не могут восстановить декомпиляторы? Есть мысли?
Хм, Вы способны взломать 128 бит код защиты?
тогда просто поставьте ключ в 1024 бит.
Я про такую защиту вам написал.
Вы ее уже реализовали?  
Нашел баги, если вы будете каждые 10 мск пересчитывать число строк в таблице
 
Цитата
Boris Litvinov написал:
Цитата
Алексей Ч   написал:
Алексей Ч
Что та похожее и происходит. То что в моменте, а этого для бота более чем достаточно, транслируют пустую таблицу. При этом идет торговая сессия это очевидно! То что это происходит на серверах КВИК а не других платформах, так же доказано!
Повторюсь, если это кому то будет нужно, и для тех кто пишет подобные ТС. Этот костыль придется прикручивать не зависимо от языков и приводов. Иначе  ваши позиции будут скидываться, и перенабираться вновь!
Проблема второй день теста, решина! Но то что speep 2000 давит при нулевой позе фьюча и по другому решить не смог это печаль!
Но не не печальнее пере набора позы!
Всем спасибо!
давно это было, но я не использую sleep в потоках в том числе и в main QLUA.
попробуйте использовать ожидание событий в потоке а не sleep.
подробнее, как это сделать см книгу Джеффри Рихтер( для тех, кто не знает)
lua наследование, lua ооп
 
https://habr.com/post/182018/
Глобальные таблицы Lua на C++
 
Цитата
Let_it_go написал:
На stackoverflow ответили:
Надо использовать map
Код
   # include  < iostream >  # include  < map > 
 # include  < string > 

int main ()
{
  std::map < std::string, int >  period_muvinga;

  period_muvinga[ "GAZP" ]  =   23 ;
  period_muvinga[ "SBER" ]  =   19 ;
  period_muvinga[ "GMKN" ]  =   20 ;

  //  Iterate over all the key,value pairs  in  map
  //
   for  (const auto  &  p: period_muvinga)
    {
      // Extract key from pair
      std::string ticker  =  p.first;

      // Extract value from pair
      int period  =  p.second;

      std::cout  <  <  ticker  <  <   " = "   <  <  period  <  <  std::endl;
    }
   return   0 ;
}  

Для других целей - более сложных - мне остаётся не понятным в какой части dll объявлять этот массив.
Замысел вкратце.
Объявить массив map с названием average_bid. Вопрос где это делать?
Ключи массива - тикеры акций. объявляются вместе с массивом.
Значения массива - векторы, накапливающие биды за 100 колбеков OnQuote. Это я умею. Цель - посчитать среднее арифметическое бидов за 100 приходов колбека.
---
Использовать OnInit пока не хочу, потому что у меня в нём и так уже в Луа 50 строчек кода, объявляющих таблицы и переменные.
Вы удивитесь, но с большой вероятностью у вас обработка таблиц будет медленнее, чем в луа.
Причина тому в индексе У вас - стринг, а в луа хеш.
lua наследование, lua ооп
 
https://habr.com/post/259265/
Нашел баги, если вы будете каждые 10 мск пересчитывать число строк в таблице
 
Вы не поверите, но понять что же Вы нашли я не смог.
-----------------------
Давайте сначала отделим мух от котлет
--------------------
1) что такое 10 мск (мск - это что?) московское время международный стандарт или что-то другое?
--------------------------
2) Вы очевидно знаете, что для луа официально есть только C (CИ ) а не С++ и тем более не С#.
Поэтому для начала либо рассказывайте какие обертки вы применяете и как вы их проверили на глюки.
-------------------------------
3) Вы очевидно знаете, что данные приходят блоками При этом могут приходить и пропущенные строки.
Тот факт что у вас на тесте работает а в реале глючит намекает на такую возможность
-------------------------------------
4) Вы знаете, что в интернете все приходит асинхронно и потом склеивается пакет
-------------------------------
5) Вы знаете, что на компе используется алгоритм Нейгла и он может вам создавать плавающие задержки
-------------------------------
6) Вы знаете, что квик вообще работает на теме минимум 10 мс (миллисекунд) Этот тайм обычно используется как минимальный квант для задач.
------------------------------
Если Вы этого не знаете, то примите к сведению
И расскажите медленно что Вы и как тестируете и почему решили что это баги КВИКА а не вашей программы.
Поместить колбек в dll
 
Цитата
Let_it_go написал:
Цитата
Алексей   написал:
OnQuote()
   runfast.OnQuote()
end
Спасибо за ответ, но этот вариант не подходит. При каждом срабатывании колбека скрипт будет обращаться к dll. Луа в КВИК встроена настолько кривобоко, что это получается долго.
Луа:
Код
      for  i =  1 , 10000000   do      
          r  =  i + i
    end   
Луа+dll на Си++
Код
      for  i =  1 ,iterations  do 
      r  =   runfast.AddTwoNumbers (i, i)   
   end   
Второй код работает в 3,6 раза медленнее, чем первый из-за постоянного перекидывания данных из Луа в Си.
Ваш вариант предусматривает те же самые задержки.

Мне нужно колбек OnQuote полностью упаковать внутрь dll. Вызвать его один раз, и потом он крутится только внутри dll
вообще-то это прикольно.
Вы написали пример из разряда "как не надо писать программы"
В вашем примере операция сложения занимает промерно 1% всего времени
Если вы решили переносить в си
то очевидно что надо переносить весь цикл
в си вместо сложения использовать сдвиг
тогда и будет быстрее.
---------------------------------------
Что же касается вызов колбека в СИ то это не очень вам поможет так как это в квике делается достаточно эффективно.
Надо оптимизировать обработку стакана, так как это работа с таблицами поиском в них заменой и уделением И вот там Вы можете существенно ускорить.
-----------------------
 
Стек при 2 функциях (dll)
 
риск возникает при одновременном обращении потоков к одним и тем же данным да и то если эти данные изменяются потоками.
Возникновение таких проблем полностью зависит от того, как Вы написал эти библиотеки.
Поэтому никто кроме Вас не знает - есть у Вас эти риски или нет.
Судя по вопросам - скорее есть чем нет.
Стек при 2 функциях (dll)
 
Цитата
Let_it_go написал:
Уточнение. Функции длл-библиотеки могут вызываться из разных потоков квика, то есть есть риск одновременной работы с ними, а значит и со стеком
В одновременном использовании кода библиотек потоками риска нет
Защита luac-кода от декомпиляции
 
Цитата
Денис написал:
Здравствуйте!
Мне встречались luac-скрипты которые не приводятся к исходному виду декомпиляторами. Декомпиляторы просто формируют новый пустой lua-файл.
При этом, обычные запакованные luac-скрипты этими же декомпиляторами (6 штук) довольно точно распаковываются.

Вопрос простой, что нужно добавить в lua-код чтобы стандартные декомпиляторы не смогли его разобрать? Или, как сделать так, чтобы декомпиляторы возвращали пустой файл, вместо исходного кода?

P.S. Я слышал что декомпиляторы не умеют работать с динамическими таблицами. Возможно, в этом кроется решение.

Эксперты, помогите пожалуйста решить задачу.
любую защиту можно снять.
Когда-то  делал защиту для скриптов на QLUA на уровне запуска задания и подключения dll. Такую защиту снять сложно.
Посмотрите в эту сторону.
Опционный робот на LUA под Квик, Простой опционный робот
 
Цитата
Дмитрий написал:
Добрый день!
Не подскажите где можно найти опционного робота на Луа под Квик.
Алгоритм след-ий.
Выбираешь Инструмент, дату экспирации.
Прописываешь роботу уровень, соответственно выбираешь Пут или Колл, и он на этом уровне покупает заявку по стакану (желательно что бы был стоп по стакану не более стольких то пунктов.).
Так же выбор купить или продать фьюч. для хеджа.
Ну и что бы можно было закрыть позицию.

В интернете что-то не нашел подходящего.
В интернете есть лишь игрушки для буратин, но буратины в опционы не лезут,
так как даже они понимают, что в опционах им будет кирдык.  
Поэтому разводящие таких роботов не рекламируют и бесплатно не раздают, так как нет выгоды.  
Коммерческий вопрос., Сколько стоит написать скрипт?
 
Цитата
Иван написал:
Здравствуйте. У меня вопрос совсем не технический. А вот сколько это стоит написать скрипт? И вообще - по какому принципу оценивается стоимость программы? Кто знает - подскажите пожалуйста. Заранее всем спасибо.
Ответ на Ваш вопрос очень простой.
Ровно такой же, как ответ на вопрос: -Сколько стоит автомобиль?  
Срабатывание OnQuote
 
Цитата
Let_it_go написал:
Цитата
Николай  Камынин   написал:
----------------
Оптимизируйте прием данных стакана в колбеке тогда не будет видимого торможения
под оптимизируйте вы что имеете в виду?
-переписать логику на Си
-перенести логику в main
-оптимизировать расчёты внутри колбека или что то другое?

Я уже многое сделал, например стал отфутболивать слепки стакана, если изменения произошли в дальних котировках. Мне требуются только ближайшие. Плюс я думаю просто игнорировать избыточные слепки, которые являются излишними и не успевают быть обработанными. Это временно решит проблему пока я напишу dll под Си.
Рекомендую хронометрировать вашу программу обработки стакана а после этого решать что и как изменить.
Возможно Вам достаточно использовать лучшую цену?
Вы измерьте время прихода данных и время их обработки.
После этого Вы возможно вообще измените свой подход к обработке данных.
И зачем Вам 60 стаканов.Если Вы делаете HFT то ваш робот по сравнению с профессиональными будет как черепаха в сравнении с самолетом.
А если Вы делаете обычного робота то стаканы практически бесполезны.
 
Страницы: Пред. 1 ... 53 54 55 56 57 58 59 60 61 62 63 ... 81 След.
Наверх