Андрей, Проверьте в интерфейсе терминала строится ли тиковый график по RIM8? если нет, то и в Lua Вы его не получите, с причиной следует разбираться с брокером.
Если график строится, попробуйте поменять местами while и ds:SetEmptyCallback
Вопрос к бирже. Она транслирует открытый интерес по инструменту без привязки к какому-либо классу. А объем в разрезе конкретного класса. Т.е. если инструмент в классе SPBFUT и PSFUT Вы увидите суммарный открытый интерес по обоим классам а объем только по инструменту из SPBFUT. И еще раз делаем акцент на том что так транслирует биржа
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Aidar написал: Имелось ввиду что на языке lua корректно следующее выражение или нет
Все равно не понятно. В выражении нет ничего что может вызывать такой вопрос. Просто складываются два числа которые возвращают функции H и L
Давайте договоримся что Вы запустите код через "Сервисы" - "Lua скрипты" и если он вдруг не заработает тогда Вы вернетесь и сообщите текст ошибки. Если ошибки нет, значит согласно синтаксису всё правильно.
Если треугольник рисуется на цене 100, что мешает прибавить 5 и тогда он нарисуется на 105, таким образом получите нужный эффект. Т.е. банально прибавить/отнять (в зависимости от стрелки) цифру к цене на которой рисуется фрактал.
Aidar написал: Здесь у вас производится непосредственно расчет фрактала, т.е. на основании значения переменной S квик поймет на какой свече выводить фрактал, или я не правильно понимаю?
Aidar написал: Я так понимаю что Out 1,2 это индекс свечи на которой будет отображено TYPE_TRIANGLE_UP или TYPE_TRIANGLE_DOWN из Settings.line ?
Да верно Out1 и Out2 это номера свечек.
Цитата
Aidar написал: Мне не совсем понятно про ConvertValue(Settings,H(Out1))
ConvertValue преобразует данные согласно настройкам в Settings. Например там есть параметр Multiply в которой можно указать коэффициент на который умножаются значения индикатора. Или Round в котором можно указать округление.
Цитата
Aidar написал: и return tonumber(Settings.Horizontal_line),nil,nil
Индикатор FRACTALS ставит значения на прошлых свечках а не на текущих. в связи с чем, что-либо возвращать в return нельзя. Первый параметр, просто рисует горизонтальную линию. За это отвечает Horizontal_line.
function Squeeze(I,P)
return math.fmod(I-1,P+1)
end
Конкретно в приведенной части кода она нужна для того чтобы сжать массив it. нет смысла хранить в массиве все свечки, если для расчета индикатора нужны только свечки за указанный период (переменная P).
Сергей написал: Я почему-то ожидал что вы знаете, какие подводные камни могут "выплыть" при переходе с x86 на x64. Но никак не ожидал предложения "сравнить свою версию на Delphi с нашими C++ и C#". И найти отличия...
Использовать версию 1.3 не обязательно, тем более что Ваше приложение остается 32х разрядным. В связи с чем, предлагаем разобраться с версией 1.2.
Заранее отмечаем что ни у нас ни у кого-либо еще не возникало проблем с работой версии 1.2. именно из-за х64 битной ОС. А значит причину надо искать не в подводных камнях а в настройках проекта.
Для начала, проверьте банальные вещи: А именно, включен ли импорт транзакций в терминале QUIK (меню Сервисы - Экспорт/Импорт данных - Внешние транзакции)? Корректно ли указан путь к папке с терминалом QUIK в параметрах подключения? (особенно следует обратить внимание что в х64 битной системе две папки "Program Files") И наконец, проверьте наш пример если он работает, значит причина в некорректном коде Вашего приложения..
Aidar написал: local H_tmp={} -- объявление массива под значения High local L_tmp={} -- объявление массива под значения Low
Да верно.
Цитата
Aidar написал: local it = {[1]=0, l=0} -- объявление массива it где 1-му элементу массива присваиваем значение 0, элементу с индексом l присваиваем значение 0
Вы говорите очевидные вещи. Другой вопрос зачем нужен этот массив. Как можно заметить по коду в него попадают номера свечек, из которых потом ищется нужная свечка где и рисуется фрактал.
По данному обращению мы диагностируем проявление исправленной в версии сервера 5.18 ошибки, связанной с трансляцией некоторых полей в таблицу транзакций через серверы доступа. Проблема исчезнет после обновления серверного ПО у Вашего брокера, до этой версии.
Да прошу прощения, не заметил. Пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
s_mike@rambler.ru, Отловить первый расчет индикатора на графике с определенный таймфреймом. Например случай когда на графике всего одна свеча которая меняется. В таком случае if index==1 не дает нужного результата, а OnChangeSettings как раз дает.
s_mike@rambler.ru, Михаил, То что функция не срабатывает при изменении таймфрейма не значит что ее нельзя использовать. Да она не решает конкретно одну описанную задачу, но она и не должна ее решать согласно документации. А значит, это пожелание на доработку, которое мы можем предложить зарегистрировать.
s_mike@rambler.ru, Михаил, в документации ничего не сказано что он должен вызываться при смене таймфрейма.
Цитата
Функция вызывается при редактировании свойств индикатора после нажатия кнопок «Применить» или «OK». Функция вызывается также при перезагрузке Рабочего места QUIK и при загрузке wnd-файла либо tab-файла, в которых сохранен график с индикатором.
Андрей, А что мешает в цикле который указан по ссылке пройти по всем строкам до нужной? А не нужные, просто игнорировать. К слову разработчики Lua именно так и советуют
Примеры полей транзакций Вы можете найти в документации на терминал QUIK (вызывается клавишей F1) -Раздел 6. Совместная работа с другими приложениями --Импорт транзакций ---Формат .tri-файла с параметрами транзакций ----Примеры строк, которые могут содержаться в файле
Цитата
Андрей написал: ['TRANS_ID'] = trans_id, (как задать этот параметр? откуда его получить, транзакция же еще не прошла, так как даже не подана заявка)
Этот параметр своего рода метка, которой Вы помечаете транзакцию. Его не нужно получать, его нужно придумать самостоятельно и указать. По этому номеру в дальнейшем, Вы сможете найти нужную заявку которая получилась в результате транзакции отправленной через Lua. Если не понятно, просто укажите 12345 и посмотрите что отобразится в таблице заявок в поле "ID транзакции"
Цитата
Андрей написал: ['ACCOUNT'] ="№ счета трейдера" , (где взять номер счета тредера, если это демо счет? Где его в Квике можно посмотреть?
Откройте форму ввода заявки в терминале и Вы его увидите нужный счет в поле "Торговый счет"
Цитата
Андрей написал: Как картинки выкладывать не подскажете?
Let_it_go написал: На графике с помощью вашего метода их ведь нельзя получить.
CreateDataSource не работает в Lua индикаторах, только в обычных скриптах. В обычных скриптах, вызываете CreateDataSource с параметром INTERVAL_TICK там в OnAllTrade или через getItem получаете данные по обезличенным сделкам Открытый интерес в параметре open_interest Купля/продажа в параметре flags
s_mike@rambler.ru, Михаил, но IP адрес у нашего демо только один. Даже если речь не про наш демо, а про брокерский, можно проверить ip и на всякий случай еще порт IPPORT
Андрей, Здравствуйте, Самый надежный способ по IP адресу. Для этого используйте функцию getInfoParam с параметром IPADDRESS Подробнее в документации QLUA.chm глава "Сервисные функции", раздел "getInfoParam"
Борис Гудылин написал: Насколько корректно и из каких источников идет коррекция H и L на текущий момент?
У Вас в коде не указан параметр, значит данные берутся на основе OnAllTrade. Значит полученные свечки формируются на основе полного набора данных, без срезов.
Цитата
Борис Гудылин написал: Можно ли при этом доверять полностью значениям H(index) и L(index) или они, пусть и крайне редко, но могут незначительно отличаться от действительных (для полностью сформированных свечек)?
То же самое, у Вас в коде не указан параметр, значит данные берутся на основе OnAllTrade. Значит отличий от видимого графика не будет. Другой вопрос, что Вы можете получить свежие данные раньше чем они визуально отобразятся на графике.
Igor Golovin, Вы заказали данные, они попали в хранилище. Вы открыли 100 таблиц и в каждой что то заказали, QPILE увидите все заказанные данные, так как будто открыта одна таблица. QPILE работает с хранилищем, а не с таблицами.
Здравствуйте, QPILE не работает с таблицами, а работает с хранилищем данных таблиц. Это значит что даже если Вы откроете несколько таблиц с разными фильтрами, то в QPILE Вы увидите все данные, так как будто у Вас открыта одна таблица, а не несколько. Если Вам нужно фильтровать данные, что это следует делать в коде самого скрипта, а не в интерфейсе.
Кроме того обращаем внимание, что QPILE признан устаревшим и мы его уже давно не развиваем. Рекомендуем перейти на использование QLUA.
ivan, Номера сделок не уникальны, и дело совсем не в сроках, а в принципе. Разные биржи ничего не знают о номерах сделок друг друга. На срочном рынке есть вечерняя сессия которая повторно транслируется на утро следующего дня. Еще существуют так называемые кросс сделки, когда торгуешь сам с собой, а значит будет две сделки отличающиеся только направлением. На некоторых внебиржевых или зарубежных рынках, вообще нет нумерации и каждый день сделки начинают нумерацию с 1. Поэтому, мы считаем что уникальность сделки определяется не по номеру, а совокупно по четырем параметрам: Номер сделки Направленность сделки (покупка или продажа) Код класса инструментов Дата торговой сессии (не путать с датой сделки)
отдельно для срочного рынка можно считать, что если дата торговой сессии отличается от даты сделки, значит это дубль сделки вечерней сессии, а не новая сделка.
Что касается именно "фифо", то все зависит от конкретного рынка. Если мы говорим про наш фондовый и срочный рынок МБ, то там нумерация не сбрасывается уже десятки лет и врядли в ближайшие 10 сбросится, а значит нет необходимости об этом беспокоиться.
Приведенный код не является рабочим примером, он показывает только часть по заданному вопросу. Если нужен полный рабочий код то выглядит примерно так:
Код
Settings = {
Name = "имя индикатора" ,
MY_LOVE_PARAMETER = 300,
line = {
{
Name = "!!test",
Color = RGB(0, 255, 0),
Type = TYPE_LINE,
Width = 2
}
}
}
function Init()
return #Settings.line
end
function OnCalculate(indx)
if indx < Size () - Settings.MY_LOVE_PARAMETER then return end
end
Здравствуйте, Такую возможность может предоставить только Ваш брокер. Т.е. Вы можете попросить его создать еще одну просмотровую учетную запись для Ваших счетов.
Aidar написал: "Тиковый объем (англ. tick volume) – это количество тиков за некоторый период времени, соответствующее частоте изменений цены маркет-мейкером рынка и не связанное с объемом сделок."
Судя по определению, объем который Вы видите на графике, это не то что Вам нужно.
Цитата
Aidar написал: Извиняюсь за глупые вопросы,я пока что учусь QLUA
QLUA тут вообще не причем. Т.к. происходит непонимание на уровне того что Вам нужно, а не на уровне кода. Давайте вообще забудем про QLUA и посмотрим обычный терминал QUIK. В обычном терминале QUIK Вы где-нибудь видите нужное Вам значение?
Sergey Gorokhov написал: Aidar , Да такая возможность есть. например с тикового графика.
не совсем понятно как прописать.А если я хочу применять индикатор на разных таймфреймах?
Если Вам нужно получать свежие тики, то они и так попадают в OnCalculate, т.к. он срабатывает при каждом изменении. Если нужно получать тики за прошлые периоды, то это можно получить только через GetItem