Брокер ошибки не видит и считает, что все хорошо, в крайнем случае, четверо разных из поддержки ответили одно и то же, даже после совещания с соответствующим отделом. Могу я за брокера обратиться, чтобы вы сделали такую проверку?
При торговле на американском рынке возникает следующая ошибка: после того, как произошел сплит, старая тейк-профит заявка все равно выставляется, даже если у бумаги уже изменился ISIN и это по факту уже другая бумага. Quik ставит в продажу по тейк-профиту другую бумагу только потому, что у нее одинаковое с предыдущей название, например, на днях такое было в Финаме с бумагой GNLN.US. Сделайте, пожалуйста, перед выставлением тейк-профит заявки проверку по ISIN коду, чтобы выставлялась именно нужная бумага.
Не знаю причину и не могу поправить проблему вывода в таблицу, на данный момент в нескольких таблицах такое (прикрепил скрин). Подскажите, пожалуйста, как поправить.
> В связи с чем рекомендуем даже не начинать пытаться что то делать на QPILE, а сразу перейти на работу с QLUA скриптами.
Спасибо за совет, но мне нужен небольшой робот, который, в принципе, рабочий, но на фьючерсах, я его под опционы подгоняю и появились несколько вышеозвученных проблем. Как они решаться необходимость в написании роботов отпадает.
Можете написать, пожалуйста, почему не работает функция "УДАЛЯЕМ ЗАЯВКИ" на опционах (повторюсь, на фьючерсах работает отлично)?
'========= ДАТА И ВРЕМЯ СЕРВЕРНОЕ 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
Уточню: в целом код на фьючерсах работает отлично, но тут робот для опционов (INSTRUMENT="RI107500BQ0B" - это пут опцион), на них не работает почему-то.
Sergey Gorokhov написал: Дополним, Есть догадка, что портфель просто слишком редко проверяет значения. Проверьте какой интервал указан в "Период расчета"
----- ' ТЕКУЩИЕ ЗАЯВКИ 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 -----