Анализ эффективности вложений денежных средств в РКО
модуль)-
Sub АнализПортфель()
Dim Sheet As Object
Dim i; Ind As Integer
Dim SumCell As Long
Dim CurDate As Date
Set Sheet = Worksheets("Бумаги")
BumNum = 0
While Sheet.Cells(BumNum + 2; 1) <> Empty
BumNum = BumNum + 1
Wend
With DialogSheets("ДиалогДата")
.EditBoxes(1).Text = "05.02.97"
.EditBoxes(2).Text = "30.05.97"
.EditBoxes(1).InputType = xlDate
.EditBoxes(2).InputType = xlDate
.Show
StartDate = CDate(.EditBoxes(1).Text)
EvalDate = CDate(.EditBoxes(2).Text)
End With
With DialogSheets("ДиалогВыбор")
again:
.Show
Analize1 = False
Analize2 = False
If .CheckBoxes(1).Value = 1 Then Analize1 = True
If .CheckBoxes(2).Value = 1 Then Analize2 = True
If Not Analize1 And Not Analize2 Then
MsgBox "Выберите тип анализа"
GoTo again
End If
End With
MaxPeriod = EvalDate - StartDate + 1
ReDim Index(MaxPeriod)
ReDim Revenue(MaxPeriod)
Index(1).Portfel = 1
Index(1).Birga = 1
Index(1).Dates = StartDate
ReDim BumInfo(BumNum)
ReDim BirgaInfo(BumNum)
For i = 1 To BumNum
With BumInfo(i)
.Num = Sheet.Cells(i + 1; 1)
.DateStart = Sheet.Cells(i + 1; 2)
.DateEnd = Sheet.Cells(i + 1; 3)
.Volume = Sheet.Cells(i + 1; 4)
End With
Next i
ReDim Portfel.Dates(BumNum; MaxBum)
ReDim Portfel.Price(BumNum; MaxBum)
ReDim Portfel.Volume(BumNum; MaxBum)
ReDim Portfel.StartPos(BumNum)
ReDim Portfel.EndPos(BumNum)
ReDim Portfel.VolumeAll(BumNum)
For i = 1 To BumNum
Portfel.StartPos(i) = 1
Portfel.EndPos(i) = 0
Next i
Set Sheet = Worksheets("Сделки")
Call Сортировка(Worksheets("Сделки"); "A2"; "A2"; "B2"; "D2"; _
xlAscending; xlAscending; xlAscending)
i = 2
CoefIndex = 1
RevIndex = 1
CurDate = StartDate
While Sheet.Cells(i; 1) <> Empty And Sheet.Cells(i; 1) = Portfel.Volume(Ind; Portfel.StartPos(Ind)) And
SumCell > 0
SumCell = SumCell - Portfel.Volume(Ind; Portfel.StartPos(Ind))
Portfel.StartPos(Ind) = Portfel.StartPos(Ind) + 1
Wend
If SumCell < Portfel.Volume(Ind; Portfel.StartPos(Ind)) Then
Portfel.Volume(Ind; Portfel.StartPos(Ind)) = Portfel.Volume(Ind;
Portfel.StartPos(Ind)) - SumCell
End If
End If
End If
' в данном месте можео провести анализ на основе данных о портфеле
за текущую дату
' дата текущая - это Worksheets("Сделки").cells(i-1;1)
' т.е. анализ за эту текущую дату(доходность к погашению портфеля,
индекс,...)
If StartDate CurDate
Then
Call Процедура_анализа(Sheet.Cells(i; 1))
CoefIndex = CoefIndex + 1
RevIndex = RevIndex + 1
CurDate = Sheet.Cells(i; 1)
End If
i = i + 1
Wend
If Analize1 Then
Worksheets("РезультатИндекс").Cells(1; 2) = "Портфель"
Worksheets("РезультатИндекс").Cells(1; 3) = "Рынок"
For i = 1 To CoefIndex - 1
Worksheets("РезультатИндекс").Cells(i + 1; 1) = Index(i).Dates
Worksheets("РезультатИндекс").Cells(i + 1; 2) = Index(i).Portfel
Worksheets("РезультатИндекс").Cells(i + 1; 3) = Index(i).Birga
Next i
Charts("ДиаграммаИндекс").ChartWizard
Source:=Sheets("РезультатИндекс").Range( _
"A1:C" + CStr(i)); Gallery:=xlLine; Format:=4;
PlotBy:=xlColumns; _
CategoryLabels:=1; SeriesLabels:=1; HasLegend:=1; Title:= _
"Сравнение индекса портфеля и рынка"; CategoryTitle:="дата";
ValueTitle:= _
"индекс"; ExtraTitle:=""
Charts("ДиаграммаИндекс").Select
MsgBox "Диаграмма Индекса"
End If
If Analize2 Then
Worksheets("РезультатДоходность").Cells(1; 2) = "Портфель"
Worksheets("РезультатДоходность").Cells(1; 3) = "Рынок"
For i = 1 To RevIndex - 1
Worksheets("РезультатДоходность").Cells(i + 1; 1) =
Revenue(i).Dates
Worksheets("РезультатДоходность").Cells(i + 1; 2) =
Revenue(i).Portfel
Worksheets("РезультатДоходность").Cells(i + 1; 3) =
Revenue(i).Birga
Next i
Charts("ДиаграммаДоходность").ChartWizard
Source:=Sheets("РезультатДоходность").Range( _
"A1:C" + CStr(i)); Gallery:=xlLine; Format:=4;
PlotBy:=xlColumns; _
CategoryLabels:=1; SeriesLabels:=1; HasLegend:=1; Title:= _
"Сравнение доходности портфеля и рынка";
CategoryTitle:="дата"; ValueTitle:= _
"доходность"; ExtraTitle:=""
Charts("ДиаграммаДоходность").Select
MsgBox "Диаграмма Доходности"
End If
End Sub
'--------------------- функция возвращает индекс бумаги в массиве
BumInfo -------------
Function ReturnBum(bum As Long)
Dim i As Integer
For i = 1 To BumNum
If bum = BumInfo(i).Num Then
ReturnBum = i
Exit Function
End If
Next i
MsgBox "Не найдена бумага в списке бумаг. Занести бумагу в лист
Бумаги"
End
End Function
'-------------------- Процедура построения индексов портфеля и рынка --
---------------
Sub Процедура_анализа(CurDate As Date)
Dim i; k As Long
Dim Sheet As Object
Dim PortfelPrice; BirgaPrice As Single
Dim BirgaCoef; PortfelCoef As Single
Dim Doh; Volume As Single
Dim Flag As Boolean
Set Sheet = Worksheets("Биржа")
' поиск первой строки начала биржевой информации за текущий день
i = Поиск(Worksheets("Биржа"); 1; 2; CurDate; 1)
If i = 0 Then
'MsgBox "Биржевая информация за " + CStr(CDate(CurDate)) + "не
найдена"
'End
CoefIndex = CoefIndex - 1
Exit Sub
End If
' занесение биржевой информации за текущий день
If i <> 0 Then
While Sheet.Cells(i; 1) = CurDate
If Sheet.Cells(i; 6) <> Empty Then
BirgaInfo(ReturnBum(Sheet.Cells(i; 2))) = Sheet.Cells(i; 6)
End If
i = i + 1
Wend
End If
' определение по каждой бумаге обращения на бирже
For i = 1 To BumNum
If BumInfo(i).DateStart 1 Then
' поиск остатков за текущий день
k = Поиск(Worksheets("Остаток"); 1; 2; CurDate; 1)
If k <> 0 Then
PortfelPrice = PortfelPrice + Worksheets("Остаток").Cells(k; 2)
End If
' вычисление коэффициента портфеля
If k <> 0 Then
PortfelCoef = (PortfelPrice - Worksheets("Остаток").Cells(k; 3) _
+ Worksheets("Остаток").Cells(k; 4)) /
PortfelPricePred
Else
PortfelCoef = PortfelPrice / PortfelPricePred
End If
PortfelPricePred = PortfelPrice
' определение индекса портфеля за текущий день
Index(CoefIndex).Portfel = Index(CoefIndex - 1).Portfel *
PortfelCoef
Index(CoefIndex).Dates = CurDate
BirgaCoef = BirgaPrice
k = Поиск(Worksheets("Бумаги"); 2; 2; CurDate; 1)
If k <> 0 Then
BirgaCoef = BirgaCoef - Worksheets("Бумаги").Cells(k; 4)
End If
k = Поиск(Worksheets("Бумаги"); 3; 2; CurDate; 1)
If k <> 0 Then
BirgaCoef = BirgaCoef + Worksheets("Бумаги").Cells(k; 4)
End If
BirgaCoef = BirgaCoef / BirgaPricePred
BirgaPricePred = BirgaPrice
' определение индекса биржи за текущий день
Index(CoefIndex).Birga = Index(CoefIndex - 1).Birga * BirgaCoef
Else
k = Поиск(Worksheets("Остаток"); 1; 2; CurDate; 1)
If k <> 0 Then
PortfelPrice = PortfelPrice + Worksheets("Остаток").Cells(k; 2)
End If
PortfelPricePred = PortfelPrice
BirgaPricePred = BirgaPrice
End If
End If
End Sub
Sub Cancel()
End
End Sub
Приложение № 2.2. Диаграмма сравнения доходности портфеля и рынка.
[pic]
Приложение № 2.3. Диаграмма сравнения индекса портфеля и рынка.
[pic]
Приложение № 3. Входные статистические данные.
Приложение 3.1. Информация о бумагах.
|№ |Дата выпуска |Дата |Объем выпуска |
| | |погашения | |
|21019 |14.11.96 |13.02.97 |60 000 000 |
|21020 |09.01.97 |10.04.97 |65 000 000 |
|21021 |13.02.97 |15.05.97 |55 000 000 |
|21022 |10.04.97 |10.07.97 |55 000 000 |
|21023 |10.07.97 |09.10.97 |40 000 000 |
|21024 |18.12.97 |09.04.98 |45 000 000 |
|22002 |29.08.96 |27.02.97 |25 000 000 |
|22003 |26.09.96 |27.03.97 |30 000 000 |
|22004 |24.10.96 |24.04.97 |40 000 000 |
|22005 |28.11.96 |29.05.97 |45 000 000 |
|22006 |19.12.96 |19.06.97 |90 000 000 |
|22007 |30.01.97 |24.07.97 |30 000 000 |
|22008 |27.02.97 |28.08.97 |55 000 000 |
|22009 |27.03.97 |25.09.97 |55 000 000 |
|22010 |24.04.97 |23.10.97 |60 000 000 |
|22011 |15.05.97 |13.11.97 |60 000 000 |
|22012 |29.05.97 |27.11.97 |60 000 000 |
|24001 |20.03.97 |12.03.98 |30 000 000 |
|24002 |08.05.97 |07.05.98 |25 000 000 |
Приложение 3.2. Информация о сделках.
|Дата |№ бумаги |Цена приобр |Цена продажи|Кол-во |
|02.12.96 |22004 |92,99 | |62 |
|02.12.96 |22004 |93,00 | |340 |
|04.12.96 |22005 |77,50 | |6 |
|05.12.96 |22003 |85,14 | |5 |
|19.12.96 |22006 |80,05 | |300 |
|19.12.96 |22006 |80,21 | |500 |
|19.12.96 |22006 |80,37 | |259 |
|01.01.97 |22005 |92,06 | |7 |
|01.01.97 |21021 |0,00 | |1126 |
|01.01.97 |22005 |0,00 | |95 |
|01.01.97 |22008 |0,00 | |75 |
|01.01.97 |22009 |0,00 | |457 |
|01.01.97 |22008 |0,00 | |29 |
|01.01.97 |21020 |0,00 | |642 |
|01.01.97 |22004 |0,00 | |12 |
|01.01.97 |22006 |0,00 | |20 |
|01.01.97 |22009 |0,00 | |16 |
|01.01.97 |21020 |0,00 | |90 |
|01.01.97 |22006 |0,00 | |26 |
|01.01.97 |21020 |0,00 | |20 |
|01.01.97 |22004 |0,00 | |15 |
|01.01.97 |22006 |0,00 | |5 |
|01.01.97 |21021 |0,00 | |12 |
|01.01.97 |22006 |0,00 | |27 |
|01.01.97 |21020 |0,00 | |0 |
|01.01.97 |21021 |0,00 | |63 |
|01.01.97 |22004 |0,00 | |159 |
|01.01.97 |22005 |0,00 | |146 |
|01.01.97 |22009 |0,00 | |46 |
|01.01.97 |22007 |0,00 | |32 |
|01.01.97 |22008 |0,00 | |13 |
|01.01.97 |22006 |0,00 | |73 |
|01.01.97 |22006 |0,00 | |59 |
|01.01.97 |22006 |0,00 | |56 |
|01.01.97 |21020 |0,00 | |29 |
|01.01.97 |21021 |0,00 | |8 |
|01.01.97 |22005 |0,00 | |12 |
|01.01.97 |22006 |0,00 | |27 |
|01.01.97 |21021 |0,00 | |10 |
|01.01.97 |22008 |0,00 | |28 |
|01.01.97 |22008 |0,00 | |57 |
|01.01.97 |21021 |0,00 | |42 |
|01.01.97 |24001 |0,00 | |34 |
|01.01.97 |24001 |0,00 | |69 |
|01.01.97 |21021 |0,00 | |104 |
|09.01.97 |21020 |90,93 | |300 |
|09.01.97 |21020 |91,03 | |600 |
|09.01.97 |21020 |91,24 | |900 |
|09.01.97 |21020 |91,35 | |600 |
|09.01.97 |21020 |91,50 | |500 |
|10.01.97 |22004 |91,54 | |24 |
|13.01.97 |21020 |93,65 | |50 |
|14.01.97 |21020 |93,22 | |32 |
|15.01.97 |22005 |88,51 | |10 |
|17.01.97 |21020 |92,50 | |10 |
|28.01.97 |21020 |93,40 | |7 |
|31.01.97 |22007 |84,19 | |16 |
|31.01.97 |22007 |84,20 | |184 |
|06.02.97 |22004 |92,80 | |60 |
|10.02.97 |22006 |89,00 | |500 |
|13.02.97 |21021 |91,20 | |430 |
|13.02.97 |21021 |91,30 | |430 |
|13.02.97 |21021 |91,33 | |320 |
|17.02.97 |22005 |92,25 | |78 |
|17.02.97 |22007 | |88,42 |78 |
|19.02.97 |22005 |93,00 | |122 |
|19.02.97 |22003 |97,55 | |41 |
|19.02.97 |22007 | |89,39 |122 |
|20.02.97 |22005 |92,60 | |28 |
|25.02.97 |22005 |92,01 | |100 |
|25.02.97 |22005 |92,03 | |60 |
|25.02.97 |21020 |96,00 | |101 |
|26.02.97 |22004 |95,10 | |12 |
|26.02.97 |21021 | |92,50 |12 |
|27.02.97 |22008 |84,04 | |300 |
|27.02.97 |22008 |84,10 | |432 |
|27.02.97 |22008 |84,22 | |318 |
|27.02.97 |22008 |84,09 | |311 |
|27.02.97 |22008 |84,22 | |182 |
|27.02.97 |22008 |84,42 | |100 |
|28.02.97 |21021 |93,23 | |80 |
|03.03.97 |21020 | |97,30 |200 |
|03.03.97 |21021 | |94,00 |154 |
|03.03.97 |22006 | |92,50 |200 |
|04.03.97 |22006 |92,40 | |24 |
|04.03.97 |22006 |92,52 | |200 |
|04.03.97 |22006 |92,53 | |200 |
|06.03.97 |22006 |92,63 | |25 |
|06.03.97 |22004 |96,45 | |4 |
|06.03.97 |21020 |97,53 | |108 |
|12.03.97 |21020 | |97,70 |489 |
|13.03.97 |21020 | |97,50 |822 |
|13.03.97 |21021 | |94,00 |399 |
|17.03.97 |21021 |93,67 | |100 |
|19.03.97 |22003 |99,19 | |128 |
|19.03.97 |22003 |99,20 | |229 |
|20.03.97 |24001 |72,00 | |50 |
|20.03.97 |24001 |72,15 | |290 |
|21.03.97 |22005 |94,20 | |2 |
|21.03.97 |22005 |94,25 | |100 |
|24.03.97 |22005 |94,25 | |108 |
|24.03.97 |22005 |94,39 | |27 |
|24.03.97 |22005 |94,40 | |598 |
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
|