PORTFOLIO_EX Quantitative Analysis;
DESCRIPTION Количественный анализ;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST Quantitative Analysis;
PROGRAM
' ========= Объявление глобальных переменных =====>>
NEW_GLOBAL("NameStock","")
NEW_GLOBAL("Class","EQNE")
NEW_GLOBAL("Code","GAZP")
NEW_GLOBAL("Start_Flag",1)
NEW_GLOBAL("Stroka","")
NEW_GLOBAL("Stroka2","")
NEW_GLOBAL("SumDeltaStock",0)
NEW_GLOBAL("SumDeltaOG",0)
NEW_GLOBAL("SumDeltaMMVB",0)
NEW_GLOBAL("SumChisDis",0)
NEW_GLOBAL("SumChisDisOG",0)
NEW_GLOBAL("SumChisDisMMVB",0)
NEW_GLOBAL("Math",0)
NEW_GLOBAL("MathOG",0)
NEW_GLOBAL("MathMMVB",0)
NEW_GLOBAL("LastCENA",1)
NEW_GLOBAL("LastMMVB",1)
NEW_GLOBAL("LastOG",1)
NEW_GLOBAL("KolKup",0)
NEW_GLOBAL("KolProd",0)
NEW_GLOBAL("KolZnMMVB",0)
NEW_GLOBAL("KolZnOG",0)
NEW_GLOBAL("SumChisKov",0)
NEW_GLOBAL("SumChisKovOG",0)
NEW_GLOBAL("SumChisKovMMVB",0)
NEW_GLOBAL("Avarage",0)
NEW_GLOBAL("AvarageOG",0)
NEW_GLOBAL("AvarageMMVB",0)
NEW_GLOBAL("Math",0)
NEW_GLOBAL("Deviation",0)
NEW_GLOBAL("AlfaOG",0)
NEW_GLOBAL("AlfaMMVB",0)
NEW_GLOBAL("BetaOG",0)
NEW_GLOBAL("BetaMMVB",0)
NEW_GLOBAL("DeterminationOG",0)
NEW_GLOBAL("DeterminationMMVB",0)
NEW_GLOBAL("KorrOG",0)
NEW_GLOBAL("KorrMMVB",0)
NEW_GLOBAL("SumCena",0)
NEW_GLOBAL("SumCenaOG",0)
NEW_GLOBAL("SumCenaMMVB",0)
NEW_GLOBAL("CENA",0)
NEW_GLOBAL("OG",0)
NEW_GLOBAL("MMVB",0)
IF (Start_Flag == 1)
delete_all_items()
LogFileName = "Reports/"&"TIK(" & get_value(GET_TRADE_DATE(), "Date") & ")" & ".log"
LogFileName2 = "Reports/"&"AVARAGE(TIK)-(" & get_value(GET_TRADE_DATE(), "Date") & ")" & ".log"
CLEAR_FILE (LogFileName)
CLEAR_FILE (LogFileName2)
n=GET_NUMBER_OF("ALL_TRADES")
IF (n > 100)
MESSAGE ("Расчет данных...", 1)
PrevClose = GET_PARAM(Class, Code, "prevprice")
PrevOG = GET_PARAM("INDX", "MICEXO&G", "lastvalue")+0
PrevMMVB = GET_PARAM("INDX", "MICEXINDEXCF", "lastvalue")+0
NameROW = CREATE_COLLECTION()
DataROW = CREATE_COLLECTION()
AvarageDataROW = CREATE_COLLECTION()
NameROW = INSERT_COLLECTION_ITEM(NameROW,0,"Количество куплей, шт.")
NameROW = INSERT_COLLECTION_ITEM(NameROW,1,"Количество продаж, шт.")
NameROW = INSERT_COLLECTION_ITEM(NameROW,2,"price(stock)")
NameROW = INSERT_COLLECTION_ITEM(NameROW,3,"price(OG)")
NameROW = INSERT_COLLECTION_ITEM(NameROW,4,"price(MMVB)")
NameROW = INSERT_COLLECTION_ITEM(NameROW,5,"Математическое ожидание")
NameROW = INSERT_COLLECTION_ITEM(NameROW,6,"Стандартное отклонение")
NameROW = INSERT_COLLECTION_ITEM(NameROW,7,"Коэффициент Альфа с отраслевым индексом")
NameROW = INSERT_COLLECTION_ITEM(NameROW,8,"Коэффициент Альфа с индексом ММВБ")
NameROW = INSERT_COLLECTION_ITEM(NameROW,9,"Коэффициент Бета с отраслевым индексом (our)")
NameROW = INSERT_COLLECTION_ITEM(NameROW,10,"Коэффициент Бета с индексом ММВБ (our)")
NameROW = INSERT_COLLECTION_ITEM(NameROW,11,"Коэффициент Детерминации с отраслевым индексом")
NameROW = INSERT_COLLECTION_ITEM(NameROW,12,"Коэффициент Детерминации с индексом ММВБ")
NameROW = INSERT_COLLECTION_ITEM(NameROW,13,"Коэффициент Корреляции с отраслевым индексом")
NameROW = INSERT_COLLECTION_ITEM(NameROW,14,"Коэффициент Корреляции с индексом ММВБ")
Stroka = "Время |"
FOR i FROM 0 to GET_COLLECTION_COUNT(NameROW)-1
Stroka = Stroka & GET_COLLECTION_ITEM(NameROW,i) & "|"
DataROW = INSERT_COLLECTION_ITEM(DataROW,0,0)
AvarageDataROW = INSERT_COLLECTION_ITEM(AvarageDataROW,0,0)
END FOR
WRITELN(LogFileName, Stroka)
WRITELN(LogFileName2, Stroka)
FOR i FROM 1 to n
trade = GET_ITEM ("ALL_TRADES", i)
Cod = GET_VALUE (trade, "SECCODE")
IF (Cod == "MICEXINDEXCF")
KolZnMMVB = KolZnMMVB + 1
MMVB = GET_VALUE(trade, "PRICE")+0
SumCenaMMVB = SumCenaMMVB + MMVB
IF (KolZnMMVB > 1)
AvarageMMVB = SumCenaMMVB/KolZnMMVB
DeltaMMVB = (MMVB/LastMMVB*100)-100
SumDeltaMMVB = SumDeltaMMVB + DeltaMMVB
MathMMVB = SumDeltaMMVB/(KolZnMMVB)
ProcentMMVB = (MMVB/PrevMMVB*100)-100
SumChisDisMMVB = SumChisDisMMVB + POW((DeltaMMVB-MathMMVB),2)
DispersiaMMVB = SumChisDisMMVB/(KolZnMMVB)
DeviationMMVB = SQRT(DispersiaMMVB)
SumChisKovMMVB = SumChisKovMMVB + (SumDeltaMMVB-MathMMVB)
END IF
LastMMVB = MMVB
END IF
IF (Cod == "MICEXO&G")
KolZnOG = KolZnOG + 1
OG = GET_VALUE(trade, "PRICE")+0
SumCenaOG = SumCenaOG + OG
IF (KolZnOG > 1)
AvarageOG = SumCenaOG/KolZnOG
DeltaOG = (OG/LastOG*100)-100
SumDeltaOG = SumDeltaOG + DeltaOG
MathOG = SumDeltaOG/(KolZnOG)
ProcentOG = (OG/PrevOG*100)-100
SumChisDisOG = SumChisDisOG + POW((DeltaOG-MathOG),2)
DispersiaOG = SumChisDisOG/(KolZnOG)
DeviationOG = SQRT(DispersiaOG)
SumChisKovOG = SumChisKovOG + (SumDeltaOG-MathOG)
END IF
LastOG = OG
END IF
IF (Cod == Code)
Operation = GET_VALUE (trade, "OPERATION")
IF (Operation == "BUY")
KolKup = KolKup + 1
ELSE
KolProd = KolProd + 1
END IF
CENA = GET_VALUE(trade, "PRICE")+0
SumCena = SumCena + CENA
'========================= Расчет =============================================
IF ((KolKup+KolProd) > 1)
ProcentClose = (CENA/PrevClose*100)-100
Avarage = (SumCena/(KolKup + KolProd))
'========================= Расчет Дельта и Математического ожидания ============
DeltaStock = (CENA/LastCENA*100)-100
SumDeltaStock = SumDeltaStock + DeltaStock
Math = SumDeltaStock/(KolKup+KolProd)
'========================= Расчет Дисперсии и стандартного отклонения ==========
SumChisDis = SumChisDis + POW((DeltaStock-Math),2)
SumChisKov = SumChisKov + (DeltaStock-Math)
Dispersia = SumChisDis/(KolKup+KolProd)
Deviation = SQRT(Dispersia)
'========================= Расчет Альфа и Коэффициента детерминации ============
'========================= Расчет Бета, Ковариации и коэффициента Корреляции ==
IF (KolZnOG > 1)
BetaOG = Beta(ProcentClose,ProcentOG)
AlfaOG = Math - (BetaOG*MathOG)
DeterminationOG = 1-((DeltaStock - (AlfaOG+(DeltaOG*BetaOG)))/(AlfaOG-MathOG))
KovOG = (SumChisKov/(KolKup+KolProd))*(SumChisKovOG/KolZnOG)
KorrOG = KovOG/(Deviation*DeviationOG)
KovMMVB = (SumChisKov/(KolKup+KolProd))*(SumChisKovMMVB/KolZnMMVB)
KorrMMVB = KovMMVB/(Deviation*DeviationMMVB)
ELSE
AlfaOG = 0
DeterminationOG = 0
END IF
IF (KolZnMMVB > 1)
BetaMMVB = Beta(ProcentClose,ProcentMMVB)
AlfaMMVB = Math - (BetaMMVB*MathMMVB)
DeterminationMMVB = 1-((DeltaStock - (AlfaMMVB+(DeltaMMVB*BetaMMVB)))/(AlfaMMVB-MathMMVB))
ELSE
AlfaMMVB = 0
DeterminationMMVB = 0
END IF
DataROW = SET_COLLECTION_ITEM(DataROW,0,KolKup)
DataROW = SET_COLLECTION_ITEM(DataROW,1,KolProd)
DataROW = SET_COLLECTION_ITEM(DataROW,2,APPLY_SCALE(CENA,3))
DataROW = SET_COLLECTION_ITEM(DataROW,3,APPLY_SCALE(OG,3))
DataROW = SET_COLLECTION_ITEM(DataROW,4,APPLY_SCALE(MMVB,3))
DataROW = SET_COLLECTION_ITEM(DataROW,5,Math)
DataROW = SET_COLLECTION_ITEM(DataROW,6,Deviation)
DataROW = SET_COLLECTION_ITEM(DataROW,7,AlfaOG)
DataROW = SET_COLLECTION_ITEM(DataROW,8,AlfaMMVB)
DataROW = SET_COLLECTION_ITEM(DataROW,9,BetaOG)
DataROW = SET_COLLECTION_ITEM(DataROW,10,BetaMMVB)
DataROW = SET_COLLECTION_ITEM(DataROW,11,DeterminationOG)
DataROW = SET_COLLECTION_ITEM(DataROW,12,DeterminationMMVB)
DataROW = SET_COLLECTION_ITEM(DataROW,13,KorrOG)
DataROW = SET_COLLECTION_ITEM(DataROW,14,KorrMMVB)
Stroka = GET_VALUE(trade, "TIME") & "|"
Stroka2 = GET_VALUE(trade, "TIME") & "|"
FOR k FROM 0 to GET_COLLECTION_COUNT(DataROW)-1
ST1 = LEN(GET_COLLECTION_ITEM(NameROW,k))
ST2 = LEN(GET_COLLECTION_ITEM(DataROW,k))
IF ((ST1-ST2) > 0)
FOR j FROM 1 TO (ST1-ST2)
Stroka = Stroka & " "
END FOR
END IF
IF (k < 5)
AvarageDataROW = SET_COLLECTION_ITEM(AvarageDataROW,0,KolKup)
AvarageDataROW = SET_COLLECTION_ITEM(AvarageDataROW,1,KolProd)
AvarageDataROW = SET_COLLECTION_ITEM(AvarageDataROW,2,APPLY_SCALE(Avarage,3))
AvarageDataROW = SET_COLLECTION_ITEM(AvarageDataROW,3,APPLY_SCALE(AvarageOG,3))
AvarageDataROW = SET_COLLECTION_ITEM(AvarageDataROW,4,APPLY_SCALE(AvarageMMVB,3))
ELSE
AvarageDataROW = SET_COLLECTION_ITEM(AvarageDataROW,k,(GET_COLLECTION_ITEM(AvarageDataROW,k)+GET_COLLECTION_ITEM(DataROW,k)))
END IF
ST2 = LEN(GET_COLLECTION_ITEM(AvarageDataROW,k))
IF ((ST1-ST2) > 0)
FOR j FROM 1 TO (ST1-ST2)
Stroka2 = Stroka2 & " "
END FOR
END IF
Stroka = Stroka & GET_COLLECTION_ITEM(DataROW,k) & "|"
Stroka2 = Stroka2 & GET_COLLECTION_ITEM(AvarageDataROW,k) & "|"
END FOR
WRITELN(LogFileName, Stroka)
WRITELN(LogFileName2, Stroka2)
END IF
LastCENA = CENA
END IF
END FOR
AddStr("Количество куплей, шт.",KolKup)
AddStr("Количество продаж, шт.",KolProd)
AddStr("Avarage",Avarage)
AddStr("Avarage(OG)",AvarageOG)
AddStr("Avarage(MMVB)",AvarageMMVB)
AddStr("Математическое ожидание",Math)
AddStr("Стандартное отклонение",Deviation)
AddStr("Коэффициент Альфа с отраслевым индексом",AlfaOG)
AddStr("Коэффициент Альфа с индексом ММВБ",AlfaMMVB)
AddStr("Коэффициент Бета с отраслевым индексом (our)",BetaOG)
AddStr("Коэффициент Бета с индексом ММВБ (our)",BetaMMVB)
AddStr("Коэффициент Детерминации с отраслевым индексом",DeterminationOG)
AddStr("Коэффициент Детерминации с индексом ММВБ",DeterminationMMVB)
AddStr("Коэффициент Корреляции с отраслевым индексом",KorrOG)
AddStr("Коэффициент Корреляции с индексом ММВБ",KorrMMVB)
MESSAGE ("Расчет данных завершен...", 1)
Start_Flag = 7
ELSE
MESSAGE ("Нет данных для расчета...", 1)
END IF
END IF
FUNC FTime()
TIMES = GET_INFO_PARAM("SERVERTIME")
IF TIMES+0 > 0
Result = (SUBSTR(TIMES,0,2)&SUBSTR(TIMES,3,2)&SUBSTR(TIMES,6,2))+0
ELSE
Result = 0
END IF
END FUNC
FUNC AddStr(S,E)
string = ""
string = set_value(string, "NameStock", S)
string = set_value(string, "ZN", E)
Add_item(GET_NUMBER_OF("OWN")+1,string)
END FUNC
FUNC Beta(St,Ind)
Result = 1
IF St > Ind
IF Abs(St) > Abs(Ind)
Result = ABS(St/Ind)
ELSE
Result = ABS(Ind/St)
END IF
ELSE
IF Abs(St) < Abs(Ind)
Result = ABS(St/Ind)
ELSE
Result = ABS(Ind/St)
END IF
END IF
END FUNC
END_PROGRAM
PARAMETER NameStock;
PARAMETER_TITLE Параметр (Газпром);
PARAMETER_DESCRIPTION Параметр (Газпром);
PARAMETER_TYPE STRING(80);
END
PARAMETER ZN;
PARAMETER_TITLE Значение;
PARAMETER_DESCRIPTION Значение;
PARAMETER_TYPE NUMERIC(15,5);
END
END_PORTFOLIO_EX