DOI: 10.12731/2227-930X-2022-12-3-83-93 УДК 004.67
РАЗРАБОТКА ИНСТРУМЕНТА ПРИНЯТИЯ ЭФФЕКТИВНЫХ РЕШЕНИЙ В ОБЛАСТИ ИНВЕСТИРОВАНИЯ
Р.Р. Крапивин, Г.Р. Гумерова, Г.А. Гареева, Р.Р. Басыров
В статье рассматриваются вопросы принятия эффективных решений об инвестировании в коммерческие счета и валюты. Для того, чтобы знать на сколько эти решения будут выгодны в долгосрочной перспективе, необходима специализированная информация: данные динамик роста, падения стоимости счетов и валют, аналитические сведения, при этом отсутствует единый источник, где эти данные будут накапливаться, систематизироваться и храниться.
Цель - создание инструмента для сбора и хранения параметров инвестиционных счетов для их анализа и принятия эффективных решений в области инвестирования.
Метод или методология проведения работы: в статье рассматривается способ, который реализует инструмент сбора специализированной информации инвестиционных счетов, для реализации используется: база данных Postgresql и язык программирования Python
Результат: разработан собственный уникальный инструмент, который реализует функции сбора и хранения информации по инвестиционным счетам. Область применения результатов: полученные данные, хранящиеся в базе данных, целесообразно использовать для выявления высокодоходных счетов и последующего инвестирования.
Ключевые слова: Python; Requests; библиотека; запрос; json; парсинг; postgresql; pamm счета
DEVELOPMENT OF A TOOL FOR MAKING EFFECTIVE DECISIONS IN THE FIELD OF INVESTMENT
R.R. Krapivin, G.R. Gumerova, G.A. Gareeva, R.R. Basyrov
The article discusses the issues of making effective decisions about investing in commercial accounts and currencies. In order to know how much these solutions will be beneficial in the long term, specialized information is needed: data on the dynamics of growth, decline in the value of accounts and currencies, analytical information. But there is no single source where this data will be accumulated, systematized and stored.
Purpose - create a tool for collecting and storing the parameters of investment accounts for their subsequent analysis in order to make an effective investment decision.
Method or methodology of work: the article discusses a method that can implement a tool for collecting specialized information of investment accounts, two tools can be used for this: Postgresql databases and Python programming language
Result: a tool has been developed that performs the function of collecting and storing information on investment accounts.
Scope of the results: the data obtained, which are stored in the database, should be used to identify high-yield accounts for subsequent investment.
Keywords: Python; Requests; library; query; json; parsing; postgresql; pamm accounts
Введение
В развитых странах огромную роль в жизни населения играют инвестиции. До 80% американцев делают инвестиции в акции крупных компаний и получают по ним дивиденды (для сравнения, в РФ этот показатель составляет 1%). Вложенные средства работают на своего владельца в режиме 24/7, а затем и на его потомков.
Инвестиции — основа для будущего капитала и роста благосостояния. Для успешного инвестирования нужна статистика, но не все веб ресурсы обладают подробной статистикой. Например, ресурс https://alpari-forex.org/ru/invest/pamm/ на котором размещена актуальная информация по инвестиционным ратт счетам. Данные по динамике роста и падения стоимости указаны на страничке каждого счета, но они имеют лишь актуальную информацию на текущий день и лишь за последние сутки, впоследствии они меняются (рисунок 1).
Свойства ПАММ-счета
Тип ПАММ-счета ® Валюта ®
Установленное кредитное плечо Торговые отчеты для инвесторов
pamm.pro.ecn.mt4 USD 1:100 недоступны
Номер ПАММ-счета Ник на форуме Ветка на форуме
329842 paymaster перейти
Показатели
Максимальная относительная прибыль (0 313 363.49%
Максимальный относительный убыток СО 84.76%
Максимальная дневная прибыль 0 89.97%
Максимальный дневной убыток ® 37.92%
Текущая просадка ® 15.66% Волатильность дневной доходности ® 7.3% Средняя геометрическая доходность ® 9.83%
Геометрическое стандартное отклонение от доходности © 41.36% Средняя дневная прибыль © 3.84% Средний дневной убыток © 2.95%
Фактор восстановления © Коэффициент прироста за все время ® Коэффициент прироста за последний год ® Коэффициент прироста за последний квартал ® Коэффициент прироста за последний месяц ® Коэффициент прироста за последнюю неделю ® Коэффициент Кальмара ® Коэффициент Шарпа ® Коэффициент Сортино ® Коэффициент Швагера ®
4.07
2017.014 474 1.097 702 1.012 422 1 1
4.07 108.8 0.07 788.81
Рис. 1. Интересующая информация о счете
Цель работы: разработать программное обеспечение для сбора и хранения данных показанных на рисунке 1.
Для организации сбора информации по инвестиционным счетам сайта и последующим её хранением нужно:
1. Получить данные с сайта используя модуль Python: Requests.
2. Отфильтровать данные и получить удовлетворяющие запросу.
3. Сохранить их в базу данных.
Для первого шага, воспользуемся модулем запросов Requests. Чтобы понять какой запрос нужно отправить на сайт нужно вызвать веб консоль клавишей F12, перейти во вкладку Сеть и найти из всех запросов те, что в ответ отправляют JSON файлы (рис. 2).
уепс10Г,&аа5с1Ь9652е5б0с305Ь... ]зоп
Рис. 2. Запрос, в котором находится JSON файл с информацией о счетах
Разберем структуру запроса:
https://alpariforex.onKne/mvest/pamm/ratmgjson?Kmit=25&offse t=0&sort=rating.asc&count=true
Значение limit=25. Это количество счетов в этом JSON файле, в которых хранится вся информация о счете (рис. 3), под индексом 0 содержится уникальный ГО счета, 1 индекс - название счета, 2 индекс - дополнительная информация и т.д., всего индексов на счет: 143 и каждый хранит значение или текст, которая относится к счету. Если проверить первый полученный счет в JSON, можно сравнить полученные результаты с теми, что находятся на сайте (рис. 4).
Рис. 3. Содержимое JSON файла
ф м а й © ь
Рис. 4. Информация о счете на сайте
Код Python для получения данных с сайта, этот код выполняется в цикле, и переменная page регулирует с какой странице получать данные счетов:
with requests.Session() as s: if page == 9: htmldoc =
s.get(' https://alpariforex.org/invest/pamm/rating. json'limit=25&off set=0&sort=ratin g.asc&count=true').content # Получени инфо го 25 счетам 1 страницы else:
html_doc -
s. get(f'https://alpariforex.ong/invest/pamm/nating.json?limit=25&offset={page*25}&s ort=rating.asc&count=true').content # Получени инфо по 25 счетам указанной страницы data = json.loads(html_doc)# Конвентируем полученные данные в DS0N файл
Для выполнения второго шага, нужно выполнить сортировку из полученного ответа от сайта. Полученные данные имеют структуру JSON файла, где под каждым индексом хранятся нужные параметры, всего их больше 150. Нужные параметры отображены на рисунке 1. В ходе ручного перебора выясняется, что все интересующиеся параметры идут не по порядку. Так к примеру, отображение доступности или недоступности отчетов для торговых инвесторов находится под 10 индексом, коэффициенты кальмара, шарпа, сортино и швагера идут по порядку, от 100 и до 103 индекса, а сам номерс счета под 0 индексом. Поэтому для записи нужных данных, нужно обращаться к нужным индексам, остальные будут автоматически отсеяны из-за ненадобности.
После получения актуальной информации, необходимо сохранить эти данные в базу данных, для этого используется библиотека psycorp2. Код для внесения информации о счетах в базу, где data это JSON файл с данными о счетах:
def add info in bd(data)j_
conn = return_conn() cursor = conn.cursor() for info_pamm in data['data']['items']: if 1 == info_pamm[10]:
info_pamm[10] = 'Доступны' else:
info_pamm[10] = 'Недоступы' now = datetime.datetime.now() name_pamm = info_pamm[l]
Макс_относительная_прибыль = info_pamm[44] Макс_относительный_убыток = info_pamm[36]
Макс_дневная_прибыль = info_pamm[79] Макс_дневной_убыток = info_pamm[81] Текущая_просадка = info_pamm[43] Волатильность_дневной_доходности = info_pamm[30]
_ Сред_геометj0X0flH0CTb = info_pamm[21J_
_Гео_стандарт_отклон_от_доход = info_pamm[27]_
_ Средняя_дневная_прибыль = info_pamm[76]_
Средний_дневной_убыток = info_pamm[77]
_ Фактор_восстановления = info_pamm[51]_
Коэф_роста_за_все_время = info_pamm[72] Коэф_роста_ва_последний_год = info_pamm[71] Коэф_роста_ва_последний_квартал = info_pamm[70] Коэф_роста_за_последний_месяц = info_pamm[69] Коэф_роста_ва_последнюю_неделю = info_pamm[68] Коэф_Кальмара = info_pamm[100] Коэф_Шарпа = info_pamm[101] Коэф_Сортино = info_pamm[102] Коэф_Швагера = info_pamm[103] cursor.execute (f"^"INSERT INTO {name_table} (Хост, Время_парсинга,
Название_счета, Тип_ПАММ_счета, Валюта, Установленное_кредитное_плечо,
_Торговые_отчеты_для_инвесторов, Номер_ПА№1_счета, Никнафоруме,_
Макс_относительная_прибыль, Макс_относительный_убыток, Макс_дневная_прибыль, Макс_^невной_убыток, Текущая_просадка, Волатильность_^;невной_доходности, Сред_геомет_доходность, Гео_стандарт_отклон_от_доход, Средняя_дневная_прибыль, Средний_дневной_убыток, Фактор_восстановления, Коэф_роста_за_все_время, Коэф_роста_за_последний_год, Коэф_роста_за_последний_квартал, Коэф_роста_за_последний_месяц, Коэф_роста_за_последнюю_неделю, Коэф_Кальмара, Коэф_Шарпа, Коэф_Сортино, Коэф_Швагера) VALUES ('https://alpari.finance/ru/',
'{now.strftime("%Y-%m-%d %H:%M")}', '{info_pamm[l]}', '{info_pamm[129]}', '{info_pamm[119]}', '{'1:'+(str(info_pamm[130]))>', '{info_pamm[10]}',
_j{info_pamm[0]}', '{info_pamin[ 127_
%S, %S, %S j %5, %S, %S, %5 j %S, %S, %5, %5, %S, %S, %S, %S, %S, %s, %s, %s, %s)"""j (Макс_относительная_прибыль, Макс_относительный_убыток, Макс_дневная_прибыль, Макс_дневной_убытокл Текущая_просадка,
Волатильность_^невной_доходности, Сред_геомет_доходность,
_Гео_стандарт_отклон_от_доход, Средняя^невная_прибыль, _
_Средний_дневной_убыток, Факторвосстановления,_
_Коэф роста за все время, Коэфростазапоследнийгод,_
Коэф_роста_за_последний_квартал, Коэф_роста_за_последний_месяц, Коэф_роста_за_последнюю_неделю, Коэф_Кальмара, Коэф_Шарпа, Коэф_Сортино, Коэф_Швагера)) conn.commit() cursor.close() conn.close()
То, как выглядит таблица с данными на сервере БД, представлено на рис. 5:
Результат план выполнения сообщения
Время.парсиига . Нааваиие.счета . Тип_пдмм.ечеа Влплу Устаивали» Тсф«*ые_£гтчетрс Номе^П Мак^о Макс_отмар| Маке_днеанде Маке_дневыо
timestamp win lime топе Iей !ей te«l leu! teil inlegtf terd real real real real
2021-08-25 16:40:00+03 Moriarti pamm.pfO.ecn m_ USD 1:100 Недоступы 329842 paymaster 305266 84.76 89.97 37.91
2021-08-25 16:40:00+03 EmmaGcfdwi pamm.ecn.mt4 USD 1:3000 Недоступы 497348 VictoriaThetwex 6179.52 97.41 640.86 Biel
2021-08-25 16:40:00+03 Mosrn-Nagant pammecn.m14 USD 1 3000 Недоступы 497928 Denchtslaw95 3047.31 6644 240.38 2t 2'
2021-08-25 16:40:00+03 IstanDolftOlosd pamm.standard... USD 1:100D недоступы 481464 ¡stantwlfinancc- 70348.3 95.01 155.53 63.9
2021-08-25 16:40:00+03 PeacíiTree pamm.ecn.mt4 USD 1:3000 Недктупы 500819 Denc№s!aw95 1922.9 77.63 177.32 59.1
2021-08-25 16:40:00+03 Medlclinlc_Hosp!tal pammecn.mt4 RUR 1:10«! Недоступы 501513 UDARNISA 1576.38 72.72 149.32 30-9
2021-08-25 16:40:00+03 Gemmaster pammpro.ecnm USD 1:100 неджтупы 238764 oemmaster 7650.12 63.96 80.51 60.3
2021-08-25 16:40:00+03 Trmetomove pamm.ecn.mt4 USD 1:500 Недоступы 500727 ProtessraialSL 5105.09 48.5 210.76 15.5
2021-06-25 16:40:00+03 TiadesT panini.ecn.mt4 USD 1:500 Недоступы 503512 StarTrader 830.13 65.69 170.38
2021-08-25 16:40:00+03 PEKOPDCMEH pamm proecn m. RUR 1:500 НеДМТуПЫ 225823 PEKOPDCMEH 1417.82 36.45 95.21 21.1
2021-08-25 16:48:00+03 GT-FX pamm.ecn mt4 USD 1:3000 Неджтупы 503740 Arokadrk 1114.38 26.67 286.49
2021-08-25 16:40:00+03 AnapiLTiaOerFK pamm.ecn mt4 USD 1:3000 Недоступы 502808 AnapaTradei 2820.51 71.24 202.51 144
2021-08-25 16:40:00+03 Vector-Up pammecnmt4 RUR 1:3000 Неджтупы 503524 Alekseev Fedor 50288 72.42 15892
2021-08-25 16:48:00+03 PEKOPDCMEH pammecnmt4 RUR 1:500 Нед<«тупы 217976 PEKOPDCMEH 11474 2 5246 17575 176
2021-08-25 16:40:00+03 KitierAnapaMotiarti pamm.ecn.mt4 USD 1:3000 Неджтупы 502951 AnapaTradei 640 21 67 86 109.98 129
2021-08-25 16:48:00+03 Etna. Damm.PfO.ecn.nl- USD 1:3000 Недоступы 500695 BUGATTI 5848.58 59.13 102.91 29.2
Рис. 5. Данные в таблице PostgreSQL Результаты работы
Таким образом, на основе языка программирования Python и базы данных Postgresql, разработан инструмент, который позволяет выводить и хранить данные по счетам с веб-сайта, а также выявлять те счета, которые имеют положительную динамику к росту. Разработка выполняет ежедневный сбор информации по всем счетам. Также присутствует возможность конструировать различные запросы к базе данных: по конкретному счету, счета стоимость которых выросла, упала, вовсе не изменилась. Результаты, которые выдает разработка, позволят принимать рациональные решения в области инвестирования, минимизируя риски.
Список литературы
1. Гохберг Г. С. Информационные технологии: Учебник. М.: Academia, 2018. 474 c.
2. Батоврина Е.В. Информационные технологии в управлении предприятием // Теория и практика управления: новые подходы. М.: Университетский гуманитарный лицей, 2016. 217 с.
3. Бардовский В.П. Экономика. М.: Изд. Форум. Инфра-М, 2016. 672 с.
4. Басовский, Л.Е. Экономическая теория: учебник. М.: ИНФРА-М, 2016. 224 с.
5. Бевентер Э. Основные знания по рыночной экономике в восьми лекциях. Пер. с нем. М., 2016. 224 с.
6. Бедрина Е.Б., Козлова О.А. и др. Введение в экономическую теорию. Екатеринбург: УГТУ-УПИ, 2016. 210 с.
7. Бойко И.П. Экономика для юристов / И.П. Бойко, Ф.Ф. Рыбаков. М.: Проспект, 2016. 272 с.
8. Бондарь А.В. Экономическая теория. Минск: БГЭУ, 2017. 477 с.
9. Овчаренко Н.А. Основы экономики, менеджмента и маркетинга. Учебник для бакалавров. М.: Дашков и Ко, 2020. 162 с.
10. Поликарпова Т.И. Основы экономики. Учебник и практикум для СПО. М.: Юрайт. 2019. 254 с.
11. Bakdash J. Z., Marusich L. R. Repeated measures correlation // Front. Psychol., 2017, vol. 8, 456. https://doi.org/10.3389/fpsyg.2017.00456
12. Berens, P. CircStat: A MATLAB toolbox for circular statistics // J. Stat. Softw., 2009, vol. 31(10), pp. 1-21.
13. McKinney W. Data structures for statistical computing in python. In S. van der Walt & J. Millman (Eds.) // Proceedings of the 9th python in science conference. 2010, pp. 51-56.
14. Pernet C.R., Wilcox R., Rousselet G.A. Robust correlation analyses: False positive and power validation using a new open source matlab toolbox // Front. Psychol., 2012, vol. 3, 606.
15. Rouder J. N., Speckman P. L., Sun D., Morey R. D., Iverson G. Bayesian t tests for accepting and rejecting the null hypothesis // Psychon. Bull. Rev., 2009, vol. 16(2), pp. 225-237.
References
1. Gokhberg G.S. Informatsionnye tekhnologii [Information Technology]. M.: Academia, 2018, 474 p.
2. Batovrina E.V. Teoriya ipraktika upravleniya: novyepodkhody [Theory and practice of management: new approaches]. M.: University Humanitarian Lyceum, 2016, 217 p.
3. Bardovskiy V.P. Ekonomika [Economy]. M.: Izd-vo Forum. Infra-M, 2016, 672 p.
4. Basovskiy, L.E. Ekonomicheskaya teoriya [Economic theory]. M.: IN-FRA-M, 2016, 224 p.
5. Beventer E. Osnovnye znaniyapo rynochnoy ekonomike v vos 'mi lektsiyakh [Basic knowledge of the market economy in eight lectures]. M., 2016, 224 p.
6. Bedrina E.B., Kozlova O.A. et al. Vvedenie v ekonomicheskuyu teoriyu [Introduction to economic theory]. Ekaterinburg: UGTU-UPI, 2016, 210 p.
7. Boyko I.P. Ekonomika dlya yuristov [Economics for lawyers] / I.P. Boyko, F.F. Rybakov. M.: Prospekt, 2016, 272 p.
8. Bondar' A.V. Ekonomicheskaya teoriya [Economic theory]. Minsk: BGEU, 2017, 477 p.
9. Ovcharenko N.A. Osnovy ekonomiki, menedzhmenta i marketinga. Uchebnik dlya bakalavrov [Fundamentals of economics, management and marketing. Textbook for bachelors]. M.: Dashkov i Ko, 2020, 162 p.
10. Polikarpova T.I. Osnovy ekonomiki. Uchebnik i praktikum dlya SPO [Fundamentals of Economics. Textbook and workshop for open source software]. M.: Yurayt, 2019, 254 p.
11. Bakdash J. Z., Marusich L. R. Repeated measures correlation. Front. Psychol., 2017, vol. 8, 456. https://doi.org/10.3389/fpsyg.2017.00456
12. Berens, P. CircStat: A MATLAB toolbox for circular statistics. J. Stat. Softw, 2009, vol. 31(10), pp. 1-21.
13. McKinney W. Data structures for statistical computing in python. In S. van der Walt & J. Millman (Eds.). Proceedings of the 9thpython in science conference, 2010, pp. 51-56.
14. Pernet C.R., Wilcox R., Rousselet G.A. Robust correlation analyses: False positive and power validation using a new open source matlab toolbox. Front. Psychol., 2012, vol. 3, 606.
15. Rouder J. N., Speckman P. L., Sun D., Morey R. D., Iverson G. Bayes-ian t tests for accepting and rejecting the null hypothesis. Psychon. Bull. Rev., 2009, vol. 16(2), pp. 225-237.
ДАННЫЕ ОБ АВТОРЕ Крапивин Роман Русланович, студент
Набережночелнинский филиал Казанского национального исследовательского технического университета имА.Н.Туполева ул. Академика Королева, 1, г. Набережные Челны, 423814, Российская Федерация Jerichotyrant1 @yandex. ru
Гареева Гульнара Альбертовна, заведующий кафедрой Информационных систем, канд. пед. наук, доцент Казанский национальный исследовательский технический университет им. А.Н. Туполева-КАИ ул. Академика Королева, 1, г. Набережные Челны, 423814, Российская Федерация gagareeva1977@mail. ru
Гумерова Гузель Равилевна, канд. экон. наук, доцент кафедры Информационных систем
Казанский национальный исследовательский технический
университет им. А.Н. Туполева-КАИ
ул. Академика Королева, 1, г. Набережные Челны, 423814,
Российская Федерация
gumerova_gr@mail. ru
Басыров Руслан Рамилевич, канд. техн. наук, доцент Набережночелнинский институт КФУ пр. Сююмбике, 10а, г. Набережные Челны, 423812, Российская Федерация Bars@mail.ru
DATA ABOUT THE AUTHORS Roman R. Krapivin, student
Naberezhnye Chelny branch of Kazan National Research Technical University named after A.N.Tupolev 1, Akademika Koroleva Str., Naberezhnye Chelny, 423814, Russian Federation Jerichotyrant1 @yandex. ru
Gulnara A. Gareeva, Head of the Department of Information Systems, Candidate of Pedagogical Sciences, Associate Professor
Kazan National Research Technical University named after A.N. Tupolev-KAI
1, Akademika Koroleva Str., Naberezhnye Chelny, 423814, Russian Federation gagareeva1977@mail. ru Scopus Author ID: 36801593200 ResearcherID: M-1728-2015 SPIN-code: 3279-8465
Guzel R. Gumerova, Candidate of Economy Sciences, Associate Professor Department of Information Systems Kazan National Research Technical University named after A.N. Tupolev-KAI
1, Akademika Koroleva Str., Naberezhnye Chelny, 423814, Russian Federation gumerova_gr@mail. ru
Ruslan R. Basyrov, Candidate of Technical Sciences, Associate Professor
Kazan National Research Technical University named after A.N. Tupolev-KAI
1, Akademika Koroleva Str., Naberezhnye Chelny, 423814, Russian Federation Bars@mail.ru
Scopus Author ID: 56669679000 ResearcherID: M-5875-2015 SPIN-code: 7989-1366
Поступила 02.06.2022 После рецензирования 20.06.2022 Принята 02.07.2022
Received 02.06.2022 Revised 20.06.2022 Accepted 02.07.2022