Алгоритм отслеживает изменения ОИ и если он за интервал работы цикла программы изменяется на N процентов то выдает алерт.
PORTFOLIO_EX OPEN INTEREST;
DESCRIPTION Алгоритм выявляет всплески открытого интереса;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST ALL_FIRMS;
PROGRAM
' =========ПОЛЬЗОВАТЕЛЬСКИЕ НАСТРОЙКИ=============
' Перечисляем маржинальные и наиболее ликвидные активы
' FINSTRUMENTS="GAZP"
' CLASSCODE="EQNE" ' код группы
PRO=1 ' Процент изменения (чувствительности)
INTERVAL=5 ' таймфрейм на открытом графике в минутах (0 < INTERVAL < 60)
' ====================ПЕРЕМЕННЫЕ==================
HH = 0 ' обнуляем максимум за
LL = 10000000 ' обнуляем минимум за
tmp=CREATE_MAP()
tmp=set_value(tmp, "RIM2", "SPBFUT")
tmp=set_value(tmp, "SRM2", "SPBFUT")
tmp=set_value(tmp, "GZM2", "SPBFUT")
tmp=set_value(tmp, "LKM2", "SPBFUT")
INSTRUMENTS="RIM2,SRM2,GZM2,LKM2"
' ===============ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ===============
NEW_GLOBAL("LAST",CREATE_MAP()) ' последние (текущие) величины
' ===============СЕРВЕРНЫЕ ДАТА И ВРЕМЯ===============
SERVERDATE=GET_INFO_PARAM("TRADEDATE") ' дата сервера в формате DD.MM.YYYY
SERVERTIME=GET_INFO_PARAM("SERVERTIME") ' время сервера в формате HH:MM:SS
DATETIME (SERVERDATE,SERVERTIME) ' вызов функции даты-времени
CURTIME=0+CURTIME ' перевод времени в число
IF CURTIME > 100001 AND CURTIME < 235000 ' время внутри ТС
DELETE_ALL_ITEMS()
OUTPUT=CREATE_MAP()
' В цикле делаем определение объемов и сравлиниваем со средним за период.
FOR INSTRUMENT IN INSTRUMENTS
CLASSCODE=GET_VALUE(tmp, INSTRUMENT)
OI=0+GET_VALUE(GET_PARAM_EX(CLASSCODE,INSTRUMENT,"NUMCONTRACTS"), "PARAM_VALUE") ' текущий открытый интерес по контракту
OI0=0+GET_VALUE(LAST,INSTRUMENT)
MAXVAL=0+GET_VALUE(LAST,INSTRUMENT & "MAXVAL")
MAXTIME=GET_VALUE(LAST,INSTRUMENT & "MAXTIME")
MAXCOST=0+GET_VALUE(LAST,INSTRUMENT & "MAXCOST")
MINVAL=0+GET_VALUE(LAST,INSTRUMENT & "MINVAL")
MINTIME=GET_VALUE(LAST,INSTRUMENT & "MINTIME")
MINCOST=0+GET_VALUE(LAST,INSTRUMENT & "MINCOST")
IF OI0=0
OI0=OI
END IF
IF MINVAL=0
MINVAL=LL
END IF
RATE=(OI-OI0)*100/OI0
LAST=SET_VALUE(LAST, INSTRUMENT, OI)
COST=GET_VALUE(GET_PARAM_EX(CLASSCODE, INSTRUMENT, "LAST"), "PARAM_VALUE") ' текущий открытый интерес по контракту
IF OI>MAXVAL
MAXVAL=OI
MAXTIME=SERVERTIME
MAXCOST=0+COST
LAST=SET_VALUE(LAST, INSTRUMENT & "MAXVAL",MAXVAL)
LAST=SET_VALUE(LAST, INSTRUMENT & "MAXTIME",MAXTIME)
LAST=SET_VALUE(LAST, INSTRUMENT & "MAXCOST",MAXCOST)
END IF
IF OI<MINVAL
MINVAL=OI
MINTIME=SERVERTIME
MINCOST=0+COST
LAST=SET_VALUE(LAST, INSTRUMENT & "MINVAL",MINVAL)
LAST=SET_VALUE(LAST, INSTRUMENT & "MINTIME",MINTIME)
LAST=SET_VALUE(LAST, INSTRUMENT & "MINCOST",MINCOST)
END IF
' ===============ДАННЫЕ В ТАБЛИЦУ===============
OUTPUT=SET_VALUE(OUTPUT,"SERVERDATE", SERVERDATE)
OUTPUT=SET_VALUE(OUTPUT,"SERVERTIME", SERVERTIME)
OUTPUT=SET_VALUE(OUTPUT,"INSTRUMENT", INSTRUMENT)
OUTPUT=SET_VALUE(OUTPUT,"INTEREST", OI)
OUTPUT=SET_VALUE(OUTPUT,"RATE", RATE)
OUTPUT=SET_VALUE(OUTPUT,"MAXVAL", MAXVAL)
OUTPUT=SET_VALUE(OUTPUT,"MAXTIME", MAXTIME)
OUTPUT=SET_VALUE(OUTPUT,"MAXCOST", MAXCOST)
OUTPUT=SET_VALUE(OUTPUT,"MINVAL", MINVAL)
OUTPUT=SET_VALUE(OUTPUT,"MINTIME", MINTIME)
OUTPUT=SET_VALUE(OUTPUT,"MINCOST", MINCOST)
ADD_ITEM(1,OUTPUT)
' сравним и пересохраним в МАП
IF RATE>PRO ' Если обнаружен ои больше обычного, то
MESSAGE("1% OI UP IN " & INSTRUMENT, 1)
SET_ROW_COLOR_EX (1, "RGB(0,255,0)", "RGB(0,255,0)", "DEFAULT_COLOR", "DEFAULT_COLOR") ' ПОДСВЕТИМ СТРОКУ ЗЕЛЕНЫМ
END IF
IF RATE<0-PRO ' Если обнаружен ои меньше обычного, то
MESSAGE("1% OI DOWN IN " & INSTRUMENT, 1)
SET_ROW_COLOR_EX (1, "RGB(255,0,0)", "RGB(255,0,0)", "DEFAULT_COLOR", "DEFAULT_COLOR") ' ПОДСВЕТИМ СТРОКУ КРАСНЫМ
END IF
END FOR
END IF
' ФУНКЦИЯ СЕРВЕРНЫХ ДАТЫ И ВРЕМЕНИ
FUNC DATETIME(FSERVERDATE,FSERVERTIME)
CURYEAR=SUBSTR(FSERVERDATE,6,4) ' текущий год в текстовом формате
CURMONTH=SUBSTR(FSERVERDATE,3,2) ' текущий месяц в текстовом формате
CURDAY=SUBSTR(FSERVERDATE,0,2) ' текущий день в текстовом формате
CURDATE(CURYEAR,CURMONTH,CURDAY) ' вызов функции перевода даты в текстовой формат
CURHOUR=SUBSTR(FSERVERTIME,0,2) ' текущие часы в текстовом формате
CURMIN=SUBSTR(FSERVERTIME,3,2) ' текущие минуты в текстовом формате
CURSEC=SUBSTR(FSERVERTIME,6,2) ' текущие секунды в текстовом формате
CURTIME(CURHOUR,CURMIN,CURSEC) ' вызов функции перевода времени в текстовой формат
END FUNC
' ФУНКЦИЯ ПЕРЕВОДА ДАТЫ В ТЕКСТОВОЙ ФОРМАТ
FUNC CURDATE (FCURYEAR,FCURMONTH,FCURDAY)
IF (LEN(FCURMONTH) < 2)
CURMONTH = "0" & FCURMONTH
END IF
IF (LEN(FCURDAY) < 2)
CURDAY = "0" & FCURDAY
END IF
CURDATE = CURYEAR & CURMONTH & CURDAY
END FUNC
' ФУНКЦИЯ ПЕРЕВОДА ВРЕМЕНИ В ТЕКСТОВОЙ ФОРМАТ
FUNC CURTIME(FCURHOUR,FCURMIN,FCURSEC)
IF (LEN(FCURHOUR) < 2)
CURHOUR = "0" & FCURHOUR
END IF
IF (LEN(FCURMIN) < 2)
CURMIN = "0" & FCURMIN
END IF
CURTIME = CURHOUR & CURMIN & "00"
END FUNC
END_PROGRAM
PARAMETER SERVERDATE;
PARAMETER_TITLE Дата;
PARAMETER_DESCRIPTION Текущая дата;
PARAMETER_TYPE STRING(10);
END
PARAMETER SERVERTIME;
PARAMETER_TITLE Время;
PARAMETER_DESCRIPTION Текущее время;
PARAMETER_TYPE STRING(10);
END
PARAMETER INSTRUMENT;
PARAMETER_TITLE Инструмент;
PARAMETER_DESCRIPTION Торгуемый инструмент;
PARAMETER_TYPE STRING(5);
END
PARAMETER INTEREST;
PARAMETER_TITLE ОИ;
PARAMETER_DESCRIPTION Открытый интерес;
PARAMETER_TYPE NUMERIC(10,0);
END
PARAMETER RATE;
PARAMETER_TITLE Изменение;
PARAMETER_DESCRIPTION Относительное зменение ОИ за интервал;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER MAXVAL;
PARAMETER_TITLE Макс ОИ;
PARAMETER_DESCRIPTION Максимальный ОИ за ТС;
PARAMETER_TYPE NUMERIC(10,0);
END
PARAMETER MAXTIME;
PARAMETER_TITLE Время Макс;
PARAMETER_DESCRIPTION Время макс. знач.;
PARAMETER_TYPE STRING(10);
END
PARAMETER MAXCOST;
PARAMETER_TITLE Цена Макс;
PARAMETER_DESCRIPTION Цена макс. знач.;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER MINVAL;
PARAMETER_TITLE Мин ОИ;
PARAMETER_DESCRIPTION Минимальный ОИ за ТС;
PARAMETER_TYPE NUMERIC(10,0);
END
PARAMETER MINTIME;
PARAMETER_TITLE Время Мин;
PARAMETER_DESCRIPTION Время мин. знач.;
PARAMETER_TYPE STRING(10);
END
PARAMETER MINCOST;
PARAMETER_TITLE Цена Мин;
PARAMETER_DESCRIPTION Цена мин. знач.;
PARAMETER_TYPE NUMERIC(10,2);
END
END_PORTFOLIO_EX
PORTFOLIO_EX OPEN INTEREST;
DESCRIPTION Алгоритм выявляет всплески открытого интереса;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST ALL_FIRMS;
PROGRAM
' =========ПОЛЬЗОВАТЕЛЬСКИЕ НАСТРОЙКИ=============
' Перечисляем маржинальные и наиболее ликвидные активы
' FINSTRUMENTS="GAZP"
' CLASSCODE="EQNE" ' код группы
PRO=1 ' Процент изменения (чувствительности)
INTERVAL=5 ' таймфрейм на открытом графике в минутах (0 < INTERVAL < 60)
' ====================ПЕРЕМЕННЫЕ==================
HH = 0 ' обнуляем максимум за
LL = 10000000 ' обнуляем минимум за
tmp=CREATE_MAP()
tmp=set_value(tmp, "RIM2", "SPBFUT")
tmp=set_value(tmp, "SRM2", "SPBFUT")
tmp=set_value(tmp, "GZM2", "SPBFUT")
tmp=set_value(tmp, "LKM2", "SPBFUT")
INSTRUMENTS="RIM2,SRM2,GZM2,LKM2"
' ===============ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ===============
NEW_GLOBAL("LAST",CREATE_MAP()) ' последние (текущие) величины
' ===============СЕРВЕРНЫЕ ДАТА И ВРЕМЯ===============
SERVERDATE=GET_INFO_PARAM("TRADEDATE") ' дата сервера в формате DD.MM.YYYY
SERVERTIME=GET_INFO_PARAM("SERVERTIME") ' время сервера в формате HH:MM:SS
DATETIME (SERVERDATE,SERVERTIME) ' вызов функции даты-времени
CURTIME=0+CURTIME ' перевод времени в число
IF CURTIME > 100001 AND CURTIME < 235000 ' время внутри ТС
DELETE_ALL_ITEMS()
OUTPUT=CREATE_MAP()
' В цикле делаем определение объемов и сравлиниваем со средним за период.
FOR INSTRUMENT IN INSTRUMENTS
CLASSCODE=GET_VALUE(tmp, INSTRUMENT)
OI=0+GET_VALUE(GET_PARAM_EX(CLASSCODE,INSTRUMENT,"NUMCONTRACTS"), "PARAM_VALUE") ' текущий открытый интерес по контракту
OI0=0+GET_VALUE(LAST,INSTRUMENT)
MAXVAL=0+GET_VALUE(LAST,INSTRUMENT & "MAXVAL")
MAXTIME=GET_VALUE(LAST,INSTRUMENT & "MAXTIME")
MAXCOST=0+GET_VALUE(LAST,INSTRUMENT & "MAXCOST")
MINVAL=0+GET_VALUE(LAST,INSTRUMENT & "MINVAL")
MINTIME=GET_VALUE(LAST,INSTRUMENT & "MINTIME")
MINCOST=0+GET_VALUE(LAST,INSTRUMENT & "MINCOST")
IF OI0=0
OI0=OI
END IF
IF MINVAL=0
MINVAL=LL
END IF
RATE=(OI-OI0)*100/OI0
LAST=SET_VALUE(LAST, INSTRUMENT, OI)
COST=GET_VALUE(GET_PARAM_EX(CLASSCODE, INSTRUMENT, "LAST"), "PARAM_VALUE") ' текущий открытый интерес по контракту
IF OI>MAXVAL
MAXVAL=OI
MAXTIME=SERVERTIME
MAXCOST=0+COST
LAST=SET_VALUE(LAST, INSTRUMENT & "MAXVAL",MAXVAL)
LAST=SET_VALUE(LAST, INSTRUMENT & "MAXTIME",MAXTIME)
LAST=SET_VALUE(LAST, INSTRUMENT & "MAXCOST",MAXCOST)
END IF
IF OI<MINVAL
MINVAL=OI
MINTIME=SERVERTIME
MINCOST=0+COST
LAST=SET_VALUE(LAST, INSTRUMENT & "MINVAL",MINVAL)
LAST=SET_VALUE(LAST, INSTRUMENT & "MINTIME",MINTIME)
LAST=SET_VALUE(LAST, INSTRUMENT & "MINCOST",MINCOST)
END IF
' ===============ДАННЫЕ В ТАБЛИЦУ===============
OUTPUT=SET_VALUE(OUTPUT,"SERVERDATE", SERVERDATE)
OUTPUT=SET_VALUE(OUTPUT,"SERVERTIME", SERVERTIME)
OUTPUT=SET_VALUE(OUTPUT,"INSTRUMENT", INSTRUMENT)
OUTPUT=SET_VALUE(OUTPUT,"INTEREST", OI)
OUTPUT=SET_VALUE(OUTPUT,"RATE", RATE)
OUTPUT=SET_VALUE(OUTPUT,"MAXVAL", MAXVAL)
OUTPUT=SET_VALUE(OUTPUT,"MAXTIME", MAXTIME)
OUTPUT=SET_VALUE(OUTPUT,"MAXCOST", MAXCOST)
OUTPUT=SET_VALUE(OUTPUT,"MINVAL", MINVAL)
OUTPUT=SET_VALUE(OUTPUT,"MINTIME", MINTIME)
OUTPUT=SET_VALUE(OUTPUT,"MINCOST", MINCOST)
ADD_ITEM(1,OUTPUT)
' сравним и пересохраним в МАП
IF RATE>PRO ' Если обнаружен ои больше обычного, то
MESSAGE("1% OI UP IN " & INSTRUMENT, 1)
SET_ROW_COLOR_EX (1, "RGB(0,255,0)", "RGB(0,255,0)", "DEFAULT_COLOR", "DEFAULT_COLOR") ' ПОДСВЕТИМ СТРОКУ ЗЕЛЕНЫМ
END IF
IF RATE<0-PRO ' Если обнаружен ои меньше обычного, то
MESSAGE("1% OI DOWN IN " & INSTRUMENT, 1)
SET_ROW_COLOR_EX (1, "RGB(255,0,0)", "RGB(255,0,0)", "DEFAULT_COLOR", "DEFAULT_COLOR") ' ПОДСВЕТИМ СТРОКУ КРАСНЫМ
END IF
END FOR
END IF
' ФУНКЦИЯ СЕРВЕРНЫХ ДАТЫ И ВРЕМЕНИ
FUNC DATETIME(FSERVERDATE,FSERVERTIME)
CURYEAR=SUBSTR(FSERVERDATE,6,4) ' текущий год в текстовом формате
CURMONTH=SUBSTR(FSERVERDATE,3,2) ' текущий месяц в текстовом формате
CURDAY=SUBSTR(FSERVERDATE,0,2) ' текущий день в текстовом формате
CURDATE(CURYEAR,CURMONTH,CURDAY) ' вызов функции перевода даты в текстовой формат
CURHOUR=SUBSTR(FSERVERTIME,0,2) ' текущие часы в текстовом формате
CURMIN=SUBSTR(FSERVERTIME,3,2) ' текущие минуты в текстовом формате
CURSEC=SUBSTR(FSERVERTIME,6,2) ' текущие секунды в текстовом формате
CURTIME(CURHOUR,CURMIN,CURSEC) ' вызов функции перевода времени в текстовой формат
END FUNC
' ФУНКЦИЯ ПЕРЕВОДА ДАТЫ В ТЕКСТОВОЙ ФОРМАТ
FUNC CURDATE (FCURYEAR,FCURMONTH,FCURDAY)
IF (LEN(FCURMONTH) < 2)
CURMONTH = "0" & FCURMONTH
END IF
IF (LEN(FCURDAY) < 2)
CURDAY = "0" & FCURDAY
END IF
CURDATE = CURYEAR & CURMONTH & CURDAY
END FUNC
' ФУНКЦИЯ ПЕРЕВОДА ВРЕМЕНИ В ТЕКСТОВОЙ ФОРМАТ
FUNC CURTIME(FCURHOUR,FCURMIN,FCURSEC)
IF (LEN(FCURHOUR) < 2)
CURHOUR = "0" & FCURHOUR
END IF
IF (LEN(FCURMIN) < 2)
CURMIN = "0" & FCURMIN
END IF
CURTIME = CURHOUR & CURMIN & "00"
END FUNC
END_PROGRAM
PARAMETER SERVERDATE;
PARAMETER_TITLE Дата;
PARAMETER_DESCRIPTION Текущая дата;
PARAMETER_TYPE STRING(10);
END
PARAMETER SERVERTIME;
PARAMETER_TITLE Время;
PARAMETER_DESCRIPTION Текущее время;
PARAMETER_TYPE STRING(10);
END
PARAMETER INSTRUMENT;
PARAMETER_TITLE Инструмент;
PARAMETER_DESCRIPTION Торгуемый инструмент;
PARAMETER_TYPE STRING(5);
END
PARAMETER INTEREST;
PARAMETER_TITLE ОИ;
PARAMETER_DESCRIPTION Открытый интерес;
PARAMETER_TYPE NUMERIC(10,0);
END
PARAMETER RATE;
PARAMETER_TITLE Изменение;
PARAMETER_DESCRIPTION Относительное зменение ОИ за интервал;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER MAXVAL;
PARAMETER_TITLE Макс ОИ;
PARAMETER_DESCRIPTION Максимальный ОИ за ТС;
PARAMETER_TYPE NUMERIC(10,0);
END
PARAMETER MAXTIME;
PARAMETER_TITLE Время Макс;
PARAMETER_DESCRIPTION Время макс. знач.;
PARAMETER_TYPE STRING(10);
END
PARAMETER MAXCOST;
PARAMETER_TITLE Цена Макс;
PARAMETER_DESCRIPTION Цена макс. знач.;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER MINVAL;
PARAMETER_TITLE Мин ОИ;
PARAMETER_DESCRIPTION Минимальный ОИ за ТС;
PARAMETER_TYPE NUMERIC(10,0);
END
PARAMETER MINTIME;
PARAMETER_TITLE Время Мин;
PARAMETER_DESCRIPTION Время мин. знач.;
PARAMETER_TYPE STRING(10);
END
PARAMETER MINCOST;
PARAMETER_TITLE Цена Мин;
PARAMETER_DESCRIPTION Цена мин. знач.;
PARAMETER_TYPE NUMERIC(10,2);
END
END_PORTFOLIO_EX
Комментариев нет:
Отправить комментарий