НЕ НАЙДЕН ЛИМИТ ОТКРЫТЫХ ПОЗИЦИЙ

Страницы: 1
RSS
НЕ НАЙДЕН ЛИМИТ ОТКРЫТЫХ ПОЗИЦИЙ, НЕ НАЙДЕН ЛИМИТ ОТКРЫТЫХ ПОЗИЦИЙ!
 
Помогите разобраться, в программе выскакивает - НЕ НАЙДЕН ЛИМИТ ОТКРЫТЫХ ПОЗИЦИЙ!,  (Программа по ограничению убытков), ничего не могу понять, может ошибка в блоке ДАННЫЕ ТАБЛИЦЫ ОГРАНИЧЕНИЯ ПО СЧЕТАМ.....



PORTFOLIO_EX ZAVHOZ;
DESCRIPTION ZAVHOZ;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST ALL_FIRMS;
USE_CASE_SENSITIVE_CONSTANTS;

PROGRAM

' НАСТРОЙКИ ТОЛЬКО ЗДЕСЬ!
ACCOUNT="SPBFUT00HFI" ' ВПИСАТЬ АККАУНТ НА ФОРТС
DRODOWN_OF_LIMITOPEN=20 ' ПРОЦЕНТ ПРОСАДКИ ОТ ЛИМИТА ОТКРЫТЫХ ПОЗИЦИЙ
BEGINSES=100000 ' НАЧАЛО РАБОТЫ
ENDSES=010000 ' ОКОНЧАНИЕ
' ***************

'========= ДАННЫЕ ТАБЛИЦЫ ОГРАНИЧЕНИЯ ПО СЧЕТАМ
I=1
LIMITOPEN=GET_VALUE (GET_ITEM ("FUTURES_CLIENT_LIMITS", I), "CBPLIMIT")+0
VARMARGIN=GET_VALUE (GET_ITEM ("FUTURES_CLIENT_LIMITS", I), "VARMARGIN")+0
ACCRUEDINT=GET_VALUE (GET_ITEM ("FUTURES_CLIENT_LIMITS", I), "ACCRUEDINT")+0
COMISSION=GET_VALUE (GET_ITEM ("FUTURES_CLIENT_LIMITS", I), "TS_COMISSION")+0
FULL_RESULT=VARMARGIN+ACCRUEDINT+COMISSION ' РАССЧИТЫВАЕМ ОБЩИЙ РЕЗУЛЬТАТ
IF LIMITOPEN=0
   MESSAGE("НЕ НАЙДЕН ЛИМИТ ОТКРЫТЫХ ПОЗИЦИЙ!",1)
END IF

'========= ДАТА И ВРЕМЯ СЕРВЕРНОЕ
SERVERTIME=GET_INFO_PARAM("SERVERTIME")
TIMESERV=SUBSTR(SERVERTIME,0,2)&SUBSTR(SERVERTIME,3,2)&SUBSTR(SERVERTIME,6,7)
TIME=TIMESERV+0
TRID=TIME

'========= КОНТРОЛЬ ВРЕМЕНИ СЕССИИ И СОЕДИНЕНИЯ С СЕРВЕРОМ
IF TIME<BEGINSES OR IS_CONNECTED()<>1 OR TIME>ENDSES
   RETURN
END IF

'========= ПРОВЕРКА ПРОСАДКИ ОТ ЛИМИТА ОТКРЫТЫХ ПОЗИЦИЙ
KOEFFLIMIT=(VARMARGIN+ACCRUEDINT+COMISSION)+(LIMITOPEN*(DRODOWN_OF_LIMITOPEN/100))
IF KOEFFLIMIT<0
   CLOSE_ALL_POSITION(1) ' ЗАКРЫВАЕМ ОТКРЫТЫЕ ПОЗИЦИИ
END IF

'========= ТАБЛИЦА
OUTPUT=CREATE_MAP()
OUTPUT=SET_VALUE(OUTPUT,"TIME",TIME)
OUTPUT=SET_VALUE(OUTPUT,"FULL_RESULT",FULL_RESULT)
DELETE_ALL_ITEMS()
ADD_ITEM(1,OUTPUT)

'========= ФУНКЦИИ
' CLOSE_ALL_POSITION
FUNC CLOSE_ALL_POSITION(KEY)
INSTRUMENT="" ' ОБЪЯВЛЯЕМ (ЗАОДНО ОБНУЛЯЕМ) ПЕРЕМЕННЫЕ
TP=0
IF GET_NUMBER_OF("FUTURES_CLIENT_HOLDINGS")>0
FOR PAPIR FROM 0 TO GET_NUMBER_OF("FUTURES_CLIENT_HOLDINGS")
IF GET_VALUE (GET_ITEM ("FUTURES_CLIENT_HOLDINGS", PAPIR), "TRDACCID")=ACCOUNT AND GET_VALUE(GET_ITEM("FUTURES_CLIENT_HOLDINGS",PAPIR), "TOTAL_NET")+0<>0
TP=GET_VALUE(GET_ITEM("FUTURES_CLIENT_HOLDINGS",PAPIR), "TOTAL_NET")+0
INSTRUMENT=GET_VALUE(GET_ITEM("FUTURES_CLIENT_HOLDINGS",PAPIR), "SECCODE")
CLASSCODE=GET_VALUE(GET_SECURITY_INFO("",INSTRUMENT),"CLASS_CODE")&""
STEP=GET_VALUE(GET_PARAM_EX(CLASSCODE,INSTRUMENT,"SEC_PRICE_STEP"),"PARAM_VALUE")+0
BID=GET_VALUE(GET_PARAM_EX(CLASSCODE,INSTRUMENT,"BID"),"PARAM_VALUE")+0
ASK=GET_VALUE(GET_PARAM_EX(CLASSCODE,INSTRUMENT,"OFFER"),"PARAM_VALUE")+0

'========= ЗАКРЫВАЕМ ПОЗИЦИИ
IF TP>0
   MESSAGE("ДОПУСТИМОЕ ЗНАЧЕНИЕ ПРОСАДКИ ОТ ЛИМИТА ОТКРЫТЫХ ПОЗИЦИЙ ИСЧЕРПАНО!",1)
   LOTS=ABS(TP)
   KILLALLSTOP(1) ' СНИМАЕМ АКТИВНЫЕ СТОПЫ
   KILLALLORDERS(1) ' СНИМАЕМ АКТИВНЫЕ ЗАЯВКИ
   SELL(1)
END IF
IF TP<0
   MESSAGE("ДОПУСТИМОЕ ЗНАЧЕНИЕ ПРОСАДКИ ОТ ЛИМИТА ОТКРЫТЫХ ПОЗИЦИЙ ИСЧЕРПАНО!",1)
   LOTS=ABS(TP)
   KILLALLSTOP(1) ' СНИМАЕМ АКТИВНЫЕ СТОПЫ
   KILLALLORDERS(1) ' СНИМАЕМ АКТИВНЫЕ ЗАЯВКИ
   BUY(1)
END IF
END IF
   END FOR
END IF
END FUNC

' BUY
FUNC BUY(KEYS)
   PRICE=ASK+STEP*20
   ORDER(PRICE,LOTS,"B")
END FUNC

' SELL
FUNC SELL(KEYS)
   PRICE=BID-STEP*20
   ORDER(PRICE,LOTS,"S")
END FUNC

' ORDER
FUNC ORDER(FPRICE,FLOTS,FDIRECTION)
   NEW_GLOBAL("TRANS_PARAMS", "")
   NEW_GLOBAL("TRANS_RESULT", "")
   TRANS_PARAMS = ""
   TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "TRANS_ID", TRID&"")
   TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "ACTION", "NEW_ORDER")
   TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "TYPE", "L")
   TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "CLASSCODE", CLASSCODE)
   TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "SECCODE", INSTRUMENT)
   TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "ACCOUNT", ACCOUNT)
   TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "OPERATION", FDIRECTION&"")
   TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "PRICE", FPRICE&"")
   TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "QUANTITY", FLOTS&"")
   TRANS_RESULT = SEND_TRANSACTION (30, TRANS_PARAMS)
   RESULT=GET_VALUE(TRANS_RESULT, "DESCRIPTION")
END FUNC

' KILLALLSTOP
FUNC KILLALLSTOP(KEY)
       FOR I FROM 0 TO GET_NUMBER_OF("STOP_ORDERS")
           IF (GET_VALUE (GET_ITEM ("STOP_ORDERS", I), "STATUS")="ACTIVE") AND GET_VALUE (GET_ITEM ("STOP_ORDERS", I), "ACCOUNT")=ACCOUNT
               MESSAGE("ДОПУСТИМОЕ ЗНАЧЕНИЕ ПРОСАДКИ ОТ ЛИМИТА ОТКРЫТЫХ ПОЗИЦИЙ ИСЧЕРПАНО!",1)
               NEW_GLOBAL("TRANS_PARAMS", "")
               NEW_GLOBAL("TRANS_RESULT", "")
               TRANS_PARAMS = ""
               TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "TRANS_ID", "8"&TRID)
               TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "CLASSCODE", CLASSCODE)
               TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "SECCODE", INSTRUMENT)
               TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "ACCOUNT", ACCOUNT)
               TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "STOP_ORDER_KEY", GET_VALUE (GET_ITEM ("STOP_ORDERS", I), "NUMBER")&"")
               TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "ACTION", "KILL_STOP_ORDER")
               TRANS_RESULT = SEND_TRANSACTION (30, TRANS_PARAMS)
               RESULT=GET_VALUE(TRANS_RESULT, "DESCRIPTION")
           END IF
       END FOR
END FUNC

' KILLALLORDERS
FUNC KILLALLORDERS(KEY)
       FOR I FROM 0 TO GET_NUMBER_OF("ORDERS")
           IF GET_VALUE (GET_ITEM ("ORDERS", I), "STATUS")="ACTIVE" AND GET_VALUE (GET_ITEM ("ORDERS", I), "ACCOUNT")=ACCOUNT
               MESSAGE("ДОПУСТИМОЕ ЗНАЧЕНИЕ ПРОСАДКИ ОТ ЛИМИТА ОТКРЫТЫХ ПОЗИЦИЙ ИСЧЕРПАНО!",1)
               NEW_GLOBAL("TRANS_PARAMS", "")
               NEW_GLOBAL("TRANS_RESULT", "")
               TRANS_PARAMS = ""
               TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "TRANS_ID", "1"&TRID)
               TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "CLASSCODE", CLASSCOE)
               TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "SECCODE", INSTRUMENT)
               TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "ACTION", "KILL_ORDER")
               TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "ACCOUNT", ACCOUNT)
               TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "ORDER_KEY", GET_VALUE (GET_ITEM ("ORDERS",I),"NUMBER")&"")
               TRANS_RESULT = SEND_TRANSACTION (30, TRANS_PARAMS)
                RESULT=GET_VALUE(TRANS_RESULT, "DESCRIPTION")
           END IF
       END FOR
END FUNC

END_PROGRAM

PARAMETER TIME;
PARAMETER_TITLE ВРЕМЯ;
PARAMETER_DESCRIPTION ВРЕМЯ;
PARAMETER_TYPE STRING(30);
END

PARAMETER FULL_RESULT;
PARAMETER_TITLE ФИН.РЕЗУЛЬТАТ;
PARAMETER_DESCRIPTION ФИН.РЕЗУЛЬТАТ;
PARAMETER_TYPE NUMERIC(10,2);
END

END_PORTFOLIO_EX
 
Здравствуйте,
Согласно коду, проверяется первая строка в ограничениях по клиентским счетам, параметр "Лимит открытых позиций"
Соответственно, надо в терминале QUIK проверить а есть ли данные в этом параметре у этой таблицы, в первой строке.
К слову, фильтры и сортировка таблиц не влияют на получаемые данные, а значит таблицу следует смотреть без них.
 
http://joxi.ru/52az8lxfG8MxaA вот что содержится в таблице, лимит откр. поз. всегда по нолям.....
 
Цитата
Иван Груздев написал:
http://joxi.ru/52az8lxfG8MxaA  вот что содержится в таблице, лимит откр. поз. всегда по нолям.....
Ну вот по этому Qpile скрипт и выдает сообщение.
 
А что нужно сделать для того чтобы решить эту проблему....
 
Цитата
Иван Груздев написал:
А что нужно сделать для того чтобы решить эту проблему....

Для начала обратитесь к брокеру.
Страницы: 1
Читают тему
Наверх