Анализ эффективности вложений денежных средств в РКО

Информация - Менеджмент

Другие материалы по предмету Менеджмент

3); Order3:= _

TypeOrder3; Header:=xlGuess; OrderCustom:=1; MatchCase:=False _

; Orientation:=xlTopToBottom

End Sub

 

******************************* Поиск ***************************

Функция поиска значения в определенном столбце с определенной позиции вперед/назад

Параметры:

Sheet - лист

Column - колонка для поиска

Row - начальная строка поиска

Text - искомое значение

Direction - направление поиска:

1 - вперед

-1 - назад

Пример использования :

MsgBox Поиск(Worksheets("Биржа"); 4; 8; 5; -1)

*******************************************************************

Function Поиск(Sheet As Object; Column As Integer; Row As Integer; Text; Direction As Integer)

Dim i As Integer

Dim Compare; Compare1

If Direction -1 Then

MsgBox "Неверно задано направление поиска"

End

End If

On Error GoTo ErrorFuncFind

i = Row

While Not IsEmpty(Sheet.Cells(i; Column))

If IsDate(Text) Then

Compare = CDate(Sheet.Cells(i; Column))

Compare1 = CDate(Text)

Else

If IsNumeric(Text) Then

Compare = CDbl(Sheet.Cells(i; Column))

Compare1 = CDbl(Text)

Else

Compare = CStr(Sheet.Cells(i; Column))

Compare1 = CStr(Text)

End If

End If

If Compare = Compare1 Then

Поиск = i

Exit Function

End If

i = i + Direction

Wend

Поиск = 0

Exit Function

ErrorFuncFind:

MsgBox "Несовпадение типов данных в вызове" + Chr(13) + "функции Поиск и в искомом столбце." _

+ Chr(13) + Chr(13) + "Данные разных типов в столбце базы" + Chr(13)

End

End Function

 

 

 

Option Explicit

Option Base 1

 

---------------------------- Общая часть -------------------------------------

внешние параметры

тип данных для записи информации о бумаге

Type BumRecord

Num As Long номер бумаги

DateStart As Date дата выпуска

DateEnd As Date дата погашения

Volume As Long объем выпуска

Present As Boolean

End Type

 

тип данных для записи информации о структуре портфеля

Type PortfelRecord

Dates() As Date дата покупки

Price() As Single цена покупки

Volume() As Long количество

StartPos() As Integer начальный индекс бумаги в массиве бумаг данной серии

EndPos() As Integer конечный индекс бумаги в массиве бумаг данной серии

VolumeAll() As Long количество бумаг данной серии в портфеле

End Type

 

тип данных для записи информации об индксах портфеля и рынка

Type IndexRecord

Dates As Date

Portfel As Single

Birga As Single

End Type

 

Const MaxBum = 500 максимальное количество бумаг в портфеле одной серии

Const DilerConst = 1000900000 константа для выборки портфеля дилера

Dim MaxPeriod As Long максимальное количество дней для анализа(можно вычислить как последний день анализа-первый день анализа+1)

 

Dim Portfel As PortfelRecord данные о портфеле

Dim BumInfo() As BumRecord данные о бумагах

Dim BumNum As Integer количество различных серий бумаг

Dim Index() As IndexRecord индексы портфеля и рынка

Dim Revenue() As IndexRecord доходность к погашению портфеля и рынка

Dim BirgaInfo() As Single текущая биржевая информация по каждой серии

Dim CoefIndex As Long индекс коэффициента

Dim RevIndex As Long индекс доходности

Dim EvalDate As Date дата для расчета

Dim StartDate As Date начальная дата для постоения индексов

Dim PortfelPricePred; BirgaPricePred As Single

Dim Analize1; Analize2 As Boolean

------------------------------- Процедура расчета портфеля (главный модуль)-

Sub АнализПортфель()

Dim Sheet As Object

Dim i; Ind As Integer

Dim SumCell As Long

Dim CurDate As Date

Set Sheet = Worksheets("Бумаги")

BumNum = 0

Empty"> 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

EmptyAndSheet.Cells(i;1) Empty And Sheet.Cells(i; 1) <= EvalDate

If Sheet.Cells(i; 2) = DilerConst Then

Ind = ReturnBum(Sheet.Cells(i; 3))

If Not IsEmpty(Sheet.Cells(i; 4)) Then

Portfel.EndPos(Ind) = Portfel.EndPos(Ind) + 1

Portfel.Dates(Ind; Portfel.EndPos(Ind)) = Sheet.Cells(i; 1)

Portfel.Price(Ind; Portfel.EndPos(Ind)) = Sheet.Cells(i; 4)

Portfel.Volume(Ind; Portfel.EndPos(Ind)) = Sheet.Cells(i; 6)

Portfel.VolumeAll(Ind) = Portfel.VolumeAll(Ind) + Sheet.Cells(i; 6)

Else

SumCell = Sheet.Cells(i; 6)

Portfel.VolumeAll(Ind) = Portfel.VolumeAll(Ind) - Sheet.Cells(i; 6)

=Portfel.Volume(Ind;Portfel.StartPos(Ind))AndSumCell>0"> While SumCell >= 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)

т.е. ?/p>