OnCalculate вызывается на каждую обезличенную сделку, а getParamEx читает из срезов ТТП , ТТП обновляется илшь при изменении и если данные еще не устарели в пришедшем срезе Т е расчет по OnCalculate и по getParamEx скорее будут не совпадать, а иногда совпадать.
Пардон, действительно, нет надобности обновлять историю которая уже есть в терминале. Было бы хорошо, если бы история в терминале в начале сессии не обновлялась, а добавлялась.
попробую добавить свою ложку в вашу бочку. ------------------------------------- Полагаю, что речь идет о реальном времени. Т е рассмотрим реальную торговлю, а иначе нет смысла вообще в этой дискуссии. ---------------------------------------------------- Обмен сообщениями сервера и терминалов осуществляется асинхронно. Свечи идут от сервера синхронно с неопределенность в одну сделку и один тайм. Свечи формирует сервер на основе двух условий - тайма и события(сделки внутри тайма). Следовательно какая очередная свеча должна быть, мы знаем и без сервера (если время у нас точное) ------------------------------------------------ Если свечи нет, то либо время не то, либо нет событий. Свечи - это нелинейное сжатие данных задним числом. Т е свеча всегда есть , когда пройдут все события включаемые в нее и завершиться тайм. ------------------------- Поэтому на стороне терминала невозможно знать точно текущее состояние на сервере(т е на бирже) Запрашивать сервер о количестве свечей не имеет смысла, так как мы это знаем с точностью до последней свечи (последнего тайма и последней сделки)
Николай Камынин пишет: Если надо работать с очередями с 5000 элементов, то надо просто написать спец модуль такой очереди для луа на СИ. ------------------------------------------------- Я делаю именно так для обработки больших массивов, очередей, списков, пулов, ну и т д --------------------------------- Полагаю, что если чел смело берется за потоки с очередями в 5000 элементов, то создать спец модуль очереди для него - раз плюнуть.
Мне кажется что различные очереди в скрипте как раз проще делать на Lua.
Если важно ПРОЩЕ, то, безусловно, Луа, но если важно БЫСТРО то , безусловно, СИ Но для очередей в 5000 элементов - важно быстро, так как иначе - нет смысла .
Deserf пишет: Насколько я понимаю, платформа Quik в скрипте QLua не в состоянии отследить ВСЕ выполненные сделки? Если сделка одна по одной цене, тогда еще хорошо, но по двум-трем ценам, то скрипт опускает хобот, поймав только одну цену, ее лоты и цену
Нет, скрипт поднимает заднюю ногу и писает на своего создателя.
стакан - это отображение очереди заявок. очередь заявок формирует сервер биржи. Он же производит исполнение сделок. Так вот, когда приходит заявка на покупку по цене выше лучшей цены продажи, то она в стакане должна встать выше лучшей цены продажи. Но она туда не ставится а производится совершение сделок и удаление из очереди заявок на продажу которые удовлетворяют данную заявку на покупку. Вот эти состояния очереди и не передает брокерам сервер биржи. т е такие не уравновешенные стаканы клиенты брокеров не видят. ----------------------------------- Как правило, сервер брокера транслирует клиентам не стакан а лишь изменения в стакане (про квик не знаю, но так делает транзак). Т е в терминале клиента тоже возникают момент удаления, перемещения и замещения записей. Если состояние изменяющегося На терминале стакана доступно клиенту, то будем видеть переменное число записей в стакане. Таким образом, те состояния стакана, которые видим в терминале - могут содержать переходные состояния с переменным числом элементов. Такой вид стакана - это не реальное состояние очереди, а техническое состояние таблицы на стороне терминала. Т е на сленге можно назвать это мусором. Показ такого мусора никто не регламентирует.
еще раз повторю для любителей справочника: float -действительное 4 байта. точность 7 значащих цифр. double -действительное число с двойной точностью 8байт точность 15 значащих цифр, так как мантисса хранится в нормализованном виде long double- длинное действительное 10 байт. точность 19 значащих цифр. ---------------------------------- Дополню. проблема скорее всего у Вас будет не с точностью(погрешностью), а с тем что перевод из десятичной формы в двоичную и обратно очень часто не может быть выполнен точно. Поэтому давным давно для финансовых операций фирма IBM предложила и долго использовали двоично-десятичную математику в которой финансовые операции ( а на бирже лишь такие) всегда вычисляются точно. Но это в прошлом.
user пишет: Ту информацию, что ближе к спреду надо бы обновлять более приоритетно.
При чём тут приоритетное обновление?! Есть правила торгов, согласно которым исполняются ордера. Согласно этим правилам, ордера всегда исполняются последовательно (пусть даже по несколько штук в единицу времени) в порядке очереди. Исполнение ордеров приводит к изменению стакана таким же образом в строгой последовательности. Если соблюдать эту последовательность изменений при отображении "стакана", то никогда даже при частичном обновлении "ценовых уровней" не возникнет пересечения котировок. Отсюда вытекает вывод, что в QUIK эта последовательность изменений строк в "стаканах" нарушается.
Предположу, что не совсем так. Просто сервер биржи не транслирует стакана, пока не урегулирует очередь. Но обновление очереди на сервере QUIK или в терминале может проходить без запрета и мы видим промежуточное состояние стакана. Но это состояние уже прошло, как и много других до того как мы это увидели. Кроме того, право разработчика сделать так как он считает нужным, поскольку нигде не регламентируется работа КВИК с очередями.
Попробуйте так: ------------------------------ local t=getSecurityInfo('',left.name) if t~=nil then local ClassCode=t.class_code if ClassCode~=nil and type(ClassCode~="table") and ClassCode~="" then Subscribe_Level_II_Quotes (ClssCode, left.name) end end
Рекомендую 1) поставить на комп луа со SciTE. 2) без квика на луа сделать простые примеры с таблицами, с циклами, с печатью c фалами. 3)После того, как будет все понятно и просто, переходите к чтению документации по QLua и делайте простые примеры но на квике с таблицами циклами файлами. 4) После того, как будет все понятно и просто, переходите без луа и без квика к написанию своего алгоритма. 5) После того, как будет все понятно и просто с алгоритмом, переходите в QUIK и пишите на луа то о чем мечтаете. Успехов в обучении
Deserf пишет: А как же тогда замену информации провернуть, тем более я раньше это делал?
Проще это делать так: ----------------------------- 1) создаете таблицу 2) читает в нее все из файла 3) меняете в таблице все, что хотите 4) пишите таблицу в файл (режим "w") ----------------------------- и будет Вам счастье
можно и так local file = io.open(ImyaCFGFaila, "w+") file:write("22") file:flush() file:close() ------------------ file:seek("set", 15) - смещает на 15 байт - вот эти байты вы и видите в редакторе.
В данном случае следует учитывать не погрешность вычислений а дискретность (шаг дискретизации) значений(цены). Он указывается биржей для каждого инструмента свой. Например, сербанк 0.01. при цене 100 имеем шаг дискретизации 1/10000 т е не более пяти значащих цифр. Тип float - 7 значащих цифр. double -15 цифр. Получаем, погрешность вычисления даже с типом float меньше шага дискретности в 100 раз. ---------------------------------------------------------------------------- Резюме, точность вычисления (величина обратная погрешности ) для биржевых цен идеальная. Погрешность вычислений практически не влияет на величину прогнозируемых цен.
Возьмите sciTE он к тому же написан на луа и в него модно добавить различные примочки и более того в него встроен компилятор и даже есть с отладчиком луа ---------------------------- И будет Вам счастье
Если надо работать с очередями с 5000 элементов, то надо просто написать спец модуль такой очереди для луа на СИ. ------------------------------------------------- Я делаю именно так для обработки больших массивов, очередей, списков, пулов, ну и т д --------------------------------- Полагаю, что если чел смело берется за потоки с очередями в 5000 элементов, то создать спец модуль очереди для него - раз плюнуть.
Проблема (возможно кто-то уже решил): ------------------------------ Метки на графиках всегда привязываются к левой оси Y. Причем, их нельзя привязать к правой. А индикатор по умолчанию - к правой. Т е метки можно применить лишь к индикатору, который привязан к левой оси. А если графика два - цена и объем, то метки липнут к графику, который на левой оси (т е метки по цене, а слева - объем) в результате на экране меток нет. ------------------------------------------- Предложение (делал давно, наверное забыли) 1) сделать возможность перепривязывать метки по осям 2) сделать автоматическое привязывание меток и индикатора той оси, к которой привязан график с указанным тегом.
Deserf пишет: Здравствуйте, можно сделать по тикам, но тогда графики с идентификаторами tag1 и tag2 должны всего лишь быть тиковыми (во вкладке период графика указать "tick")
В реале, в текущей свече индикатор рассчитываться по тикам,но отображается лишь текущее значение.
Это не тарабарщина а символ нулевого кода в тестовой строке. Попробуйте отключить отображение управляющих символов в редакторе текста, на котором смотрите сообщение или убрать их из выводимой строки.
DronGO пишет: Кстати table. s insert table. s remove, работают очень медленно, в сотни раз медленнее, чем lock-free системы. И в своей работе их использовать не стал.
Самый быстрый способ удалить элемент таблицы - присвоить ему nil.
Попробуйте так: ------------------------------ local ClassCode=getSecurityInfo('',left[i].name).class_code if ClassCode~=nil and type(ClassCode~="table") and ClassCode~="" then Subscribe_Level_II_Quotes (ClssCode, left[i].name) end
В некоторых индикаторах в квике есть заморочки с периодом вместо используется удвоенное значение. Сравнивал AMA,SMA,EMA, RSI соответствуют и совпадают.
Михаил, Вы заблуждаетесь. Есть ограничение на чиcло локальных переменных Я уже писал об этом на форуме, а читал в документации ссылку дать не могу, так как не фиксировал. Более того, это ограничение я уже наблюдал в скриптах индикаторах. Пришлось повозиться, пока дошло что это оно самое.
Если изучать Луа по несколько минут в день, то работающий скрипт, от которого будет реальная помощь а не сообщение "Хелло луа" получится в следующем году. ------------------------------------------- процесс познания увлекателен, но утомителен, особенно когда никому не доверяешь.
Alexey K пишет: Хочу чтобы скрипт отслеживал определенное нажатие клавиши. Можете подсказать где и что почитать, чтобы сделать это без лишних заморочек?
Если нужно отследить с вашей таблицы, то поможет то, что предлагает Николай Камынин , а если нужно круче , то придется писать приложение или подключать стороннюю библиотеку.
А если не делать умное лицо и нужно просто и незатейливо, то пишется скрипт js из трех строчек. Этот скрипт дописывает файл протокола клавиш. Вызывается по сочетанию клавиш (быстрый вызов). Протокол клавиш читается откуда угодно.
Михаил, Я пытаюсь представить Ваше лицо в момент написания этого послания человечеству. Ну, то что оно не умное, это понятно, но какое?
Виталий пишет: Я не знаю ни языка qpile, ни lua, но мне надо сделать программу, воспроизводящую звуковой файл при пересечении двух АМА с разными периодами. Какой из этих языков лучше изучить для реализации данной программы?
))) Мне нужно поменять резину на колесах. Какое монтажное оборудование посоветуете? А если серьезно, то пару тыров заплатить программеру и забыть.
Не тот пример (очевидно, потому что, кроме колес ничего у авто больше открутить нельзя). ---------------------------------------------- Например так , надо сделать тормоз к авто, так как тормоза вообще нет, да и авто нет, но есть телега, но без коня. --------------------- Но нужен тормоз, его тоже нет.
Я Вас искренне спрашиваю, а Вы обижаетесь. Стаканы получать без открытия просили не в прошлом году а уже десять лет, еще когда лишь QPILE был, потом когда перевели все функции QPILE на луа тоже просили (сам лично просил) это было лет пять назад. Т е то была вполне естественная проблема. То что просите Вы, по моему пониманию - это невозможно технически и бессмысленно практически. попробуйте ответить на мой вопрос про базу отсчета. Допускаю, что Вы в этом не разбирались, но настоятельно рекомендую изучить каким же образом мы на компьютере узнаем на сколько точно в миллисекундах локальное время отстает или опережает время биржи. Посмотрите девиацию задержек ответов сервера. Я этим вопросом занимался подробно поэтому Вам и написал.
Николай Камынин пишет: Процесс увлекательный, но бессмысленный.
Смысл всегда есть. К примеру не было активности, а потом сразу 10 стаканов пришло. Как определить изменения в каком стакане повлияли на другие?(Т.е. какой стакан первым обновился?) В лучшем случае, можно получить время сервера "SERVERTIME" и предположить, что именно это время когда, был сделан снимок стакана, а оно с точностью до секунды. А если стакан изменится несколько раз за сек?Ставить разным стаканам одинаковую временную метку? Или какие то копии стакана проигнорировать?Какие? Первую копию или последнюю оставить? Как синхронизировать ленту всех сделок с поступающими новыми стаканами(может последний стакан отстаёт на 1-2 сек)? А определить должно быть просто. Время последнего внесённого изменения и есть время этого стакана.
А можно пример из жизни, а то Ваш пример из страшного сна.
Sam Gold пишет: Здравствуйте! Мне нужен совет, я не знаю к кому обратиться для создания торгового робота. Вопросы которые для меня актуальны: 1) Какой язык программирования оптимальней для работы через quik 2) Стоит ли доверять частным лицам или все таки это должна быть компания (пускай маленькая) 3) Могу ли я рассчитывать на нормальную оболочку у софта. Или будет все совсем кустарно и архаично
Если не в ту тему, то с ориентируйте пожалуйста куда идти и к кому обратиться. Буду очень признателен. Кто вообще лидеры рынка и кому стоит доверять?
1. Неважно. Исполнитель сам выберет подходящую среду программирования (если он в состоянии это сделать) 2. Компания в подавляющем большинстве случаев наймет того же частника, но ей вы тоже заплатите 3. Можете. Все зависит от глубины вашего кармана
Вот хорошая статья , которую имеет смысл прочесть перед заказом робота.
Михаил скромно не сказал, что рекламирует свой сайт. А статью, которую Вы поместили на сайт написана любителем торговать на форексе и освоившим написание в метатрейдере. ------------------------ Ямщик ты о чем поешь? Так что вижу так и о том и пою. А что видишь-то? Степь, да степь кругом.
Интересно узнать от какой базы считать время с погрешностью в миллисекунды. И что потом делать с этими циферками на компе. Это подобно нарезанию морской волны на кусочки с погрешностью мм с помощью бензопилы.
Кроме того, имеющийся в LUA механизм подключения модулей позволяет создавать модули на любых языках программирования и подключать любые сторонние библиотеки, реализованные в виде DLL, чего сделать в QPILE невозможно.