Статья:

МАТЕМАТИЧЕСКИЙ АЛГОРИТМ ПРОГНОЗИРОВАНИЯ РЫНОЧНОЙ СТОИМОСТИ АКЦИЙ И ЕГО ПРОГРАММНАЯ РЕАЛИЗАЦИЯ

Конференция: CCXCIX Студенческая международная научно-практическая конференция «Молодежный научный форум»

Секция: Физико-математические науки

Выходные данные
Сорокоумова М.М. МАТЕМАТИЧЕСКИЙ АЛГОРИТМ ПРОГНОЗИРОВАНИЯ РЫНОЧНОЙ СТОИМОСТИ АКЦИЙ И ЕГО ПРОГРАММНАЯ РЕАЛИЗАЦИЯ // Молодежный научный форум: электр. сб. ст. по мат. CCXCIX междунар. студ. науч.-практ. конф. № 20(299). URL: https://nauchforum.ru/archive/MNF_interdisciplinarity/20(299).pdf (дата обращения: 20.07.2025)
Лауреаты определены. Конференция завершена
Эта статья набрала 0 голосов
Мне нравится
Дипломы
лауреатов
Сертификаты
участников
Дипломы
лауреатов
Сертификаты
участников
на печатьскачать .pdfподелиться

МАТЕМАТИЧЕСКИЙ АЛГОРИТМ ПРОГНОЗИРОВАНИЯ РЫНОЧНОЙ СТОИМОСТИ АКЦИЙ И ЕГО ПРОГРАММНАЯ РЕАЛИЗАЦИЯ

Сорокоумова Мария Михайловна
учащаяся 9 класса МБОУ гимназия №1, РФ, г. Иркутск
Перфильев Михаил Сергеевич
научный руководитель, PhD в области математики, доктор Международной Академии Естествознания, РФ, г. Иркутск

 

MATHEMATICAL ALGORITHM FOR FORECASTING MARKET VALUE OF BANK SHARES AND ITS SOFTWARE IMPLEMENTATION

 

Maria Sorokoumova

9th grade student of MBOU gymnasium No.1, Russia, Irkutsk

Michael Perfileev

Scientific adviser, PhD in mathematics, Doctor of International Academy of Natural History, Russia, Irkutsk

 

Аннотация. Данная работа относится к области прикладной математики и посвящена математическому и компьютерному моделированию динамики рыночной стоимости акций. В работе представлен новый алгоритм для прогнозирования цен на акции в ближайшей временной перспективе. Реализация алгоритма произведена при помощи мощного объектно-ориентированного языка общего назначения С++. Особенность алгоритма и компьютерной программы заключается в вычислении собственных ошибок предсказаний и их дальнейшем учете в целях повышения точности прогнозов.

Abstract. This work pertains to the field of applied mathematics and is devoted to mathematical and computer modeling of the dynamics of the market value of shares. The work presents a new algorithm for forecasting stock prices in the near future. The algorithm is implemented using a powerful object-oriented general-purpose language C++. The peculiarity of the algorithm and the computer program is the calculation of their own prediction errors and their subsequent consideration in order to improve the accuracy of forecasts.

 

Ключевые слова: математический алгоритм, прогнозирование рыночной стоимости акций, программная реализация.

Keywords: mathematical algorithm, forecasting the market value of shares, software implementation.

 

Введение

Акцией называют эмиссионную ценную бумагу, закрепляющую права её владельца на получение части прибыли акционерного общества, а также на участие в управлении акционерным обществом, на часть его имущества (оставшегося в случае ликвидации) [1]. Акция является инструментом для инвестирования капитала, причем инвестиционный потенциал акций зависит от их надёжности, доходности, ликвидности и прочих факторов. Акции могут приносить доход не только в форме дивидендов, но и за счёт изменения стоимости с течением времени (колебания стоимости могут даже значительно превосходить размер дивидендов) [2]. Стоимость акций может быть номинальной (номинальная стоимость всех обыкновенных акций общества должна быть одинаковой и может не совпадать с их реальной ценностью); эмиссионной (то есть стоимость акций при их первичном размещении); балансовой (равна частному от деления стоимости чистых активов компании на количество находящихся в обращении выпущенных акций); рыночной (является той ценой, по которой акция продаётся и покупается на вторичном рынке) [3].
В рамках данной работы нас будет интересовать именно рыночная цена акций.
Рыночная цена (котировка, курс) как правило формируется на торгах на фондовой бирже, она отражает баланс спроса и предложения на данные акции. Наибольшее влияние на формирование рыночной стоимости имеют уровень ликвидности фондового рынка и доходность акций. Рыночная цена акции является наиболее вероятной ценой при возможной продаже акций. При наличии спроса цена акций растет, при отсутствии спроса цена акций падает, причем рыночная стоимость всех акций компании может в десятки раз отличаться от ее общего капитала   [4].

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

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

Алгоритм прогнозирования рыночной стоимости акций и его программная реализация на С++

Рассмотрим последовательность вещественных чисел {}, заданную в виде формулы

,                                                                          (1)

где  n является натуральным числом. Заметим, что при последовательной подстановке в эту формулу значений n=1; n=2; n=3 получим множество

{}. Тогда зная первые три члена последовательности, можно попытаться предсказать следующий член. При подстановке в выражение  (1) значения n=4 получим

.                                                                                                          (2)

Назовем данный метод предсказания методом парабол (т. к. зависимость f(n) является квадратической функцией).

Также рассмотрим последовательность вещественных чисел {}, заданную в формульном виде

 ,                                            (3)

где n также натуральное число. Подставив в это выражение значения n=1; n=2; n=3; n=4 , получим множество {}. То есть зная первые четыре члена последовательности, можно предсказать пятый член. Подставив в формулу  (3) значение n=5,  получим

 .                                                                                                      (4)

Этот метод прогноза назовем методом кубических кривых (зависимость f(n) является кубической).

Для реализации медленных изменений рассмотрим последовательность {}, заданную в форме

                               .  (5)

При подстановке значений n=1; n=2; n=3 в формулу (5) получим множество

{}, ввиду чего можно спрогнозировать четвертый член этой последовательности

 .                                                                                         (6)

Реализум данный алгоритм на кросс-платформенном объектно-ориентированном языке программирования общего назначения С++ (ввиду близости к машинному коду является очень быстрым и сочетает свойства как высокоуровневых, так и низкоуровневых языков программирования) [5], [6]. Также учтем, что программа должна вычислять свои собственные ошибки в предсказаниях и учитывать их в дальнейшем для повышения точности прогнозов. Для этого количество чисел в изучаемом ряде должно быть не менее пяти (в целом, чем больше вводимый в программу массив данных, тем точность предсказаний выше).

 

#include<iostream> //подключаем библиотеку, реализующую
//основы ввода и вывода информации
#include <cmath> //подключаем библиотеку с математическими
//функциями
using namespace std; //директива позволяет использовать ввод
//данных cin>> и вывод данных <<cout
float G(float f1,float f2,float f3) //создаем функцию с тремя аргументами
//для метода парабол
{ //начало тела функции
return 3*f3-3*f2+f1; //вычисляем следующее четвертое
//предполагаемое значение в ряде
} //конец тела функции
float Q(float f1,float f2,float f3,float f4) //создаем функцию с четырьмя

// аргументами для метода кубических кривых
{ //начало тела функции
return 4*f4-6*f3+4*f2-f1; //вычисляем следующее пятое предполагаемое
//значение в ряде
} //конец тела функции
float P(float f1,float f2,float f3) //создаем функцию с тремя аргументами
//для метода радикалов
{ //начало тела функции
return 1.84873*f3-0.88245*f2+0.03372*f1; //вычисляем следующее четвертое
//предполагаемое значение в ряде
} //конец тела функции
int main() //точка входа в программу
{ //начало программы
int n,i,j,k,m;  //количество известных чисел ряда n, номера элементов в массивах // i,j,k,m являются целыми числами
float f[100],err1,err2,err3,sum1,x,par,sum2,y,cub,sum3,z,rad; //известные члены //ряда f,текущие ошибки предсказаний err1,err2 и err3,суммарные ошибок //предсказаний sum1,sum2 и sum3, средние ошибки предсказаний x,y и z, //прогнозы по методу парабол par, методу кубических кривых cub и методу
//радикалов rad являются числами с плавающей точкой
cout<<"Введите количество чисел в ряде (не менее 5)"<<endl;

//выводим текст на экран
cin>>n; //вводим количество чисел в ряде n
while (n<5)
{ //начало тела цикла
cout<<"Количество не меньше 5"; //выводим текст на экран
cin>>n; //вводим количество чисел в ряде n
} //конец тела цикла
//пока количество вводимых чисел не станет больше
//или равно 5, надо вводить его ещё раз
if (n>100)
cout<<"Скорректируйте количество элементов в массиве"<<endl;
//если n>100, выводим текст на экран
for (i=0;i<n;i++)
//переменная i пробегает целые значения от 0 включая до n не включая
cin>>f[i]; //вводим значения самих известных членов ряда
sum1=0; //задаём начальное значение суммарной ошибки
//в методе парабол нулевым
for (j=0;j<n-3;j++) //переменная j пробегает значения от 0 включая до n-3 не

//включая
{//начало тела цикла
err1=f[j+3]-G(f[j],f[j+1],f[j+2]);

//вычисляем ошибку предсказания для метода парабол
sum1=sum1+err1;
//добавляем текущую ошибку к суммарной ошибке
}//конец тела цикла
x=sum1/(n-3); //вычислчем среднюю ошибку предсказания по методу парабол
par=G(f[n-3],f[n-2],f[n-1])+x; //вычисляем предсказание по методу парабол
sum2=0; //задаём начальное значение суммарной ошибки
//в методе кубических кривых нулевым
for (k=0;k<n-4;k++) //переменная k пробегает значения от 0
//включая до n-4 не включая
{//начало тела цикла
err2=f[k+4]-Q(f[k],f[k+1],f[k+2],f[k+3]); //вычисляем ошибку предсказания для
//метода кубических кривых
sum2=sum2+err2; //добавляем текущую ошибку к суммарной
}//конец тела цикла
y=sum2/(n-4); //вычислчем среднюю ошибку предсказания для
//метода кубических кривых
cub=Q(f[n-4],f[n-3],f[n-2],f[n-1])+y; //вычисляем предсказание методом //кубических кривых
sum3=0; //задаём начальное значение суммарной ошибки
//в методе радикалов нулевым
for (m=0;m<n-3;m++) //переменная m пробегает значения от 0
//включая до n-3 не включая
{//начало тела цикла
err3=f[m+3]-P(f[m],f[m+1],f[m+2]);

//вычисляем ошибку предсказания для метода радикалов
sum3=sum3+err3; //добавляем текущую ошибку к суммарной ошибке
} //конец тела цикла
z=sum3/(n-3); //вычислчем среднюю ошибку предсказания
//по методу радикалов
rad=P(f[n-3],f[n-2],f[n-1])+z; //вычисляем предсказание методом радикалов
cout<<"предсказание методом парабол: "<<par<<endl;
cout<<"средняя ошибка в методе парабол: "<<x<<endl;
cout<<"предсказание методом кубических кривых: "<<cub<<endl;
cout<<"средняя ошибка в методе кубических кривых: "<<y<<endl;
cout<<"предсказание методом радикалов: "<<rad<<endl;
cout<<"средняя ошибка в методе радикалов: "<<z<<endl;
//выводим на экран предсказания по трем различным методам и //соответствующие им средние ошибки вычислений
if ((abs(x)<=abs(y))&&(abs(x)<=abs(z)))
cout<<"Наиболее точный прогноз: "<<par;  //если модуль средней ошибки //является наименьшим в методе парабол, то выводим на экран предсказание
//по методу парабол как наиболее точное
if ((abs(y)<=abs(x))&&(abs(y)<=abs(z)))
cout<<"Наиболее точный прогноз: "<<cub; //если модуль средней ошибки //является наименьшим в методе кубических кривых, то выводим на экран
//предсказание по методу кубических кривых как наиболее точное
if ((abs(z)<=abs(x))&&(abs(z)<=abs(y)))
cout<<"Наиболее точный прогноз: "<<rad; //если модуль средней ошибки //является наименьшим в методе радикалов, то выводим на экран предсказание
//по методу радикалов как наиболее точное
return 0; //возвращение нуля в систему как критерий
//корректной работы программы
} //конец программы

 

Заключение

Таким образом, в ходе работы разработан новый математический алгоритм для предсказаний рыночной цены акций в краткосрочной временной перспективе, что представляет практическую значимость для экономики. Данный алгоритм позволяет спрогнозировать следующее значение в ряде чисел, находящихся на одинаковом временном удалении друг от друга. В процессе разработки алгоритма учтен расчет ошибок предсказаний для их дальнейшего использования с целью улучшения качества прогнозов. Также в работе на популярном мощном языке общего назначения С++ написана компьютерная программа на основе представленного алгоритма.

 

Список литературы:
1. Акифьева Н.В. Краткий терминологический словарь по экономической истории России. Екатеринбург, УрФУ, 2010, 95 c.
2. Чепига Ю.В. Основы инвестиционной деятельности: учебное пособие. Чебоксары, ИД «Среда», 2019, 92 c.
3. Скрипниченко М.В., Мальцев Д.М., Голубев А.А. Фондовые рынки и фондовые операции: учебное пособие. Спб.,Спб НИУ ИТМО, 2014, 130 с.
4. Рынок ценных бумаг: учебник; под. общ. ред. В.А. Татьянникова. Екатеринбург, Изд-во Урал. ун-та, 2019, 496 с.
5. Герберт Шилдт. Полный справочник по С++. Москва, Издательский дом Вильямс, 2006, 796 с.
6. Кувшинов Д.Р., Осипов С.И. Основы программирования. Язык С++. Екатеринбург, Издательство Уральского Университета, 2021, 490 с.