вторник, 17 сентября 2013 г.

Аналитические таблицы Quik: расчет параметра Бета

Параметр Бета показывает - опережает (Бета > 1) или запаздывает (Бета < 1) финансовый инструмент по сравнению с базовым финансовым инструментом.

Добро пожаловать в лабораторию КЛИЕНТОНОМИКИ

Чаще всего сравнивают акции, фьючерсы с фондовым индексом, а также отраслевые индексы с общим фондовым индексом.

Запаздывание, а впоследствии опережение финансовым инструментом, например, индекса ММВБ или индекса РТС, может являться сигналом к торговле данным финансовым инструментом.

PORTFOLIO_EX Beta;
DESCRIPTION Расчет параметра БЕТА;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST Beta;
PROGRAM
NEW_GLOBAL("Stop_Time",174958)
NEW_GLOBAL("Time_Trade",0)
NEW_GLOBAL("NameStock","")
NEW_GLOBAL("Class",CREATE_COLLECTION())
NEW_GLOBAL("Code",CREATE_COLLECTION())
NEW_GLOBAL("Start_Flag",1)

IF (Start_Flag == 0)
IF (IS_CONNECTED() == 1)
MESSAGE ("Подключение установлено...", 1)
Start_Flag = 1
END IF
ELSE
IF (Start_Flag == 2)
FOR i FROM 0 TO GET_COLLECTION_COUNT(Class)-1
        Close = GET_PARAM(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i), "lastchange")+0
        Price = GET_PARAM(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i), "last")+0 
        Open = GET_PARAM(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i), "open")+0
Time_Trade = GET_PARAM(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i), "time")  
    MMVB = GET_PARAM("INDX", "MICEXINDEXCF", "lastchange")+0 
    OG = GET_PARAM("INDX", "MICEXO&G", "lastchange")+0    

OClose = (Price/Open*100)-100
        BOpenMMVB = Beta(OClose,MMVB)
BOpenOG = Beta(OClose,OG)
BCloseMMVB =Beta(Close,MMVB)
BCloseOG = Beta(Close,OG)  
        OpenClose = (BCloseMMVB/BOpenMMVB*100)-100

string = ""
string = set_value(string, "Close", Close)
string = set_value(string, "OClose", OClose)
string = set_value(string, "BOpenMMVB", BOpenMMVB)
string = set_value(string, "BOpenOG", BOpenOG)
string = set_value(string, "BCloseMMVB", BCloseMMVB)
string = set_value(string, "BCloseOG", BCloseOG)
string = set_value(string, "OpenClose", OpenClose)
IF Time_Trade > 0
string = set_value(string, "Time_Trade", SUBSTR(Time_Trade,0,2)&":"&SUBSTR(Time_Trade,2,2)&":"&SUBSTR(Time_Trade,4,2))
ELSE
string = set_value(string, "Time_Trade", 0)
END IF
Modify_item(i+1,string)
Col(BCloseMMVB,i)
END FOR

    IF (IS_CONNECTED() == 0)
MESSAGE ("Quik не подключен к серверу...", 1)
Start_Flag = 0
END IF

ELSE

IF (Start_Flag == 1)
  delete_all_items()
    Class = CREATE_COLLECTION()
    Code = CREATE_COLLECTION()
   
    Class = INSERT_COLLECTION_ITEM(Class,0,"EQNL")   
    Class = INSERT_COLLECTION_ITEM(Class,0,"EQNE")
    Class = INSERT_COLLECTION_ITEM(Class,0,"EQBR")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQBR")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNL")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNE")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNE")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNL")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQBR")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNE")

    Code = INSERT_COLLECTION_ITEM(Code,0,"TRNFP")
    Code = INSERT_COLLECTION_ITEM(Code,0,"NOTK")
    Code = INSERT_COLLECTION_ITEM(Code,0,"RU14TATN3014")    
    Code = INSERT_COLLECTION_ITEM(Code,0,"RU14TATN3006")
    Code = INSERT_COLLECTION_ITEM(Code,0,"SIBN")
    Code = INSERT_COLLECTION_ITEM(Code,0,"SNGSP")
    Code = INSERT_COLLECTION_ITEM(Code,0,"SNGS")
    Code = INSERT_COLLECTION_ITEM(Code,0,"ROSN")
    Code = INSERT_COLLECTION_ITEM(Code,0,"LKOH")
    Code = INSERT_COLLECTION_ITEM(Code,0,"GAZP")

FOR i FROM 0 TO GET_COLLECTION_COUNT(Class)-1
StockInfo = GET_SECURITY_INFO(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i))
NameStock = GET_VALUE (StockInfo, "NAME")
        Close = GET_PARAM(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i), "lastchange")+0
        Price = GET_PARAM(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i), "last")+0 
        Open = GET_PARAM(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i), "open")+0
Time_Trade = GET_PARAM(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i), "time")  
    MMVB = GET_PARAM("INDX", "MICEXINDEXCF", "lastchange")+0 
    OG = GET_PARAM("INDX", "MICEXO&G", "lastchange")+0    

OClose = (Price/Open*100)-100
        BOpenMMVB = Beta(OClose,MMVB)
BOpenOG = Beta(OClose,OG)
BCloseMMVB =Beta(Close,MMVB)
BCloseOG = Beta(Close,OG)  
        OpenClose = (BCloseMMVB/BOpenMMVB*100)-100

string = ""
string = set_value(string, "NameStock", NameStock)
string = set_value(string, "Close", Close)
string = set_value(string, "OClose", OClose)
string = set_value(string, "BOpenMMVB", BOpenMMVB)
string = set_value(string, "BOpenOG", BOpenOG)
string = set_value(string, "BCloseMMVB", BCloseMMVB)
string = set_value(string, "BCloseOG", BCloseOG)
string = set_value(string, "OpenClose", OpenClose)
IF Time_Trade > 0
string = set_value(string, "Time_Trade", SUBSTR(Time_Trade,0,2)&":"&SUBSTR(Time_Trade,2,2)&":"&SUBSTR(Time_Trade,4,2))
ELSE
string = set_value(string, "Time_Trade", 0)
END IF
Add_item(i+1,string)
Col(BCloseMMVB,i)
END FOR

    IF (IS_CONNECTED() == 0)
MESSAGE ("Quik не подключен к серверу...", 1)
Start_Flag = 0
ELSE
Start_Flag = 2
END IF

ELSE
    IF (IS_CONNECTED() == 0)
MESSAGE ("Quik не подключен к серверу...", 1)
Start_Flag = 0
END IF
END IF
END IF
END IF

FUNC Col(ST, K)
IF St == 0
SET_ROW_COLOR_EX (K+1, "RGB(219,229,241)", "RGB(200,215,234)", "RGB(0,0,0)", "RGB(0,0,0)")
END IF
IF St > 1
SET_ROW_COLOR_EX (K+1, "RGB(178,246,160)", "RGB(123,239,91)", "RGB(0,0,0)", "RGB(0,0,0)")
ELSE
SET_ROW_COLOR_EX (K+1, "RGB(253,185,185)", "RGB(255,139,139)", "RGB(0,0,0)", "RGB(0,0,0)")
END IF
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

FUNC FTime()
TIME = GET_INFO_PARAM("SERVERTIME")
IF TIME+0 > 0 
Result = (SUBSTR(TIME,0,2)&SUBSTR(TIME,3,2)&SUBSTR(TIME,6,2))+0
ELSE
Result = 0
END IF
END FUNC

END_PROGRAM

PARAMETER NameStock;
PARAMETER_TITLE Инструмент;
PARAMETER_DESCRIPTION Инструмент;
PARAMETER_TYPE STRING(40);
END

PARAMETER Close;
PARAMETER_TITLE % измен. закр.;
PARAMETER_DESCRIPTION Изменение к зактытию;
PARAMETER_TYPE NUMERIC(15,2);
END

PARAMETER OClose;
PARAMETER_TITLE % измен. откр.;
PARAMETER_DESCRIPTION Изменение к открытию;
PARAMETER_TYPE NUMERIC(15,2);
END

PARAMETER BOpenMMVB;
PARAMETER_TITLE Бета open(ММВБ) ;
PARAMETER_DESCRIPTION 1;
PARAMETER_TYPE NUMERIC(15,2);
END

PARAMETER BOpenOG;
PARAMETER_TITLE Бета open(OG) ;
PARAMETER_DESCRIPTION 1;
PARAMETER_TYPE NUMERIC(15,2);
END

PARAMETER BCloseMMVB;
PARAMETER_TITLE Бета Close(ММВБ) ;
PARAMETER_DESCRIPTION 1;
PARAMETER_TYPE NUMERIC(15,2);
END

PARAMETER BCloseOG;
PARAMETER_TITLE Бета Close(OG) ;
PARAMETER_DESCRIPTION 1;
PARAMETER_TYPE NUMERIC(15,2);
END
                                 
PARAMETER OpenClose;
PARAMETER_TITLE M B(C/O) %;
PARAMETER_DESCRIPTION 1;
PARAMETER_TYPE NUMERIC(15,2);
END

PARAMETER Time_Trade;
PARAMETER_TITLE Время послед.;
PARAMETER_DESCRIPTION Время последнего изменения;
PARAMETER_TYPE STRING(10);
END

END_PORTFOLIO_EX