понедельник, 11 ноября 2013 г.

Аналитические таблицы Quik: количественный анализ


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

Комментариев нет:

Отправить комментарий

Комментируйте и откомментированы будете...!