getParamEx(class_code,security,"bid").param_value+(11*getParamEx(class_code,security,"SEC_PRICE_STEP").param_value) возвращает 110 (то есть getParamEx = 0), но может и верную и точную цену, не знаю от чего это зависит.
Уточните работает в 7.2 CalcBuySell?
Ставлю заявку -0.1% от CalcBuySell, выдаёт ошибку:
Ошибка создания заявки [GW]{332] не хватка средств по лимитам клиента
Хотя цена заявке та же что и при расчёте CalcBuySell - 0.1%.
да, но во первых getParamEx(class_code,security,"bid").param_value может вернуть цену, а может вернуть 0. - это глюк.
В ручном режиме выставляется, но это разные вещи. Хотя ещё рз замечу что: CalcBuySell - 0.1% выставляется, должен срабатывать без проблем, так как цена 0.1% не проходит за это время.
Роман написал: да, но во первых getParamEx(class_code,security,"bid").param_value может вернуть цену, а может вернуть 0. - это глюк.
В ручном режиме выставляется, но это разные вещи. Хотя ещё рз замечу что: CalcBuySell - 0.1% выставляется, должен срабатывать без проблем, так как цена 0.1% не проходит за это время.
Рекомендуем все же обновить рабочее место QUIK до самой актуальной 7.16.3 и проверит работу. 0 может вернуться, если не заказан параметр bid.
вот так полностью: price = tonumber(getParamEx(class_code,security,"bid").param_value+(11*getParamEx(class_code,security,"SEC_PRICE_STEP").param_value))
Роман написал: вот так полностью: price = tonumber(getParamEx(class_code,security,"bid").param_value+(11*getParamEx(class_code,security,"SEC_PRICE_STEP").param_value))
Так вообще можно писать!?... где проверка на result == "1" для обоих вызовов?
Роман, проверьте настройку: Зайдите в пункт меню Система/Настройки/Основные настройки/Программа/Получение данных/ и выберите пункт "Исходя из настроек открытых пользователем таблиц"
Роман написал: Egor Zaytsev , пункт "Исходя из настроек открытых пользователем таблиц" стоит по умолчанию.
Написал же ещё три дня назад, что вы неправильно пишите код... что у вас нет проверки на result == "1" для обоих вызовов... У вас в первом вызове возвращается таблица со значениями {result == "0", param_value = "0"}, а во втором вызове возвращается таблица со значениями {result == "1", param_value = "10"}, и в результате у вас и получается 0+11*10=110...
Напишите что-то типа такого:
Код
bid = getParamEx(class_code, security, "BID")
step = getParamEx(class_code, security, "SEC_PRICE_STEP")
if bid.result == "1" and step.result == "1" then
price = tonumber(bid.param_value)+11*tonumber(step.param_value)
end
Suntor, з.ы. он step = getParamEx(class_code, security, "SEC_PRICE_STEP") то возвращает правильное значение, то нет. В тех вариантах где оно правильный вариант отдаёт, получается что возвращаемая структура меняется? вместо {result == "1", param_value = "10"} отправляет {"10} - так что ли по вашему?
з.ы. не разобрал до конца: getParamEx(class_code,security,"bid").param_value возвращает всё равно 0, чего не должно быть. Понятно что там проверку прописать нужно корректно, но суть проблемы это не меняет! бид возвращает с нулём.
тьфу извиняюсь торопясь писать нельзя :). getParamEx(class_code,security,"SEC_PRICE_STEP").param_value - всё равно 0 или правильное значение. Можно поставить проверку на result, но это ситуацию не изменит, так как понятно что 0 это уже ошибка. Поэтому жду отклика от Егора о решении этой проблемы.
Роман написал: всё равно 0 или правильное значение. Можно поставить проверку на result, но это ситуацию не изменит, так как понятно что 0 это уже ошибка.
Если result == "0", то значение из поля param_value использовать нельзя, его там просто «нет»... а что там есть, ноль или что-то другое не важно. Вы суть поймите, статусы ошибок не просто так возвращаются, их проверять нужно... это азы программирования.
И кто вам сказал, что bid у вас всегда должен возвращаться. Вы одностороннего стакана что ли никогда не видели?... в начале апреля на срочке многих акций и индекса были. Да сейчас любой неликвид посмотрите, как там стаканы выглядят. Могут так же быть «шипы», которые собирают все bid'ы, и на короткое время опять их нет в стакане. Могут технически снимать все заявки при сбоях на бирже... да полно вариантов.
Suntor, не я не против проверки, всё правильно говорите. просто у меня по другому обрабатывается, это глюк не пожизненный, надеюсь ребята сейчас решат.
Роман написал: Suntor , не я не против проверки, всё правильно говорите. просто у меня по другому обрабатывается, это глюк не пожизненный, надеюсь ребята сейчас решат.
Что они решат? изменят правила торгов на всех биржах мира?... я же говорю, приход result = "0" для bid, это не ошибка...
Роман написал: Suntor , это фьючерс РТС, я не думаю что биржа загнулась так что бы "бид" пропал. :)
Создайте новую таблицу торгов в Quik... добавьте в неё все инструменты класса «FORTS: Фьючерсы», в параметры добавьте «Общ. спрос» и «Общ. предл.»... и затем отсортируйте таблицу по любому из столбцов «Общ. спрос» или «Общ. предл.»... берите любой инструмент, где значение параметра равно 0, открывайте по нему стакан и смотрите...
Вот к примеру сейчас, один из инструментов открыл с нулевым спросом: И какой bid вы тут хотите получить через getParamEx?
Роман написал: Suntor , на этом инструменте у меня выдаст ошибку. Что и правильно. Поэтому я о нём речи не веду. А вот на фьючерсе RTSI меня это озадачивает :(.
Так на фьючерсе Индекса РТС тоже самое... говорю же, буквально месяц назад в начале апреля такой же стакан был по РТС, доходили до границы, там до расширения лимитов стояли с нулевым спросом... Это я просто к тому, что фундаментально нельзя закладывать в код идею, что «всегда должно приходить», пропускать обработку ошибок и писать как вы всё в одну строчку... это неправильно.
Отдельный интерес, это ситуация, когда bid действительно должен прийти, но не приходит. То-есть когда стакан заполнен, а вы периодически получаете ноль. Подозреваю, что getParamEx работает асинхронно, то-есть, если имеющаяся информация о лучшем спросе уже устарела, а новая ещё не пришла по сети, то функция отрабатывает немедленно и возвращает ноль. В противном случае, она бы зависла на несколько секунд, пока ожидала бы новую информацию по сети, что приводило бы просто к постоянному подвисанию любых скриптов на таких функциях.
Роман написал: Ещё, такая же проблема с ценой последней сделки.
Беру цену последней сделки с OnAllTrade, и таких «проблем» нет. Да и bid ваш также можно брать по OnQuote. Если вы не хотите обрабатывать холостые вызовы getParamEx с result == "0", то может лучше переделать логику скрипта на «колбэки»!?...
Роман написал: Suntor , это не тот вариант! Ждём комментарий разработчиков, у меня при открытии рынка на волатиле, убытки возникают.
Не понятна ваша проблема... я выше вначале привёл простой код-шаблон... если будете как положено обрабатывать result, то price всегда будет считаться тоже правильно... откуда у вас могут быть убытки?
Ну вот сегодня косяк: из-за того что нельзя было получить аск вместо 117 204 купил по 118 052, разница - целая тысяча. Ребята, ну что это за ерунда. Мне нужно строчное решение!
Роман написал: Ну вот сегодня косяк: из-за того что нельзя было получить аск вместо 117 204 купил по 118 052, разница - целая тысяча. Ребята, ну что это за ерунда. Мне нужно строчное решение!
Это прикол такой?... а пропустить действие когда вам result = "0" вернуло вы не можете?... вы так специально скрипт сделали, чтобы он у вас в любом случае что-то покупал, даже когда цену не может правильную определить?... )))
Suntor, я не маленький мальчик, сам знаю куда и зачем хожу, в ПО Квика есть серьёзный глюк и его нужно исправить, а не догатками тыка, а что если там на облачных фьючерсных БИДа нет вообще, каким боком мне это поможет, если то что должно не показывает - с карт торо что ли я должен правильное значение вытаскивать если его нет?
Роман написал: Suntor , я не маленький мальчик, сам знаю куда и зачем хожу, в ПО Квика есть серьёзный глюк и его нужно исправить, а не догатками тыка, а что если там на облачных фьючерсных БИДа нет вообще, каким боком мне это поможет, если то что должно не показывает - с карт торо что ли я должен правильное значение вытаскивать если его нет?
Так и не ведите себя как маленький мальчик тогда... если считаете что есть глюк, то обоснуйте это... а пока что всё что вы тут сообщили совсем на глюк не тянет, а просто показывает дыру в вашем коде...
ну здесь увы, только если вы сами getParamEx(class_code, security, "BID") , а что у вас на 7.2 не работало, а на 7.14 работает? Просто мы 7.14 поверх 7.2 установили там, может имеет смысл переустановить ...
да ваш глюк, всё переустановил и всё равно то выскакивает, то нет.
Код дать не могу проверьте самостоятельно, в цикле запрос поставьте и в случае ошибки записывайте, а так если 7.2 имела аналогичную ошибку скорее всего это она и есть.