Николай Камынин пишет: Чтобы использовать функции работы с метками необходимо изначально метить руками или ногами окно графика идентификатором chart_tag. ----------------------------------- ВопросЫ: 1) Есть ли возможность сделать это автоматом в скрипте индикатора?
а как ещё скрипт поймёт с каким графиком/диаграммой ему работать? Это своего рода хендл для доступа к диаграмме (правда, в весьма усечённой форме). Другое дело, если бы можно было из самого скрипта графики создавать/рисовать - тогда бы - Да - смысла в чарт-теге бы никакого не было.
Хотелось бы заострить внимание на таком вопросе: Средствами WinAPI с квиком можно сделать если не всё - то очень многое, благо теперь на это есть вполне законная основа - Ваш плагин QLUA вместе с его LUA/QLUA C API. Таким образом, вопрос: Каковы границы в программировании на LUA C API через которые нам, пользователям нельзя переходить? Ведь Вы, как компания - их даже для нас не обозначили? по пунктам:
Можно ли применять сабклассинг нативных окон квика: окно таблицы QTable, выводимое с помощью функции QLUA CreateWindow
Обращение к секции экспорта квика - файл: info.exe - с целью использования его функций.
я, конечно, бесспорно, могу во многом ошибаться - и с радостью выслушал бы интервью "от создателей":)) но... они почему-то всегда ускользают от подобных тем... :)))
не чаще 1р/с происходит в данном случае получение сделки из твс, а оконные сообщения и возможный запрос на полную перерисовку - отправляется на каждый WM_PAINT
Цитата
Старатель пишет: полагаю, что на неактивных вкладках или свёрнутых окнах обновления графиков не происходит.
происходит - только не отображается - иначе бы при переходе на вкладку - там была бы не актуальная информация в первоначальный момент, и к тому же - есть роботы, индикаторы - они привязаны к графикам - им абсолютно параллельно активна или свёрнута вкладка - им торговать надо.
насчёт сколько умещается свечей в окне - уже написал выше - минимальное число отображаемых свечек (без масштабирования по абсциссе[по времени]) - равно количеству пикселей, укладывающемуся в ширину отображаемой зоны по определению.
а кто сказал, что он статический??? объект - свеча: имеет координаты может менять положение может менять размеры может реагировать на движение курсора (показ хинта) может реагировать на клик мышки (ну типа вывод меню или отправка транзакции) и т. д.
поверьте, в современных новомодных операционных системах - не одна сотня процессов/сервисов работает в системе - так что, от этого пока ещё никто не ушёл. А так, - конечно, всегда проще предложить купить более мощный компьютер, зная, что клиенту будет просто некуда деваться.
дело не только и не столько в ресурсах компбютера, а впределах операционной системы - увлечение контролами - даром не проходит. Свеча, конечно, хоть и не контрол - но и не обычная картинка, а вполне себе самостоятельный объект. И на то, чтоб она была на графике затрачиваются ресурсы и время выделения памяти.
Более жизненный пример - покажите мне современную игру - в которой одновременно 3000 "мобов" на уровне. (не спорю, хоть и "притянуто за уши" - но смысл ясен)
Stanislav Tvorogov пишет: По итогам его анализа сообщаем Вам, что реализация пожелания признана потенциально целесообразной.
ну-ну. Лишний раз подтвердили то, что половина надо увольнять:)))
вопрос на засыпку: а почему всего 3000свечей? Даёшь 100500 на один график:))) полагаю, - те кто умные - давно уже всё поняли...)))
господа, ваш квик будет просто "валяться" прежде чем прожуёт столько свечей. Уже сейчас из-за этого, при открытии свыше 36 графиков начинается непредсказуемая работа - он просто падает, и не всегда с дампом. При этом, не забываем, что все ваши свечки, чудо-порисульки графики - всё работает в главном потоке квика. Это всё равно, что сделать из квика не терминал, который позволяет быстро реагировать/обрабатывать транзакции, а какой-то музей - с картинами-графиками. -> можно посмотреть но, нельзя касаться.
у вас нет никакого чувства видения перспективы ваших таких "поделок". Вы сами угробите квик. ---------------------------------------- в общем, вы не перестаёте меня разочаровывать...
а вообще - расчёт самостоятельно индекса ртс - дело неблагодарное, бо как зависит от кучи разных факторов, которые постоянно меняются и не предсказуемы. Сама методичка может измениться, могут быть приняты те или иные решения клиринговой палаты и т. п.
Старатель пишет: Причём столько раз, сколько открыто Lua-индикаторов.
поверьте - у меня индикаторов - много больше чем 11 на всех вкладках. конкретно на той вкладке - которая последняя (перед предыдущем отключением квика) - там вообще нет индикаторов - только окно системных сообщений.
как видите, в "индикаторе", ни на графике - нигде - нет привязки ни кодному источнику данных/либо графику - но он всё-равно запускается. И причём, несколько раз:
sam063rus пишет: Запускаются "автоматом", при старте квика (чем не основа для вирусописательства?)
Вы можете привести конкретный пример скрипта, который не будучи добавленным на график автоматически запускается при старте QUIK?
специально для Вас, потратил время:
Скрытый текст
Код
message(getScriptPath())
Settings=
{
Name = "testBug",
line =
{
{
Name = "test",
Color = RGB(0,0,255),
Type = TYPE_LINE,
Width = 1
}
}
}
function Init()
return 1
end
function OnCalculate(index)
return nil
end -- выход из функции OnCalculate
Индикатор - не добавлен, но присутствует в списке индикаторов. Квик, просил передать, что он висит до сих пор:)))
ну, или, если без getScriptPath, а просто голый мессэдж:
Скрытый текст
Код
message("testBug#00002")
Settings=
{
Name = "testBug",
line =
{
{
Name = "test",
Color = RGB(0,0,255),
Type = TYPE_LINE,
Width = 1
}
}
}
function Init()
return 1
end
function OnCalculate(index)
return nil
end -- выход из функции OnCalculate
Старатель, или в кратце - такая "песочница" - пока ничего кроме очередных глюков не принесла. -> скрипты весьма нестабильны, полного доступа к qchart - они не представляют, а только "дразнят". Запускаются "автоматом", при старте квика (чем не основа для вирусописательства?). Ну и спрашивается, "на хрена козе баян?"
да вот, что-то мне это теперь уже особо не очевидно бо как и там и там: 1. функция загружена 2. инициализирована 3. находится не в коллбеке Понятное дело, что машины разные и пути папок, которые транслирует функция разные - но, в одном случае, она "мусорит", а в другом нет.
Лично меня - не устраивает извечная констатация факта и очередные "приносим свои извинения". Мне нужна - причина. + толковая, соответствующая реальной жизни - документация.
Причина такого непредсказуемого "поведения" - для меня известна... Однако, понадеемся услышать мнение на этот счёт от разработчиков (с обязательным отражением в документации). Итак, разработчики - You are Welcome! :))
Начинаем разбираться с getScriptPath() Итак, "поехали"
Такой код - вешает намертво квик - он даже не может толком загрузиться. Бо как начинает выполнение скриптов индикаторов сразу же при своей загрузке:
Скрытый текст
Код
message(getScriptPath())
Settings=
{
Name = "testGetScriptPath",
line =
{
{
Name = "test",
Color = RGB(0,0,255),
Type = TYPE_LINE,
Width = 1
}
}
}
function Init()
return 1
end
function OnCalculate(index)
return nil
end -- выход из функции OnCalculate
ок! "Спрячем" getScriptPath() в коллбек Init():
Скрытый текст
Код
Settings=
{
Name = "testGetScriptPath",
line =
{
{
Name = "test",
Color = RGB(0,0,255),
Type = TYPE_LINE,
Width = 1
}
}
}
function Init()
message(getScriptPath())
return 1
end
function OnCalculate(index)
return nil
end -- выход из функции OnCalculate
Скрипт благополучно и правильно отобразил путь
Ладно, удалим индикатор и по новой наложим на график. Что ж, и так всё работает.
Вернём getScriptPath обратно наверх. (см. первый вариант кода) не выключая квик, удалим и по новой наложим индикатор
1. Сделал тестовый скриптик и попытался наложить на график. Саму библиотеку qte - положил вместе с индикатором.
Скрытый текст
Код
package.cpath=getScriptPath().."\\?.dll"
package.path=getScriptPath().."\\?.lua"
require "qte" -- моя библиотека
Settings=
{
Name = "testThread",
line =
{
{
Name = "test",
Color = RGB(0,0,255),
Type = TYPE_LINE,
Width = 1
}
}
}
function Init()
check()
return 1
end
function OnCalculate(index)
return nil
end -- выход из функции OnCalculate
function check()
h = qte.getCurrentThreadId() -- в комментариях не нуждается
message(tostring(h))
end
Result -> Не прокатило, - он даже не появился в списке индикаторов.
2. Немного "допилил" скриптик - разместил "пути" и require - в функции Init()
Скрытый текст
Код
Settings=
{
Name = "testThread",
line =
{
{
Name = "test",
Color = RGB(0,0,255),
Type = TYPE_LINE,
Width = 1
}
}
}
function Init()
package.cpath=getScriptPath().."\\?.dll"
package.path=getScriptPath().."\\?.lua"
require "qte"
check()
return 1
end
function OnCalculate(index)
return nil
end -- выход из функции OnCalculate
function check()
h = qte.getCurrentThreadId()
message(tostring(h))
end
Result -> скрипт запустился, попутно выяснилось следующие вещи:
Все эти Ваши м-м э-э... так называемые графики и индикаторы-порисульки - работают в основном потоке квика
Чем больше Вы на "открываете" графиков и таблиц, чем больше наложите индикаторов - тем медленее будет Ваш квик.
Получается, имеет значение место расположения "путей" и функции require.
3. Вернул опять - всё, как было. Поместил "пути" и require в самое начало скрипта см. пример из "1"-ой версии
Result -> старина квик - не вынес всего этого (нувыпоняли... :) ) ) Он просто завис и даже экран побелел :) ))
Скорей всего: проблема в том, что по великой "умности" разработчиков - своей функцией getScriptPath - они нае... (перемудрили) самих себя. Всякий раз - она выдаёт совершенно разные пути. Причём, весьма "неисповедимые".
--------------------
Далее, исследование продолжать не стал - т.к. то, что нужно уже выяснил: индикаторы работают в одном потоке с квиком, есть ли разница где находится require или нет - уже нестоль важно (для меня) - да и с getScriptPath - похоже - никто не спешит разбираться.
либо, если некоторые параметры в таблицах - всё же изменились, и - они не могут быть "старыми" параметрами - тогда - ДА. можно достичь некоторого "ускорения"
если тут речь о API Quik - то это уже обсуждалось: https://forum.quik.ru/messages/forum1/message1507/topic215/#message1507 https://forum.quik.ru/messages/forum8/message965/topic151/#message965 Таким образом, нужно знать контекст плагинов - однако, это закрытая информация. Но, никто нам не мешает воспользоваться секцией экспорта квика (info.exe), через qlua-прокладку. Таким образом, воспользовавшись в своей dll (в формате QLUA C API) функцией из WinAPI GetprocAdress - можно получить доступ к усечённой версией QUIK API, а именно - теми функциями, которые объявлены в его секции экспорта. При этом, это всё будет абсолютно легально. Однако, функционал, конечно, будет сильно напоминать "тупайл". --- Повторюсь, не надо плеваться от QLUA-прокладки. В данном случае, это необходимое "зло". Если разработчики не собираются раскрывать для нас QUIK Plugin API - то, ничто не мешает нам сделать своё API. Все плагины и QLua в частности - всё располагается в контексте одного процесса - квика, и в его адресном пространстве. А значит, "окно в процесс" - у нс уже есть. Пишем свою dll (в формате QLUA C API) и реализовываем весь функционал, ограниченный только нашим воображением и функциональностью WinAPI. При том, опять же, на легальной основе.
--- p.s. Если у Вас по прочтении онного всё ещё остались вопросы - то, думаю, "знания 6 языков программирования" - так и не пошли на пользу.
конкретно о синхронизации времени - на выходных - брокер тоже показывает фантастическое время. Но, к понедельнику - всё становится синхронизировано. Я не спорю, что это может быть только у моего брокера и что мой вариант - не панацея. Было бы, конечно, куда проще - имей мы всю поступающую через шлюз информацию.
Можете подробнее описать, каким образом вы реализуете контроль целостности данных?
Цитата
Не отображались изменения позиций по срочному рынку.
В смысле, при покупке/продаже контрактов не изменялись позиции по клиентским счетам? Такие проблемы на бирже часто случаются. Очевидно, текущую позицию нужно считать в каждом роботе самостоятельно, а не полагаться на биржу. И при большом расхождении значений отправлять уведомления по sms и e-mail. И копию отправлять брокеру и на биржу, чтоб не расслаблялись.
для начала: to GOOGLE it -> site:moex.com "технический сбой" и... читаем/собираем всю информацию по всем описанным ранее сбоям.
насчёт самому считать... ранее попадались роботы-"меценаты" - они не ждали ответа на транзакцию в виде отображения параметров в таблице по позициям (не хотели тратить на это своё время). Потом, в газетах писали, что у такой-то фирмы отозвали лицензию и она вообще разорилась. К чему я это всё? К тому, что параметры безусловно считать нужно и по своему - тоже. Но, если параметры не соответствуют "ожиданиям" - то, нет смысла торговать в это время: либо закрывать позицию (если возможно) и "постоять в сторонке", либо снизить риски - уменьшить лимит по боту и инструменту.
sam063rus пишет: Также мониторится серверное время и локальное - при слишком большой разнице - некоторые алгоритмы - отменяются
Вот тут не понятно. Какие ошибки таким образом вы пытаетесь устранить?
моё время - синхронизируется каждый день по интернет штатными средствами Windows. Такая точность, которую она обеспечивает - меня вполне устраивает. Если расхождение между локальным и серверным временем > 1 сек то это простой способ определить нагрузку на канал брокера. Стало быть, торговля, слишком привязанная к актуальности параметров - отменяется, остаются только - позиционные алгоритмы.
Старатель пишет: о у брокеров отпадёт необходимость в его покупке.
тогда , что тут ещё можно обсуждать? К этому - и веду. Функционал - определённо есть (я сейчас говорю не только об этих "банальных примерах") > НО!!! Они не дают им воспользоваться. При том, что и у брокеров - "рыльце в пушку" бо как. по мимо всего прочего - они ещё имеют инфраструктуру.
поставлена задача - дать пользователям полный доступ из квика - к архивным данным (из папки Archive) - и что мы видим? А ыидим мы - тысячу и одну отговорок.
приведу более наглядный и из жизни пример - есть плагин strartvolat.dll - рассчитывает улыбки волатильности и всё-такое. Вопрос: пояему нельз было сделать для "всех" - возможность привязывать абсциссу к независимому источнику данных???
Alexey Ivannikov пишет: В такой парадигме уже давно и безпроблемно работают многие брокерские компании
моя компания - мне прмо предложила - если сделаете софт нетолько для клиентов НО!!! и для брокеров - они поддержат. Я - к сожалению, не смогу это потянуть....
Alexey Ivannikov пишет: ак что Ваше замечание тут несколько неуместно.
Арка - мои замечания... - уже давно в Ваших глазах ничего не стоят. Вы просто их игнорируете. Хотя стать Вашим конкуреном - дело весьма небольшого времени. Просто, я - как филантроп - люблю долго объяснять/наставлять/спонсировать своим кошельком Ваши "недоразумения".