Вот вам обещанный код, C(ind-M+i) - берет Close свечи с заданным номером, никаких идентификаторов не надо, если вы конечно этот код в виде индикатора делаете, а не внутри скрипта:
Код
local Sp = 0
for i = 1 ,M do
Sp = Sp + C(ind - M + i)
end
Sp = Sp/M
local stddev = 0
local p_c = 0
for i = 1 ,M do
p_c = C(ind - M + i)
stddev = stddev + (p_c - Sp) * (p_c - Sp)
end
stddev = math.sqrt (stddev/M)
Спасибо! И это в квике будет работать?
а я клоусы получаю оч сложно :) :
Bars1 = getNumCandles(Settings.aChartID1) tChart1, Num1, Legend1 = getCandlesByIndex(Settings.aChartID1, 0, 0, Bars1) и вот сам клоус tChart1[index-i].close ну и в цикле гоняю это..
и я задолбался везде идентификаторы проставлять...
блин , а где почитать нормальный синтаксис к квику по луа? В справке, что идет к квику ничего ж нет нормального, кто ее писал. Ни описаний фнкций - ничего по сути, как в нормальных языках
нее, в экселе картинка другая, так тут и трендовый какой-то, единственное совпадение , что есть слово среднеквадратичное отклонение:). Кароче, забубенил сам, вроде получилось. Но если кто кусочек кода выложит, буду признателен:) .
Если пришлете картинку из Excel и Ваши формулы расчета, то могу сравнить со своими и прислать кусочек кода.
Картинку сейчас сложно сделать. ну так это просто рисуется СКО. Формула для нее такая, к примеру для 10ти периодов и для Клоузов: Корень из (Суммы квадратов разности CL(i) - CLср(10) деленное на 9 периодов) или SQRT(SUMM ((CL(i) - CLср(10))*(CL(i) - CLср(10)))/9) , ну стандартная такая формула для СКО
Это для Close, а вы изначально написали про Min|Max, что меня немного привело в замешательство, т.к. используются сразу 2 значения свечи, вот мне и интересно, как вы считаете СКО сразу по 2-м значениям.
Для Мин свое СКО для Макс свое. У меня вопрос - то был в коде, с циклами еще не работал, но оказалось все проще, а вы случайно не в курсе, как без идентификатора работать, чтобы сразу бросил индикатор на график и он построился? Сейчас мне приходится везде идентификаторы уникальные проставлять, что напрягает, машки же всякие и болинджеры ничего не требуют. добавил и все.
Вот вам обещанный код, C(ind-M+i) - берет Close свечи с заданным номером, никаких идентификаторов не надо, если вы конечно этот код в виде индикатора делаете, а не внутри скрипта:
Код
local Sp = 0
for i=1,M do
Sp = Sp+C(ind-M+i)
end
Sp = Sp/M
local stddev =0
local p_c = 0
for i=1,M do
p_c = C(ind-M+i)
stddev = stddev+(p_c-Sp)*(p_c-Sp)
end
stddev = math.sqrt(stddev/M)
нее, в экселе картинка другая, так тут и трендовый какой-то, единственное совпадение , что есть слово среднеквадратичное отклонение:). Кароче, забубенил сам, вроде получилось. Но если кто кусочек кода выложит, буду признателен:) .
Если пришлете картинку из Excel и Ваши формулы расчета, то могу сравнить со своими и прислать кусочек кода.
Картинку сейчас сложно сделать. ну так это просто рисуется СКО. Формула для нее такая, к примеру для 10ти периодов и для Клоузов: Корень из (Суммы квадратов разности CL(i) - CLср(10) деленное на 9 периодов) или SQRT(SUMM ((CL(i) - CLср(10))*(CL(i) - CLср(10)))/9) , ну стандартная такая формула для СКО
Это для Close, а вы изначально написали про Min|Max, что меня немного привело в замешательство, т.к. используются сразу 2 значения свечи, вот мне и интересно, как вы считаете СКО сразу по 2-м значениям.
Сергей написал: Всем доброго дня! Подскажите ,как построить Среднеквадратичное отклонение за заданный период по ценам Max и Min. Не пойму, как работать с массивами в lua, индикатор такой нужен. Может кто-нибудь подсказать кусок кода с рачетом на LUA?
нее, в экселе картинка другая, так тут и трендовый какой-то, единственное совпадение , что есть слово среднеквадратичное отклонение:). Кароче, забубенил сам, вроде получилось. Но если кто кусочек кода выложит, буду признателен:) .
Если пришлете картинку из Excel и Ваши формулы расчета, то могу сравнить со своими и прислать кусочек кода.
Сергей написал: Всем доброго дня! Подскажите ,как построить Среднеквадратичное отклонение за заданный период по ценам Max и Min. Не пойму, как работать с массивами в lua, индикатор такой нужен. Может кто-нибудь подсказать кусок кода с рачетом на LUA?
Александр М написал: В какой кодировке у вас файл, когда вы туда копируете данный текст? Должна быть Windows-1251
Большое спасибо за правильно подсказанное направление! В отдельных файлах кодировка не выбрана, в большинстве стоит UTF8 почему-то. Это и создавало проблему! Даже не могу понять откуда такая засада возникла
Notepad++ автоматически кодировку подбирает, что ему покажется, ту и подставит, лучше всегда проверять при создании нового файла скрипта, дальше он уже сам не меняет.
Александр, можете сообщить с какой именно таблицей проблема? Например таблица "Клиентский портфель" обновляется исходя из заданных настроек. Пункт меню Система - Настройки - Основные настройки - Торговля клиентский портфель. Обновлять через....
Если, это не клиентский портфель, то какая именно таблица. Если есть возможность, то выложите видео данного эффекта. Опять же без скрипта найти проблему будет сложно.
Я имею в виду свои таблицы пользовательские, которые я создал через AllocTable. Никаких ошибок не выдается, скрипт не вылетает и не тормозит, сделки осуществляются, т.е. идет нормальная работа робота, но по 1 таблице только после проведения мышкой над таблицей она сразу показывает актуальные значения во всех полях, т.е. у нее явно буферизуется где-то. Но происходит это только с 1 таблицей из 4-х имеющихся в скрипте.
Может есть какие-то ограничения на число одновременно используемых таблиц или есть команда, которая позволяет насильно обновить данные в таблице по идентификатору?
Непрерывного обновления, которое забивает работу по прорисовке таблицы, я в коде не обнаружил (грешил на это).
Александр М написал: Скрипт предоставить не могу, это полноценный робот и моя интеллектуальная собственность.
есть вариант попробовать вычленить из него проблемный участок кода и прислать только его
В том то и проблема, что "проблемного участка" не вижу, у меня несколько тысяч строк и из разных мест по определенным событиям обновляются определенные поля в таблице. Я уже весь код прошерстил, остальные таблицы обновляются абсолютно по тем же принципам (в этом же коде) и никаких зависаний по другим таблицам нету.
Александр М написал: Скрипт формирует несколько таблиц и время от времени обновляет поля в этих таблицах. 3 таблицы обновляются сразу после SetCell, а четвертая с задержкой (или надо мышкой провести над ней или тыкнуть в нее, тогда данные в ней сразу обновляются). В коде обновление по всем таблицам абсолютно одинаковое. В чем может быть засада?
Добрый день.
Для изучения вопроса потребуется полный скрипт на котором воспроизводится проблема, версия терминала QUIK, а также какая именно таблица обновляется с задержкой.
Скрипт предоставить не могу, это полноценный робот и моя интеллектуальная собственность. Версия QUIK 7.12.1.10, но такое поведение было и в 7.11 как минимум. Напишите хотя бы, в какую сторону в принципе смотреть. Я не начинающий скрипто-писатель, у меня в портфеле куча скриптов и везде проблем с таблицами нету.
Скрипт формирует несколько таблиц и время от времени обновляет поля в этих таблицах. 3 таблицы обновляются сразу после SetCell, а четвертая с задержкой (или надо мышкой провести над ней или тыкнуть в нее, тогда данные в ней сразу обновляются). В коде обновление по всем таблицам абсолютно одинаковое. В чем может быть засада?
Let_it_go написал: Господа, никогда не писал индикаторы на Луа. Прошу дать совет. Мне нужен график рубле-бочки. Формула: рубле-бочка=(фьючерс на доллар-рубль умножить фьючерс барреля в долларах)/1000 То есть индикатор простой, но строить его надо по данным двух графиков
Обычный индикатор, берущий данные с 1 графика я сделать могу, взяв за шаблон коды С.Горохова, а вот как брать данные с двух графиков, не знаю.
У меня аналогичный индикатор есть по произвольной формуле считает данные 2-х инструментов, тоже при переинициализации приходится Применить нажимать, так что присоединяюсь к вопросу.
Константин написал: Добрый день! Нигде не нашел Gator Oscillator для Quik. Если есть у кого, поделитесь пожалуйста. Если нет, то заказал бы за копеечку.
Всем профита.
Добрый день! Я также пишу индикаторы на заказ, на моем сайте довольно большая коллекция, если еще есть желание, напишите.
Виктор Столетов написал: Вопрос: можно ли просто прочитать все строки таблицы текущих торгов подряд без задания class_code и sec_code и определить параметры param_name?
Такой возможности не предусмотрено.
Цитата
Виктор Столетов написал: Приходится для sec_code создавать массив километровой длины типа sec_code ={"ALRS","AFLT", ...,"FEES"}.
Есть функция getClassSecurities которая вернет список инструментов в классе. Еще есть getClassesList которая вернет список классов
А как посмотреть только те инструменты, которые я лично вывел в таблицу текущих торгов, а не все, которые потоком идут через заказ данных?
Юрий Балашов написал: Хочу написать робота-арбитражера для парного трейдинга с акциями и фьючерсами, главные требования: 1. Скорость работы – максимально быстрая скорость постановки, снятия и перестановки заявки при изменении цены в стакане – желательно не более 0.1сек. 2. Отсутствие торможения – отсутствие замедления и сбоев в работе при выставлении заявок по 15-20 парам инструментов, при отслеживании до 40-60 пар (отслеживание возможно не в режиме реального времени, а периодически – 1раз в 1-5 минут). Не нужно: никаких графиков, индикаторов, проверки на истории, возможностей постановки заявок вручную. Собственно такой робот у меня есть (написан мной на Delphi), но он работает через передачу по ODBC в базу данных и затем чтения из нее, что замедляет постановку заявки более чем на 1.5 секи и при работе более чем с 8-10 парами начинаются сбои в постановке/снятии заявок. Вопрос: возможно ли написание подобного робота, отвечающего указанным выше требованиям на, Lua или Lua + внешняя программа (С#, Delphi)? Поскольку Lua не знаю совершенно, не хотелось бы оказаться в положении человека изучившего Lua, написавшего на нем робота и вдруг выяснившего, что скорость постановки заявки будет медленная и работать можно будет только с 2-3 парами инструментов :).
Скорость работы в Lua достаточна для Ваших запросов. Собственно большинство коннекторов между QUIK и сторонними продуктами написано на Lua. Дальше все зависит от оптимальности кода, Интернет-канала, серверов брокера и т.д. Думаю, что основное время будет потрачено не на постановку заявки, а на отслеживание их одновременной отработке в арбитражной паре, проверке, что часть контрактов по 1 инструменту не купилась, пока вторую заявку снимаете и другие пограничные ситуации.
Алексей Ч написал: У меня данная штука запустилась. Накидал все везде))) Данным ботом пользуюсь уже с месяц. В файле telegram_settings.lua нужно ввести настройки своего бота. Сам бот тут . Там есть что еще допиливать...
Тоже запустился, не успел прочитать Ваше сообщение, но за архив спасибо. В результате тоже накидал dll и lua файлы. Другим людям конечно весь этот пакет не дашь, особенно смущают lua файлы. С Вашим ботом проблем ка раз нет, там все прозрачно и легко адаптируется по собственные нужды, основная проблема у меня была в принципе его запустить в качестве теста.
У Вас тоже запускается скрипт больше минуты (после запуска реагирует на команды быстро, выходит тоже быстро, тормозит только запуск)?
Если кто ещё думает о получении уведомлений от квика о сделках, то вот моё решение - это мессенджер Телеграм. По-моему, удобно - клиент есть для всех мобильных платформ, бесплатно. В общем сплошные плюсы.
Принцип такой: Создаем бота в телеграм: https://core.telegram.org/bots В квике запускаем lua-скрипт, который от имени бота шлёт сообщения о заявках и/или сделках, на указанный в настройках скрипта аккаунта в Телеграм. Вот ссылка на то, как я это реализовал для себя: https://github.com/gihar/quik-telegram-bot.git
Добрый день!
Наткнулся на Ваше сообщение с реализацией отправки сообщений из QUIK в Telegram. Попробовал повторить, но никак не получается. Насколько я понял, требуется еще файл lua-bot-api.lua, потом Ваши dll. Дальше потребовался файл ssl.lua, далее https.lua и multipart-post.lua, потом json.lua Но все равно в результате ругается на: "error loading module 'ssl.core' from file '.\ssl.dll': Не найдена указанная процедура." Я пробовал подставлять другие dll бОльшего размера из других источников, где они представлены в скомпилированном виде, но итог 1. Не могли бы подсказать, какой минимальный перечень файлов необходим, чтобы запустить именно Ваш скрипт из QUIK и где их взять?
Optimus1 Optimus1 написал: Это я его просто привел в таком уррощенном виде, чтобы не загроиождать тему, смысл вопроса именно в присвоении переменной N. Почему при сробатывании первого условия формула N= N+1 (где N в начале скрипта обозначено как 0) работает и выдает 1, а при сроботывании второго условия после первого, в формуле N= N+1, N опять имеет значение 0, а не уже 1, ведь ранее у N была прибвлена 1.
Вот в чем вопрос.
У Вас приведен явно кусок кода. Разберитесь, где у вас стоит инициализация переменной N. Она должна быть глобальной и инициализироваться 1 раз.
Сергей Николаев написал: Действительно загрузилась! Кто бы знал что ему нужно! Большое спасибо!
Насколько быстро вся эта конструкция работает Вы проверяли?
Если запустить несколько скриптов одновременно и каждый будет обращаться к Mysql, то все скрипты работают корректно (желательно проверить одновременное обращение к БД)?
Александр М написал: В 1 момент времени я увижу заявки - сделки только 1 счета, а мне надо одновременно видеть на 1 графике результаты по 1 счету, а на другом результаты по другому счету, т.к. на каждом счете крутится свой робот.
Добрый день,
Для этого Вы можете создать отдельную вкладку и применить разные фильтры в каждой из вкладок, скопировав при этом окно графика.
Старатель написал: Настройка "Применять глобальный фильтр" для диаграммы. И фильтр по кодам клиентов на панели инструментов для переключения между счетами.
Только у фильтра есть глюк: сразу после запуска QUIK даже если фильтр заполнен, он не влияет на графики. 2_Техподдерка: Надо бы исправить.
Насколько я понимаю - это не совсем то. В 1 момент времени я увижу заявки - сделки только 1 счета, а мне надо одновременно видеть на 1 графике результаты по 1 счету, а на другом результаты по другому счету, т.к. на каждом счете крутится свой робот.
У меня несколько счетов в рамках 1 терминала QUIK. Можно ли выводить на 1 график стоп-заявки, заявки и сделки 1 счета, а на другой другого? Сейчас на всех графиках выводится информация сразу по всем счетам. Общий фильтр тут не поможет, т.к. мне и нужна информация по всем счетам, но в рамках данного графика только по конкретному счету.
Zoya Skvorcova написал: Александр М ,добрый день. Нет, такая возможность отсутствует. На сервере ограничение 3 000 свечей + свечи текущего дня.
Про текущие ограничения я в курсе. Это сильно усложняет проверку стратегий на истории, если часовые ТФ показывают где-то за год, то минутные - это несколько дней, а на график удобно накладывать любые индикаторы, в том числе и самописные кем-то (скомпилированные без открытого кода) и снимать их показания. Обработка истории в виде отдельного текстового файла приводит к ручному пересчету значения индикатора в коде робота, т.е. надо будет создать конечную библиотеку индикаторов, которые будут считаться по историческим данным, что сильно суживает возможности кода.
Гораздо проще загрузить историю в стандартный график и снимать с него и всех индикаторов, что в нем будут, значения штатными функциями qLua.
Возможно ли стандартными методами в терминале QUIK загрузить в график более 3000 свечей истории? Например всю историю по фьючерсному контракту на минутный график.
Sergey Gorokhov написал: Здравствуйте, К сожалению такой возможности не предусмотрено
До последнего обновления было удобнее работать. Не надо было постоянно убирать эту галку и при добавлении индикатора предварительно появлялось окно его параметров, а не сходу индикатор выставлялся со значениями по умолчанию, как сейчас. Зачастую часть параметров у индикаторов, написанных ручками, пустые и требуют предварительного заполнения. В результате выдается ошибка.