Создание компьютерного приложения для расчета оптимального набора ценных бумаг в портфеле инвестиций

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    261,53 Кб
  • Опубликовано:
    2013-02-26
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Создание компьютерного приложения для расчета оптимального набора ценных бумаг в портфеле инвестиций

Введение


Переход экономики РФ к рыночным отношениям привел к развитию рынка ценных бумаг. Как следствие, вырос интерес юридических и физических лиц к вложениям финансовых средств в акции и облигации ведущих российских эмитентов и их производные инструменты.

Рынок ценных бумаг в условиях развивающейся российской экономики характеризуются как высокой доходностью, так и значительными рисками в сравнении с рынками развитых экономик. Одним из основных способов уменьшения риска инвестиций в финансовые инструменты является диверсификация активов, что приводит к формированию портфелей ценных бумаг.

Потенциальному инвестору достаточно трудно составить портфель с приемлемым для него соотношением риск-доходность, поэтому проблема моделирования оптимального портфеля ценных бумаг с учетом ограничений приобретает особую актуальность.

Целью данной курсовой работы является изучение основных аспектов портфельной теории и создание на их основе приложения на ЭВМ для расчёта оптимального набора ценных бумаг в портфеле инвестиций.

Портфельный анализ


Начало портфельного анализа было положено в работах лауреата Нобелевской премии в области экономики, профессора Чикагского университета Г.Марковица в 1952 г. Им впервые была предложена модель формирования оптимального портфеля и были даны методы построения таких портфелей.

Формирование инвестиционного портфеля


Поскольку ценные бумаги различных видов различаются по доходности и степени надёжности, инвесторы вкладывают средства в приобретение ценных бумаг нескольких видов, стремясь достичь наилучшего соотношения «риск-доходность». Принимая решение о приобретении набора ценных бумаг, инвестор должен иметь в виду, что доходность портфеля в предстоящий период владения неизвестна. Однако можно оценить предполагаемую доходность различных ценных бумаг, основываясь на некоторых предположениях. Уровень доходности является случайной величиной, и основными её характеристиками являются ожидаемое, или среднее, значение и стандартное отклонение. Именно последнюю характеристику предлагается использовать как меру риска.

Ожидаемая доходность портфеля из n ценных бумаг равна:

 

n

rp = ∑xi ri , (1)

i=1

где xi - доля начальной стоимости портфеля, инвестированная в i-ый вид ценных бумаг, ri - ожидаемая доходность i-го вида ценных бумаг, n - количество видов ценных бумаг в портфеле.

Стандартное отклонение портфеля σ(rp) вычисляется следующим образом. Дисперсия доходности портфеля - это дисперсия суммы случайных величин; как известно из теории математической статистики, она равна ковариации:

n n n n

D(rp) = Cov( ∑xi ri , ∑xj rj ) = ∑∑xixj Cov(ri ,rj).

i=1 j=1 i=1 j=1

Здесь Cov(ri ,rj) - ковариация ожидаемых доходностей ценных бумаг i и j, вычисляемая по формуле:

Cov(ri ,rj) = µij  = µij σi σj , i, j = 1, 2, …, n,

где µij - коэффициент корреляции между доходностями i и j-й ценных бумаг, D и σ - соответственно, дисперсия и стандартное (среднеквадратическое) отклонение доходностей ценных бумаг. Как известно,

≤ µij ≤ 1.

Формула для стандартного отклонения портфеля имеет вид:

σ(rp) = .

Рассмотрим пример.

Пример 1. Найти ожидаемую доходность и стандартное отклонение доходности портфеля, состоящего из 30 % акций компании А и 70 % акций компании В, если их доходности некоррелированы и равны, соответственно, 25 и 10 %, а стандартные отклонения - 10 и 5 %.

Решение. По формуле (1) получаем:

 

rp = 0,3×25 % + 0,7×10 % = 14,5 %.

Поскольку доходности бумаг некоррелированы, то µij = 0 при i j, и тогда

σ(rp) =  = 4,6%.

Диверсификация портфеля.


Приведенный пример показывает, что портфель ценных бумаг обладает меньшим риском, чем некоторые отдельные составляющие его бумаги. Это свойство портфеля называется диверсификацией: увеличение количества видов ценных бумаг при одновременном сокращении их долей в общей ожидаемой доходности уменьшает риск портфеля. Проиллюстрируем на примере.

Пример 2. Найти ожидаемую доходность и её стандартное отклонение для портфеля, состоящего из 10 видов ценных бумаг с некоррелированными доходностями. Доли ценных бумаг хi , их доходности ri и стандартные отклонения σi приведены в таблице 1.

Таблица 1

 Параметры

Номера ценных бумаг i


1

2

3

4

5

6

7

8

9

10

хi , %

10

10

10

10

10

10

20

10

5

5

ri , %

15

15

18

12

25

20

10

28

35

50

σi , %

8

8

10

12

10

5

15

20

25


Решение.

 

rp = 0,1×15 + 0,1×15 + 0,1×18 + 0,1×12 + 0,1×25 + 0,1×20 + 0,1×28 + 0,05×35 + 0,05×50 = 19,55 %

Так как случайные величины доходностей бумаг являются независимыми, то дисперсия доходности портфеля:

D(rp) = 0,01×64 + 0,01×64 + 0,01×100 + 0,01×49 + 0,01×144 + 0,01×100 + 0,04×25 + 0,01×225 + 0,0025×400 + 0,0025×625 = 11,02.

Тогда σ(rp) = = 3,32 %.

Видим, что стандартное отклонение доходности портфеля оказалось ниже минимального значения для ценной бумаги с номером 6, а «пиковые» значения стандартных отклонений ценных бумаг с номерами 9 и 10 «растворились» в общей величине σ(rp).

Приведенный пример показывает, что крупные компании на рынке инвестиций чувствуют себя гораздо более уверенно, нежели их мелкие конкуренты, поскольку крупные инвестиции позволяют приобретать более диверсифицированные портфели и тем самым в значительной мере обезопасить компанию от рыночных рисков.

Формирование оптимального портфеля. Портфель Марковица минимального риска


Существует несколько вариантов задач оптимизации рискового портфеля. Рассмотрим одну из них. Это так называемый «портфель Марковица». Эта задача была сформулирована и решена американским экономистом Г. Марковицем в 1952 году, за что позднее он получил Нобелевскую премию.

Пусть имеются n видов ценных бумаг, из которых инвестор хочет сформировать портфель. Необходимо найти xi, минимизирующие вариацию портфеля:

Vp = SS xi×xj×Vij ,

 

при условии, что обеспечивается заданное значение эффективности портфеля mp, т.е.

Sxi×mi = mp.

Поскольку xi - доли, то в сумме они должны составлять единицу:

Sxi=1.

Оставив за инвестором выбор средней эффективности портфеля и помогая ему минимизировать в этом случае неопределенность, получаем следующую задачу по оптимизации портфеля ценных бумаг:

SS xi×xj×Vij (min)

Sxi = 1

Smi×xi = mpi≥0,…,xn≥0

Опустив условия неотрицательности переменных, получаем собственно задачу Марковица.

Решение.

С помощью функции Лагранжа сведем задачу на условный экстремум к задаче на безусловный экстремум:

L(x1, …, xn, m, l)= SS Vij×xi×xj - l× (Smi -1) - m×(Smi×xi - mp),

 = 2×SVis×xi - l - m×ms = 0, s = 1, …, n. (2)

Производные по l, m воспроизводят указанные выше два соотношения, тем самым для (n+2) переменных x1,…,xn, l, m получаем (n+2) уравнения.

Запишем полученные уравнения в матричной форме, используя следующие обозначения:

, , , X¢= (x1,…,xn), M¢= (m1,…,mn).

Штрих применяется для обозначения операции транспонирования матрицы.

B - матрица ковариаций, B-1 - обратная ей матрица. Следовательно, уравнения (1) примут вид:

B × X = (l/2) × E + (m/2) × M,

E¢× X = 1,

m¢× X = mp.

Основное допущение этой модели состоит в том, что между эффективностями m1,…,mn нет линейной связи, поэтому ковариационная матрица B невырождена (|B| ≠ 0), следовательно, существует обратная матрица В-1. Используя этот факт, разрешим в матричной форме относительно Х:

Х = (l/2)*В-1× Е + (m/2) × В-1× М (3)

Подставив это решение в первое и второе условия, получим два уравнения для определения l/2 и m/2:

(Е¢ × В-1 × Е) × (l/2) + (Е¢ × В-1 × М) × (m/2) = 1

(М¢ × B-1 × Е) × (l/2) + (М¢ × В-1 × М) × (m/2) = mp.

Решая два последних уравнения по правилу Крамера, находим:

l/2 = ((М¢ × В-1 × М) - mp × (Е¢ × В-1 × М)) / ((Е¢ × В-1 × Е) × (М¢ × В-1 × М) - (М¢ × B-1 × Е)2)

m/2 = (mp × (Е¢ × В-1 × Е) - (М¢ × B-1 × Е)) / ((Е¢ × В-1 × Е) × (М¢ × В-1 × М) - (М¢ × B-1 × Е)2)

Подставляя это решение в (3), получаем следующую структуру оптимального портфеля:

[(М¢×В-1×М) - mp×(Е¢×В-1 × М)]×В-1×Е + [mp × (Е¢ × В-1 × Е) - (М¢ × B-1 × Е)] × В-1 × МХ* = (Е¢ × В-1 × Е) × (М¢ × В-1 × М) - (М¢ × B-1 × Е)2

С помощью подстановки можно убедиться, что Е¢ × Х* = 1 и М¢ × Х* = mp.

Кроме того, находим минимальную дисперсию, соответствующую оптимальной структуре:

Если ≥0, то это означает рекомендацию вложить долю  наличного капитала в ценные бумаги i-го вида. Если же <0, то содержательно это означает провести операцию «short sale» («короткая продажа»). Инвестор, формирующий портфель, обязуется через какое-то время поставить ценные бумаги i-го вида (вместе с доходом, какой они принесли бы их владельцу за это время). За это сейчас он получает их денежный эквивалент. Эти деньги он присоединяет к своему капиталу и покупает рекомендуемые оптимальным решением ценные бумаги. Так как ценные бумаги других видов (т.е. не i-го вида) более эффективны, то инвестор оказывается в выигрыше. Математически эта операция значит, что нужно исключить этот вид ценных бумаг из рассмотрения и решить задачу заново.

Задача формирования портфеля максимальной эффективности из всех портфелей, имеющих риск не более заданного


Постановку Марковица задачи формирования оптимального портфеля можно словами сформулировать так: сформировать портфель минимального риска из всех портфелей, имеющих эффективность не менее заданной.

Но столь же естественна и задача формирования портфеля максимальной эффективности из всех портфелей, имеющих риск не более заданного:

Найти xi , максимизирующие ожидаемую эффективность портфеля:


при условии, что обеспечивается заданное значение риска портфеля, т.е.


поскольку хi - доли, то в сумме они должны составлять единицу:


Для решения описанных выше задач было разработано приложение для ЭВМ.

Руководство пользователя


Название приложения: OptimalPortfolio.exe.

Дополнительные ресурсы: папка с примерами.

 

Общий вид программы при запуске


Это форма предназначена для операций расчёта оптимального набора ценных бумаг в портфеле инвестиций.

Для начала работы пользователь должен ввести исходные данные задачи:

·                                                                                                           количество ценных бумаг, из которых состоит портфель, в предназначенное для этого поле:


·                                                                                                           доходности и стандартные отклонения для каждой бумаги в таблицу:


·                                                                                                           выбрать задачу, которую нужно решить, отметив, что будет вводиться: желаемая доходность или допустимый риск:


·                                                                                                           ввести значение выбранного параметра в поле:


Убедившись, что все данные введены корректно, нужно нажать кнопку, чтобы программа выполнила необходимые вычисления.

Полученные доли ценных бумаг выводятся в таблицу:


А рассчитанный минимальный риск(максимальная доходность) в поле:


Кроме того, предусмотрена возможность построения графика, называемого «Пуля» Марковица для отображения эффективной границы, которая показывает множество оптимальных портфелей (выделена красным цветом), и достижимого множества, представляющего собой все портфели, которые можно составить из n видов ценных бумаг (область внутри «пули»).


Для построения графика нужно нажать кнопку:


Для того чтобы очистить все исходные данные для решения новой задачи, надо нажать кнопку:


Для перехода к решению задачи определения ожидаемой доходности и стандартного отклонения доходности готового портфеля, необходимо выбрать пункт «Расчёт доходности и риска портфеля» в меню «Операции» или нажать соответствующую кнопку на инструментальной панели.

Откроется форма, предназначенная для решения данной задачи:


Работа с данной формой аналогична работе с первой.

Для обратного перехода нужно выбрать один из пунктов меню «Операции» или нажать на соответствующую кнопку на панели инструментов.

Работа с файлами


В программе предусмотрена возможность сохранения данных задачи в файл и ввод данных из файла. Данные функции осуществляются с помощью пунктов «Открыть» и «Сохранить» меню «Файл» или нажатием на соответствующие кнопки на панели инструментов.

 

или


По умолчанию папкой с примерами является папка, откуда была запущена программа, но может быть выбрана и другая директория в открывшемся диалоговом окне.

 

Завершение работы


Для выхода из программы используется пункт «Выход» меню «Файл» или соответствующая кнопка на инструментальной панели.


Функции для упрощения работы пользователя с программой


Предусмотрено наличие всплывающих подсказок при наведении указателя на какой-либо компонент или пункт меню, помогающих пользователю ориентироваться в приложении.

Есть статусная панель, в которой тоже отображаются подсказки пользователю.

На панели инструментов расположены основные кнопки для быстроты доступа к нужным функциям.

Предусмотрена проверка на корректный ввод и отображение сообщений с описанием возникшей ошибки. Например,


Прочитав сообщение, нужно нажать «OK» и исправить указанную ошибку.

 

Примеры


Для проверки работоспособности программы служат файлы: example1.tpr, example2d.tpr, example10.tpr, example11.tpr.

Также рассмотрен пример портфеля инвестиций из ценных бумаг реальных компаний, основные показатели которых были оценены экспертами. Эти показатели приведены в таблицах 2 и 3.

Заключение

инвестиционный портфель риск программа

В данной курсовой работе были рассмотрены основные вопросы портфельной теории, в частности расчёт доходности и риска портфеля и построение оптимального портфеля ценных бумаг.

Данная тема является актуальной, так как в условиях неопределенности инвестор не может точно рассчитать доходность той или иной ценной бумаги. Кроме того, он всегда подвергается риску потерять свои средства.

Портфельная теория предлагает методы расчёта средней ожидаемой доходности и риска и методы для снижения рисков или увеличения доходности от приобретения ценных бумаг за счёт диверсификации вложений и формирования портфеля инвестиций.

В курсовой работе был рассмотрен вариант построения оптимального портфеля, предложенный Г.Марковицем, на основе которого было создано приложение для расчёта оптимального набора ценных бумаг в портфеле инвестиций.

Созданное приложение позволяет также рассчитать ожидаемую доходность и стандартное отклонение уже созданного портфеля.

Список использованной литературы


1.      М.С. Красс, Б.П. Чупрынов. Математика для экономистов. - СПб: «Питер», 2005. - 464 с.

.        Колемаев В.А. Математическая экономика. М.: «Юнити» 1998. - 390 с.

3.      <http://www.finansmat.ru/>

.        <http://www.Finam.ru>

Приложение


unit Unit1;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, ExtCtrls, Menus, TeeProcs, TeEngine, Chart, Spin,, ComCtrls, ToolWin, Series, Math, ImgList, AppEvnts;_Risk_or_Profit = class(TForm): TToolBar;: TStatusBar;_Input_date: TStringGrid;_Correlation: TStringGrid;_Input_count: TSpinEdit;: TChart;: TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TLabel;: TLabel;: TLabel;: TButton;_Risk_or_Profit: TRadioGroup;: TLabel;_Risk_or_Profit: TEdit;: TButton;: TLabel;_Result: TStringGrid;: TLineSeries;: TLineSeries;: TButton;: TOpenDialog;: TSaveDialog;: TEdit;: TLabel;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TApplicationEvents;: TImageList;NReadyPortfolioClick(Sender: TObject);NExitClick(Sender: TObject);FormCreate(Sender: TObject);SG_Input_dateKeyPress(Sender: TObject; var Key: Char);SG_CorrelationKeyPress(Sender: TObject; var Key: Char);E_Risk_or_ProfitKeyPress(Sender: TObject; var Key: Char);SE_Input_countChange(Sender: TObject);BClearClick(Sender: TObject);BCalculationClick(Sender: TObject);Graph;Get_Date:boolean;BDrawGraphClick(Sender: TObject);SG_CorrelationSelectCell(Sender: TObject; ACol,: Integer; var CanSelect: Boolean);SG_CorrelationMouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);SG_CorrelationExit(Sender: TObject);NOpenClick(Sender: TObject);NSaveClick(Sender: TObject);NAboutClick(Sender: TObject);ApplicationEvents1Hint(Sender: TObject);

{ Private declarations }

{ Public declarations };myarray=array [1..100] of real;=array [1..100,1..100] of real;_Risk_or_Profit: TForm_Risk_or_Profit;:integer;,BE,BM,deviation_of_stocks:myarray;,E,B1,E1:myarr;,ebe,mbm,ebm,x,mbe:real;,risk:real;_of_stocks,SelectedRow,SelectedCol:integer;Unit2, UAboutMe;

{$R *.dfm}TForm_Risk_or_Profit.NReadyPortfolioClick(Sender: TObject);i,j:integer;_Risk_or_Profit.Visible:=False;_for_ready_portfolio.SE_Input_count.Value:=SEValue;_for_ready_portfolio.Show;i:=1 to SEValue do_for_ready_portfolio.SG_Input_date.Cells[i,2]:=SG_Input_date.Cells[i,1];_for_ready_portfolio.SG_Input_date.Cells[i,3]:=SG_Input_date.Cells[i,2];j:=1 to SEValue do_for_ready_portfolio.SG_Correlation.Cells[i,j]:=SG_Correlation.Cells[i,j];;;;TForm_Risk_or_Profit.NExitClick(Sender: TObject);;;TForm_Risk_or_Profit.FormCreate(Sender: TObject);_Input_date.Cells[0,0]:='Показатель | Номер бумаги';_Input_date.Cells[0,1]:='Доходность';_Input_date.Cells[0,2]:='Риск';_Result.Cells[0,0]:='Номер бумаги';_Result.Cells[0,1]:='Доля';:=1;:=1;;TForm_Risk_or_Profit.SG_Input_dateKeyPress(Sender: TObject;Key: Char);key of

'0'..'9',#8,',':;key:=#0;;;TForm_Risk_or_Profit.SG_CorrelationKeyPress(Sender: TObject;Key: Char);key of

'0'..'9',#8,',','-':;key:=#0;;;TForm_Risk_or_Profit.E_Risk_or_ProfitKeyPress(Sender: TObject;Key: Char);key of

'0'..'9',#8,',':;key:=#0;;;TForm_Risk_or_Profit.SE_Input_countChange(Sender: TObject);i:integer;:=SE_Input_count.Value;i:=1 to SEValue do_Input_date.Cells[i,0]:=inttostr(i);_Result.Cells[i,0]:=inttostr(i);_Correlation.Cells[0,i]:=inttostr(i);_Correlation.Cells[i,0]:=inttostr(i);_Correlation.Cells[i,i]:='1';;_Input_date.ColCount:=SEValue+1;_Correlation.ColCount:=SEValue+1;_Correlation.RowCount:=SEValue+1;_Result.ColCount:=SEValue+1;;TForm_Risk_or_Profit.BClearClick(Sender: TObject);i,j:integer;i:=1 to SEValue doj:=1 to SEValue do_Input_date.Cells[i,j]:='';_Correlation.Cells[i,j]:='';_Result.Cells[i,j];;.Clear;_Risk_or_Profit.Clear; SE_Input_count.Value:=2;;minRisk(mp:real):real;:=sqrt((mp*mp*ebe-2*mp*mbe+mbm)/(ebe*mbm-mbe*mbe));;bisection(a,b,risk:real):real;y1,y2,c:real;:=MinRisk(a)-risk;:=MinRisk(b)-risk;abs(y2)>0.000001 do:=(a+b)/2;:=MinRisk(c)-risk;y1*y2<0b:=cbegin a:=c; y1:=y2; end;;:=c;;TForm_Risk_or_Profit.Get_Date:boolean;i,j:integer;:=True;_of_stocks:=SE_Input_count.Value;i:=1 to number_of_stocks do[i,i]:=1;[i]:=strtofloat(SG_Input_date.Cells[i,1]);

except('Извините, Вы не ввели доходность '+intToStr(i)+'-й бумаги!');

result:=False;;;_of_stocks[i]:=strtofloat(SG_Input_date.Cells[i,2]);

except('Извините, Вы не ввели риск '+intToStr(i)+'-й бумаги!');

result:=False;;;[i,i]:=sqr(deviation_of_stocks[i]);;i:=1 to number_of_stocks doj:=i+1 to number_of_stocks doB[i,j]:=strtofloat(SG_Correlation.Cells[j,i])*deviation_of_stocks[i]*deviation_of_stocks[j];

except('Извините, Вы не ввели корреляцию '+intToStr(i)+'-ой и '+intToStr(j)+'-ой бумаг!');

result:=False;;;[j,i]:=B[i,j];[i,j]:=0;[j,i]:=0;;;;base;i,j,k,l,a:integer;i:=1 to number_of_stocks doj:=1 to number_of_stocks dok:=1 to number_of_stocks do[j,k]:=B[j,k];[j,k]:=E[j,k];;;l:=1 to number_of_stocks do[i,l]:=B1[i,l]/B1[i,i];[i,l]:=E1[i,l]/B1[i,i];a:=1 to number_of_stocks doa<>i then[a,l]:=(B1[a,l]-(B1[a,i]*B1[i,l]/B1[i,i]));[a,l]:=(E1[a,l]-(B1[a,i]*E1[i,l]/B1[i,i]));;;;;i:=1 to number_of_stocks do[i]:=0;j:=1 to number_of_stocks do[i]:=BE[i]+E[i,j];;;i:=1 to number_of_stocks do[i]:=0;j:=1 to number_of_stocks do[i]:=BM[i]+M[j]*E[i,j];;;:=0;:=0;:=0;:=0;i:=1 to number_of_stocks do:=ebe+BE[i];:=ebm+BM[i];:=mbm+M[i]*BM[i];:=mbe+M[i]*BE[i];;;TForm_Risk_or_Profit.Graph;i:integer;,max,profit:real;:=m[1];i:=2 to number_of_stocks dom[i]>max then max:=m[i];;:=m[1];i:=2 to number_of_stocks dom[i]<min then min:=m[i];;:=mbe/ebe;.AddXY(minRisk(profit),profit);:=profit+(max-min)/100;profit>=max;:=min;.AddXY(minRisk(profit),profit);:=profit+(max-min)/100;profit>=mbe/ebe;;Max_Profit(risk:real):real;i:integer;:real;:=m[1];i:=2 to number_of_stocks dom[i]>max then:=m[i];;:=bisection(mbe/ebe,max,risk);:=mPr;;TForm_Risk_or_Profit.BCalculationClick(Sender: TObject);i:integer;,min:real;:boolean;Get_Date then;.Caption:='';RG_Risk_or_Profit.ItemIndex of

:begin:=strtofloat(E_Risk_or_Profit.Text);

except.MessageBox('Извините, Вы не ввели желаемую доходность!','Ошибка!');;;

//проверка, лежит ли введенная доходность между минимальной и максимальной

max:=m[1];i:=2 to number_of_stocks dom[i]>max then max:=m[i];;:=m[1];i:=2 to number_of_stocks dom[i]<min then min:=m[i];;(mp<min)or(mp>max) then

begin.MessageBox('Извините, желаемая доходность должна быть в пределах эффективностей ценных бумаг!','Ошибка!');

exit;;mp<mbe/ebe then

LComment.Caption:='Внимание! Указанная доходность НЕ лежит на эффективной границе!'+#9#13

+'Полученному уровню риска соответствует бОльшая доходность, равная '+floattostr(roundto(max_Profit(minrisk(mp)),-4))+#9#13#9#13;.Text:=' Минимальный риск портфеля: '+floattostr(roundto(minrisk(mp),-4));

end;

:begin:=strtofloat(E_Risk_or_Profit.Text);

except.MessageBox('Извините, Вы не ввели допустимый уровень риска','Ошибка!');

_Result.Cells[i,1]:=floattostr(roundto(x,-4));;a then.Caption:=LComment.Caption+' Так как доля бумаг отрицательна, то необходимо провести сделку "short sale",'+#9#13

+' исключить бумаги этого вида из портфеля и решить задачу заново.';

end;;TForm_Risk_or_Profit.BDrawGraphClick(Sender: TObject);Get_Date then.Clear;.Clear;;;;;TForm_Risk_or_Profit.SG_CorrelationSelectCell(Sender: TObject;, ARow: Integer; var CanSelect: Boolean);ACol=ARowbegin CanSelect:=False; exit; end;_CorrelationExit(Sender);:=ARow;:=ACol;;TForm_Risk_or_Profit.SG_CorrelationMouseUp(Sender: TObject;: TMouseButton; Shift: TShiftState; X, Y: Integer);_CorrelationExit(Sender);;TForm_Risk_or_Profit.SG_CorrelationExit(Sender: TObject);abs(StrToFloat(SG_Correlation.Cells[SelectedCol,SelectedRow]))<=1 then SG_Correlation.Cells[SelectedRow,SelectedCol]:=SG_Correlation.Cells[SelectedCol,SelectedRow]

else('Извините, корреляция не может быть больше 1!');

SG_Correlation.Cells[SelectedCol,SelectedRow]:='0';_Correlation.Cells[SelectedRow,SelectedCol]:='0';;_Correlation.Cells[SelectedCol,SelectedRow]:='0';_Correlation.Cells[SelectedRow,SelectedCol]:='0';;;TForm_Risk_or_Profit.NOpenClick(Sender: TObject);f:file of real;,j:integer;:real;OpenDialog1.Execute(Sender);(f,OpenDialog1.FileName);(f);.MessageBox('Извините, невозможно открыть файл!','Ошибка!');;(f,a);:=round(a);_Input_count.Value:=SEValue;

//считываем из файла доходности

for i:=1 to SEValue do

begin(f,a);_Input_date.Cells[i,1]:=FloatToStr(a);;

//считываем из файла рискиi:=1 to SEValue do(f,a);_Input_date.Cells[i,2]:=FloatToStr(a);;

//считываем из файла корреляциюi:=1 to SEValue doj:=1 to SEValue do(f,a);_Correlation.Cells[i,j]:=FloatToStr(a);;(f);;;TForm_Risk_or_Profit.NSaveClick(Sender: TObject);f:file of real;,j:integer;:real;SaveDialog1.ExecuteExtractFileExt(SaveDialog1.FileName)=''SaveDialog1.FileName:=SaveDialog1.FileName+'.tpr';(f,SaveDialog1.FileName);(f);:=SEValue;(f,a);

//записываем в файл доходности

for i:=1 to SEValue do

begin:=StrToFloat(SG_Input_date.Cells[i,1]);:=0;;(f,a);;

//записываем в файл рискиi:=1 to SEValue do:=StrToFloat(SG_Input_date.Cells[i,2]);:=0;;(f,a);;

//записываем в файл корреляциюi:=1 to SEValue doj:=1 to SEValue do:=StrToFloat(SG_Correlation.Cells[i,j]);:=0;;(f,a);;

//записываем в файл долиi:=1 to SEValue do:=0;(f,a);;(f);;;TForm_Risk_or_Profit.NAboutClick(Sender: TObject);.ShowModal;;TForm_Risk_or_Profit.ApplicationEvents1Hint(Sender: TObject);.SimpleText:=Application.Hint;;.

unit Unit2;

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, ComCtrls, StdCtrls, Menus, ToolWin, Spin, Grids, Math, AppEvnts,;_for_ready_portfolio = class(TForm): TToolBar;: TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TStatusBar;: TMenuItem;: TLabel;_Input_count: TSpinEdit;: TButton;: TLabel;_Input_date: TStringGrid;: TLabel;_Correlation: TStringGrid;: TButton;: TLabel;: TMemo;: TOpenDialog;: TSaveDialog;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TImageList;: TApplicationEvents;NMinRiskClick(Sender: TObject);NExitClick(Sender: TObject);NMaxProfitClick(Sender: TObject);BCalculationClick(Sender: TObject);FormCreate(Sender: TObject);FormClose(Sender: TObject; var Action: TCloseAction);SG_Input_dateKeyPress(Sender: TObject; var Key: Char);

//procedure FormShow(Sender: TObject);SG_CorrelationKeyPress(Sender: TObject; var Key: Char);SE_Input_countChange(Sender: TObject);BClearClick(Sender: TObject);SG_CorrelationSelectCell(Sender: TObject; ACol,: Integer; var CanSelect: Boolean);SG_CorrelationExit(Sender: TObject);SG_CorrelationMouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);NOpenClick(Sender: TObject);NSaveClick(Sender: TObject);NAboutClick(Sender: TObject);ApplicationEvents1Hint(Sender: TObject);

{ Private declarations }

{ Public declarations };myarray=array [1..100] of real;=array [1..100,1..100] of real;Form_for_ready_portfolio: TForm_for_ready_portfolio;,SelectedRow,SelectedCol:integer;Unit1, UAboutMe;

{$R *.dfm}TForm_for_ready_portfolio.NMinRiskClick(Sender: TObject);_for_ready_portfolio.Visible:=False;_Risk_or_Profit.RG_Risk_or_Profit.ItemIndex:=0;_Risk_or_Profit.Show;;TForm_for_ready_portfolio.NExitClick(Sender: TObject);;;TForm_for_ready_portfolio.NMaxProfitClick(Sender: TObject);_for_ready_portfolio.Visible:=False;_Risk_or_Profit.RG_Risk_or_Profit.ItemIndex:=1;_Risk_or_Profit.Show;;TForm_for_ready_portfolio.BCalculationClick(Sender: TObject);profitability_of_portfolio,deviation_of_portfolio:real;_of_stocks,i,j:integer;,sum:real;_of_stocks,deviation_of_stocks,equity_share:myarray;_of_stocks:=SE_Input_count.Value;:=0;i:=1 to number_of_stocks do_share[i]:=strtofloat(SG_Input_date.Cells[i,1]);

except('Извините, Вы не ввели долю '+intToStr(i)+'-ой бумаги!');;;:=sum+equity_share[i];_of_stocks[i]:=strtofloat(SG_Input_date.Cells[i,2]);

except('Извините, Вы не ввели доходность '+intToStr(i)+'-ой бумаги!');

exit;;_of_stocks[i]:=strtofloat(SG_Input_date.Cells[i,3]);

except('Извините, Вы не ввели риск '+intToStr(i)+'-ой бумаги!');

exit;;;sum<>1 then

begin.MessageBox('Извините, сумма долей бумаг должна быть равна 1','Ошибка!');

exit;;_of_portfolio:=0;:=0;i:=1 to number_of_stocks doprofitability_of_portfolio:=profitability_of_portfolio+equity_share[i]*profitabilities_of_stocks[i];j:=1 to number_of_stocks dodispersion:=dispersion+equity_share[i]*equity_share[j]*strtofloat(SG_Correlation.Cells[i,j])*deviation_of_stocks[i]*deviation_of_stocks[j];

except('Извините, Вы не ввели корреляцию '+intToStr(i)+'-ой и '+intToStr(j)+'-ой бумаг!');

exit;;;_of_portfolio:=sqrt(dispersion);.Lines.Add('Ожидаемая доходность портфеля: '+floattostr(roundto(profitability_of_portfolio,-4))+'%');.Lines.Add('Стандартное отклонение доходности: '+floattostr(roundto(deviation_of_portfolio,-4))+'%');;TForm_for_ready_portfolio.FormCreate(Sender: TObject);_Input_date.Cells[0,0]:='Показатель | Номер бумаги';_Input_date.Cells[0,1]:='Доля';_Input_date.Cells[0,2]:='Доходность';

SG_Input_date.Cells[0,3]:='Стандартное отклонение';

SelectedRow:=1;:=1;;TForm_for_ready_portfolio.FormClose(Sender: TObject;Action: TCloseAction);_Risk_or_Profit.Close;;TForm_for_ready_portfolio.SG_Input_dateKeyPress(Sender: TObject;Key: Char);key of

'0'..'9',#8,',':;key:=#0;;;TForm_for_ready_portfolio.SG_CorrelationKeyPress(Sender: TObject;Key: Char);key of

'0'..'9',#8,',','-':;key:=#0;;;TForm_for_ready_portfolio.SE_Input_countChange(Sender: TObject);i:integer;:=SE_Input_count.Value;i:=1 to SEValue do_Input_date.Cells[i,0]:=inttostr(i);_Correlation.Cells[0,i]:=inttostr(i);_Correlation.Cells[i,0]:=inttostr(i);_Correlation.Cells[i,i]:='1';;_Input_date.ColCount:=SEValue+1;_Correlation.ColCount:=SEValue+1;_Correlation.RowCount:=SEValue+1;;TForm_for_ready_portfolio.BClearClick(Sender: TObject);i,j:integer;i:=1 to SEValue doj:=1 to SEValue do_Input_date.Cells[i,j]:='';_Correlation.Cells[i,j]:='';;.Lines.Clear;_Input_count.Value:=2;;TForm_for_ready_portfolio.SG_CorrelationSelectCell(: TObject; ACol, ARow: Integer; var CanSelect: Boolean);ACol=ARowbegin CanSelect:=False; exit; end;_CorrelationExit(Sender);:=ARow;:=ACol;;TForm_for_ready_portfolio.SG_CorrelationExit(Sender: TObject);abs(StrToFloat(SG_Correlation.Cells[SelectedCol,SelectedRow]))<=1 then SG_Correlation.Cells[SelectedRow,SelectedCol]:=SG_Correlation.Cells[SelectedCol,SelectedRow]

else('Извините, корреляция не может быть больше 1!');

SG_Correlation.Cells[SelectedCol,SelectedRow]:='0';;_Correlation.Cells[SelectedCol,SelectedRow]:='0';_Correlation.Cells[SelectedRow,SelectedCol]:='0';;;TForm_for_ready_portfolio.SG_CorrelationMouseUp(Sender: TObject;: TMouseButton; Shift: TShiftState; X, Y: Integer);_CorrelationExit(Sender);;TForm_for_ready_portfolio.NOpenClick(Sender: TObject);f:file of real;,j:integer;:real;OpenDialog1.Execute then(Sender);(f,OpenDialog1.FileName);(f);.MessageBox('Извините, невозможно открыть файл!','Ошибка!');;(f,a);:=round(a);_Input_count.Value:=SEValue;

//считываем из файла доходностиi:=1 to SEValue do

begin(f,a);_Input_date.Cells[i,2]:=FloatToStr(a);;

//считываем из файла рискиi:=1 to SEValue do(f,a);_Input_date.Cells[i,3]:=FloatToStr(a);;

//считываем из файла корреляциюi:=1 to SEValue doj:=1 to SEValue do(f,a);_Correlation.Cells[i,j]:=FloatToStr(a);;

//считываем из файла долиi:=1 to SEValue do(f,a);_Input_date.Cells[i,1]:=FloatToStr(a);;(f);;;TForm_for_ready_portfolio.NSaveClick(Sender: TObject);f:file of real;,j:integer;:real;SaveDialog1.Execute thenExtractFileExt(SaveDialog1.FileName)=''SaveDialog1.FileName:=SaveDialog1.FileName+'.tpr';(f,SaveDialog1.FileName);(f);:=SEValue;(f,a);

//записываем в файл доходностиi:=1 to SEValue do

begin:=StrToFloat(SG_Input_date.Cells[i,2]);:=0;;(f,a);;

//записываем в файл рискиi:=1 to SEValue do:=StrToFloat(SG_Input_date.Cells[i,3]);:=0;;(f,a);;

//записываем в файл корреляциюi:=1 to SEValue doj:=1 to SEValue do:=StrToFloat(SG_Correlation.Cells[i,j]);:=0;;(f,a);;

//записываем в файл долиi:=1 to SEValue do:=StrToFloat(SG_Input_date.Cells[i,1]);:=0;;(f,a);;(f);;;TForm_for_ready_portfolio.NAboutClick(Sender: TObject);.ShowModal;TForm_for_ready_portfolio.ApplicationEvents1Hint(: TObject);.SimpleText:=Application.Hint;

end;.

Похожие работы на - Создание компьютерного приложения для расчета оптимального набора ценных бумаг в портфеле инвестиций

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!