Индекс рынка. Относительная сила акций.

Для торгующих русские акции написал код для создания пользовательского индекса акций. Разумеется, его можно использовать и на других рынках.

Немного о методике расчета.

В отличии от обычных биржевых индексов (например РТС), расчет идет не по отношению текущей цены к цене на дату начала расчета, а суммируется процентное изменение на каждом следующем фрейме. Предусмотрено два алгоритма. 1. пропорциональный. Все бумаги входящие в индекс влияют на него равномерно. 2. взвешенный по объему. Вес бумаги определяется в зависимости от объема торгов за весть период расчета индекса.

ДОБАВЛЕНО. Для правильной работы кода, необходимо иметь объем в бумагах (не в лотах или в деньгах)

Настройка.

Для расчета можно задать до 10 символов.


1 Начало расчета индекса можно задавать в настройках. Если начало расчета задать датой, которая меньше, чем дата начала данных на истории, то расчет индекса начинается от левого края экрана.

2 Задаются тиккеры для расчета.

2.1 Можно вывести график этого тиккера построенный как сумма процентных приращений на каждом фрейме.

2.2 Задается цвет этого графика.

3 Задаются тикеры не используемые при расчете индекса для для которых можно вывести график процентных приращений (до 3х штук).

3.1 Задается цвет этого графика

4 Задается методика расчета. Если "Yes", то взвешенный по объему.

5 Cпред. Разница между рассчитанным индексом и выводимыми символами.


///////////////////////////////
//
// ИНДЕКС РЫНКА. ОТНОСИТЕЛЬНАЯ СИЛА АКЦИЙ
//
// 1. Суммируется процентное изменение на каждом следующем фрейме.
// 2. Индекс может содержать до 10 символов Symbol 1 - Symbol 0 // 3. Предусмотрено два алгоритма.
// Пропорциональный. Все бумаги входящие в индекс влияют на него равномерно
// Взвешенный по объему (Volume weighted).
// Вес бумаги определяется в зависимости от объема торгов за весть период расчета индекса.
// 4. Символы Symbol 10 - Symbol 12 в расчете не участвуют и предназначены только для сравнения с индексом
//
// OOO
// www.amisite.ru
//
///////////////////////////////



dat = ParamDate("Start Data", "01.01.2000", 0);

symb1 = ParamStr("Symbol 1","");
symb1S = ParamToggle("Show symbol 1?", "No|Yes", 0);
symb1C = ParamColor("color symbol 1", colorBlue);
symb2 = ParamStr("Symbol 2", "");
symb2S = ParamToggle("Show symbol 2?", "No|Yes", 0);
symb2C = ParamColor("color symbol 2", colorBlue);
symb3 = ParamStr("Symbol 3", "");
symb3S = ParamToggle("Show symbol 3?", "No|Yes", 0);
symb3C = ParamColor("color symbol 3", colorBlue);
symb4 = ParamStr("Symbol 4", "");
symb4S = ParamToggle("Show symbol 4?", "No|Yes", 0);
symb4C = ParamColor("color symbol 4", colorBlue);
symb5 = ParamStr("Symbol 5", "");
symb5S = ParamToggle("Show symbol 5?", "No|Yes", 0);
symb5C = ParamColor("color symbol 5", colorBlue);
symb6 = ParamStr("Symbol 6", "");
symb6S = ParamToggle("Show symbol 6?", "No|Yes", 0);
symb6C = ParamColor("color symbol 6", colorBlue);
symb7 = ParamStr("Symbol 7", "");
symb7S = ParamToggle("Show symbol 7?", "No|Yes", 0);
symb7C = ParamColor("color symbol 7", colorBlue);
symb8 = ParamStr("Symbol 8", "");
symb8S = ParamToggle("Show symbol 8?", "No|Yes", 0);
symb8C = ParamColor("color symbol 8", colorBlue);
symb9 = ParamStr("Symbol 9", "");
symb9S = ParamToggle("Show symbol 9?", "No|Yes", 0);
symb9C = ParamColor("color symbol 9", colorBlue);
symb0 = ParamStr("Symbol 0", "");
symb0S = ParamToggle("Show symbol 0?", "No|Yes", 0);
symb0C = ParamColor("color symbol 0", colorBlue);

symb10 = ParamStr("Symbol 10", "");
symb10C = ParamColor("color symbol 10", colorWhite);
symb11 = ParamStr("Symbol 11", "");
symb11C = ParamColor("color symbol 11", colorWhite);
symb12 = ParamStr("Symbol 12", "");
symb12C = ParamColor("color symbol 12", colorWhite);

Vol = ParamToggle("Volume weighted", "No|Yes", 0);
spread = ParamToggle("spread", "No|Yes", 0);

num =
(symb1 != "") +
(symb2 != "") +
(symb3 != "") +
(symb4 != "") +
(symb5 != "") +
(symb6 != "") +
(symb7 != "") +
(symb8 != "") +
(symb9 != "") +
(symb0 != "");

d = DateNum();
if(dat < d[1])
dat = ValueWhen(Status("firstvisiblebarindex") == BarIndex(), DateNum());

s1 = Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb1, "Close"), 1))));
s2 = Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb2, "Close"), 1))));
s3 = Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb3, "Close"), 1))));
s4 = Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb4, "Close"), 1))));
s5 = Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb5, "Close"), 1))));
s6 = Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb6, "Close"), 1))));
s7 = Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb7, "Close"), 1))));
s8 = Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb8, "Close"), 1))));
s9 = Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb9, "Close"), 1))));
s0 = Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb0, "Close"), 1))));

s10 = Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb10, "Close"), 1))));
s11 = Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb11, "Close"), 1))));
s12 = Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb12, "Close"), 1))));

if(Vol)
{
    V1 = LastValue(Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb1, "Close")*Foreign( symb1, "volume"), 1)))));
    V2 = LastValue(Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb2, "Close")*Foreign( symb2, "volume"), 1)))));
    V3 = LastValue(Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb3, "Close")*Foreign( symb3, "volume"), 1)))));
    V4 = LastValue(Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb4, "Close")*Foreign( symb4, "volume"), 1)))));
    V5 = LastValue(Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb5, "Close")*Foreign( symb5, "volume"), 1)))));
    V6 = LastValue(Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb6, "Close")*Foreign( symb6, "volume"), 1)))));
    V7 = LastValue(Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb7, "Close")*Foreign( symb7, "volume"), 1)))));
    V8 = LastValue(Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb8, "Close")*Foreign( symb8, "volume"), 1)))));
    V9 = LastValue(Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb9, "Close")*Foreign( symb9, "volume"), 1)))));
    V0 = LastValue(Cum(IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb0, "Close")*Foreign( symb0, "volume"), 1)))));

    SumV = V1+V2+V3+V4+V5+V6+V7+V8+V9+V0;

    k1 = V1/SumV;
    k2 = V2/SumV;
    k3 = V3/SumV;
    k4 = V4/SumV;
    k5 = V5/SumV;
    k6 = V6/SumV;
    k7 = V7/SumV;
    k8 = V8/SumV;
    k9 = V9/SumV;
    k0 = V0/SumV;

    indx = Cum(
    IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb1, "Close"), 1)))*k1+
    IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb2, "Close"), 1)))*k2+
    IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb3, "Close"), 1)))*k3+
    IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb4, "Close"), 1)))*k4+
    IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb5, "Close"), 1)))*k5+
    IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb6, "Close"), 1)))*k6+
    IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb7, "Close"), 1)))*k7+
    IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb8, "Close"), 1)))*k8+
    IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb9, "Close"), 1)))*k9+
    IIf(DateNum() < dat, 0, Nz(ROC(Foreign( symb0, "Close"), 1)))*k0);
}
else
    indx = (s1+s2+s3+s4+s5+s6+s7+s8+s9+s0)/num;

if(spread)
{
    s1 = s1-indx;
    s2 = s2-indx;
    s3 = s3-indx;
    s4 = s4-indx;
    s5 = s5-indx;
    s6 = s6-indx;
    s7 = s7-indx;
    s8 = s8-indx;
    s9 = s9-indx;
    s0 = s0-indx;
    s10 = s10-indx;
    s11 = s11-indx;
    s12 = s12-indx;
    indx = 0;
}
Plot(indx, "index", colorBlack, styleThick);

if(symb1S)
{  Plot(s1, symb1, symb1C);
   PlotText(symb1, BarCount, LastValue(s1), symb1C);}
if(symb2S)
{  Plot(s2, symb2, symb2C);
   PlotText(symb2, BarCount, LastValue(s2), symb2C);}
if(symb3S)
{  Plot(s3, symb3, symb3C);
   PlotText(symb3, BarCount, LastValue(s3), symb3C);}
if(symb4S)
{  Plot(s4, symb4, symb4C);
   PlotText(symb4, BarCount, LastValue(s4), symb4C);}
if(symb5S)
{  Plot(s5, symb5, symb5C);
   PlotText(symb5, BarCount, LastValue(s5), symb5C);}
if(symb6S)
{  Plot(s6, symb6, symb6C);
   PlotText(symb6, BarCount, LastValue(s6), symb6C);}
if(symb7S)
{  Plot(s7, symb7, symb7C);
   PlotText(symb7, BarCount, LastValue(s7), symb7C);}
if(symb8S)
{  Plot(s8, symb8, symb8C);
   PlotText(symb8, BarCount, LastValue(s8), symb8C);}
if(symb9S)
{  Plot(s9, symb9, symb9C);
   PlotText(symb9, BarCount, LastValue(s9), symb9C);}
if(symb0S)
{  Plot(s0, symb0, symb0C);
   PlotText(symb0, BarCount, LastValue(s0), symb0C);}
if(symb10 != "")
{  Plot(s10, symb10, symb10C);
   PlotText(symb10, BarCount, LastValue(s10), symb10C);}
if(symb11 != "")
{  Plot(s11, symb11, symb11C);
   PlotText(symb11, BarCount, LastValue(s11), symb11C);}
if(symb12 != "")
{  Plot(s12, symb12, symb12C);
   PlotText(symb12, BarCount, LastValue(s12), symb12C);}



Удачи.