понедельник, 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

Аналитические таблицы Quik: стили отображения данных

Цветовой стиль таблиц Quik.

БЕЗ СТИЛЯ


РОССИЙСКИЙ СТИЛЬ 


АМЕРИКАНСКИЙ СТИЛЬ 1 


АМЕРИКАНСКИЙ СТИЛЬ 2 


ЯПОНСКИЙ СТИЛЬ 1


ЯПОНСКИЙ СТИЛЬ 2

Аналитические таблицы Quik: параметры разброса колебаний финансового инструмента (описание)

Таблица ценовых диапазонов между показательными ценовыми уровнями



Описание
  • Open = цена открытия, определяется в момент начала торгов на основе залпового аукциона 
  • Max = максимальная цена торговой сессии, в течении торговой сессии сделок по цене выше этой не происходило
  • Min = минимальная цена торговой сессии, в течении торговой сессии сделок по цене ниже этой не происходило
  • Close = цена закрытия торговой сессии
  • Price/Open % = Цена последней сделки / Цену открытия * 100 - 100 = показывает на сколько % текущая цена отстоит от цены открытия
  • Max/Price % = Максимальная цена / Цену последней сделки * 100 - 100 = показывает на сколько процентов (долей процента) максимальная цена выше, чем цена последней сделки
  • Price/Min % = Цена последней сделки / Минимальную цену * 100 - 100 = показывает на сколько  процентов (долей процента) текущая цена выше, чем минимальная цена
  • Max/Open % = Максимальная цена / Цену открытия * 100 - 100 = показывает на сколько процентов (долей процента) максимальная цена выше, чем цена открытия
  • Max/Close % = Максимальная цена / Цену закрытия * 100 - 100 = показывает на сколько процентов (долей процента) максимальная цена больше, чем цена закрытия (расчитывается после появления цены закрытия)
  • Max/Min % = Максимальная цена / Минимальную цену * 100 - 100 = показывает на сколько процентов максимальная цена больше, чем минимальная цена
  • Last Close = Цена закрытия предыдущих торгов
  • Open/LastClose % = Цена открытия настоящей торговой сессии / Цену закрытия предыдущей торговой сессии * 100 - 100 = показывает на сколько процентов (долей процента) цена открытия текущей торговой сессии выше или ниже, чем цена закрытия предыдущей торговой сессии
Расшифровка параметров по «Волатильности рынка»

Параметр
Расшифровка
Формула
Единица измерения
Объяснение
1
open
Цена открытия рынка
исходный параметр
рубли
цена первой сделки за текущую сессию
2
max
Максимальная цена внутри торгов
исходный параметр
рубли
максимальная цена, по которой были совершены сделки в текущей сессии, выше этой цены сделок не было
3
min
Минимальная цена внутри торгов
исходный параметр
рубли
минимальная цена, по которой были совершены сделки в текущей сессии, ниже этой цены сделок не было
4
close
Цена закрытия рынка
исходный параметр
рубли
цена последней сделки за текущую сессию
5
cl/op
Отношение цены закрытия рынка к цене открытия
= close/open*100-100
%
показывает, сколько можно было заработать по стратегии open to close
6
max/op
Отношение максимальной цены к цене открытия
= max/open*100-100
%
показывает, сколько можно было заработать по стратегии open to max
7
max/cl
Отношение максимальной цены к цене закрытия
= max/close*100-100
%
показывает, был ли в эту торговую сессию зазор между максимальной и последней ценой
8
max/min
Отношение максимальной цены к минимальной цене
= max/min*100-100
%
показывает, сколько можно было заработать по стратегии min to max
9
op/lcl
Отношение цены открытия к цене прошлого закрытия
= open/last close*100-100
%
показывает, был ли зазор (разрыв, геп) между ценой сегодняшнего открытия и ценой вчерашнего закрытия