Индекс рынка. Относительная сила акций.
Для торгующих русские акции написал код для создания пользовательского индекса акций. Разумеется, его можно использовать и на других рынках.
Немного о методике расчета.
В отличии от обычных биржевых индексов (например
РТС), расчет идет не по отношению текущей цены к цене на дату начала расчета, а суммируется процентное изменение на каждом следующем фрейме. Предусмотрено два алгоритма.
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);}
Удачи.