Программа написана на языке программирования Delphi.Версия 5.0. Имеет дружественный интерфейс, который очень прост в управлении. Для построения графика выберите вкладку с названием соответствующего метода и нажмите кнопку с названием "Построить график". После чего для анализа перейдите на вкладку "Анализ методов". И нажмите на кнопку "Результат".Все выходные данные находятся в окошечке справа. На вкладке "Дополнительно" осуществляется выбор (длина) окна, также приведены гиперссылки на сайты с котировками акций (http://www.rts.ru) и Банка России (http://www.cbr.ru) и график ставки рефинансирования.
5. Листинг
Процедура вывода результатов
procedure TForm1.Button11Click(Sender: TObject);
var i,chislo,pr,po,x : integer;
ak : integer; // число акций на руках
mon : integer; // деньги в наших руках
nac,n1,n2,n3,ref : double;
begin
try
mon:=1000*strtoint(edit10.text);
ak:=1000*strtoint(edit11.text);
except
showmessage('При вводе была допущена ошибка');
edit10.text:='100';
edit11.text:='10';
exit;
end;
if (mon=0) and (ak=0) then
begin
showmessage('Так не интересно');
exit;
end;
nac:=round(ak*strtofloat(izm(realn[0])))+mon;
n1:=nac*28.2*0.25*463/365;
n2:=nac*0.23*28.2*120/365;
n3:=nac*28.2*0.21*75/365;
ref:=nac+(n1+n2+n3)/31.6;
chislo:=length(a3);
pr:=0; po:=0;
if length(a3)>0 then begin
for i:=low(a3) to high(a3) do
if a3[i]=1 then inc(po)
else inc(pr);
if a3[0]=1 then begin
ak:=ak+round(mon/strtofloat(izm(realn[b3[0]])));
mon:=0;
end
else begin
mon:=round(ak*strtofloat(izm(realn[b3[0]])))+mon;
ak:=0;
end;
for i:=low(a3)+1 to high(a3) do
begin
if (a3[i]=1) and (b3[i]<d) then begin
ak:=round(mon/strtofloat(izm(realn[b3[i]])));
mon:=0;
end;
if (a3[i]=2) and (b3[i]<d) then
begin
mon:=round(ak*strtofloat(izm(realn[b3[i]])));
ak:=0;
end;
end;
if a3[length(a3)-1]=1 then x:=1
else x:=0;
if mon=0 then mon:=round(ak*strtofloat(izm(realn[d-1])));
memo4.Clear;
memo4.Lines.Add('Статистика за период:');
memo4.Lines.Add('1 января 2001 года - 20 октября 2002 года');
memo4.Lines.Add('Анализ проведен для плеч с длинами '+inttostr(plecho1)+' и '+inttostr(plecho2));
memo4.Lines.Add('Начальный капитал (в тысячах USD) : '+edit10.text);
memo4.Lines.Add('Начальное число акций (в тысячах штук) : '+edit11.text);
memo4.Lines.Add('Общая сумма (в тысячах USD) : '+floattostr(nac));
memo4.Lines.Add('Число операций с акциями РАО ЕЭС Россия : '+inttostr(chislo+x));
memo4.Lines.Add('В том числе покупок акций : '+inttostr(po));
memo4.Lines.Add('В том числе продаж акций : '+inttostr(pr+x));
memo4.Lines.Add('Сумма капитала в USD на 21 октября 2002 года : '+inttostr(mon));
memo4.Lines.Add('Эффективность метода : '+floattostr(round((mon-nac)*365*100/(nac*658)))+' %');
memo4.Lines.Add('Сумма капитала при рефинансировании в USD на 21 октября 2002 года: '+floattostr(round(ref)) +'');
memo4.Lines.Add('Эффективность рефинансирования '+floattostr(round((ref-nac)*365*100/(nac*658))) +' %');
end
else
begin
memo4.Clear;
memo4.Lines.Add('Статистика за период:');
memo4.Lines.Add('1 января 2001 года - 20 октября 2002 года');
memo4.Lines.Add('Анализ проведен для плеч с длинами '+inttostr(plecho1)+' и '+inttostr(plecho2));
memo4.Lines.Add('Начальный капитал (в тысячах USD) : '+edit10.text);
memo4.Lines.Add('Начальное число акций (в тысячах штук) : '+edit11.text);
memo4.Lines.Add('Общая сумма (в тысячах USD) : '+floattostr(nac));
memo4.Lines.Add('Число операций с акциями РАО ЕЭС Россия : '+inttostr(chislo));
memo4.Lines.Add('В том числе покупок акций : '+inttostr(po));
memo4.Lines.Add('В том числе продаж акций : '+inttostr(pr));
memo4.Lines.Add('Сумма капитала в USD на 21 октября 2002 года : '+floattostr(nac));
memo4.Lines.Add('Эффективность метода : 0%');
memo4.Lines.Add('Сумма капитала при рефинансировании в USD на 21 октября 2002 года: '+floattostr(round(ref)) +'');
memo4.Lines.Add('Эффективность рефинансирования '+floattostr(round((ref-nac)*365*100/(nac*658))) +' %');
end;
end;
процедура вывода графика, построенного методом экспоненциальных скользящих
procedure TForm1.Button8Click(Sender: TObject);
var i,k,sc,sc1,tec,i1 : integer;
pologen5 : string;
predpologen5 : string;
izm1,izm2 : boolean;
begin
// переменные per5, per13 нужны для фиксации последнего перехода через реальные цены
// если значение 0 - перехода не было
// если значение 1 - переход снизу вверх {продажа}
// если значение 2 - переход сверху вниз (покупка)
tec:=0;
// setlength(vfive,plecho1);
// setlength(vthirt,plecho2);
sc1:=1; i:=0;
graffive[0]:=realn[0];
grafthirt[0]:=realn[0];
//izm1:=false;
While i<d-1 do
begin
five[i]:=realn[i];
thirt[i]:=realn[i];
izm2:=false ;i:=tec;
predpologen5:='pusto';
while (izm2=false) and (i<d-1) do
begin
five[i+1]:=floattostr(strtofloat(izm(five[i]))+(2/(plecho1+1))*(strtofloat(izm(realn[i+1]))-strtofloat(izm(five[i]))));
graffive[i+1]:=five[i+1];
//закончили формирование плеча длиной 5
// начинаем формирование плеча длиной 13
thirt[i+1]:=floattostr(strtofloat(izm(thirt[i]))+(2/(plecho2+1))*(strtofloat(izm(realn[i+1]))-strtofloat(izm(thirt[i]))));
grafthirt[i]:=thirt[i];
if strtofloat(izm(five[i+1]))>strtofloat(izm(thirt[i+1])) then pologen5:='v'
else pologen5:='n';
if (pologen5='v') and (predpologen5='n') then
// покупка
if sc1=1 then begin
setlength(a3,sc1);
a3[sc1-1]:=1;
setlength(b3,sc1);
b3[sc1-1]:=i+2;
inc(sc1);
tec:=i+1;
izm2:=true;
// izm1:=true;
end
else if a3[sc1-2]=2 then
begin
// покупка
setlength(a3,sc1);
a3[sc1-1]:=1;
setlength(b3,sc1);
b3[sc1-1]:=i+2;
inc(sc1);
tec:=i+1;
izm2:=true;
// izm1:=true;
end;
if (pologen5='n') and (predpologen5='v') then
if sc1=1 then
begin
// продажа
setlength(a3,sc1);
a3[sc1-1]:=2;
setlength(b3,sc1);
b3[sc1-1]:=i+2;
inc(sc1);
tec:=i+1;
izm2:=true;
//izm1:=true;
end else if a3[sc1-2]=1 then
begin
// продажа
setlength(a3,sc1);
a3[sc1-1]:=2;
setlength(b3,sc1);
b3[sc1-1]:=i+2;
inc(sc1);
tec:=i+1;
izm2:=true;
//izm1:=true;
end;
predpologen5:=pologen5;
inc(i);
// if then goto Start;
end;
end;
chart4.AxisVisible:=true;
for i:=0 to d-2 do
begin
chart4.Series[1].addXY(i,strtofloat(izm(grafthirt[i])),inttostr(i),clBlue);
end;
for i:=0 to d-2 do
begin
chart4.Series[2].addXY(i,strtofloat(izm(realn[i])),inttostr(i),clRed);
end;
for i:=0 to d-2 do
begin
chart4.Series[0].addXY(i,strtofloat(izm(graffive[i])),inttostr(i),clGreen);
end;
for sc:=0 to length(a3)-1 do
if a3[sc]=1 then
chart4.Series[3].AddXY(b3[sc]-1,strtofloat(izm(realn[b3[sc]-1])),inttostr(i),clBlack)
else
chart4.Series[3].AddXY(b3[sc]-1,strtofloat(izm(realn[b3[sc]-1])),inttostr(i),clYellow);
{ if a[length(a)-1]=2 then
chart1.Series[3].AddXY(d-3,strtofloat(izm(realn[d-3])),'00',clYellow);}
button8.Enabled:=false;
button11.Enabled:=true;
end;
6. Результаты
При первоначальном капитале 100 тысяч USD и наличии 10 тысяч акций
Получены следующие эффективности методов :
Экспериментальный 1
Длина окон | Эффективность (%) |
5,13 | 23 |
5,8 | 5 |
8,13 | 22 |
Экспериментальный 2
Длина окон | Эффективность (%) |
5,13 | 1 |
5,8 | -4 |
8,13 | 5 |
СС
Длина окон | Эффективность (%) |
5,13 | 0 |
5,8 | 0 |
8,13 | 0 |
ЭСС
Длина окон | Эффективность (%) |
5,13 | 17 |
5,8 | 18 |
8,13 | 5 |
При вложении средств в банк получена эффективность 22%.
8. Ставка рефинансирования
9.
Период | Ставка |
01/01/2001-04/08/2002 | 25% |
04/09/2002-08/06/2002 | 23% |
08/07/2002-10/20/2002 | 21% |
Курс USD
1 ЯНВАРЯ 2001 Г. -28.2 РУБ
20 ОКТЯБРЯ 2002 Г- 31.6 РУБ