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%.
QUIK clients support
Сообщений: Регистрация: 27.01.2015
07.05.2018 12:47:57
Добрый день.
Цитата
Уточните работает в 7.2 CalcBuySell?
Да, работает.
Цитата
Ошибка создания заявки [GW]{332] не хватка средств по лимитам клиента
Ошибку возвращает торговая система, не QUIK. В ручном режиме заявка выставляется?
Пользователь
Сообщений: Регистрация: 09.02.2015
07.05.2018 22:03:32
да, но во первых getParamEx(class_code,security,"bid").param_value может вернуть цену, а может вернуть 0. - это глюк.
В ручном режиме выставляется, но это разные вещи. Хотя ещё рз замечу что: CalcBuySell - 0.1% выставляется, должен срабатывать без проблем, так как цена 0.1% не проходит за это время.
QUIK clients support
Сообщений: Регистрация: 27.01.2015
08.05.2018 11:58:50
Цитата
Роман написал: да, но во первых getParamEx(class_code,security,"bid").param_value может вернуть цену, а может вернуть 0. - это глюк.
В ручном режиме выставляется, но это разные вещи. Хотя ещё рз замечу что: CalcBuySell - 0.1% выставляется, должен срабатывать без проблем, так как цена 0.1% не проходит за это время.
Рекомендуем все же обновить рабочее место QUIK до самой актуальной 7.16.3 и проверит работу. 0 может вернуться, если не заказан параметр bid.
Пользователь
Сообщений: Регистрация: 09.02.2015
09.05.2018 04:32:09
Обновил, глюки остались. Ну он то выдаёт, то нет. Фиг его знает от чего зависит.
QUIK clients support
Сообщений: Регистрация: 27.01.2015
10.05.2018 06:16:26
Цитата
Роман написал: Обновил, глюки остались. Ну он то выдаёт, то нет. Фиг его знает от чего зависит.
вот так полностью: price = tonumber(getParamEx(class_code,security,"bid").param_value+(11*getParamEx(class_code,security,"SEC_PRICE_STEP").param_value))
Пользователь
Сообщений: Регистрация: 10.04.2015
11.05.2018 00:39:46
Цитата
Роман написал: вот так полностью: price = tonumber(getParamEx(class_code,security,"bid").param_value+(11*getParamEx(class_code,security,"SEC_PRICE_STEP").param_value))
Так вообще можно писать!?... где проверка на result == "1" для обоих вызовов?
Роман, проверьте настройку: Зайдите в пункт меню Система/Настройки/Основные настройки/Программа/Получение данных/ и выберите пункт "Исходя из настроек открытых пользователем таблиц"
Пользователь
Сообщений: Регистрация: 09.02.2015
14.05.2018 04:43:28
, пункт "Исходя из настроек открытых пользователем таблиц" стоит по умолчанию.
Пользователь
Сообщений: Регистрация: 10.04.2015
14.05.2018 12:18:21
Цитата
Роман написал: , пункт "Исходя из настроек открытых пользователем таблиц" стоит по умолчанию.
Написал же ещё три дня назад, что вы неправильно пишите код... что у вас нет проверки на 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
— код не проверял, набросал от руки!
Пользователь
Сообщений: Регистрация: 09.02.2015
14.05.2018 18:56:00
, з.ы. он step = getParamEx(class_code, security, "SEC_PRICE_STEP") то возвращает правильное значение, то нет. В тех вариантах где оно правильный вариант отдаёт, получается что возвращаемая структура меняется? вместо {result == "1", param_value = "10"} отправляет {"10} - так что ли по вашему?
Пользователь
Сообщений: Регистрация: 09.02.2015
14.05.2018 18:57:03
иначе все сделки ошибки выдавали!
Пользователь
Сообщений: Регистрация: 09.02.2015
14.05.2018 19:03:56
з.ы. не разобрал до конца: getParamEx(class_code,security,"bid").param_value возвращает всё равно 0, чего не должно быть. Понятно что там проверку прописать нужно корректно, но суть проблемы это не меняет! бид возвращает с нулём.
Пользователь
Сообщений: Регистрация: 09.02.2015
14.05.2018 19:05:35
из-за этого потери по сделкам, с 2го или 4го раза можно только получить цену шага.
Пользователь
Сообщений: Регистрация: 09.02.2015
14.05.2018 19:12:22
тьфу извиняюсь торопясь писать нельзя :). getParamEx(class_code,security,"SEC_PRICE_STEP").param_value - всё равно 0 или правильное значение. Можно поставить проверку на result, но это ситуацию не изменит, так как понятно что 0 это уже ошибка. Поэтому жду отклика от Егора о решении этой проблемы.
Пользователь
Сообщений: Регистрация: 10.04.2015
14.05.2018 23:19:00
Цитата
Роман написал: всё равно 0 или правильное значение. Можно поставить проверку на result, но это ситуацию не изменит, так как понятно что 0 это уже ошибка.
Если result == "0", то значение из поля param_value использовать нельзя, его там просто «нет»... а что там есть, ноль или что-то другое не важно. Вы суть поймите, статусы ошибок не просто так возвращаются, их проверять нужно... это азы программирования.
И кто вам сказал, что bid у вас всегда должен возвращаться. Вы одностороннего стакана что ли никогда не видели?... в начале апреля на срочке многих акций и индекса были. Да сейчас любой неликвид посмотрите, как там стаканы выглядят. Могут так же быть «шипы», которые собирают все bid'ы, и на короткое время опять их нет в стакане. Могут технически снимать все заявки при сбоях на бирже... да полно вариантов.
Пользователь
Сообщений: Регистрация: 09.02.2015
15.05.2018 04:04:41
там у меня прописано что делать если ноль пришёл. так бы я его не видел вообще.
Пользователь
Сообщений: Регистрация: 09.02.2015
15.05.2018 04:07:05
, не я не против проверки, всё правильно говорите. просто у меня по другому обрабатывается, это глюк не пожизненный, надеюсь ребята сейчас решат.
Пользователь
Сообщений: Регистрация: 10.04.2015
15.05.2018 11:38:31
Цитата
Роман написал: , не я не против проверки, всё правильно говорите. просто у меня по другому обрабатывается, это глюк не пожизненный, надеюсь ребята сейчас решат.
Что они решат? изменят правила торгов на всех биржах мира?... я же говорю, приход result = "0" для bid, это не ошибка...
Пользователь
Сообщений: Регистрация: 09.02.2015
15.05.2018 14:17:02
, это фьючерс РТС, я не думаю что биржа загнулась так что бы "бид" пропал. :)
Пользователь
Сообщений: Регистрация: 10.04.2015
15.05.2018 16:14:22
Цитата
Роман написал: , это фьючерс РТС, я не думаю что биржа загнулась так что бы "бид" пропал. :)
Создайте новую таблицу торгов в Quik... добавьте в неё все инструменты класса «FORTS: Фьючерсы», в параметры добавьте «Общ. спрос» и «Общ. предл.»... и затем отсортируйте таблицу по любому из столбцов «Общ. спрос» или «Общ. предл.»... берите любой инструмент, где значение параметра равно 0, открывайте по нему стакан и смотрите...
Вот к примеру сейчас, один из инструментов открыл с нулевым спросом:
И какой bid вы тут хотите получить через getParamEx?
Пользователь
Сообщений: Регистрация: 09.02.2015
15.05.2018 17:58:58
, на этом инструменте у меня выдаст ошибку. Что и правильно. Поэтому я о нём речи не веду. А вот на фьючерсе RTSI меня это озадачивает :(.
Пользователь
Сообщений: Регистрация: 10.04.2015
15.05.2018 18:23:40
Цитата
Роман написал: , на этом инструменте у меня выдаст ошибку. Что и правильно. Поэтому я о нём речи не веду. А вот на фьючерсе RTSI меня это озадачивает :(.
Так на фьючерсе Индекса РТС тоже самое... говорю же, буквально месяц назад в начале апреля такой же стакан был по РТС, доходили до границы, там до расширения лимитов стояли с нулевым спросом... Это я просто к тому, что фундаментально нельзя закладывать в код идею, что «всегда должно приходить», пропускать обработку ошибок и писать как вы всё в одну строчку... это неправильно.
Отдельный интерес, это ситуация, когда bid действительно должен прийти, но не приходит. То-есть когда стакан заполнен, а вы периодически получаете ноль. Подозреваю, что getParamEx работает асинхронно, то-есть, если имеющаяся информация о лучшем спросе уже устарела, а новая ещё не пришла по сети, то функция отрабатывает немедленно и возвращает ноль. В противном случае, она бы зависла на несколько секунд, пока ожидала бы новую информацию по сети, что приводило бы просто к постоянному подвисанию любых скриптов на таких функциях.
Пользователь
Сообщений: Регистрация: 09.02.2015
15.05.2018 22:39:43
Ещё, такая же проблема с ценой последней сделки.
Пользователь
Сообщений: Регистрация: 10.04.2015
16.05.2018 12:33:25
Цитата
Роман написал: Ещё, такая же проблема с ценой последней сделки.
Беру цену последней сделки с OnAllTrade, и таких «проблем» нет. Да и bid ваш также можно брать по OnQuote. Если вы не хотите обрабатывать холостые вызовы getParamEx с result == "0", то может лучше переделать логику скрипта на «колбэки»!?...
Пользователь
Сообщений: Регистрация: 09.02.2015
17.05.2018 17:16:17
, это не тот вариант! Ждём комментарий разработчиков, у меня при открытии рынка на волатиле, убытки возникают.
Пользователь
Сообщений: Регистрация: 10.04.2015
18.05.2018 00:42:50
Цитата
Роман написал: , это не тот вариант! Ждём комментарий разработчиков, у меня при открытии рынка на волатиле, убытки возникают.
Не понятна ваша проблема... я выше вначале привёл простой код-шаблон... если будете как положено обрабатывать result, то price всегда будет считаться тоже правильно... откуда у вас могут быть убытки?
Пользователь
Сообщений: Регистрация: 09.02.2015
18.05.2018 15:31:33
Ну вот сегодня косяк: из-за того что нельзя было получить аск вместо 117 204 купил по 118 052, разница - целая тысяча. Ребята, ну что это за ерунда. Мне нужно строчное решение!
Пользователь
Сообщений: Регистрация: 09.02.2015
18.05.2018 15:34:44
В какой версии работает корректно CalcBuySell и getParamEx(class_code, security, "BID") ?
Пользователь
Сообщений: Регистрация: 10.04.2015
18.05.2018 18:12:00
Цитата
Роман написал: Ну вот сегодня косяк: из-за того что нельзя было получить аск вместо 117 204 купил по 118 052, разница - целая тысяча. Ребята, ну что это за ерунда. Мне нужно строчное решение!
Это прикол такой?... а пропустить действие когда вам result = "0" вернуло вы не можете?... вы так специально скрипт сделали, чтобы он у вас в любом случае что-то покупал, даже когда цену не может правильную определить?... )))
Пользователь
Сообщений: Регистрация: 09.02.2015
18.05.2018 19:30:54
, я написал выше, больше мне нечего добавить!
Пользователь
Сообщений: Регистрация: 10.04.2015
18.05.2018 22:56:23
Цитата
Роман написал: , я написал выше, больше мне нечего добавить!
Вы же с вопросом пришли, вам же отвечают как лучше код написать... а если не хотите, зачем вообще на форум приходить.
Пользователь
Сообщений: Регистрация: 09.02.2015
21.05.2018 01:09:50
, я не маленький мальчик, сам знаю куда и зачем хожу, в ПО Квика есть серьёзный глюк и его нужно исправить, а не догатками тыка, а что если там на облачных фьючерсных БИДа нет вообще, каким боком мне это поможет, если то что должно не показывает - с карт торо что ли я должен правильное значение вытаскивать если его нет?
Пользователь
Сообщений: Регистрация: 10.04.2015
21.05.2018 02:28:59
Цитата
Роман написал: , я не маленький мальчик, сам знаю куда и зачем хожу, в ПО Квика есть серьёзный глюк и его нужно исправить, а не догатками тыка, а что если там на облачных фьючерсных БИДа нет вообще, каким боком мне это поможет, если то что должно не показывает - с карт торо что ли я должен правильное значение вытаскивать если его нет?
Так и не ведите себя как маленький мальчик тогда... если считаете что есть глюк, то обоснуйте это... а пока что всё что вы тут сообщили совсем на глюк не тянет, а просто показывает дыру в вашем коде...
Пользователь
Сообщений: Регистрация: 09.02.2015
21.05.2018 10:15:25
, обязательно доклад по этому поводу напишу!
, уточните как версия Квика корректно работает с getParamEx(class_code,security,"bid").param_value и CalcBuySell?
QUIK clients support
Сообщений: Регистрация: 27.01.2015
21.05.2018 11:44:10
Добрый день.
Проблемы с данной функцией были в версии 7.2. Ошибки исправлены и сейчас все работает.
Пользователь
Сообщений: Регистрация: 09.02.2015
21.05.2018 11:58:16
на втором сервере 7.14 стоит, такие же ошибки ...
QUIK clients support
Сообщений: Регистрация: 27.01.2015
21.05.2018 12:36:42
Цитата
Роман написал: на втором сервере 7.14 стоит, такие же ошибки ...
Пришлите архив рабочего места QUIK (без ключей доступа и ваш скрипт, который запускаете)
Пользователь
Сообщений: Регистрация: 09.02.2015
21.05.2018 12:45:53
ну сам скрипт я не смогу выслать, а вот копию вышлю ...
QUIK clients support
Сообщений: Регистрация: 27.01.2015
21.05.2018 12:47:31
Цитата
Роман написал: ну сам скрипт я не смогу выслать, а вот копию вышлю ...
Скрипт тоже нужен.
Пользователь
Сообщений: Регистрация: 09.02.2015
21.05.2018 12:50:04
ну здесь увы, только если вы сами getParamEx(class_code, security, "BID") , а что у вас на 7.2 не работало, а на 7.14 работает? Просто мы 7.14 поверх 7.2 установили там, может имеет смысл переустановить ...
QUIK clients support
Сообщений: Регистрация: 27.01.2015
21.05.2018 12:57:44
Роман, мы не сможем разобраться с проблемой по куску кода, нужен полный скрипт.
Пользователь
Сообщений: Регистрация: 09.02.2015
21.05.2018 13:05:13
и как нам быть? это проблема в вашем ПО. Ваш вариант полностью работоспособный?
QUIK clients support
Сообщений: Регистрация: 27.01.2015
21.05.2018 13:52:20
Цитата
Роман написал: и как нам быть? это проблема в вашем ПО. Ваш вариант полностью работоспособный?
Такой вариант работает: getParamEx(class_code, security, "BID") Ждем запрошенную информацию.
Пользователь
Сообщений: Регистрация: 09.02.2015
21.05.2018 13:59:35
тогда сначало попробую переустановить полностью, надеюсь у брокера рабочая версия.
Пользователь
Сообщений: Регистрация: 09.02.2015
22.05.2018 20:23:30
да ваш глюк, всё переустановил и всё равно то выскакивает, то нет.
Код дать не могу проверьте самостоятельно, в цикле запрос поставьте и в случае ошибки записывайте, а так если 7.2 имела аналогичную ошибку скорее всего это она и есть.