Автор: Пользователь скрыл имя, 27 Апреля 2013 в 12:01, курсовая работа
Целью данной курсовой работы является разработка алгоритмов рационального вложения свободных денежных средств на краткосрочный депозит.
В рамках достижения и раскрытия поставленной цели предполагается решение следующих задач:
изучить процесс наращения денежных средств и связанных с этим процессом понятий;
охарактеризовать схемы помещения денежных средств на краткосрочный депозит и оценить их эффективность;
подготовить программную реализацию разработанных методов и алгоритмов;
проанализировать разработанные стратегии на реальных данных Республики Беларусь.
ВВЕДЕНИЕ 5
1 ОПИСАНИЕ ПРОЦЕССА НАРАЩЕНИЯ ДЕНЕЖНЫХ СРЕДСТВ 7
1.1 Формулы наращения 7
1.2 Срок ссуды. Величина процентной ставки 8
1.3 Операции с двойной конверсией валюты 10
2 РАЗРАБОТКА АЛГОРИТМОВ НАИЛУЧШЕГО ПОМЕЩЕНИЯ СВОБОДНЫХ ДЕНЕЖНЫХ СРЕДСВ НА ДЕПОЗИТ 12
2.1 Параметры операции детерминированы 12
2.1.1 Сумма депозита в СКВ 12
2.1.2 Сумма депозита в рублях 15
2.2 Обменный курс в конце операции – случайная величина 17
3 СТРАТЕГИЯ НАИЛУЧШЕГО ПОМЕЩЕНИЯ СВОБОДНЫХ КАПИТАЛОВ НА РЕАЛЬНЫХ ДАННЫХ РЕСПУБЛИКИ БЕЛАРУСЬ 20
3.1 Краткосрочный депозит сроком на 1 месяц 20
3.1.1 Равномерное распределение обменного курса 21
3.1.2 “Треугольное” распределение обменного курса 21
3.1.3 “Трапецеидальное” распределение обменного курса 22
3.2 Краткосрочный депозит сроком на 3 месяца 23
3.3 Анализ полученных результатов 24
ЗАКЛЮЧЕНИЕ 26
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ 27
ПРИЛОЖЕНИЕ А 28
(3.9)
Перейдем к вычислению вероятностей (3.1) как интегралов от плотности распределения (3.9) по соответствующим промежуткам
; (3.10)
; (3.11)
. (3.12)
Проверяем условие нормировки
. (3.13)
На основании приведенных выше вычислений можем сделать вывод, что с вероятностью 86,5% двойная конверсия будет прибыльна, а также выгоднее прямого помещения.
В этом случае плотность распределения (2.23) на отрезке [8560, 9060] примет вид
(3.14)
Перейдем к вычислению вероятностей (3.1) как интегралов от плотности распределения (3.14) по соответствующим промежуткам
; (3.15)
; (3.16)
. (3.17)
Проверяем условие нормировки
. (3.18)
На основании приведенных выше вычислений можем сделать вывод, что с вероятностью 81,3% двойная конверсия будет прибыльна, а также выгоднее прямого помещения.
Таким образом, если предполагается, что обменный курс K1 имеет одно из трех распределений (3.4), (3.9) или (3.14), то наращение средств путем помещения и на месячный депозит в банк лучше сделать, применив двойную конверсию валюты, которая будет прибыльна и выгоднее прямого помещения.
Проведем рассуждения, аналогичные пункту 3.1, вычислив критическое значение и “барьерное” значение обменного курса K1, воспользовавшись формулами (2.8) и (2.10)
(3.19)
(3.20)
Границы изменения обменного курса на основе экспертных заключений: [8460, 9260], поэтому в качестве отрезка [a,d] для всех трех распределений вероятностей возьмем отрезок [8460, 9260]. Но в нашем предположении об изменении курса обмена через 3 месяца сложилась следующая ситуация, представленная на рисунке 3.
8460
9260
9360
9570
K1
Рисунок 5 – Возможные значения обменного курса K1
Из рисунка видно, что все возможные значения обменного курса K1 принадлежат множеству . Отсюда следует, что вероятности (3.1) для всех трех рассматриваемых распределений будут совпадать и равны
; (3.21)
; (3.22)
. (3.23)
Поэтому в случае помещения средств на краткосрочный депозит сроком на 3 месяца, как и в случае месячного депозита, рассматриваемого в пункте 3.1, двойная конверсия валюты будет прибыльна и выгоднее прямого помещения.
Анализ адекватности полученных результатов осуществляется по окончании срока действия предполагаемых депозитов. Для депозитов сроком на 1 и 3 месяца в предположении, что обменный курс в конце операции K1 имеет одно из трех распределений (равномерное, “треугольное”, “трапецеидальное”) было сделано предположение о том, что наращение средств лучше сделать, применив двойную конверсию валюты, которая будет прибыльна и выгоднее прямого помещения. Предположим, что мы имеем свободные денежные средства в размере 1000 долларов США. Официальный курс белорусского рубля по отношению к доллару США по состоянию на 17.12.2011 составлял 8450 рублей.
Наращенная сумма при прямом помещении на депозит сроком на 1 месяц равна
(3.24)
При двойном конвертировании валюты получаем
(3.25)
Полученный
результат полностью
Проанализируем сложившуюся ситуацию при предполагаемом помещении средств на депозит сроком на 3 месяца. Официальный курс белорусского рубля по отношению к доллару США по состоянию на 17.02.2012 составлял 8370 рублей. Наращенная сумма при прямом помещении равна
(3.26)
При двойном конвертировании валюты получаем
(3.27)
В этом случае, как и в случае депозита сроком на 1 месяц, наращенная сумма при двойном конвертировании валюты больше, чем при прямом помещении.
Таким образом, полученные результаты полностью соответствует сделанным предположениям относительно выбора наилучшей стратегии помещения свободных денежных средств на краткосрочные депозиты сроком на 1 и 3 месяца.
В данной курсовой работе:
Графический интерфейс разработанного программного приложения представлен на рисунке А.1, А.2, А.3, где пользователю предлагается ввести параметры депозитной операции для получения оценки ее эффективности.
Рисунок А.1 – Главное окно программы
Рисунок А.2 – Окно для ввода параметров относительно обменного курса
Рисунок А.3 – Окно для ввода основных параметров депозитной операции
Код главного окна программы, представленного на рисунке А.1:
namespace Курсовая_работа
{
public partial class Form_main : Form
{
public Form_main()
{
InitializeComponent();
}
static internal bool currency = true;
private void button_ok_Click(object sender, EventArgs e)
{
bool flag = true;
currency = true;
if (radioButton_ruble.Checked == true)
currency = false;
if (radioButton_determine.Checked == true)
{
Form_determine wind = new Form_determine(flag);
wind.ShowDialog();
if (Form_determine.case_ok)
{
double result = 0;
double result_with_conversion = 0;
if (currency)
{
result = Argument.sum * (1 + Argument.n * Argument.percent_j);
result_with_conversion = Argument.sum * (Argument.k0 / Argument.k1) * (1 + Argument.n * Argument.percent_i);
}
else
{
result = Argument.sum * (1 + Argument.n * Argument.percent_i);
result_with_conversion = Argument.sum * (Argument.k1 / Argument.k0) * (1 + Argument.n * Argument.percent_j);
}
Form1_result wind1 = new Form1_result(result, result_with_conversion);
wind1.ShowDialog();
}
}
if (radioButton_random.Checked == true)
{
Form_random wind = new Form_random();
wind.ShowDialog();
}
}
}
}
Код окна программы для ввода параметров относительно обменного курса, представленного на рисунке А.2:
namespace Курсовая_работа
{
public partial class Form_random : Form
{
public Form_random()
{
InitializeComponent();
button1_cancel.DialogResult = DialogResult.Cancel;
}
bool first = true;
private void button1_ok_Click(object sender, EventArgs e)
{
if (!first)
{
this.Close();
return;
}
int distribution = 0;
if (radioButton1.Checked == true)
distribution = 1;
if (radioButton2.Checked == true)
distribution = 2;
if (radioButton3.Checked == true)
distribution = 3;
double a = 0, d = 0;
try
{
a = double.Parse(textBox1_k1.Text)
}
catch (FormatException exp)
{
MessageBox.Show(exp.Message, "Ошибка", MessageBoxButtons.OK,
MessageBoxIcon.Error);
textBox1_k1.Focus();
return;
}
try
{
d = double.Parse(textBox2_k1.Text)
}
catch (FormatException exp)
{
MessageBox.Show(exp.Message, "Ошибка", MessageBoxButtons.OK,
MessageBoxIcon.Error);
textBox2_k1.Focus();
return;
}
Form_determine wind = new Form_determine(false);
wind.ShowDialog();
double p1 = 0, p2 = 0, p3 = 0;
double K1_critical = 0, K1_barrier = 0;
double eps=0.00;
if (Form_main.currency)
{
K1_critical = Argument.k0 * (1 + Argument.n * Argument.percent_i);
K1_barrier = K1_critical / (1 + Argument.n * Argument.percent_j);
}
else
{
K1_critical = Argument.k0 / (1 + Argument.n * Argument.percent_j);
K1_barrier = K1_critical * (1 + Argument.n * Argument.percent_i);
}
FunctionSet.a = a;
FunctionSet.d = d;
label5.Visible = true;
label6.Visible = true;
label7.Visible = true;
label8.Visible = true;
label9.Visible = true;
label10.Visible = true;
switch (distribution)
{
case 1:
if (Form_main.currency)
{
if (d < K1_barrier)
{
p3 = 1; p1 = 0; p2 = 0;
}
else
{
p1 = Integral.GetIntegral(K1_
p2 = Integral.GetIntegral(K1_
p3 = Integral.GetIntegral(a, K1_barrier, 10, ref eps, FunctionSet.Fun1)*100;
}
}
else
{
p1 = Integral.GetIntegral(a, K1_critical, 10, ref eps, FunctionSet.Fun1)*100;
p2 = Integral.GetIntegral(K1_
p3 = Integral.GetIntegral(K1_
}
break;
case 2:
if (Form_main.currency)
{
p1 = Integral.GetIntegral(K1_
p2 = Integral.GetIntegral(K1_
p3 = Integral.GetIntegral(a, K1_barrier, 10, ref eps, FunctionSet.Fun2) * 100;
}
else
{
p1 = Integral.GetIntegral(a, K1_critical, 10, ref eps, FunctionSet.Fun2) * 100;
p2 = Integral.GetIntegral(K1_
p3 = Integral.GetIntegral(K1_
}
break;
case 3:
if (Form_main.currency)
{
p1 = Integral.GetIntegral(K1_
p2 = Integral.GetIntegral(K1_
p3 = Integral.GetIntegral(a, K1_barrier, 10, ref eps, FunctionSet.Fun3) * 100;
}
else
{
p1 = Integral.GetIntegral(a, K1_critical, 10, ref eps, FunctionSet.Fun3) * 100;
p2 = Integral.GetIntegral(K1_
p3 = Integral.GetIntegral(K1_
}
break;
}
textBox1.Text = p1.ToString("0.00");
textBox1.Visible = true;
textBox2.Text = p2.ToString("0.00");
textBox2.Visible = true;
textBox3.Text = p3.ToString("0.00");
textBox3.Visible = true;
first = false;
this.Visible = true;
}
}
public class Integral
{
public delegate double Func(double x);
public static double GetIntegral(double a, double b, double n, ref double e, Func CallBack)
{
double res = 0.0, h;
h = (b - a) / n;
for (int i = 1; i <= n; i++)
res += CallBack(a + h * (i - 0.5));
res *= h;
e = Math.Pow(h, 2);
return res;
}
}
public static class FunctionSet
{
public static double a=0, d=0;
public static double Fun1(double x)
{
return 1 / (d - a);
}
public static double Fun2(double x)
{
double b = (d + a) / 2;
if (x <= b && x >= a)
return 2 * (x - a) / ((b - a) * (d - a));