<< Предыдущая

стр. 13
(из 13 стр.)

ОГЛАВЛЕНИЕ

Параметр
Тип
Описание
1.
RESULT
DOUBLE
Результат выполнения операции. Возможные значения:
«1» – выполнено успешно, «0» – произошла ошибка.
2.
RESULT_EX
STRING
Расширенная диагностика выполнения операции. Может принимать значения, соответствующие полю «STATUS» в «.tro»-файле при импорте транзакций (см. Раздел 5, п. 5.8.4)
3.
ORDER_NUMBER
STRING
Регистрационный номер заявки в торговой системе
4.
DESCRIPTION
STRING
Текстовый комментарий с ответом сервера QUIK или торговой системы.
Пример:

new_global("trans_params", "")
new_global("trans_result", "")
trans_params = ""
trans_params = set_value (trans_params, "TRANS_ID", "333")
trans_params = set_value (trans_params, "ACTION", "NEW_ORDER")
trans_params = set_value (trans_params, "CLASSCODE", "EQBR")
trans_params = set_value (trans_params, "SECCODE", "EESR")
trans_params = set_value (trans_params, "ACCOUNT", "L01-00000F00")
trans_params = set_value (trans_params, "OPERATION", "B")
trans_params = set_value (trans_params, "PRICE", "7.561")
trans_params = set_value (trans_params, "QUANTITY", "1")
trans_params = set_value (trans_params, "CLIENT_CODE", "")
trans_params = set_value (trans_params, "TYPE", "L")
trans_result = SEND_TRANSACTION (30, trans_params)
WRITELN ("qpile_trans.log", get_value (curr_datetime, "DATETIME") & ": " & "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"))

Сервисные функции
GET_TRADE_DATE
Возвращает дату текущей торговой сессии.
MAP GET_TRADE_DATE ()
Функция возвращает ассоциативный массив (MAP), содержащий параметры:

Параметр
Тип
Описание
1.
DATE
STRING
Торговая дата в виде строки «DD.MM.YY»
2.
YEAR
DOUBLE
Год
3.
MONTH
DOUBLE
Месяц
4.
DAY
DOUBLE
День
Пример:

writeln(log_file_name, get_value(GET_TRADE_DATE(), "Date"))

Записывает в файл строку вида:
02.06.04
GET_DATETIME
Возвращает текущие дату и время.
MAP GET_DATETIME ()
Функция возвращает ассоциативный массив (MAP), содержащий параметры:

Параметр
Тип
Описание
1.
DATETIME
STRING
Торговая дата в виде строки «DD.MM.YYYY HH:MM:SS.sss», где «sss» – миллисекунды
2.
YEAR
DOUBLE
Год
3.
MONTH
DOUBLE
Месяц
4.
DAY
DOUBLE
День
5.
HOUR
DOUBLE
Час
6.
MIN
DOUBLE
Минута
7.
SEC
DOUBLE
Секунда
8.
MILLISEC
DOUBLE
Миллисекунда
Пример:

writeln(log_file_name, get_value(GET_DATETIME(), "Datetime"))

Записывает в файл строку вида:
02.06.2004 16:57:34.460
APPLY_SCALE
Возвращает строку с числом, полученным округлением числа «without_scale» до разрядности «scale».
STRING APPLY_SCALE (DOUBLE without_scale, DOUBLE scale)

ПРИЛОЖЕНИЕ1. Синтаксис команд языка QPILE

Program:
Statement_List

Statement_List:
Statement “\n“
Statement_List “\n“ Statement

Statement:
NAME=Expression
IFOperator
FOROperator
FUNCDescr
CONTINUE //пропускает выполнение операторов до конца текущего Statement_List
BREAK //начинает выполнение оператора следующего за текущим Statement_List
RETURN //выход из текущего управляющего блока – из тела функции или из всей программы

IFOperator:
“IF “ Condition “\n”
Statement_List
“ELSE“ “\n”
Statement_List
“END IF“

Condition
Condition “OR“ Condition
Condition “AND“ Condition
“(“Condition“) “
PrimaryCondition

PrimaryCondition
Expression “==“ Expression
Expression “=“ Expression //c той же семантикой, что и “==”
Expression “>=“ Expression
Expression “<=“ Expression
Expression “>“Expression
Expression “<“Expression
Expression “!=“ Expression
Expression “<>“ Expression //c той же семантикой, что и “!=”

FOROperator:
“FOR “ NAME “ IN “ ArgList “\n”
Statement_List
“END FOR”

“FOR “ NAME “ FROM “ Expression “ TO ” Expression “\n”
Statement_List
“END FOR”

ArgList
NAME // в этом случае переменная с именем NAME должна содержать значение вида ArgList1
ArgList1

ArgList1:
Expression
ArgList “,” Expression

FUNCDescr
“FUNC ” NAME “(“ FargList “)” “\n”
Statement_List
“END FUNC”

FArgList
NAME
FArgList “,” NAME

Expression:
Expression “+” Term
Expression “–“ Term
Expression “&” Term //конкатенация строк
Term

Term:
Term “/” Primary
Term “*” Primary
Primary

Primary:
NUMBER
STRINGNAME //значение переменной с именем NAME
“-“ Primary
“(“ Expression ”)”
FunctionCall

FunctionCall
FNAME “(“ ArgList1 “)”

NUMBER:
Digits
Digits “.” DigitsSTRING: //определяется стандартно
NAME: //определяется стандартно


Ключевые слова = {IF, ELSE, FOR, IN, TO, FROM, AND, OR, RESULT, FUNC, END FUNC, END FOR, END IF, CONTINUE, BREAK, RETURN}

ПРИЛОЖЕНИЕ2. Рекомендации к составлению программ на QPILE
Функции для работы со структурными переменными, такие как «SET_VALUE», «ADD_COLLECTION_ITEM», «REMOVE_COLLECTION_ITEM» возвращают измененное значение коллекции или массива. Поскольку все параметры передаются в функцию по значению, то использование данных функций в качестве процедур приводит к потере сделанных в них изменений.
Например:
clientscol=INSERT_COLLECTION_ITEM(clientscol,0,initmap)
‘правильно

INSERT_COLLECTION_ITEM(clientscol,0,initmap)
‘неправильно, в этом случае после вызова функции clientscol будет содержать то же значение, что и до ее вызова
Возвращаемые функциями значения могут оказаться строковыми, хотя и представлять вещественное число. В этих случаях нужно использовать сложение с «0» для преобразования результата к численному значению. Например, для корректной инициализации переменной в операторе присваивания вида «v=GET_VALUE()» стоит написать «v=0+GET_VALUE()». В последнем случае гарантированно достигается вещественное значение переменной.
Аналогичным образом, для приведения вещественного значения к строковому может использоваться операция склейки с пустой строкой «v=””&GET_VALUE()».
Произвольные пользовательские типы могут быть сформированы путем комбинации коллекций и ассоциативных массивов. Например, если нужен список структур типа:
c=strruct{
openbal:double
closebal:double
clientcode:string}
то его можно представить как коллекцию ассоциативных массивов в каждом из которых будет три ключа – «OPENBAL», «CLOSEBAL», «CLIENTCODE». Код для инициализации такой структуры:
initmap=CREATE_MAP()
initmap=SET_VALUE(initmap,"OPENBAL",0)
initmap=SET_VALUE(initmap,"CLOSEBAL",0)
initmap=SET_VALUE(initmap,"CLIENTCODE","")
clientscol=CREATE_COLLECTION()
FOR i FROM 0 TO 10
clientscol=INSERT_COLLECTION_ITEM(clientscol,0,initmap)
END FOR
После чего, для доступа к полю «OPENBAL» 5-го клиента надо написать:
openbal = GET_VALUE(GET_COLLECTION_ITEM(clientscol,5),"OPENBAL")
Если вместо коллекции таких записей использовать массив с ключом представляющим из себя код клиента, то можно будет обращаться к значениям структуры клиента без указания его индекса в массиве, а зная только клиентский код:
clientsmap=CREATE_MAP()
FOR i FROM 0 TO 10
clientsmap=SET_VALUE(clientsmap,"Q" & i, initmap)
END FOR
и последующее обращение к значению поля «OPENBAL» для клиента с кодом «Q5»:
openbal = GET_VALUE(GET_VALUE(clientsmap,"Q5"),"OPENBAL")
«MODIFY_ITEM» не выполняет действий, если указанной строки в таблице «OWN» еще нет. Поэтому надо предварительно проверять ее наличие.
При построении пользовательской таблицы на каждой итерации изменяющей в себе строку полезным будет код:
new_global("first_time_flag",0)

if first_time_flag==0
add_item(1, SAMPLE)
first_time_flag=1
else
modify_item(1, SAMPLE)
end if
При первом запуске создается строка номер 1 со значениями полей из переменной «SAMPLE» насчитанной ранее, а на последующих итерациях строка номер 1 модифицируется.

<< Предыдущая

стр. 13
(из 13 стр.)

ОГЛАВЛЕНИЕ