четверг, 5 сентября 2013 г.

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


Внизу кода таблицы есть пояснения, что считается.

Какие выводы делать на основе полученной аналитики? Смотрите в следующей статье.

PORTFOLIO_EX ABTactic;
DESCRIPTION Тактические параметры закона "Спроса и Предложения";
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST ABTactic;
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
        Pr = GET_PARAM(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i), "offer")+0
        Sp = GET_PARAM(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i), "bid")+0
        Price = GET_PARAM(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i), "last")+0
Time_Trade = GET_PARAM(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i), "time")  

Pr_SP = (Pr/Sp*100)-100
PrSP = Pr-Sp
Pr_Price = (Pr/Price*100)-100
  PrPrice = Pr-Price
  Price_Sp = (Price/Sp*100)-100
PriceSp = Price-Sp 
string = ""
string = set_value(string, "Pr", Pr)
string = set_value(string, "Sp", SP)
string = set_value(string, "Price", Price)
string = set_value(string, "Pr_SP", Pr_SP)
string = set_value(string, "PrSP", PrSP)
string = set_value(string, "Pr_Price", Pr_Price)
string = set_value(string, "PrPrice", PrPrice)
string = set_value(string, "Price_Sp", Price_Sp)
string = set_value(string, "PriceSp", PriceSp)
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)
    IF (Pr_Price < 0) 
SET_ROW_COLOR_EX (i+1, "RGB(178,246,160)", "RGB(123,239,91)", "RGB(0,0,0)", "RGB(0,0,0)")
ELSE
    IF (Pr_Price == 0)
  SET_ROW_COLOR_EX (i+1, "RGB(219,229,241)", "RGB(200,215,234)", "RGB(0,0,0)", "RGB(0,0,0)")
ELSE
    IF (Price_Sp < 0)
  SET_ROW_COLOR_EX (i+1, "RGB(253,185,185)", "RGB(255,139,139)", "RGB(0,0,0)", "RGB(0,0,0)")
ELSE
SET_ROW_COLOR_EX (i+1, "DEFAULT_COLOR", "DEFAULT_COLOR", "DEFAULT_COLOR", "DEFAULT_COLOR")
END IF
END IF
END IF
END FOR
IF FTime() > 0  
string = set_value(string, "Time_Trade", SUBSTR(FTime(),0,2)&":"&SUBSTR(FTime(),2,2)&":"&SUBSTR(FTime(),4,2))
ELSE
string = set_value(string, "Time_Trade", "")
END IF
string = ""
string = set_value(string, "NameStock", "ИТОГО:")
string = set_value(string, "Pr", 0)
string = set_value(string, "Sp", 0)
string = set_value(string, "Price", 0)
    FOR i FROM 1 TO GET_NUMBER_OF("OWN")-1
  trade = GET_ITEM ("OWN", i)
string = set_value(string, "Pr", get_value(string, "Pr")+GET_VALUE(trade, "Pr"))
string = set_value(string, "Sp", get_value(string, "Sp")+GET_VALUE(trade, "Sp"))
string = set_value(string, "Price", get_value(string, "Price")+GET_VALUE(trade, "Price"))

END FOR
  trade = GET_ITEM ("OWN", GET_NUMBER_OF("OWN"))
string = set_value(string, "Pr_SP", (GET_VALUE(trade, "Pr")/GET_VALUE(trade, "Sp")*100)-100)
string = set_value(string, "PrSP", GET_VALUE(trade, "Pr")-GET_VALUE(trade, "Sp"))
string = set_value(string, "Pr_Price", (GET_VALUE(trade, "Pr")/GET_VALUE(trade, "Price")*100)-100)
string = set_value(string, "PrPrice", GET_VALUE(trade, "Pr")-GET_VALUE(trade, "Price"))
string = set_value(string, "Price_Sp", (GET_VALUE(trade, "Price")/GET_VALUE(trade, "Sp")*100)-100)
string = set_value(string, "PriceSp", GET_VALUE(trade, "Price")-GET_VALUE(trade, "Sp"))
MODIFY_Item(GET_NUMBER_OF("OWN"),string)
SET_ROW_COLOR_EX (GET_NUMBER_OF("OWN"), "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()
    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")
        Pr = GET_PARAM(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i), "offer")+0
        Sp = GET_PARAM(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i), "bid")+0
        Price = GET_PARAM(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i), "last")+0
Time_Trade = GET_PARAM(GET_COLLECTION_ITEM(Class,i), GET_COLLECTION_ITEM(Code,i), "time")  

  Pr_SP = (Pr/Sp*100)-100
  PrSP = Pr-Sp
  Pr_Price = (Pr/Price*100)-100
  PrPrice = Pr-Price
  Price_Sp = (Price/Sp*100)-100
PriceSp = Price-Sp 
string = ""
string = set_value(string, "NameStock", NameStock)
string = set_value(string, "Pr", Pr)
string = set_value(string, "Sp", SP)
string = set_value(string, "Price", Price)
string = set_value(string, "Pr_SP", Pr_SP)
string = set_value(string, "PrSP", PrSP)
string = set_value(string, "Pr_Price", Pr_Price)
string = set_value(string, "PrPrice", PrPrice)
string = set_value(string, "Price_Sp", Price_Sp)
string = set_value(string, "PriceSp", PriceSp)
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)
    IF (Pr_Price < 0) 
SET_ROW_COLOR_EX (i+1, "RGB(178,246,160)", "RGB(123,239,91)", "RGB(0,0,0)", "RGB(0,0,0)")
ELSE
    IF (Pr_Price == 0)
  SET_ROW_COLOR_EX (i+1, "RGB(219,229,241)", "RGB(200,215,234)", "RGB(0,0,0)", "RGB(0,0,0)")
ELSE
    IF (Price_Sp < 0)
  SET_ROW_COLOR_EX (i+1, "RGB(253,185,185)", "RGB(255,139,139)", "RGB(0,0,0)", "RGB(0,0,0)")
ELSE
SET_ROW_COLOR_EX (i+1, "DEFAULT_COLOR", "DEFAULT_COLOR", "DEFAULT_COLOR", "DEFAULT_COLOR")
END IF
END IF
END IF
END FOR

IF FTime() > 0
string = set_value(string, "Time_Trade", SUBSTR(FTime(),0,2)&":"&SUBSTR(FTime(),2,2)&":"&SUBSTR(FTime(),4,2))
ELSE
string = set_value(string, "Time_Trade", "")
END IF

string = ""
string = set_value(string, "NameStock", "ИТОГО:")
string = set_value(string, "Pr", 0)
string = set_value(string, "Sp", 0)
string = set_value(string, "Price", 0)
    FOR i FROM 1 TO GET_NUMBER_OF("OWN")
  trade = GET_ITEM ("OWN", i)
string = set_value(string, "Pr", get_value(string, "Pr")+GET_VALUE(trade, "Pr"))
string = set_value(string, "Sp", get_value(string, "Sp")+GET_VALUE(trade, "Sp"))
string = set_value(string, "Price", get_value(string, "Price")+GET_VALUE(trade, "Price"))

END FOR
Add_item(GET_NUMBER_OF("OWN")+1,string)
  trade = GET_ITEM ("OWN", GET_NUMBER_OF("OWN"))
string = set_value(string, "Pr_SP", (GET_VALUE(trade, "Pr")/GET_VALUE(trade, "Sp")*100)-100)
string = set_value(string, "PrSP", GET_VALUE(trade, "Pr")-GET_VALUE(trade, "Sp"))
string = set_value(string, "Pr_Price", (GET_VALUE(trade, "Pr")/GET_VALUE(trade, "Price")*100)-100)
string = set_value(string, "PrPrice", GET_VALUE(trade, "Pr")-GET_VALUE(trade, "Price"))
string = set_value(string, "Price_Sp", (GET_VALUE(trade, "Price")/GET_VALUE(trade, "Sp")*100)-100)
string = set_value(string, "PriceSp", GET_VALUE(trade, "Price")-GET_VALUE(trade, "Sp"))
MODIFY_Item(GET_NUMBER_OF("OWN"),string)
SET_ROW_COLOR_EX (GET_NUMBER_OF("OWN"), "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

END_PROGRAM

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

PARAMETER Pr;
PARAMETER_TITLE Предл.;
PARAMETER_DESCRIPTION Ближайшая цена предложения в стакане;
PARAMETER_TYPE NUMERIC(15,2);
END

PARAMETER Sp;
PARAMETER_TITLE Спрос;
PARAMETER_DESCRIPTION Ближайшая цена спроса в стакане;
PARAMETER_TYPE NUMERIC(15,2);
END

PARAMETER Price;
PARAMETER_TITLE Price;
PARAMETER_DESCRIPTION Текущая цена последней сделки;
PARAMETER_TYPE NUMERIC(15,2);
END

PARAMETER Pr_SP;
PARAMETER_TITLE Pr/Sp %;
PARAMETER_DESCRIPTION Соотношение ближайших цен предложения и спроса;
PARAMETER_TYPE NUMERIC(15,3);
END

PARAMETER PrSP;
PARAMETER_TITLE Pr-Sp;
PARAMETER_DESCRIPTION Разница ближайших цен предложения и спроса;
PARAMETER_TYPE NUMERIC(15,2);
END

PARAMETER Pr_Price;
PARAMETER_TITLE Pr/Price %;
PARAMETER_DESCRIPTION Соотношение ближайшей цены предложения и текущей цены последней сделки;
PARAMETER_TYPE NUMERIC(15,3);
END

PARAMETER PrPrice;
PARAMETER_TITLE Pr-Price;
PARAMETER_DESCRIPTION Разница ближайшей цены предложения и текущей цены последней сделки;
PARAMETER_TYPE NUMERIC(15,2);
END

PARAMETER Price_Sp;
PARAMETER_TITLE Price/Sp %;
PARAMETER_DESCRIPTION Соотношение текущей цены последней сделки и ближайшей цены спроса;
PARAMETER_TYPE NUMERIC(15,3);
END

PARAMETER PriceSp;
PARAMETER_TITLE Price-Sp;
PARAMETER_DESCRIPTION Разница текущей цены последней сделки и ближайшей цены спроса;
PARAMETER_TYPE NUMERIC(15,2);
END

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

END_PORTFOLIO_EX