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

Аналитические таблицы Quik: лидеры Роста и лидеры Падения, в том числе и по оборотам торгов

Данная таблица - скринер, то есть  в online "снимает" лидирующие бумаги среди растущих  и падающих, с учетом оборота торгов. Лидеры по процентам изменения и по тому, что они еще и самые оборотистые - означает одновременную фильтрацию по обоим параметрам (двойная фильтрация) и показывает, что за финансовый инструмент (акция, фьючерс), находится в Лидерах или Аутсайдерах (аутсайдеры рассматриваются относительно роста и считаются "снижающимися финансовыми инструментами").



Используя таблицу можно видеть, как один финансовый инструмент догоняет, сравнивается и обгоняет другой финансовый инструмент, что и является потенциальным сигналом.

PORTFOLIO_EX BW_Next;
DESCRIPTION Лидеры рынка;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST BW_Next;
PROGRAM                
NEW_GLOBAL("Stop_Time",174458)
NEW_GLOBAL("Time_Trade",0)
NEW_GLOBAL("NameStock","")
NEW_GLOBAL("Class",CREATE_COLLECTION())
NEW_GLOBAL("Code",CREATE_COLLECTION())
NEW_GLOBAL("Vol",CREATE_COLLECTION())
NEW_GLOBAL("Price_LClose",CREATE_COLLECTION())
NEW_GLOBAL("Start_Flag",1)
NEW_GLOBAL("Lider",0)

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
Vol = SET_COLLECTION_ITEM(Vol,i, GET_PARAM(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i), "valtoday")+0)
        Price_LClose = SET_COLLECTION_ITEM(Price_LClose,i,GET_PARAM(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i), "lastchange")+0)
END FOR

Sort()
PriceSort(30)
SortClose(1,Lider)
SortClose(Lider+1,30)

FOR i FROM 0 TO 29
StockInfo = GET_SECURITY_INFO(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i))
NameStock = GET_VALUE (StockInfo, "NAME")
string = ""
string = set_value(string, "NameStock", NameStock)
string = set_value(string, "Vol", GET_COLLECTION_ITEM(Vol,i))
string = set_value(string, "Price_LClose", GET_COLLECTION_ITEM(Price_LClose,i))
IF i < Lider
Modify_Item(i+1,string)
SET_ROW_COLOR_EX (i+1, "RGB(178,246,160)", "RGB(123,239,91)", "RGB(0,0,0)", "RGB(0,0,0)")
ELSE
Modify_Item(i+1,string)
SET_ROW_COLOR_EX (i+1, "RGB(253,185,185)", "RGB(255,139,139)", "RGB(0,0,0)", "RGB(0,0,0)")
END IF
END FOR
string = set_value(string, "NameStock", "Вероятность +")
string = set_value(string, "Vol", 1/0)
string = set_value(string, "Price_LClose", (Lider/30)*100)
Modify_Item(31,string)
SET_ROW_COLOR_EX (31, "RGB(0,112,192)", "RGB(0,98,172)", "RGB(255,255,255)", "RGB(255,255,255)")

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

ELSE

IF (Start_Flag == 1)
  delete_all_items()
  error = 0
    Class = CREATE_COLLECTION()
    Code = CREATE_COLLECTION()

Class = INSERT_COLLECTION_ITEM(Class,0,"EQBR")
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,"EQNL")
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,"EQBR")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQBR")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNL")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNL")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNL")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQBR")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNL")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQBR")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNL")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNL")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNE")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQBS")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNE")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQBR")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNL")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNL")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNL")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNL")
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,"EQBR")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQBR")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQBS")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNL")
Class = INSERT_COLLECTION_ITEM(Class,0,"PSLV")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNL")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQBS")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNL")
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,"EQNL")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQBR")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQLI")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNE")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNL")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNE")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQBS")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQBR")
Class = INSERT_COLLECTION_ITEM(Class,0,"EQNL")


Code = INSERT_COLLECTION_ITEM(Code,0,"SBER03")
Code = INSERT_COLLECTION_ITEM(Code,0,"GAZP")
Code = INSERT_COLLECTION_ITEM(Code,0,"GMKN")
Code = INSERT_COLLECTION_ITEM(Code,0,"LKOH")
Code = INSERT_COLLECTION_ITEM(Code,0,"VTBR")
Code = INSERT_COLLECTION_ITEM(Code,0,"ROSN")
Code = INSERT_COLLECTION_ITEM(Code,0,"SNGS")
Code = INSERT_COLLECTION_ITEM(Code,0,"SNGSP")
Code = INSERT_COLLECTION_ITEM(Code,0,"SBERP03")
Code = INSERT_COLLECTION_ITEM(Code,0,"RTKM")
Code = INSERT_COLLECTION_ITEM(Code,0,"HYDR")
Code = INSERT_COLLECTION_ITEM(Code,0,"PLZL")
Code = INSERT_COLLECTION_ITEM(Code,0,"MTSI")
Code = INSERT_COLLECTION_ITEM(Code,0,"URSI")
Code = INSERT_COLLECTION_ITEM(Code,0,"CHMF")
Code = INSERT_COLLECTION_ITEM(Code,0,"RU14TATN3006")
Code = INSERT_COLLECTION_ITEM(Code,0,"SIBN")
Code = INSERT_COLLECTION_ITEM(Code,0,"TRNFP")
Code = INSERT_COLLECTION_ITEM(Code,0,"URKA")
Code = INSERT_COLLECTION_ITEM(Code,0,"OGK2")
Code = INSERT_COLLECTION_ITEM(Code,0,"NOTK")
Code = INSERT_COLLECTION_ITEM(Code,0,"RTKMP")
Code = INSERT_COLLECTION_ITEM(Code,0,"MAGN")
Code = INSERT_COLLECTION_ITEM(Code,0,"TGKJ")
Code = INSERT_COLLECTION_ITEM(Code,0,"PMTL")
Code = INSERT_COLLECTION_ITEM(Code,0,"NLMK")
Code = INSERT_COLLECTION_ITEM(Code,0,"STKM")
Code = INSERT_COLLECTION_ITEM(Code,0,"MSNG")
Code = INSERT_COLLECTION_ITEM(Code,0,"RASP")
Code = INSERT_COLLECTION_ITEM(Code,0,"RBCI")
Code = INSERT_COLLECTION_ITEM(Code,0,"OGKE")
Code = INSERT_COLLECTION_ITEM(Code,0,"MSRS")
Code = INSERT_COLLECTION_ITEM(Code,0,"VSMO")
Code = INSERT_COLLECTION_ITEM(Code,0,"FEES")
Code = INSERT_COLLECTION_ITEM(Code,0,"AKRN")
Code = INSERT_COLLECTION_ITEM(Code,0,"VTEL")
Code = INSERT_COLLECTION_ITEM(Code,0,"OGK4")
Code = INSERT_COLLECTION_ITEM(Code,0,"OGK6")
Code = INSERT_COLLECTION_ITEM(Code,0,"ZMZNP")
Code = INSERT_COLLECTION_ITEM(Code,0,"SPTL")
Code = INSERT_COLLECTION_ITEM(Code,0,"RU000A0ERGA7")
Code = INSERT_COLLECTION_ITEM(Code,0,"AFLT")
Code = INSERT_COLLECTION_ITEM(Code,0,"OGK1")
Code = INSERT_COLLECTION_ITEM(Code,0,"BLNG")
Code = INSERT_COLLECTION_ITEM(Code,0,"GRAZ")
Code = INSERT_COLLECTION_ITEM(Code,0,"MMBM")
Code = INSERT_COLLECTION_ITEM(Code,0,"VZRZ")
Code = INSERT_COLLECTION_ITEM(Code,0,"IRGZ")
Code = INSERT_COLLECTION_ITEM(Code,0,"OGKC")

FOR i FROM 0 TO GET_COLLECTION_COUNT(Class)-1
    Vol = INSERT_COLLECTION_ITEM(Vol,i,GET_PARAM(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i), "valtoday")+0)
Price = GET_PARAM(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i), "last")+0
LClose = GET_PARAM(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i), "prevprice")+0    
        Price_LClose = INSERT_COLLECTION_ITEM(Price_LClose,i,(Price/LClose*100)-100)  
END FOR

Sort()
PriceSort(30)
SortClose(1,Lider)
SortClose(Lider+1,30)

FOR i FROM 0 TO 29
StockInfo = GET_SECURITY_INFO(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i))
NameStock = GET_VALUE (StockInfo, "NAME")
string = ""
string = set_value(string, "NameStock", NameStock)
string = set_value(string, "Vol", GET_COLLECTION_ITEM(Vol,i))
string = set_value(string, "Price_LClose", GET_COLLECTION_ITEM(Price_LClose,i))
IF i < Lider
Add_Item(i+1,string)
SET_ROW_COLOR_EX (i+1, "RGB(178,246,160)", "RGB(123,239,91)", "RGB(0,0,0)", "RGB(0,0,0)")
ELSE
Add_Item(i+1,string)
SET_ROW_COLOR_EX (i+1, "RGB(253,185,185)", "RGB(255,139,139)", "RGB(0,0,0)", "RGB(0,0,0)")
END IF
END FOR
string = set_value(string, "NameStock", "Вероятность +")
string = set_value(string, "Vol", 1/0)
string = set_value(string, "Price_LClose", (Lider/30)*100)
Add_Item(31,string)
SET_ROW_COLOR_EX (31, "RGB(0,112,192)", "RGB(0,98,172)", "RGB(255,255,255)", "RGB(255,255,255)")

    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 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

FUNC Sort()
FOR S FROM 0 TO GET_COLLECTION_COUNT(Vol)-2
max = S
FOR k FROM S+1 TO GET_COLLECTION_COUNT(Vol)-1
IF ((GET_COLLECTION_ITEM(Vol,k)+0) > (GET_COLLECTION_ITEM(Vol,max)+0))
max = k
            END IF
    END FOR
buf = GET_COLLECTION_ITEM(Vol,S)
Vol = SET_COLLECTION_ITEM(Vol,S,GET_COLLECTION_ITEM(Vol,max))
Vol = SET_COLLECTION_ITEM(Vol,max, buf)

buf = GET_COLLECTION_ITEM(Class,S)
Class = SET_COLLECTION_ITEM(Class,S,GET_COLLECTION_ITEM(Class,max))
Class = SET_COLLECTION_ITEM(Class,max, buf)

buf = GET_COLLECTION_ITEM(Code,S)
Code = SET_COLLECTION_ITEM(Code,S,GET_COLLECTION_ITEM(Code,max))
Code = SET_COLLECTION_ITEM(Code,max, buf)

buf = GET_COLLECTION_ITEM(Price_LClose,S)
Price_LClose = SET_COLLECTION_ITEM(Price_LClose,S,GET_COLLECTION_ITEM(Price_LClose,max))
Price_LClose = SET_COLLECTION_ITEM(Price_LClose,max, buf)
    END FOR
END FUNC

FUNC SortClose(F,Kol)
FOR S FROM F-1 TO Kol-2
max = S
FOR k FROM S+1 TO Kol-1
IF ((GET_COLLECTION_ITEM(Vol,k)+0) > (GET_COLLECTION_ITEM(Vol,max)+0))
max = k
            END IF
    END FOR
buf = GET_COLLECTION_ITEM(Vol,S)
Vol = SET_COLLECTION_ITEM(Vol,S,GET_COLLECTION_ITEM(Vol,max))
Vol = SET_COLLECTION_ITEM(Vol,max, buf)

buf = GET_COLLECTION_ITEM(Class,S)
Class = SET_COLLECTION_ITEM(Class,S,GET_COLLECTION_ITEM(Class,max))
Class = SET_COLLECTION_ITEM(Class,max, buf)

buf = GET_COLLECTION_ITEM(Code,S)
Code = SET_COLLECTION_ITEM(Code,S,GET_COLLECTION_ITEM(Code,max))
Code = SET_COLLECTION_ITEM(Code,max, buf)

buf = GET_COLLECTION_ITEM(Price_LClose,S)
Price_LClose = SET_COLLECTION_ITEM(Price_LClose,S,GET_COLLECTION_ITEM(Price_LClose,max))
Price_LClose = SET_COLLECTION_ITEM(Price_LClose,max, buf)
    END FOR
END FUNC

FUNC PriceSort(Kol)
Lider = 0
FOR S FROM 0 TO Kol-1
IF ((GET_COLLECTION_ITEM(Price_LClose,S)+0) > 0)
buf = GET_COLLECTION_ITEM(Vol,Lider)
Vol = SET_COLLECTION_ITEM(Vol,Lider,GET_COLLECTION_ITEM(Vol,S))
Vol = SET_COLLECTION_ITEM(Vol,S, buf)

buf = GET_COLLECTION_ITEM(Class,Lider)
Class = SET_COLLECTION_ITEM(Class,Lider,GET_COLLECTION_ITEM(Class,S))
Class = SET_COLLECTION_ITEM(Class,S, buf)

buf = GET_COLLECTION_ITEM(Code,Lider)
Code = SET_COLLECTION_ITEM(Code,Lider,GET_COLLECTION_ITEM(Code,S))
Code = SET_COLLECTION_ITEM(Code,S, buf)

buf = GET_COLLECTION_ITEM(Price_LClose,Lider)
Price_LClose = SET_COLLECTION_ITEM(Price_LClose,Lider,GET_COLLECTION_ITEM(Price_LClose,S))
Price_LClose = SET_COLLECTION_ITEM(Price_LClose,S, buf)
        
Lider = Lider + 1
END IF
    END FOR
END FUNC

END_PROGRAM

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

PARAMETER Vol;
PARAMETER_TITLE Объем торгов;
PARAMETER_DESCRIPTION Объем торгов;
PARAMETER_TYPE NUMERIC(15,2);
END

PARAMETER Price_LClose;
PARAMETER_TITLE Price/LClose;
PARAMETER_DESCRIPTION Объем торгов;
PARAMETER_TYPE NUMERIC(15,2);
END

END_PORTFOLIO_EX