не могу снять с графика цены параметры фрактала, значение всего одного параметра вытягиваемого с указываемого на графике идентификатором графика фрактала равно нулю на 30 последних свечах
не могу снять с графика цены параметры фрактала, значение всего одного параметра вытягиваемого с указываемого на графике идентификатором графика фрактала равно нулю на 30 последних свечах
Если память мне не врет, то индикатор фрактала в квик работает в зад. Т е записывает значения в прошедшие свечи. Поэтому в текущей свече будет всегда ноль. ----------------------------------------------- Это чтобы работа с КВИК не казалось не медом.
т е отвечать на поставленные вопросы Вы не хотите. Например, Вы можете показать результаты своих тестов задержки для любого брокера не называя его? или таких тестов вы не делали? Т е вам это по...? для информации привожу результаты мониторинга задержки ответов за вчера:
expected (to close '{' at line 39) near '[' в линии 39 отсутствует закрывающая скобка для '{} около '[' ------------------------------------------------------ это че Вы и жевать за меня будете? - АГА!!!
чтобы решить проблему надо: 1) синхронизировать часы компьютера с сервером времени 2) в момент задержки посмотреть диспетчером задач ( но лучше собрать за день в лог файл) параметры системы (загрузка процессора, объем пиковой памяти и т д) 3) записать в лог файл в течении дня информационные параметры квика. 4) на основе этой информацию скажу причину.
это наверно на учебном сервере? возможно не проходит По рынку и еще Вы как-то странно задаете, если по рынку то зачем цена если по цене то почему по рынку?
можно делать еще так. создаете файл или коллекцию используемых классов и бумаг после этого ищите лишь в этой коллекции вообще- настоятельно рекомендую переходить на луа. По многим причинам, В частности в вашей задаче поиск будет осуществляться существенно быстрее так как строки сравниваются как целые числа (по хешам)
Добрый день Вопрос к разработчикам QUIK. Наблюдаю следующую картину. 1) В информационном табло Задержка данных при обмене с сервером составляет при малой загрузке сервера брокера (нет торгов или вечерняя сессия) от 63 до 170 мс при большой загрузке (начало торгов активная сессия) 150 ... 250 мс (временами до 1 сек) 2) пинг на ip севера дает 16 мс ---------------------------- Получается, что запаздывание ответа от сервера терминалу в 10-20 раз больше, чем запаздывание за счет каналов связи. -------------------------- Вопрос: 1. Какая возможная причина такого запаздывания ответа сервера брокера? 2.Брокер умышленно создает дополнительное запаздывание? Верно? 3. Это делается средствами QUIK или доп оборудованием? 4. С какой целью это делается? Ваши варианты. Спасибо
Андрей Мурга написал: У меня слип(120000000000) делает 100 меседжей в секунду
А в документации написано так: NUMBER sleep(NUMBER time)
Параметры:
Параметр
Тип
Описание
time
NUMBER
Время, на которое приостанавливается выполнение, в миллисекундах
Пример: Sleep(1000) -- приостановка выполнения скрипта на одну секунду ------------------------------ Обращаю ваше внимание, что в документации ошибка: В первом случаем написано sleep, а в примере Sleep. А это две большие разницы. Может быть у вас не тот слип. Вот пример сообщение будет отображаться 1 раз в секунду 100 раз.
Скрытый текст
run=true; function main() count=0; while run do if res then message(res) else message("полет нормальный") end count=count+1; if count>100 then run=false end sleep(1000) end message("приземлился") end
проблема решается так: 1) создаем очередь сигналов пересечения 2) в колбеке ТВС каждое новое пересечение запихиваем в очередь 3) в функции main на каждый сигнал из очереди посылаем соответствующую транзакцию и сигнал убираем из очереди --------------------------------- Т е обработка колбеков должна осуществляться с помощью очередей. Я делаю в скриптах именно таким образом.
rozmin написал: Проблема: например, я открываю позицию покупка 5 контрактов по 10 руб, потом покупаю ещё 5 по цене 20 руб, потом продаю 5 контрактов по цене 30 руб. Не понятно, какая из позиций закрылась, первая покупка по 10 руб или вторая покупка по 20 руб?
Предлагаю решение - проводить соединяющие линии между сделками.
Попробую объяснить популярно, в чем ошибка спрашивающего. Так как на бирже совершаются обезличенные сделки по стандартизованным продуктам, то у любого игрока есть лишь одна позиция по каждому инструменту. Т е если мы совершаем сделку (биржа - это место совершения сделок) , то мы изменяем параметры позиции по инструменту ( т е не создаем еще одну, а изменяем существующую позицию по данному инструменту) Может быть много позиций, но по множеству инструментов. ---------------------------------- Теперь о позиции по инструменту. возможны следующие состояния ------------------------ рынок акций или облигаций: открыт лонг на свои деньги открыт лонг на заемные деньги закрыт лонг (продажа своих бумаг ) открыт шорт (продажа заемных бумаг) вне рынка - позиция нейтральная(нулевая) ------------------------------ рынок фьючерсов: открыт лонг открыт шорт вне рынка - позиция нейтральная ------------------ примерно так
local t = { ["CLASSCODE"]="SPBFUT", ["SECCODE"]="RIH6", ["ACTION"]="NEW_ORDER", ["ACCOUNT"]="SPBFUT00b52", ["CLIENT_CODE"]="99883", ["TYPE"]="L", ["OPERATION"]="S", ["QUANTITY"]="1", ["PRICE"]= "70500", ["TRANS_ID"]="1" } run=true; function main() count=0; while run do --res=sendTransaction(t) if res then message(res) else message("полет нормальный") end count=count+1; if count>100 then run=false end sleep(100) end message("приземлился") end
function OnStop(s) run = false end
Если Вы запустите ваш скрипт то Вы никогда не сможете его остановить. так как окно сообщения которое будет выводится будет блокировать ваши попытки что-нибудь сделать ( это прикол разрабочиков квика, чтобы жизнь седом не казалось) ------------------------------- Поэтому я написал вам пример который крутится 100 раз и завершается. отправку транзакции я закоментировал т е этот пример лишь покажет вам сообщение ------------------------ далее если захотите завалить сервер своими транзакциями то уберите -- перед res=sendTransaction(t) и завалите брокера своими заявками -------------------------------- Успехов
дополню ранее сказанное. пропуски срабатываний у Вас будут всегда происходить по следующей причине. --------------------------------- Данные в ТВС приходят пакетами. Т е сделки следующие с малым интервалом друг за другом придут к Вам одновременно. ----------------------------------- При этом колбек будет срабатывать на них последовательно и непрерывно. Т е например две сделки совершены с интервалом 100 мс но пришили в одном пакете. колбек на них отреагирует два раза но с интервалом полагаю менее мс. Т е у Вас произойдет анализ статуса на обе сделки одновременно. Если первая изменит статус а вторая вернет его обратно, то Вы этот сигнал не увидите и заявку не выставите. -------------------------------------- Эту ошибку никаким железом не исправишь - это методическая ошибка (ошибка метода). Ее можно устранить лишь изменив алгоритм работы робота. Теперь вроде все.
могу предположить следующее. Так как Вы пользуетесь колбеками , а они не синхронизируются то у Вас status успевает изменится туда и обратно до того момента, как Вы на него прореагируете
У БКС сервера работают медленно ( возможно так делают специально, чтобы на вип сервер подключались за денюшку, возможно старое железо, возможно клиентов много и сервер не справляется), короче реакция сервера медленная. Сейчас у нового брокера у Вас раз в 5 быстрее реакция сервера. В результате Вы сейчас просто не успеваете обрабатывать status и теряете сигнал. ----------------------------- Чем медленнее будет рынок, тем лучше у Вас будет срабатывание. -------------------------- Короче, проблема у Вас в потере сигналов status. Надо переделывать алгоритм обработки сигналов, либо работать со свечами. О чем уже писал ранее. --------------------------------- Чудес не бывает, но хочется в них верить.
и еще если я правильно понял, у Вас как-то странно проверяется пересечение. Вы используете сделку и заявку Вы именно так хотите? но тогда Ваш алгоритм вообще не соответствует картинке
На картинках у Вас пересечение свечи с линией болинджера а в программе используется тик. ----------------------- свеча - это четыре индикатора вычисляемых по куче тиков. ----------------------------- поэтому то, что у Вас написано это совершенно не то, что Вы хотите (если смотреть на картинки) ------------------------------- Нарисуйте картинку тиков внутри свечи и посмотрите . Если хотите как на картинке то используйте свечи а не ТВС
Хочу обратить Ваше внимание на тот факт, что в ТВС тики, а на графиках у Вас свечи. ------------------------------ Т е то, что вы реализовали это не то , что на графиках.
для этого Вам надо ознакомиться с форматом файлов Excel и написать программу. -------------------------------------------- все в этом мире возможно, вопрос лишь в том, сколько на это надо .... и есть ли у Вас столько.
Полагаю, что в правильной программе выставление заявки по Вашему алгоритму не зависит от задержки общения с брокером. Если у Вас зависит, то ищите ошибки в логике программы. ------------------------ В качестве совета: Ваш алгоритм робота удобно реализовать в индикаторе (без заморочкой с колбеками и ТВС)
попробую объяснить еще раз. ------------------------ На графике цифрами обозначены штрихи (красный цвет) 3 -нормальный штрих 1 и 2 - штрих который изменен приведенным выше кодом. ----------------------------------- собственно это и есть весь код ------------------------- Теперь про ошибку. Ваша функция SetValue изменяет одну точку, но эта точка отображается отрезком линии ( штрих) так как выбран тип штриховой. ------------------ Проблема в том, что в свечном графике используются два места для изображения свечи, или как Вам удобнее - две точки. ------------------------------- Поэтому на свечном графике штрих состоит из двух частей - двух точек, а функция SetValue меняет лишь одну точку (половинку штриха)- последнюю. поэтому штрих на свечах разрывается на две точки (половинки штриха) --------------------- Попробуйте сами нарисовать штриховую линию на свечном графике и изменить любое значение свечи - получите два огрызка штриха.
объяснение Вашей ошибки следующее. У Вас штрих рисуется двум отрезками. функция SetValue корректирует лишь последний, поэтому первый остается без изменения.
Добрый день, вот такая ошибочка выходит: В данном случае применяется функция SetValue(i-1,m+2,GetValue(i-2, m+2)) где m+2 -номер индикатора, i - текущая свеча. алгоритм: Предыдущее значение заменяется на препердыдущее. В результате линия индикатора на свече делится пополам (1 и 2) Половинка 1 остается на старом уровне а половинка 2 переходит на новый.
диспетчером задач посмотрите 1) сколько занято памяти и сколько в пике 2) какая загрузка процессора когда тормозится 3) закройте все, что не нужно для торговли.