Анатолий написал: 1) За какой период получается суммируются вычисленные значения AD? Чему равно n-?
Нет никакого периода. n в формуле обозначает текущую свечку для которой происходит расчет. Например если свечек 5 значит n=5
Цитата
Анатолий написал: 2) Для чего это делается? В литературе по тех.анализу я ненашел ничего о суммировании этого индикатора с его предыдущими значениями, хотя литературы очень много всю ее пересмотреть сложно, можно у вас попросить ссылку на литературу по которой у вас сделан индикатор AD, т.е. с сумрованием тогового значения за n периодов?
К сожалению на литературу ссылку дать не можем, но такая же формула легко находится в википедии
Цитата
Анатолий написал: Изменил эту строчку на tmp.p = CLH/HL в файлах AD.lua и CO.lua
Зачем? Настоятельно НЕ рекомендуем менять наши формулы, т.к. потом мы не сможем Вам объяснить почему у Вас данные не совпадают.
Надо разбираться. Вообще не понятно зачем Вы пишите свои формулы расчета когда уже есть готовые наши формулы. Если не нравятся наши формулы, то очень зря, они отточены годами и оправдали свою надежность. Тем более что, как показал разбор выше, в своих формулах Вы рано или поздно придете к тому что уже есть в наших.
Цитата
Анатолий написал: Ну и хотел еще добавить - ваш индикатор A/D («Накопление/распределение») вовсе не оригинальный индикатор A/D разработанный Ларри Вильмсом в 1972 и вычисляемый по формуле
Никто не мешает Вам написать индикатор так как Вам хочется.
В нем надо указать строковый идентификатор графика или индикатора. строковый идентификатор это строка которая должна быть прописана в свойствах нужного Вам графика на вкладке Дополнительно:
Цитата
Анатолий написал: откуда функция знает с какого графика ей взять значения индикатора?
Анатолий написал: Где в вашей документации эта формула? Ненашел,
Документация к терминалу в файле 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. По умолчанию эти параметры выключены.
Здравствуйте, Функции для получения данных с графиков описаны в документации QLUA.chm -Функции взаимодействия скрипта Lua и Рабочего места QUIK --Функции для работы с графиками
Исходники индикаторов на Lua представлены на сайте по ссылке
timber написал: )) Смешно. Ну скажите тогда, как при этом неудобстве через LUA понимать какой лимит пришел?
Что именно смешно? Если Вы хотите конструктивный диалог, извольте говорить предметно. И что именно в LUA Вам мешает проверить лимит? Или Вам в принципе не понятно зачем нужен Тх лимит?
Куда уж конструктивнее? Написал сразу - нужна информация по лимитам. Работаю через LUA. Согласно вашей (не брокера) документации определением позиции идет по коду инструмента и типу лимита. Вот с последним беда. Не может он правильно определить, потому что он дублируется для разных типов лимитов. Я про числовое значение. А строковое у вас не получить через LUA. Виноваты разумеется все (брокер, мы-трейдеры), кроме вас.
Т.е. проблема в том что для Тх лимита параметр limit_kind равен 0? Простите но из Вашего первоначального обращения это не очевидно. Естественно такой проблемы не должно быть, для Тх лимитов limit_kind должен быть равен 365. ниже скриншот доказывающий что это так:
От Вас нужен пример кода на котором воспроизводится проблема и уточните версию терминала.
timber написал: )) Смешно. Ну скажите тогда, как при этом неудобстве через LUA понимать какой лимит пришел?
Что именно смешно? Если Вы хотите конструктивный диалог, извольте говорить предметно. И что именно в LUA Вам мешает проверить лимит? Или Вам в принципе не понятно зачем нужен Тх лимит?
timber написал: При том, что значение числовым образом одинаковое. Не должно ли быть слияние строчек в этом случае.
Нет не должны. Вы где-то видели в документации что должны? Если так то где именно?
Цитата
timber написал: Нормальный софт должен иметь проверку на дурака, и не дать вводить одинаковые значения для разных лимитов. Но так как мы имеем дело с Квик, тут всякое возможно :-) Поэтому лишний раз уточняю.
В QUIK есть защита от дурака и во многих местах, да все места где пользователь может ошибиться предусмотреть затруднительно но при каждой фиксации таких случаев мы предпринимаем меры. В Вашем же случае, никакой ошибки не видно. Просто брокер у себя что то настроил а Вам это не удобно. Что мешает обратиться к брокеру и попросить так не настраивать, до сих пор не понятно.
Если Вы просто хотите убрать строку с нулевым лимитом, тогда это делается путем снятия галки "Показывать нулевые лимиты"
Повторяется ли проблема, после очистки данных в терминале (меню Система - Заказ данных - Перезаказать данные)?
Я не хотел бы перезаказывать сейчас, тк. возможно проблема при этом уйдет, но с истечением срока опять проявится. Или мне в скрипт перезаказ данных закладывать???
Это не рекомендация, а вопрос, ответ на который нужен для диагностики.
Здравствуйте, Уточните какая версия терминала QUIK используется? Повторяется ли проблема, после очистки данных в терминале (меню Система - Заказ данных - Перезаказать данные)?
s_mike@rambler.ru написал: Существует ли способ однозначно определить тип актива Фьючерсы/акции/опционы без использования таблицы текущих торгов? ТТТ может быть не открыта и получить оттуда нужные поля далеко не всегда возможно.
Статичные параметры инструментов всегда доступны без дополнительных заказов и без необходимости открытия таблиц.
Олег написал: но почему то данные не возвращаются.
Проблема в синтаксисе. В LUA регистр символов имеет значение. Так для LUA имя переменной table и Table это разные вещи. Функция toString и tostring - это разные вещи. Offer_Count и offer_count - это разные вещи. Bid_Count и bid_count - это разные вещи.
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 написал: но цикл не доходит одну итерацию. Почему?
Антон (band), Чем новее версия тем лучше т.к. более свежие версии появляются в том числе и при исправлении каких-либо ошибок, а не только при добавлении функционала. Есть ли ошибки в 1.2? Возможно, но за последние 5 лет никто не жаловался.
Версия старая, просьба проверить поведение на более актуальной версии 1.3 она х64, если нет возможности проверить на х64 системе, то проверьте на версии 1.2 Сообщите результат.
Андрей написал: Не совсем понял, что Вы имели ввиду.
Что именно не понятно? Каким должен быть порядок инструментов в getClassSecurities нигде в документации не сказано, значит он может быть любым. Если в какой-то момент он действительно поменялся, это не является какой-либо ошибкой, т.к. никто не обещал что порядок никогда не поменяется. Вот если бы в документации было четко сказано какой порядок инструментов выдает getClassSecurities тогда да, можно было бы считать нарушение этого порядка проблемой. Но в документации ничего не сказано, значит никакой проблемы в этом нет и не было. Вам же следует переделать логику кода с учетом этого, т.е. без какой либо привязки к порядку инструментов.
Александр, Здравствуйте, Через sendTransaction можно подать любую транзакцию с любыми параметрами. Вопрос только в каком формате. Есть формат описанный в документации, в котором действительно поддерживаются не все возможные параметры транзакций, а есть универсальный формат транзакций, увидеть который можно сохранив транзакции из кармана транзакций в tri файл.
Если нужных параметров в документации нет, значит добавьте транзакцию в карман, и сохраните из него в tri файл. открыв файл блокнотом увидите какие параметры надо передать в sendTransaction. обращаем внимание на следующие нюансы:
Универсальный формат содержит названия параметров на том языке который выбран в терминале. Если терминал русский то и параметры будут на русском и это нормально и это будет работать. Если терминал на английском то и параметры будут на английском, использовать названия на английском в русском терминале нельзя и на оборот.
Нельзя перемешивать названия параметров из документации с теми которые получены в ttri файле. Это значит что даже если Вам нужен всего один параметр транзакции из tri то всю транзакцию надо подавать в формате из tri и по другому нельзя.
Пришлите нам архив всей папки с Вашим терминалом QUIK (без ключей доступа) на адрес quiksupport@arqatech.com Архив следует паковать при закрытом терминале.
Сергей, Вам наглядно было показано что у нас проблема не воспроизводится, а значит нам нужна дополнительная информация которую мы и пытаемся от Вас получить. Вы, к сожалению, всеми силами отказываетесь нам эту информацию предоставить.
Сергей написал: Как я вынесу 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
Здравствуйте, А если вообще убрать getItem из цикла? Больше похоже на таймер Windows нем на проблему с QUIK Про таймер рассказано например тут https://habr.com/ru/company/intel/blog/186998/
и как можете заметить он тоже приблизительно равен 15 мс
Борис Гудылин написал: - шаг цены - это не онлайновый параметр, для VTBR он менялся 8 лет назад;
Вы не правы, шаг цены это статичный параметр, он не обновляется во время торгов. Он обновляется один раз в сутки, при подключении шлюза к торговой системе.
Цитата
Борис Гудылин написал: Мне интересно, что все-таки по этому конкретному поводу думает уважаемый Разработчик.
У Вас под составлен так что функция Trade() вызывается только после выхода из цикла "while stopped == false do" может быть в этом проблема? Попробуйте переместить во внутрь цикла
Исторические данные торгов spbexchange - какого брокера выбрать, Можно ли получить исторические данные торгов Санкт-Петербургской биржи через CreateDataSource
Дмитрий, Такое может быть если брокер не переносит значения на следующий день, тогда Вы будите видеть цену только по тем инструментам которые покупали сегодня, а на следующий день цена обнулится. Обратитесь к брокеру с просьбой настроить перенос цены приобретения на следующий день.