----- ' ТЕКУЩИЕ ЗАЯВКИ BUYORDERS=0 SELLORDERS=0 TPPUT=0 FOR I FROM 0 TO GET_NUMBER_OF("FUTURES_CLIENT_HOLDINGS") IF GET_VALUE (GET_ITEM ("FUTURES_CLIENT_HOLDINGS", I), "SECCODE")=INSTRUMENT AND GET_VALUE (GET_ITEM ("FUTURES_CLIENT_HOLDINGS", I), "TRDACCID")=ACCOUNT TPPUT=GET_VALUE(GET_ITEM("FUTURES_CLIENT_HOLDINGS",I), "TOTAL_NET")+0 BUYORDERS=GET_VALUE(GET_ITEM("FUTURES_CLIENT_HOLDINGS",I), "OPEN_BUYS")+0 SELLORDERS=GET_VALUE(GET_ITEM("FUTURES_CLIENT_HOLDINGS",I), "OPEN_SELLS")+0 END IF END FOR -----
Здравствуйте, Описанная проблема у нас не воспроизводится. Проверьте в самой таблице позиций по клиентским счетам, какое значение в колонке "Акт. покупка"? Также уточните какая версия терминала QUIK используется.
Sergey Gorokhov написал: Дополним, Есть догадка, что портфель просто слишком редко проверяет значения. Проверьте какой интервал указан в "Период расчета"
Уточню: в целом код на фьючерсах работает отлично, но тут робот для опционов (INSTRUMENT="RI107500BQ0B" - это пут опцион), на них не работает почему-то.
Alexk написал: Уточню: в целом код на фьючерсах работает отлично, но тут робот для опционов (INSTRUMENT="RI107500BQ0B" - это пут опцион), на них не работает почему-то.
'========= ДАТА И ВРЕМЯ СЕРВЕРНОЕ SERVERTIME=GET_INFO_PARAM("SERVERTIME") SERVERDATE=GET_INFO_PARAM("TRADEDATE") TIMESERV=SUBSTR(SERVERTIME,0,2)&SUBSTR(SERVERTIME,3,2)&SUBSTR(SERVERTIME,6,7) HOUR=SUBSTR(TIMESERV,0,2)+0 MIN=SUBSTR(TIMESERV,2,2)+0 SEC=SUBSTR(TIMESERV,4,2)+0 TIME=TIMESERV+0 DATE=SUBSTR(SERVERDATE,6,4)&SUBSTR(SERVERDATE,3,2)&SUBSTR(SERVERDATE,0,2) TRID=TIME
' ФУНКЦИЯ ПЕРЕВОДА ДАТЫ И ВРЕМЕНИ В ТЕКСТОВЫЙ ФОРМАТ FUNC FTEXTDATA(YEAR,MONTH,DAY) IF (LEN(MONTH) < 2) MONTH = "0" & MONTH END IF IF (LEN(DAY) < 2) DAY = "0" & DAY END IF RESULT = YEAR & MONTH & DAY END FUNC FUNC FTEXTTIME(HOUR,MIN,SEC) IF (LEN(HOUR) < 2) HOUR = "0" & HOUR END IF IF (LEN(MIN) < 2) MIN = "0" & MIN END IF RESULT = HOUR & MIN & "00" END FUNC
' =========== УДАЛЯЕМ ЗАЯВКИ FUNC KILLALLORDERS(KEY) MESSAGE ("СНИМАЕМ "&KEY,1) N=GET_NUMBER_OF("ORDERS") IF N>0 FOR I FROM 0 TO N IF (GET_VALUE (GET_ITEM ("ORDERS", I), "STATUS")="ACTIVE") AND (GET_VALUE (GET_ITEM ("ORDERS", I), "SECCODE")=INSTRUMENT) NEW_GLOBAL("TRANS_PARAMS", "") NEW_GLOBAL("TRANS_RESULT", "") TRANS_PARAMS = "" TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "TRANS_ID", "7"&TIME) TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "CLASSCODE", "SPBOPT") TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "SECCODE", KEY) TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "ORDER_KEY", GET_VALUE (GET_ITEM ("ORDERS", I), "ORDER_NUMBER")&"") TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "ACTION", "KILL_ORDER") TRANS_RESULT = SEND_TRANSACTION (30, TRANS_PARAMS) END IF END FOR END IF END FUNC
' ТЕКУЩИЕ ЗАЯВКИ BUYORDERS=0 SELLORDERS=0 TPPUT=0 FOR I FROM 0 TO GET_NUMBER_OF("FUTURES_CLIENT_HOLDINGS") IF GET_VALUE (GET_ITEM ("FUTURES_CLIENT_HOLDINGS", I), "SECCODE")=INSTRUMENT AND GET_VALUE (GET_ITEM ("FUTURES_CLIENT_HOLDINGS", I), "TRDACCID")=ACCOUNT TPPUT=GET_VALUE(GET_ITEM("FUTURES_CLIENT_HOLDINGS",I), "TOTAL_NET")+0 BUYORDERS=GET_VALUE(GET_ITEM("FUTURES_CLIENT_HOLDINGS",I), "OPEN_BUYS")+0 SELLORDERS=GET_VALUE(GET_ITEM("FUTURES_CLIENT_HOLDINGS",I), "OPEN_SELLS")+0 END IF END FOR
К сожалению затруднимся назвать причины, присланный код у нас также нормально работает, даже на версии 8.4.1.6
Проверьте внимательней корректно ли указан Ваш счет (параметр ACCOUNT) особо отметим что регистр символов имеет значение т.е. если в QUIK в счете присутствуют маленькие буквы, то и в скрипте тоже должны быть указаны маленькие буквы.
Если разобраться не получится пришлите на quiksupport@arqatech.com архив всей папки с терминалом QUIK (без ключей доступа) Архив следует паковать при закрытом терминале QUIK
Биржа вот вот переведет срочный рынок на новую систему в которой будут 19ти значные номера заявок. А в QPILE нет поддержки 19ти значных цифр. В результате, после обновления ТС Вы вообще не сможете снимать заявки через QPILE.
Судя по всему, Вы только начали изучение программирования в QUIK В связи с чем рекомендуем даже не начинать пытаться что то делать на QPILE, а сразу перейти на работу с QLUA скриптами.
> В связи с чем рекомендуем даже не начинать пытаться что то делать на QPILE, а сразу перейти на работу с QLUA скриптами.
Спасибо за совет, но мне нужен небольшой робот, который, в принципе, рабочий, но на фьючерсах, я его под опционы подгоняю и появились несколько вышеозвученных проблем. Как они решаться необходимость в написании роботов отпадает.
Можете написать, пожалуйста, почему не работает функция "УДАЛЯЕМ ЗАЯВКИ" на опционах (повторюсь, на фьючерсах работает отлично)?
Alexk написал: но мне нужен небольшой робот, который, в принципе, рабочий,
Ваше право. Хотя смысла нет ибо скрипт будет работать не долго, потом сами будете себя корить когда он вдруг сломается и переходить на QLUA будет уже поздно.
Цитата
Alexk написал: Можете написать, пожалуйста, почему не работает функция "УДАЛЯЕМ ЗАЯВКИ" на опционах (повторюсь, на фьючерсах работает отлично)?
У нас работает, почему у Вас не работает непонятно, опять что то недоговариваете. Посмотрите что возвращается в TRANS_RESULT Для этого добавьте строку сразу после TRANS_RESULT message("Result: " & get_value (TRANS_RESULT, "RESULT") & ", Result_ex: " & get_value (TRANS_RESULT, "RESULT_EX") & ", OrderNum: " & get_value (TRANS_RESULT, "ORDER_NUMBER") & ", Description: " & get_value (TRANS_RESULT, "DESCRIPTION"),1)