Анатолий написал: 1) За какой период получается суммируются вычисленные значения AD? Чему равно n-?
Нет никакого периода. n в формуле обозначает текущую свечку для которой происходит расчет. Например если свечек 5 значит n=5
Цитата
Анатолий написал: 2) Для чего это делается? В литературе по тех.анализу я ненашел ничего о суммировании этого индикатора с его предыдущими значениями, хотя литературы очень много всю ее пересмотреть сложно, можно у вас попросить ссылку на литературу по которой у вас сделан индикатор AD, т.е. с сумрованием тогового значения за n периодов?
К сожалению на литературу ссылку дать не можем, но такая же формула легко находится в
Цитата
Анатолий написал: Изменил эту строчку на tmp.p = CLH/HL в файлах AD.lua и CO.lua
Зачем? Настоятельно НЕ рекомендуем менять наши формулы, т.к. потом мы не сможем Вам объяснить почему у Вас данные не совпадают.
Надо разбираться. Вообще не понятно зачем Вы пишите свои формулы расчета когда уже есть готовые наши формулы. Если не нравятся наши формулы, то очень зря, они отточены годами и оправдали свою надежность. Тем более что, как показал разбор выше, в своих формулах Вы рано или поздно придете к тому что уже есть в наших.
Цитата
Анатолий написал: Ну и хотел еще добавить - ваш индикатор A/D («Накопление/распределение») вовсе не оригинальный индикатор A/D разработанный Ларри Вильмсом в 1972 и вычисляемый по формуле
Никто не мешает Вам написать индикатор так как Вам хочется.
В нем надо указать строковый идентификатор графика или индикатора. строковый идентификатор это строка которая должна быть прописана в свойствах нужного Вам графика на вкладке Дополнительно:
Цитата
Анатолий написал: откуда функция знает с какого графика ей взять значения индикатора?
Функция узнает нужный график по параметру tag
Вопрос по скрипту индикатора AD
Пользователь
Сообщений: Регистрация: 23.01.2015
10.05.2019 09:13:43
Цитата
Анатолий написал: Где в вашей документации эта формула? Ненашел,
Документация к терминалу в файле info.chm, или можно открыть нажав F1 Формулы к индикаторам приведены в следующем разделе: -Раздел 4. Работа с графиками --Методы технического анализа ---A/D («Накопление/распределение»)
Цитата
Анатолий написал: Где в скрипте индикатора AD.lua этот код CumAD = ADn + CumADn-1 ?
Анатолий написал: Вот подскажите пожалуйста, функция OnCalculate, из описания - функция вызывается при поступлении новой или изменении существующей свечки в источнике данных для индикатора, возвращает два аргумента - один из них координата x другой координата yя так понимаю, т.е. первый - местоположение свечки в рядяах свечей, второй фактически само значение индикатора
Нет такого в описании. Почитайте внимательней
Цитата
Анатолий написал: и у меня и у вас тоже абсолютно одинаковая
Вы же понимаете что чудес не бывает если цифры разные значит формула разная. Это же математика.
Да но дальше еще сложение, согласно формуле (которая если что есть в документации) CumAD = ADn + CumADn-1,
Цитата
Анатолий написал: Раз формулы одинаковые и значения свечей тоже то значит полученные из формулы значения в вашем скрипте еще и после формулы зачем то дополнительно меняются изучив скрипт AD.lua не трудно догадатся что изменяются они в функции OnCalculate в функции ConvertValue(Settings, func(Index, Settings)) где func(Index, Settings) это переименованная в Init функция AD():
Вы категорически не правы, функция ConvertValue тут не причем. Если не верите, просто уберите ее из OnCalculate
Код
local Out = func(Index, Settings)
Цитата
Анатолий написал: Будьте любезны обьясните пожалуйста что она делает и зачем? Зачем она дополнительно меняет уже готовое значение функции AD?
Это опциональная функция которая позволяет при желании включить округление Round значений индикатора, либо умножить значения на заданный коэффицент Multiply. По умолчанию эти параметры выключены.
Код
Round = "off",
Multiply = 1,
Получить в скрипт значения индикатора из графика
Пользователь
Сообщений: Регистрация: 23.01.2015
10.05.2019 07:56:34
Здравствуйте, Функции для получения данных с графиков описаны в документации QLUA.chm -Функции взаимодействия скрипта Lua и Рабочего места QUIK --Функции для работы с графиками
Исходники индикаторов на Lua представлены на сайте по
написал: )) Смешно. Ну скажите тогда, как при этом неудобстве через LUA понимать какой лимит пришел?
Что именно смешно? Если Вы хотите конструктивный диалог, извольте говорить предметно. И что именно в LUA Вам мешает проверить лимит? Или Вам в принципе не понятно зачем нужен Тх лимит?
Куда уж конструктивнее? Написал сразу - нужна информация по лимитам. Работаю через LUA. Согласно вашей (не брокера) документации определением позиции идет по коду инструмента и типу лимита. Вот с последним беда. Не может он правильно определить, потому что он дублируется для разных типов лимитов. Я про числовое значение. А строковое у вас не получить через LUA. Виноваты разумеется все (брокер, мы-трейдеры), кроме вас.
Т.е. проблема в том что для Тх лимита параметр limit_kind равен 0? Простите но из Вашего первоначального обращения это не очевидно. Естественно такой проблемы не должно быть, для Тх лимитов limit_kind должен быть равен 365. ниже скриншот доказывающий что это так:
От Вас нужен пример кода на котором воспроизводится проблема и уточните версию терминала.
timber написал: )) Смешно. Ну скажите тогда, как при этом неудобстве через LUA понимать какой лимит пришел?
Что именно смешно? Если Вы хотите конструктивный диалог, извольте говорить предметно. И что именно в LUA Вам мешает проверить лимит? Или Вам в принципе не понятно зачем нужен Тх лимит?
timber написал: При том, что значение числовым образом одинаковое. Не должно ли быть слияние строчек в этом случае.
Нет не должны. Вы где-то видели в документации что должны? Если так то где именно?
Цитата
timber написал: Нормальный софт должен иметь проверку на дурака, и не дать вводить одинаковые значения для разных лимитов. Но так как мы имеем дело с Квик, тут всякое возможно :-) Поэтому лишний раз уточняю.
В QUIK есть защита от дурака и во многих местах, да все места где пользователь может ошибиться предусмотреть затруднительно но при каждой фиксации таких случаев мы предпринимаем меры. В Вашем же случае, никакой ошибки не видно. Просто брокер у себя что то настроил а Вам это не удобно. Что мешает обратиться к брокеру и попросить так не настраивать, до сих пор не понятно.
Если Вы просто хотите убрать строку с нулевым лимитом, тогда это делается путем снятия галки "Показывать нулевые лимиты"
Повторяется ли проблема, после очистки данных в терминале (меню Система - Заказ данных - Перезаказать данные)?
Я не хотел бы перезаказывать сейчас, тк. возможно проблема при этом уйдет, но с истечением срока опять проявится. Или мне в скрипт перезаказ данных закладывать???
Это не рекомендация, а вопрос, ответ на который нужен для диагностики.
Странное поведение getClassSecurities, Неторгуемые инструменты из getClassSecurities( "SPBFUT" )
Пользователь
Сообщений: Регистрация: 23.01.2015
03.05.2019 16:39:49
Здравствуйте, Уточните какая версия терминала QUIK используется? Повторяется ли проблема, после очистки данных в терминале (меню Система - Заказ данных - Перезаказать данные)?
Фьючерсы/акции/опционы
Пользователь
Сообщений: Регистрация: 23.01.2015
03.05.2019 10:58:25
Цитата
s_mike@rambler.ru написал: Существует ли способ однозначно определить тип актива Фьючерсы/акции/опционы без использования таблицы текущих торгов? ТТТ может быть не открыта и получить оттуда нужные поля далеко не всегда возможно.
Статичные параметры инструментов всегда доступны без дополнительных заказов и без необходимости открытия таблиц.
Получение стакана котировок, EUR_RUB_TOM
Пользователь
Сообщений: Регистрация: 23.01.2015
03.05.2019 10:53:21
Цитата
Олег написал: но почему то данные не возвращаются.
Проблема в синтаксисе. В LUA регистр символов имеет значение. Так для LUA имя переменной table и Table это разные вещи. Функция toString и tostring - это разные вещи. Offer_Count и offer_count - это разные вещи. Bid_Count и bid_count - это разные вещи.
приведите все названия в порядок
Активная Тэйк-профит и стоп-лимит заявка
Пользователь
Сообщений: Регистрация: 23.01.2015
22.04.2019 17:15:40
Цитата
Sergey написал: через lua проверить исполнена заявка или активная?
Через флаги, параметр flags. Пример для проверки стоп заявки: if bit.test(zalyavka.flags, 0) then message ("заявка активная") end
Сравнение дат.
Пользователь
Сообщений: Регистрация: 23.01.2015
22.04.2019 16:04:28
Игорь М, При сравнении даты и времени, самый правильный и надежный способ, перевести дату в число дней (для времени секунд) и далее уже сравнивать.
левые котировки, getCandlesByIndex()
Пользователь
Сообщений: Регистрация: 23.01.2015
22.04.2019 15:28:53
Цитата
sergei написал: ...и тогда пишет округленное в файл, но, блин, мне при любом использовании ii писать его через функцию округления?!Как это - округление работает только в момент округления? :)
Что именно не понятно? Вы округляли только стартовое значение ii, а не все которые рождаются при переборе цикла. Кто сказал что округлив самое первое значение цикла все остальные тоже округлятся? нигде такого в программировании нет, и LUA не исключение. Хотите видеть округленное значение так и округляйте это значение, а не первую цифру в цикле. И кто мешает один раз округлить полученную цифру и сохранить ее в переменной? for ii = candles[i].low, candles[i].high, MinPriceStep do local round_ii = math.round(ii,2) lst = lst..i.." --- "..round_ii.." --- "..candles[i].low..", "..candles[i].high.."\n" end
Цитата
sergei написал: Кроме того, вот на первых свечках вообще не видно проблемы с 000000001
Это не имеет значения, появление 000000001 может произойти при любой арифметической операции. Например: message(tostring(124.4 - 124.3)) выдаст 0.10000000000001
Цитата
sergei написал: но цикл не доходит одну итерацию. Почему?
не понятно что имеется ввиду.
левые котировки, getCandlesByIndex()
Пользователь
Сообщений: Регистрация: 23.01.2015
22.04.2019 14:38:47
Цитата
sergei написал: Сергей, что-то даже с округлением не получается.
Значения округляются там где Вы их округляете. Вы округляете в for, а не там где происходит передача данных в lst
левые котировки, getCandlesByIndex()
Пользователь
Сообщений: Регистрация: 23.01.2015
22.04.2019 13:44:42
sergei, Тогда Вы можете округлить значения перед использованием
левые котировки, getCandlesByIndex()
Пользователь
Сообщений: Регистрация: 23.01.2015
22.04.2019 13:24:21
Цитата
sergei написал: Сергей, как корректно округлить до нужного знака, чтобы в итоге не получить новое подобное число?
Округлять имеет смысл только при выводе данных. Функции по округлению не раз приводились на форуме например
Цитата
sergei написал: Насколько плохая идея использовать в таблицах индексы в виде чисел с плавающей точкой?
Вопрос не понятен, просьба уточнить подробней что имеется ввиду, можно на примере.
это особенность типа данных с плавающей точкой. Почитать что это такое можно в википедии
ошибка в функции TRANS2QUIK_TRADE_DATE
Пользователь
Сообщений: Регистрация: 23.01.2015
19.04.2019 21:32:02
Антон (band), Чем новее версия тем лучше т.к. более свежие версии появляются в том числе и при исправлении каких-либо ошибок, а не только при добавлении функционала. Есть ли ошибки в 1.2? Возможно, но за последние 5 лет никто не жаловался.
Версия старая, просьба проверить поведение на более актуальной версии 1.3 она х64, если нет возможности проверить на х64 системе, то проверьте на версии 1.2 Сообщите результат.
Получение списка кодов бумаг для списка классов
Пользователь
Сообщений: Регистрация: 23.01.2015
19.04.2019 15:02:29
Цитата
Андрей написал: Не совсем понял, что Вы имели ввиду.
Что именно не понятно? Каким должен быть порядок инструментов в getClassSecurities нигде в документации не сказано, значит он может быть любым. Если в какой-то момент он действительно поменялся, это не является какой-либо ошибкой, т.к. никто не обещал что порядок никогда не поменяется. Вот если бы в документации было четко сказано какой порядок инструментов выдает getClassSecurities тогда да, можно было бы считать нарушение этого порядка проблемой. Но в документации ничего не сказано, значит никакой проблемы в этом нет и не было. Вам же следует переделать логику кода с учетом этого, т.е. без какой либо привязки к порядку инструментов.
Получение списка кодов бумаг для списка классов
Пользователь
Сообщений: Регистрация: 23.01.2015
18.04.2019 22:04:09
Андрей, Даже если действительно что-то поменялось это ничего не изменит.
Цитата
Sergey Gorokhov написал: Какой-либо порядок инструментов в getClassSecurities никогда не гарантировался.
Получение списка кодов бумаг для списка классов
Пользователь
Сообщений: Регистрация: 23.01.2015
18.04.2019 19:56:08
Здравствуйте, Какой-либо порядок инструментов в getClassSecurities никогда не гарантировался.
sendTransaction: Можно ли послать заявку непосредственно в Аукцион периода закрытия?
Пользователь
Сообщений: Регистрация: 23.01.2015
18.04.2019 15:14:40
Александр, Здравствуйте, Через sendTransaction можно подать любую транзакцию с любыми параметрами. Вопрос только в каком формате. Есть формат описанный в документации, в котором действительно поддерживаются не все возможные параметры транзакций, а есть универсальный формат транзакций, увидеть который можно сохранив транзакции из кармана транзакций в tri файл.
Если нужных параметров в документации нет, значит добавьте транзакцию в карман, и сохраните из него в tri файл. открыв файл блокнотом увидите какие параметры надо передать в sendTransaction. обращаем внимание на следующие нюансы:
Универсальный формат содержит названия параметров на том языке который выбран в терминале. Если терминал русский то и параметры будут на русском и это нормально и это будет работать. Если терминал на английском то и параметры будут на английском, использовать названия на английском в русском терминале нельзя и на оборот.
Нельзя перемешивать названия параметров из документации с теми которые получены в ttri файле. Это значит что даже если Вам нужен всего один параметр транзакции из tri то всю транзакцию надо подавать в формате из tri и по другому нельзя.
Не дает передвинуть заявку
Пользователь
Сообщений: Регистрация: 23.01.2015
17.04.2019 20:17:44
Виктор, В таком случае Вам необходимо обратиться к брокеру
Не дает передвинуть заявку
Пользователь
Сообщений: Регистрация: 23.01.2015
17.04.2019 17:27:49
Здравствуйте, Уточните это боевой доступ или демо, или это конкурсный сервер? Если конкурсный, то сегодня была проблема на бирже.
Медленный getItem для таблицы depo_limits, Работает медленно на последних версиях
Пришлите нам архив всей папки с Вашим терминалом QUIK (без ключей доступа) на адрес quiksupport@arqatech.com Архив следует паковать при закрытом терминале.
Медленный getItem для таблицы depo_limits, Работает медленно на последних версиях
Пользователь
Сообщений: Регистрация: 23.01.2015
16.04.2019 20:05:13
Цитата
Сергей написал: Какая еще дополнительная информация нужна?
Было два запроса:
Цитата
Sergey Gorokhov написал: А если вообще убрать getItem из цикла?
Цитата
Sergey Gorokhov написал: Повторите то же самое при отключенном терминале.
Медленный getItem для таблицы depo_limits, Работает медленно на последних версиях
Пользователь
Сообщений: Регистрация: 23.01.2015
16.04.2019 19:52:59
Сергей, Вам наглядно было показано что у нас проблема не воспроизводится, а значит нам нужна дополнительная информация которую мы и пытаемся от Вас получить. Вы, к сожалению, всеми силами отказываетесь нам эту информацию предоставить.
Медленный getItem для таблицы depo_limits, Работает медленно на последних версиях
Пользователь
Сообщений: Регистрация: 23.01.2015
16.04.2019 19:38:33
Сергей, Повторите то же самое при отключенном терминале. И не надо менять код тестового скрипт, это совершенно лишнее.
Медленный getItem для таблицы depo_limits, Работает медленно на последних версиях
Пользователь
Сообщений: Регистрация: 23.01.2015
16.04.2019 16:41:58
Цитата
Сергей написал: Как я вынесу getItem из цикла? Мне нужно найти нужный инструмент из таблицы. Для этого нужно перебирать каждый элемент.
Просто чтобы Вы убедились что getItem не виноват. Ничего не мешает потом вернуть его обратно.
Цитата
Сергей написал: Если это не QUIK, почему тогда на 19 версии все работает?
Вы проверяли или это домыслы? Ниже простая проверка которая показывает что всё одинаково что на 7.19 что на 7.27, ровно как и должно быть.
Цитата
Сергей написал: Кроме того, я никаких таймеров не взводил. Если это QUIK выполняет данный цикл через таймеры, то это значит что он неправильно работает.
Вы явно не читали ссылку, рекомендуем прочитать. И заметьте, там про QUIK вообще ничего не сказано. Как уже говорилось выше и еще раз повторим, что речь про таймер операционной системы который установлен компанией Microsoft, а не QUIK. И там же по ссылке говорится что некоторые программы умеют менять значение таймера. Еще раз рекомендуем прочитать то что написано в статье. Все вопросы сразу же отпадут.
Если к нам нет доверия, Вы можете проверить данные самостоятельно: Код:
Код
function main()
local items_num = getNumberOf("depo_limits")
local T1 = os.sysdate()
for i = 0, items_num - 1 do
local table_item = getItem("depo_limits", i)
end
local T2 = os.sysdate()
local total= (T2.hour-T1.hour)*60*60*1000+(T2.min - T1.min)*60*1000+(T2.sec - T1.sec)*1000+(T2.ms - T1.ms)
message("total_limits="..tostring(items_num).." total_time_ms="..tostring(total).." avg_ms="..(string.format("%f",(total)/items_num)))
end
Результаты:
Помогите получить цену по своей последней сделке по определенному инструменту
Пользователь
Сообщений: Регистрация: 23.01.2015
15.04.2019 17:42:48
Цитата
Дмитрий написал: local row = getItem("trades",indexNeed[-1]) -- здесь хочу взять последнюю строчку из набора строк indexNeed
Правильно так local row = getItem("trades",indexNeed[#indexNeed]) -- здесь хочу взять последнюю строчку из набора строк indexNeed[/QUOTE]
и предыдущая рекомендация не отменяется
Помогите получить цену по своей последней сделке по определенному инструменту
Пользователь
Сообщений: Регистрация: 23.01.2015
15.04.2019 17:19:59
Дмитрий, У Вас переменная PriceLastOrder объявлена как локальная, т.е. при выходе из if она удаляется, следовательно и в return не попадает.
уберите слово local перед PriceLastOrder
Медленный getItem для таблицы depo_limits, Работает медленно на последних версиях
Пользователь
Сообщений: Регистрация: 23.01.2015
15.04.2019 16:03:52
Здравствуйте, А если вообще убрать getItem из цикла? Больше похоже на таймер Windows нем на проблему с QUIK Про таймер рассказано например тут
и как можете заметить он тоже приблизительно равен 15 мс
Помогите найти ошибку, Вам, как экспертам, возможно, не сложно, а я застрял....
Пользователь
Сообщений: Регистрация: 23.01.2015
15.04.2019 15:02:11
Цитата
Sorokin написал: Нашел ошибку. Но теперь attempt to perform arithmetic on upvalue 'Trade_B...
Значит не правильно исправили ошибку.
Рекомендуем еще раз внимательней проверить что и как происходит с переменной Trade_B
Qlua автономно, Qlua автономно
Пользователь
Сообщений: Регистрация: 23.01.2015
15.04.2019 14:58:43
Цитата
Борис Гудылин написал: - шаг цены - это не онлайновый параметр, для VTBR он менялся 8 лет назад;
Вы не правы, шаг цены это статичный параметр, он не обновляется во время торгов. Он обновляется один раз в сутки, при подключении шлюза к торговой системе.
Цитата
Борис Гудылин написал: Мне интересно, что все-таки по этому конкретному поводу думает уважаемый Разработчик.
Берите значение через getSecurityInfo
Помогите найти ошибку, Вам, как экспертам, возможно, не сложно, а я застрял....
Пользователь
Сообщений: Регистрация: 23.01.2015
12.04.2019 14:39:15
Цитата
Sorokin написал: Но есть же параметр выше в коде function OnTrade(trade)
Значит колбек OnTrade не срабатывает до обращения к Trade_B+50 Кроме того в колбеке какая-то проверка.
таким образом пока не будет сделки удовлетворяющей условию, колбек не сработает, а пока он не сработает ,переменная Trade_B не будет существовать
Помогите найти ошибку, Вам, как экспертам, возможно, не сложно, а я застрял....
Пользователь
Сообщений: Регистрация: 23.01.2015
12.04.2019 14:26:33
Цитата
Sorokin написал: пишет "attempt to perform arithmetic on upvalue 'Trade_B' (a nil value)".....не нравится условие Trade_B+50
ошибка означает что переменная не задана.
простой пример покажет ошибку:
X = Y + 1
чему будет равно X? никто не знает т.к. Y неизвестно. Вот и ошибка у Вас говорит о том же, что значение Trade_B неизвестно.
Вот если написать например так: Y = 0 X = Y + 1
то сразу понятно что X будет равен 1 и ошибки не будет. Вот и Вам надо задать значение для Trade_B
Помогите найти ошибку, Вам, как экспертам, возможно, не сложно, а я застрял....
У Вас под составлен так что функция Trade() вызывается только после выхода из цикла "while stopped == false do" может быть в этом проблема? Попробуйте переместить во внутрь цикла
Помогите найти ошибку, Вам, как экспертам, возможно, не сложно, а я застрял....
Пользователь
Сообщений: Регистрация: 23.01.2015
12.04.2019 05:09:53
Цитата
Sergey Gorokhov написал: Здравствуйте, Первое что бросается в глаза у цикла while stopped == false do нет завершающего end
А нет, прошу прощения с этим все в порядке. Уточните подробней, что именно не работает? У нас код не вызывает ошибок.
Помогите найти ошибку, Вам, как экспертам, возможно, не сложно, а я застрял....
Пользователь
Сообщений: Регистрация: 23.01.2015
12.04.2019 05:06:26
Здравствуйте, Первое что бросается в глаза у цикла while stopped == false do нет завершающего end
Исторические данные торгов spbexchange - какого брокера выбрать, Можно ли получить исторические данные торгов Санкт-Петербургской биржи через CreateDataSource
Пользователь
Сообщений: Регистрация: 23.01.2015
05.04.2019 05:16:27
Alexegin, У нас нет информации о том какой брокер какие услуги предоставляет.
таблица сделок., таблица сделок
Пользователь
Сообщений: Регистрация: 23.01.2015
01.04.2019 05:43:24
Дмитрий, Такое может быть если брокер не переносит значения на следующий день, тогда Вы будите видеть цену только по тем инструментам которые покупали сегодня, а на следующий день цена обнулится. Обратитесь к брокеру с просьбой настроить перенос цены приобретения на следующий день.
Встроенные индикаторы в скриптах индикаторов, Встроенные индикаторы в скриптах индикаторов
Пользователь
Сообщений: Регистрация: 23.01.2015
01.04.2019 05:40:30
Цитата
Николай написал: Здравствуйте! Данный файл в настоящий момент удален из общего доступа?