А Я не против МТ5, так как знаю его хорошо. Я против указанных цифр и методики тестирования.. Относительно Вашего сравнения почти не возражаю. Я же написал здесь в ответ на данную тему. Но Вы не правы в одном. Луа встроен в терминал. Относительно скорости исполнения - в луа можно подключать DLL на нативном коде, как и в МТ5 следовательно, скорость исполнения будет примерно одинаковая. Мне незнакомо решение для квик со встроенным в него МТ5. Если знаете дайте ссылку, сделаю тест.
Еще бы рюшечки по краям сделать и чтобы вокруг экрана огоньки, как на елке сверкали. Типа как на Новый год. --------------------------- Если огоньков нет, то фейерверки, чтобы из экрана каждый час вылетали и трехкратное ура звучало в динамиках. Типа как бы парад на Красной площади. ------------------ А то какой-то скучный игра получается.
1) фотографирует сидящего перед экраном. 2) считывает отпечатки пальцев с клавиатуры 3) запрашивает в паспортном столе адрес прописки вроде бы все. да чуть было не забыл, 4) проверяет банковские счета. теперь все
А теперь про числа, которые написали авторы. они указали, что скорость ЛУА в 60 раз меньше ,чем у МТ5. В на моем компе скорость теста 0.125 мкс (см выше) т е 125 нс если на МТ5 в 60 раз быстрее, то это 2 нс. ------------- Теперь берем тест для Intel Core i5 2500 3.30GHz на СИ умножение целых числе (это время должно быть меньше чем плав тоска) (первое что нашел в инете) Время 12 нс. А я исполнял тест для Луа на одноядерном компе Таким образом, по оценке этих горе тестировщиков, МТ5 на моем компе работает в 6 раз (2 нс вместо 12) чем на процессоре Intel Core i5 2500 3.30GHz ------------------------ Резюме МТ5 обгоняет не только луа но и любой процессор в мире.
судя по тесту, товарищи плохо знают луа. и вообще плохо пишут тесты. поясняю: Очень безграмотно отображать абсолютное время вместо приведенного на одну операцию. Теперь про тест для луа. Берем исходный текст. приведенное время выполнения вычисления составит 0.353 мкс , а если мы переменные определим как локальные то получаем 0.187 мкс. Т е время в 2 раза меньше. А если переменные f1..а3 поместить внутри функции то получаем 0.125. Т е как видим скорость реально в 3 раза больше если знать луа
Код
-- TestFloat
local f0=0.0
local MAX_SIZE=1000 --35000
function Start()
local t=os.clock()
TestFloat()
local res=((os.clock()-t)*1000000)/(MAX_SIZE*MAX_SIZE)
-- результы выполнения занесем сюда
check=f0
print("TestFloat time=" ..res.." мкс check="..check);
end
function TestFloat()
-- в цикле мы проходим до значение на 1 меньше, чем MAX_SIZE
local f1=123.456789
local f2=98765.12345678998765432
local f3=12345678943.98
for i=1, MAX_SIZE do
for j=1, MAX_SIZE do
f0=f0+(f1/(i+1))-f2+(f3*i);
end
end
end
-- запускаем скрипт
Start()
Есть большая неудобная проблема с графиками. Когда на график инструмента накладываешь исторические данные, то в цене скажем могут появляться разрывы, пустые свечи. Их видно по признаку существования свечи, это не проблема. Проблема в отсутствии цифр на свече. Приходится постоянно бегать дополнительно по сегодняшнему графику, и искать последнее известное значение. Хотелось бы иметь возможность задавать в настройках возможность копирования последнего значения close на несуществующие свечи, что бы не возникало разрывов
Готов ответить на ваши вопросы.
Спасибо
Надо изменить логику алгоритма, так как исторические данные все известны и они не меняются, то циклы применять нет необходимости.
Алексей Ширяев написал: короче сделал я что-бы изначально при загрузке данных параметров из файла контролировалось присвоение им именно числового параметра с помощью "tonumber". Вроде пока заработало. Самое интересное, что при расчетах переменные ведут себя как обычные числа, а вот при сравнении - как строки.
Поясняю: Дело в том, что строки тоже сравниваются как числа. поэтому луа работает быстрее всех других скриптовых языков. сравниваются не ASCII коды а хеш. Так как вычисления выполняются над числами, то луа автоматом переводит формат из строки в числовое. а вот сравнивать можно и числа и строки, поэтому луа не может угадать, что Вы сравниваете и необходимо явно переводить формат.
тот самый написал: в qlua - существет две совершенно раздельные виртуальные машины: qlua-indicators VM и qlua-script-VM. Между собой - внятно, они могут общаться: 1. через LUA C API 2. и через файлы (хотя, по большому счёту - это можно включить и в п.1.)
О том, как это сделать - многое написано на форуме. Так что "ask to GOOGLE": site:forum.quik.ru "require"
либо: quik2dde.ru
Фактически даже не две, а три машины в скрипте - две машины, основной поток и main.
а еще лучше написать так: local x1=tonumber(tbl_set.volume_opt) local x2=tonumber(tbl_set.volume_opt_ex) if x1 and x2 and x1>x2 then CHANGE_OPT_price = Send_OPT_Transaction() end
Алексей Ширяев написал: if tbl_set.volume_opt > tbl_set.volume_opt_ex then CHANGE_OPT_price = Send_OPT_Transaction() end -- эта строка приводит к ошибке "attempt to compare number with string"
В сообщении об ошибке написано, что Вы пытаетесь сравнить число со строкой следовательно надо написать так:
if tonumber(tbl_set.volume_opt) > tonumber(tbl_set.volume_opt_ex) then CHANGE_OPT_price = Send_OPT_Transaction() end
и вообще. На фондовом рынке долго не живут (у большинства кончаются деньги) Поэтому сделано под новое поколение буратин. Ну а то, что есть долгожители ( я в том числе) это скорее нонсенс, чем правило. поэтому - новому поколению игроков - новый интерфейс, будет что изучать и на что ругаться, т е чем восхищаться. Софт все тяжелее и тяжелее, но зато брюлечки и завитушки всякие - ляпота.
Основная проблема при переходе с QPILE на LUA будет в отображении таблиц и изменении самой логики работы программы. Поэтому никакой конвертор делать конвертер не поможет. Единственный способ - это переписать программы QPILE на LUA. Оставить QPILE тоже не смогут, так как в новых версиях терминала надо будет поддерживать совместимость а именно это и собираются прекратить. Резюме про телегу и сани я уже написал. Поэтому пользователи QPILE приступайте к переписи своих программ на LUA, пока еще не поздно. Этот процесс не быстрый, как возможно некоторым ка-жет-ся.
Тогда в LUA можно собирать историю любую. Например, делал сборку истории очереди заявок с сохранением лишь новых значений. Сжатие данных по сравнению с хранением целого стакана примерно на уровне 60%.
В инете продают. Но полагаю, когда увидите цену, то желание отпадет. ------------------------------------------------------------------------ Хорошая информация стоит дорого. На халяву ее не получить. ------------------------------------------------------- Поэтому либо собираете сами, либо мечтаете о халяве, либо платите большие деньги.
Green написал: > Вы случаем форум не перепутали? Согласен, такой вопрос можно задать на любом программистском форуме. Этот форум интересен по след. причинам: - интересна данная предметная область (хочу написать робота) - я думаю, здесь в основном (не считая тех, кто не отличает луи второго) независимые программисты, которые не скованы правилами предприятий и сами исследуют, экспериментируют - повышенные требования к надежности ПО Поэтому интересно, используют ли опытные люди какие-либо математические (строгие) методы написания и отладки ПО (верификация, синтез из спецификации) или в основном используют обычное тестирование и здравый смысл.
Во всяком случае, надеюсь, кому-то это тема покажется интересной и перспективной.
По-моему мнению Ваш подход, как сказать по-мягче, не совсем в русле решаемых задач. Дело в том, что проблема создания торговых роботов лежит совсем в другой плоскости нежели возможность написать и отладить программу на каком-либо языке программирования. Проблема торговых роботов - это проблема искусственного интеллекта. А эта проблема связана с формализацией задачи обучения самообучения, а не с формализацией написания программ. Приходите на мой сайт.www.kamynin.ru Поговорим на данную тему.
Николай Камынин написал: Хорошо бы еще документацию на терминал QUIK прочитать Раздел 5 Все разжевано и с картинками. Если будет опять непонятно, то спрашивайте конкретно и по одному вопросу.
Добрый день, Николай. Спасибо, за ваше сообщение. Скажите, а вы работали в системе webQuiK, или просто даете советы не вникнув в суть вопроса? Во первых обычный клиент я поставить не могу,Мануалы кстати я смотрел и писал об этом выше, но как их адаптировать под WEB не понятно. Во вторых интерфейс webquika хоть и очень похож но все таки отличается от обычного клиента? По этому очень хотелось бы получить ответ от того, кто реально пользуется WebQuik. А вопрос у меня один , отложенные ордера. Если можете дать ответ по существу был бы очень благодарен.
Вы случаем форум не перепутали? ---------------------------------------------------- Я конечно не против , чтобы вечером, после работы, либо по праздникам, но не до такой же степени!!
Хорошо бы еще документацию на терминал QUIK прочитать Раздел 5 Все разжевано и с картинками. Если будет опять непонятно, то спрашивайте конкретно и по одному вопросу.
Sergey Gorokhov написал: ЦитатаVasya Ivanov написал: Т.е. я прав через DDE историю вытянуть не получится?
Не правы, если история есть в таблице то можно вытянуть по DDE
Извиняюсь, я неправильно сформулировал мысль: в первую очередь интересна история стакана. А он отображает только текущую информацию. Итого, из трех способов остается QLua.
Тогда последний вопрос: Quik как-то различает заявки выставляемые через QLua и вручную? Т.е. нужно ли у брокера спрашивать разрешение на использование такого "робота"?
Читайте регламент брокера. Все , что не запрещено - разрешено.
если Вы используете много индикаторов, то рекомендую изучить их применимость , так как все индикаторы - это примитивные фильтры с очень слабыми фильтрующими свойствами и возбуждающими фантазию названиями. Поэтому можно смело выкинуть процентов 90 из них. -----------------------------
есть еще один источник большого потока данных - это опционы. Если Вы с ними не работаете (а если вы не профи, то рекомендую с ними не работать, так как опционы имеют наибольший уровень риска ), то отключите их как класс.
Полагаю, что получаемая Вами скорость - соответствует данному велосипеду --------------------------------------------- Не следует ожидать от мопеда КВИК скорости болида формулы 1.
sandyman написал: В продолжение темы: в основном все рекомендации которые даёт техподдержка в случае замедления работы программы так или иначе связаны с уменьшением потока загружаемых с сервера брокера данных, а как объяснить замедление работы в случае отсутствия такого подключения, когда данные уже загружены? Вот сижу я в выходные и без подключения к серверу пытаюсь анализировать графики, которые предварительно загрузил накануне: к одной ТТП привязаны 3 графика разных тайм-фреймов - при смене инструмента в ТТП смена графиков происходит через 6-10 секунд! Это как объяснить и как лечить?
Т е Вы рисуете графики по параметрам. Верно? Это значит, что Вы храните всю историю торгов в dat файле. Какой у Вас размер info.dat?
Imersio Arrigo написал: А в чем именно "крещение"? Темная тема не работает под wine-ом. Виснет на старте. А в светлой все нормально.
Ну вот в этом и вопрос - сделать, чтоб тёмная тоже работала. Сейчас выходит так, что скачал дистриб квика, поставил с нуля и пойди догадайся почему оно не работает. Если следом они и со светлой что-то сделают - вообще печально будет.
Николай Камынин написал: и боже упаси Вас открывать браузеры перед загрузкой терминала QUIk.
а почему именно перед загрузкой квика и как браузер вообще влияет на работу квика? Это как-то связано с загрузкой канала связи?
это шутка, а-ля "Собачье сердце" А если серьезно, то все современные браузеры сильно грузят комп ( обычно браузер создает порядка 60 потоков) . А 60 потоков будут тормозить любое железо и каналы. поэтому , если надо ускорить загрузку квика, то "и боже упаси...".
попробуйте сначала подключить QScalp, а потом сделать соединение. -------------------------------------- Кроме info.dat надо удалить еще некоторые файлы с расширением dat, но какие, для этой версии, надо узнать у разработчиков.
Андрей 77 написал: function ucb(index,ds) c = ds:C(index) ... end
for i=1,n do sec.ds = CreateDataSource(sec.ClassCode,sec.SecCode,sec.Int) sec.ds:SetUpdateCallback(ucb) end
т е Вам не нравится такое решение:
for i=1,n do sec.ds = CreateDataSource(sec.ClassCode,sec.SecCode,sec.Int) sec.ds:SetUpdateCallback(function (index) ucb(index,ds) end) end -------- по причине лишнего вызова функции? Понятно.
Как вариант, еще можно перед закрытием свернуть окна графиков, либо выходить из квака на закладке, где нет окон. ------------------------- Сворачивание окон графиков существенно разгружает процессор.
попробуйте перед стартом QUIK убить info.dat. ---------------------------------------------------------- и боже упаси Вас открывать браузеры перед загрузкой терминала QUIk.
Для фьючерсов таблица позиций по клиентским счетам таблица ограничений по клиентским счетам -------------------------------- Если методом тыка и авось не получается, то пора читать документацию.
Аксиома : Не бывает программ без ошибок. следствия из нее: 1) В программе всегда есть ошибки, время которых еще не пришло. 2) Невозможно сделать тест, который выявит все ошибки.
Sergey Denegin написал: Очень странно, но у меня такая же картина со скриптами. Но при этом если робота запустить вручную, даже при отсутствии соединения с сервером, он прекрасно запускается и никакой ошибки не выдает. Он у меня может работать по историческим данным. Как тогда объяснить то, что он не запускается автоматически при старте Квика?
Причины такие же. --------------------- При автомате робот запустится раньше, чем будет принята вся информация. Именно это и приведет к ошибкам. -------------------------- Запуск в ручную это не тоже самое. --------------------- Проверяйте.
при запуске ( т е при соединении с сервером) нет информации, а у Вас в роботах нет проверки на ее отсутствие в результате получаете nil и ошибки , которые аварийно завершают работу скриптов
Сергей Иванов написал: Не один год надеюсь, что будет внедрена доработка входа в интерфейс с паролем. Сначала была необходимость чтобы посторонние случайно не залезли в работающую программу на компьютере, Теперь я использую виртуальный сервер, где работает Quik. Было-бы намного спокойнее если открыть интерфейс можно было только с паролем. Планируется-ли подобная опция?
Вообще-то с помощью какой проги Вы отошлете заявку на сервер квик не имеет никакого значения. Важен лишь факт подключения к серверу, а для этого Вы вводите пароль и логин в терминале. ------------------------ Поэтому Ваши беспокойства должны быть относительно ключей, а не запуска терминала QUIK. ---------------------------------------------- Торговый терминал QUIK - это лишь способ подачи поручений брокеру. Их можно и по телефону подать.
PFelix написал: Здравствуйте. При написании индикатора столкнулся с проблемой: конструкция cndl,_,_=getCandlesByIndex(Settings.Name_gr,0,index - 1,1) local PH = cndl[0].high local PL = cndl[0].low иногда выдает PH = 0 и PL - тоже Но я хочу написать универсальный индикатор, который бы использовал на входе любой график (и с нулевыми значениями тоже) Как сделать проверку на корректность данных? Спасибо.
Если я правильно понял, то ноль получаете для встроенных индикаторов которые читаете с графика. Проще всего делать самому расчет нужного индикатора. --------------------------- либо надо делать так: cndl,_,_=getCandlesByIndex(Settings.Name_gr,0,getNumCandles (Settings.Name_gr) - 1,1)