Блог им. dgoncharovskiy
import numpy as np
import pandas as pd
import datetime as dt
# Загрузка данных из csv
stock = pd.read_csv(«E:\\sberp.csv», index_col='Date', parse_dates=True)
stock.head()
# Сделать индексный столбец с датами обычным столбцом
stock.reset_index(level=0, inplace=True)
# Добавить отдельный столбец Dates с датами, чтобы учитывать дивиденды.
# Не знаю, как работать с датами, если те заданы в индексном столбце, каждый раз как пытался, выдавало ошибку.
stock['Dates'] = stock['Date']
# Вернуть столбец с датами Date в индексную позицию
stock.set_index('Date', inplace=True)
# Нам нужны только данные по закрытию на конец месяца. Оставляем только последний день месяца.
stock_resample = stock.resample('1m').last()
# Удаляем не нужные столбцы. Остаётся только Close.
stock_resample = stock_resample.drop(['Open', 'High', 'Low', 'Adj Close', 'Volume'], axis=1)
# Преобразуем столбец Dates в формат DateTime
stock_resample['Dates'] = pd.to_datetime(stock_resample['Dates'])
# Добавляем датафрейм с дивидендами
divs = {'Date': ['08.05.2009', '16.04.2010', '15.04.2011', '12.04.2012', '11.04.2013', '17.06.2014', '15.06.2015', '14.06.2016', '14.06.2017', '26.06.2018', '13.06.2019'], 'Divs': ['0.63','0.45','1.15','2.59','3.2','3.2','0.45','1.97','6.0','12.0','16.0']}dividend = pd.DataFrame(divs, columns = ['Date', 'Divs'])
# Основной код.
# Устанавливаем количество акций в начале равным 0
stocks_count_total = 0begin_sum = 20000 # Сумма на каждую покупку. Взял 20 000, чтобы покупать хотя бы 1 лот (100 акций)
summa = begin_sum # summa — Сумма, образующаяся от продажи всего пакета
sdacha = 0 # Сколько остается после покупки с учётом лотностиtotal_sum = 0 # Всего вложено
dividendy = 0 # Дивиденды накопительный итогround_up = -2
# Начинаем со второй строки
i = 1for i in range(len(stock_resample)-1):
if stock_resample['Close'][i] > stock_resample['Close'][i-1]: # Первый IF
# Если на счёте есть акции, то покупаем акции на сумму begin_sum рублей,
# если цена закрытия текущей недели больше цены закрытия предыдущей недели
# Добавляем все купленные акции к общему количеству акций stocks_count_total
if stocks_count_total > 0: # Второй IF
stocks_count = np.around((begin_sum + sdacha) / stock_resample['Close'][i] — (10**(-round_up)/2), round_up)
sdacha = (begin_sum + sdacha) — stocks_count * stock_resample['Close'][i]
stocks_count_total += stocks_count
total_sum += stocks_count * stock_resample['Close'][i]
print(«Докупка акций в портфель»)
print(f«Дата = {stock_resample['Dates'][i]}»)
print(f«Сумма = {summa}»)
print(f«Кол-во акций = {stocks_count_total}»)
print(f«Сдача = {sdacha}»)
print(f«Итерация = {i}»)
print("=====================")
else: # Второй ELSE к stocks_count_total > 0
# иначе, если на счёте нет акций, может быть две ситуации
# 1) это самая первая покупка, это проверяем через равенство Sum = BeginSum
if summa == begin_sum: # Третий IF
stocks_count = np.around((begin_sum + sdacha) / stock_resample['Close'][i] — (10**(-round_up)/2), round_up)
sdacha = (begin_sum + sdacha) — stocks_count * stock_resample['Close'][i] # вычисляем сдачу от покупки акций, т.к. можно купить только целое число лотов
stocks_count_total += stocks_count
total_sum += stocks_count * stock_resample['Close'][i]
print(«Первая покупка (countStocksTotal = 0 And Sum = BeginSum)»)
print(f«Дата = {stock_resample['Dates'][i]}»)
print(f«Сумма = {summa}»)
print(f«Кол-во акций = {stocks_count_total}»)
print(f«Сдача = {sdacha}»)
print(f«Итерация = {i}»)
print("=====================")
else: # Третий IF
# 2) это первая покупка после продажи, тогда BeginSum и Sum не равны
# и покупаем на сумму Sum, которую получили от продажи акций на предыдущем шаге
stocks_count = np.around(summa / stock_resample['Close'][i] — (10**(-round_up)/2), round_up)
sdacha = summa — stocks_count * stock_resample['Close'][i] # вычисляем сдачу от покупки акций, т.к. можно купить только целое число лотов
stocks_count_total += stocks_count
summa = 0print(«Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)]»)
print(f«Дата = {stock_resample['Dates'][i]}»)
print(f«Сумма = {summa}»)
print(f«Кол-во акций = {stocks_count_total}»)
print(f«Сдача = {sdacha}»)
print(f«Итерация = {i}»)
print("=====================")# Если цена закрытия текущей недели меньше цены закрытия предыдущей недели, продаём всю позицию
else: # Первый ELSE к stock_resample['Close'][i] > stock_resample['Close'][i-1]
# Проверяем, есть ли акции на счёте, если нет, то пропускаем шаг, если есть, то продаём всё по текущей
# и записываем количество денег от продажи в переменную summa
# Обнуляем количество акций
if stocks_count_total > 0: # Четвертый if
summa = stocks_count_total * stock_resample['Close'][i] + sdacha # здесь общая сумма не будет равна начальной сумме BeginSum# Добавляем дивиденды, если на дату отсечки были акции в портфеле
# Разбивка для дивидендов
for j in range(0, dividend.Divs.count()):
if ((dividend.Date[j].month == stock_resample.Dates[i].month)
& (dividend.Date[j].year == stock_resample.Dates[i].year)):
summa = summa + stocks_count_total * float(dividend.Divs[j]) * 0.87
dividendy = dividendy + stocks_count_total * float(dividend.Divs[j]) * 0.87
print (f«Пришли дивиденды за {dividend.Date[j].year} год. {dividend.Divs[j]} на акцию. Всего дивидендов {stocks_count_total * float(dividend.Divs[j]) * 0.87}»)
# Обнуляем количество акций после того, как посчитали дивиденды
stocks_count_total = 0
print(«Продажа акций из портфеля»)
print(f«Дата = {stock_resample['Dates'][i]}»)
print(f«Сумма = {summa}»)
print(f«Кол-во акций = {stocks_count_total}»)
print(f«Сдача = {sdacha}»)
print(f«Итерация = {i}»)
print("=====================")print("=======Итого========")
print(f«Кол-во акций = {stocks_count_total}»)
print(f«Сумма = {summa}»)
print(f«Сдача = {sdacha}»)
print(f«Всего вложено = {total_sum}»)
print(f«Всего дивидендов (с учётом налога) = {dividendy}»)
print(f«Отношение дивидендов к всего вложено (в процентах) = {dividendy * 100 / total_sum}»)
print(f«Отношение итого к всего вложено = {(stock_resample['Close'].iloc[-1] * stocks_count_total) / total_sum}»)
Первая покупка (countStocksTotal = 0 And Sum = BeginSum) Дата = 2012-01-31 00:00:00 Сумма = 20000 Кол-во акций = 300.0 Сдача = 200.0 Итерация = 2 ===================== Докупка акций в портфель Дата = 2012-02-29 00:00:00 Сумма = 20000 Кол-во акций = 500.0 Сдача = 5067.9992 Итерация = 3 ===================== Докупка акций в портфель Дата = 2012-03-30 00:00:00 Сумма = 20000 Кол-во акций = 800.0 Сдача = 1568.9985999999953 Итерация = 4 ===================== Пришли дивиденды за 2012 год. 2.59 на акцию. Всего дивидендов 1802.64 Продажа акций из портфеля Дата = 2012-04-27 00:00:00 Сумма = 58155.64099999999 Кол-во акций = 0 Сдача = 1568.9985999999953 Итерация = 5 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2012-06-29 00:00:00 Сумма = 0 Кол-во акций = 900.0 Сдача = 1887.6409999999887 Итерация = 7 ===================== Докупка акций в портфель Дата = 2012-07-31 00:00:00 Сумма = 0 Кол-во акций = 1200.0 Сдача = 2873.640699999989 Итерация = 8 ===================== Докупка акций в портфель Дата = 2012-08-31 00:00:00 Сумма = 0 Кол-во акций = 1500.0 Сдача = 2383.6397999999863 Итерация = 9 ===================== Продажа акций из портфеля Дата = 2012-09-28 00:00:00 Сумма = 101758.63979999999 Кол-во акций = 0 Сдача = 2383.6397999999863 Итерация = 10 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2012-12-28 00:00:00 Сумма = 0 Кол-во акций = 1500.0 Сдача = 808.6352999999799 Итерация = 13 ===================== Докупка акций в портфель Дата = 2013-01-31 00:00:00 Сумма = 0 Кол-во акций = 1700.0 Сдача = 5186.635099999981 Итерация = 14 ===================== Продажа акций из портфеля Дата = 2013-02-28 00:00:00 Сумма = 131564.62829999998 Кол-во акций = 0 Сдача = 5186.635099999981 Итерация = 15 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2013-03-29 00:00:00 Сумма = 0 Кол-во акций = 1700.0 Сдача = 3860.6231999999873 Итерация = 16 ===================== Пришли дивиденды за 2013 год. 3.2 на акцию. Всего дивидендов 4732.8 Продажа акций из портфеля Дата = 2013-04-30 00:00:00 Сумма = 131639.41809999998 Кол-во акций = 0 Сдача = 3860.6231999999873 Итерация = 17 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2013-05-31 00:00:00 Сумма = 0 Кол-во акций = 1800.0 Сдача = 959.4216999999771 Итерация = 18 ===================== Продажа акций из портфеля Дата = 2013-06-28 00:00:00 Сумма = 126887.41989999996 Кол-во акций = 0 Сдача = 959.4216999999771 Итерация = 19 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2013-07-31 00:00:00 Сумма = 0 Кол-во акций = 1700.0 Сдача = 33.414799999969546 Итерация = 20 ===================== Продажа акций из портфеля Дата = 2013-08-30 00:00:00 Сумма = 119033.41479999997 Кол-во акций = 0 Сдача = 33.414799999969546 Итерация = 21 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2013-09-30 00:00:00 Сумма = 0 Кол-во акций = 1500.0 Сдача = 6413.411799999958 Итерация = 22 ===================== Докупка акций в портфель Дата = 2013-10-31 00:00:00 Сумма = 0 Кол-во акций = 1800.0 Сдача = 1564.411199999955 Итерация = 23 ===================== Докупка акций в портфель Дата = 2013-11-29 00:00:00 Сумма = 0 Кол-во акций = 2000.0 Сдача = 4624.411799999954 Итерация = 24 ===================== Продажа акций из портфеля Дата = 2013-12-30 00:00:00 Сумма = 164684.40979999996 Кол-во акций = 0 Сдача = 4624.411799999954 Итерация = 25 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2014-02-28 00:00:00 Сумма = 0 Кол-во акций = 2100.0 Сдача = 6134.409799999965 Итерация = 27 ===================== Продажа акций из портфеля Дата = 2014-03-31 00:00:00 Сумма = 147464.41609999997 Кол-во акций = 0 Сдача = 6134.409799999965 Итерация = 28 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2014-05-30 00:00:00 Сумма = 0 Кол-во акций = 2100.0 Сдача = 3299.4118999999773 Итерация = 30 ===================== Докупка акций в портфель Дата = 2014-06-30 00:00:00 Сумма = 0 Кол-во акций = 2400.0 Сдача = 2599.4118999999773 Итерация = 31 ===================== Продажа акций из портфеля Дата = 2014-07-31 00:00:00 Сумма = 139759.41669999997 Кол-во акций = 0 Сдача = 2599.4118999999773 Итерация = 32 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2014-09-30 00:00:00 Сумма = 0 Кол-во акций = 2400.0 Сдача = 1159.4166999999725 Итерация = 34 ===================== Продажа акций из портфеля Дата = 2014-10-31 00:00:00 Сумма = 137719.42149999997 Кол-во акций = 0 Сдача = 1159.4166999999725 Итерация = 35 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2015-01-30 00:00:00 Сумма = 0 Кол-во акций = 3100.0 Сдача = 1815.4214999999676 Итерация = 38 ===================== Докупка акций в портфель Дата = 2015-02-27 00:00:00 Сумма = 0 Кол-во акций = 3500.0 Сдача = 335.4210999999668 Итерация = 39 ===================== Продажа акций из портфеля Дата = 2015-03-31 00:00:00 Сумма = 160040.42459999997 Кол-во акций = 0 Сдача = 335.4210999999668 Итерация = 40 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2015-04-30 00:00:00 Сумма = 0 Кол-во акций = 3200.0 Сдача = 40.42459999996936 Итерация = 41 ===================== Продажа акций из портфеля Дата = 2015-05-29 00:00:00 Сумма = 154440.42459999997 Кол-во акций = 0 Сдача = 40.42459999996936 Итерация = 42 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2015-06-30 00:00:00 Сумма = 0 Кол-во акций = 3100.0 Сдача = 4648.424599999969 Итерация = 43 ===================== Докупка акций в портфель Дата = 2015-07-31 00:00:00 Сумма = 0 Кол-во акций = 3500.0 Сдача = 4092.42499999997 Итерация = 44 ===================== Докупка акций в портфель Дата = 2015-08-31 00:00:00 Сумма = 0 Кол-во акций = 3900.0 Сдача = 2356.42499999997 Итерация = 45 ===================== Докупка акций в портфель Дата = 2015-09-30 00:00:00 Сумма = 0 Кол-во акций = 4200.0 Сдача = 4941.42529999997 Итерация = 46 ===================== Докупка акций в портфель Дата = 2015-10-30 00:00:00 Сумма = 0 Кол-во акций = 4500.0 Сдача = 4394.425899999969 Итерация = 47 ===================== Докупка акций в портфель Дата = 2015-11-30 00:00:00 Сумма = 0 Кол-во акций = 4800.0 Сдача = 1534.426799999972 Итерация = 48 ===================== Докупка акций в портфель Дата = 2015-12-30 00:00:00 Сумма = 0 Кол-во акций = 5000.0 Сдача = 6234.426799999972 Итерация = 49 ===================== Продажа акций из портфеля Дата = 2016-01-29 00:00:00 Сумма = 348734.42679999996 Кол-во акций = 0 Сдача = 6234.426799999972 Итерация = 50 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2016-02-29 00:00:00 Сумма = 0 Кол-во акций = 4500.0 Сдача = 2684.4177999999374 Итерация = 51 ===================== Докупка акций в портфель Дата = 2016-03-31 00:00:00 Сумма = 0 Кол-во акций = 4700.0 Сдача = 6866.418599999937 Итерация = 52 ===================== Докупка акций в портфель Дата = 2016-04-29 00:00:00 Сумма = 0 Кол-во акций = 5000.0 Сдача = 1666.418599999939 Итерация = 53 ===================== Докупка акций в портфель Дата = 2016-05-31 00:00:00 Сумма = 0 Кол-во акций = 5200.0 Сдача = 3366.418599999939 Итерация = 54 ===================== Пришли дивиденды за 2016 год. 1.97 на акцию. Всего дивидендов 8912.28 Продажа акций из портфеля Дата = 2016-06-30 00:00:00 Сумма = 480278.69859999995 Кол-во акций = 0 Сдача = 3366.418599999939 Итерация = 55 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2016-07-29 00:00:00 Сумма = 0 Кол-во акций = 4800.0 Сдача = 6038.6841999999015 Итерация = 56 ===================== Докупка акций в портфель Дата = 2016-08-31 00:00:00 Сумма = 0 Кол-во акций = 5000.0 Сдача = 5644.683999999903 Итерация = 57 ===================== Докупка акций в портфель Дата = 2016-09-30 00:00:00 Сумма = 0 Кол-во акций = 5200.0 Сдача = 4480.683999999903 Итерация = 58 ===================== Докупка акций в портфель Дата = 2016-10-31 00:00:00 Сумма = 0 Кол-во акций = 5400.0 Сдача = 2162.6847999999045 Итерация = 59 ===================== Докупка акций в портфель Дата = 2016-11-30 00:00:00 Сумма = 0 Кол-во акций = 5500.0 Сдача = 10554.684599999904 Итерация = 60 ===================== Докупка акций в портфель Дата = 2016-12-30 00:00:00 Сумма = 0 Кол-во акций = 5700.0 Сдача = 4604.684599999906 Итерация = 61 ===================== Продажа акций из портфеля Дата = 2017-01-31 00:00:00 Сумма = 737624.7187999999 Кол-во акций = 0 Сдача = 4604.684599999906 Итерация = 62 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2017-03-31 00:00:00 Сумма = 0 Кол-во акций = 6100.0 Сдача = 744.700499999919 Итерация = 64 ===================== Докупка акций в портфель Дата = 2017-04-28 00:00:00 Сумма = 0 Кол-во акций = 6200.0 Сдача = 8162.700499999919 Итерация = 65 ===================== Продажа акций из портфеля Дата = 2017-05-31 00:00:00 Сумма = 781240.7128999999 Кол-во акций = 0 Сдача = 8162.700499999919 Итерация = 66 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2017-07-31 00:00:00 Сумма = 0 Кол-во акций = 5700.0 Сдача = 11797.684399999911 Итерация = 68 ===================== Докупка акций в портфель Дата = 2017-08-31 00:00:00 Сумма = 0 Кол-во акций = 5900.0 Сдача = 201.68519999991258 Итерация = 69 ===================== Продажа акций из портфеля Дата = 2017-09-29 00:00:00 Сумма = 918831.6675 Кол-во акций = 0 Сдача = 201.68519999991258 Итерация = 70 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2017-10-31 00:00:00 Сумма = 0 Кол-во акций = 5700.0 Сдача = 15267.644699999946 Итерация = 71 ===================== Докупка акций в портфель Дата = 2017-11-30 00:00:00 Сумма = 0 Кол-во акций = 5800.0 Сдача = 16814.644799999947 Итерация = 72 ===================== Докупка акций в портфель Дата = 2017-12-29 00:00:00 Сумма = 0 Кол-во акций = 5900.0 Сдача = 17914.64479999995 Итерация = 73 ===================== Докупка акций в портфель Дата = 2018-01-31 00:00:00 Сумма = 0 Кол-во акций = 6000.0 Сдача = 16165.644299999953 Итерация = 74 ===================== Докупка акций в портфель Дата = 2018-02-28 00:00:00 Сумма = 0 Кол-во акций = 6100.0 Сдача = 13465.644299999956 Итерация = 75 ===================== Продажа акций из портфеля Дата = 2018-03-30 00:00:00 Сумма = 1319719.6382000002 Кол-во акций = 0 Сдача = 13465.644299999956 Итерация = 76 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2018-09-28 00:00:00 Сумма = 0 Кол-во акций = 7700.0 Сдача = 2634.6151000000536 Итерация = 82 ===================== Продажа акций из портфеля Дата = 2018-10-31 00:00:00 Сумма = 1260044.6382000002 Кол-во акций = 0 Сдача = 2634.6151000000536 Итерация = 83 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2018-11-30 00:00:00 Сумма = 0 Кол-во акций = 7400.0 Сдача = 9444.638200000161 Итерация = 84 ===================== Продажа акций из портфеля Дата = 2018-12-28 00:00:00 Сумма = 1230962.6900000002 Кол-во акций = 0 Сдача = 9444.638200000161 Итерация = 85 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2019-01-31 00:00:00 Сумма = 0 Кол-во акций = 6600.0 Сдача = 2636.6834000002127 Итерация = 86 ===================== Продажа акций из портфеля Дата = 2019-02-28 00:00:00 Сумма = 1191626.6438000002 Кол-во акций = 0 Сдача = 2636.6834000002127 Итерация = 87 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2019-03-29 00:00:00 Сумма = 0 Кол-во акций = 6200.0 Сдача = 18772.656200000318 Итерация = 88 ===================== Докупка акций в портфель Дата = 2019-04-30 00:00:00 Сумма = 0 Кол-во акций = 6300.0 Сдача = 18933.65630000032 Итерация = 89 ===================== Докупка акций в портфель Дата = 2019-05-31 00:00:00 Сумма = 0 Кол-во акций = 6400.0 Сдача = 18382.65680000032 Итерация = 90 ===================== Докупка акций в портфель Дата = 2019-06-28 00:00:00 Сумма = 0 Кол-во акций = 6500.0 Сдача = 17822.656200000318 Итерация = 91 ===================== Продажа акций из портфеля Дата = 2019-07-31 00:00:00 Сумма = 1336672.6172000002 Кол-во акций = 0 Сдача = 17822.656200000318 Итерация = 92 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2019-09-30 00:00:00 Сумма = 0 Кол-во акций = 6600.0 Сдача = 10072.617200000212 Итерация = 94 ===================== Докупка акций в портфель Дата = 2019-10-31 00:00:00 Сумма = 0 Кол-во акций = 6700.0 Сдача = 8817.616900000216 Итерация = 95 ===================== Продажа акций из портфеля Дата = 2019-11-29 00:00:00 Сумма = 1432567.6169000003 Кол-во акций = 0 Сдача = 8817.616900000216 Итерация = 96 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2019-12-30 00:00:00 Сумма = 0 Кол-во акций = 6200.0 Сдача = 17107.59830000042 Итерация = 97 ===================== Продажа акций из портфеля Дата = 2020-01-31 00:00:00 Сумма = 1425127.6355000006 Кол-во акций = 0 Сдача = 17107.59830000042 Итерация = 98 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2020-04-30 00:00:00 Сумма = 0 Кол-во акций = 8000.0 Сдача = 7527.659500000533 Итерация = 101 ===================== =======Итого======== Кол-во акций = 8000.0 Сумма = 0 Сдача = 7527.659500000533 Всего вложено = 684876.9997000002 Всего дивидендов (с учётом налога) = 15447.720000000001 Отношение дивидендов к всего вложено (в процентах) = 2.2555466173877408 Отношение итого к всего вложено = 2.0778038109373522
Первая покупка (countStocksTotal = 0 And Sum = BeginSum) Дата = 2010-07-30 00:00:00 Сумма = 20000 Кол-во акций = 120.0 Сдача = 473.5998800000016 Итерация = 4 ===================== Продажа акций из портфеля Дата = 2010-08-31 00:00:00 Сумма = 19498.39904 Кол-во акций = 0 Сдача = 473.5998800000016 Итерация = 5 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2010-09-30 00:00:00 Сумма = 0 Кол-во акций = 120.0 Сдача = 325.99856 Итерация = 6 ===================== Докупка акций в портфель Дата = 2010-10-29 00:00:00 Сумма = 0 Кол-во акций = 240.0 Сдача = 35.19904000000315 Итерация = 7 ===================== Докупка акций в портфель Дата = 2010-11-30 00:00:00 Сумма = 0 Кол-во акций = 350.0 Сдача = 852.2991500000026 Итерация = 8 ===================== Докупка акций в портфель Дата = 2010-12-30 00:00:00 Сумма = 0 Кол-во акций = 450.0 Сдача = 1492.2985500000032 Итерация = 9 ===================== Докупка акций в портфель Дата = 2011-01-31 00:00:00 Сумма = 0 Кол-во акций = 550.0 Сдача = 1776.2981500000024 Итерация = 10 ===================== Докупка акций в портфель Дата = 2011-02-28 00:00:00 Сумма = 0 Кол-во акций = 650.0 Сдача = 621.2978500000063 Итерация = 11 ===================== Докупка акций в портфель Дата = 2011-03-31 00:00:00 Сумма = 0 Кол-во акций = 730.0 Сдача = 2273.297370000004 Итерация = 12 ===================== Докупка акций в портфель Дата = 2011-04-29 00:00:00 Сумма = 0 Кол-во акций = 820.0 Сдача = 1416.6969200000058 Итерация = 13 ===================== Пришли дивиденды за 2011 год. 3.85 на акцию. Всего дивидендов 2746.59 Продажа акций из портфеля Дата = 2011-05-31 00:00:00 Сумма = 172058.28692 Кол-во акций = 0 Сдача = 1416.6969200000058 Итерация = 14 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2011-10-31 00:00:00 Сумма = 0 Кол-во акций = 950.0 Сдача = 1580.789770000003 Итерация = 19 ===================== Продажа акций из портфеля Дата = 2011-11-30 00:00:00 Сумма = 168210.78407 Кол-во акций = 0 Сдача = 1580.789770000003 Итерация = 20 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2012-01-31 00:00:00 Сумма = 0 Кол-во акций = 910.0 Сдача = 952.7813399999868 Итерация = 22 ===================== Докупка акций в портфель Дата = 2012-02-29 00:00:00 Сумма = 0 Кол-во акций = 1010.0 Сдача = 1593.7817399999876 Итерация = 23 ===================== Продажа акций из портфеля Дата = 2012-03-30 00:00:00 Сумма = 184151.28173999998 Кол-во акций = 0 Сдача = 1593.7817399999876 Итерация = 24 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2012-06-29 00:00:00 Сумма = 0 Кол-во акций = 1190.0 Сдача = 903.1757899999793 Итерация = 27 ===================== Продажа акций из портфеля Дата = 2012-07-31 00:00:00 Сумма = 180295.67578999998 Кол-во акций = 0 Сдача = 903.1757899999793 Итерация = 28 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2012-08-31 00:00:00 Сумма = 0 Кол-во акций = 1140.0 Сдача = 859.6826299999957 Итерация = 29 ===================== Докупка акций в портфель Дата = 2012-09-28 00:00:00 Сумма = 0 Кол-во акций = 1270.0 Сдача = 352.1826299999957 Итерация = 30 ===================== Продажа акций из портфеля Дата = 2012-10-31 00:00:00 Сумма = 184375.17500999998 Кол-во акций = 0 Сдача = 352.1826299999957 Итерация = 31 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2012-12-28 00:00:00 Сумма = 0 Кол-во акций = 1280.0 Сдача = 439.1788499999966 Итерация = 33 ===================== Продажа акций из портфеля Дата = 2013-01-31 00:00:00 Сумма = 182314.37372999996 Кол-во акций = 0 Сдача = 439.1788499999966 Итерация = 34 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2013-07-31 00:00:00 Сумма = 0 Кол-во акций = 1410.0 Сдача = 974.27231999996 Итерация = 40 ===================== Докупка акций в портфель Дата = 2013-08-30 00:00:00 Сумма = 0 Кол-во акций = 1560.0 Сдача = 1189.2732199999627 Итерация = 41 ===================== Докупка акций в портфель Дата = 2013-09-30 00:00:00 Сумма = 0 Кол-во акций = 1700.0 Сдача = 1044.6733599999643 Итерация = 42 ===================== Докупка акций в портфель Дата = 2013-10-31 00:00:00 Сумма = 0 Кол-во акций = 1830.0 Сдача = 1482.2738799999643 Итерация = 43 ===================== Продажа акций из портфеля Дата = 2013-11-29 00:00:00 Сумма = 262916.07571 Кол-во акций = 0 Сдача = 1482.2738799999643 Итерация = 44 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2014-01-31 00:00:00 Сумма = 0 Кол-во акций = 1810.0 Сдача = 375.57027999998536 Итерация = 46 ===================== Продажа акций из портфеля Дата = 2014-02-28 00:00:00 Сумма = 253775.57027999999 Кол-во акций = 0 Сдача = 375.57027999998536 Итерация = 47 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2014-05-30 00:00:00 Сумма = 0 Кол-во акций = 1790.0 Сдача = 132.5756499999843 Итерация = 50 ===================== Докупка акций в портфель Дата = 2014-06-30 00:00:00 Сумма = 0 Кол-во акций = 1920.0 Сдача = 767.7747399999826 Итерация = 51 ===================== Пришли дивиденды за 2014 год. 7.2 на акцию. Всего дивидендов 12026.88 Продажа акций из портфеля Дата = 2014-07-31 00:00:00 Сумма = 266234.65473999997 Кол-во акций = 0 Сдача = 767.7747399999826 Итерация = 52 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2014-09-30 00:00:00 Сумма = 0 Кол-во акций = 1930.0 Сдача = 87.66631999996025 Итерация = 54 ===================== Докупка акций в портфель Дата = 2014-10-31 00:00:00 Сумма = 0 Кол-во акций = 2070.0 Сдача = 277.66631999996025 Итерация = 55 ===================== Докупка акций в портфель Дата = 2014-11-28 00:00:00 Сумма = 0 Кол-во акций = 2210.0 Сдача = 277.2661799999587 Итерация = 56 ===================== Продажа акций из портфеля Дата = 2014-12-30 00:00:00 Сумма = 288262.36176 Кол-во акций = 0 Сдача = 277.2661799999587 Итерация = 57 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2015-01-30 00:00:00 Сумма = 0 Кол-во акций = 2000.0 Сдача = 622.3477599999751 Итерация = 58 ===================== Докупка акций в портфель Дата = 2015-02-27 00:00:00 Сумма = 0 Кол-во акций = 2130.0 Сдача = 738.8481499999762 Итерация = 59 ===================== Продажа акций из портфеля Дата = 2015-03-31 00:00:00 Сумма = 296595.83537 Кол-во акций = 0 Сдача = 738.8481499999762 Итерация = 60 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2015-04-30 00:00:00 Сумма = 0 Кол-во акций = 1930.0 Сдача = 340.83536999998614 Итерация = 61 ===================== Продажа акций из портфеля Дата = 2015-05-29 00:00:00 Сумма = 268610.83537 Кол-во акций = 0 Сдача = 340.83536999998614 Итерация = 62 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2015-06-30 00:00:00 Сумма = 0 Кол-во акций = 1840.0 Сдача = 246.824329999974 Итерация = 63 ===================== Пришли дивиденды за 2015 год. 7.2 на акцию. Всего дивидендов 11525.76 Продажа акций из портфеля Дата = 2015-07-31 00:00:00 Сумма = 273972.58433 Кол-во акций = 0 Сдача = 246.824329999974 Итерация = 64 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2015-08-31 00:00:00 Сумма = 0 Кол-во акций = 1840.0 Сдача = 1302.9806499999831 Итерация = 65 ===================== Продажа акций из портфеля Дата = 2015-09-30 00:00:00 Сумма = 248874.98617 Кол-во акций = 0 Сдача = 1302.9806499999831 Итерация = 66 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2015-10-30 00:00:00 Сумма = 0 Кол-во акций = 1830.0 Сдача = 452.4861699999892 Итерация = 67 ===================== Докупка акций в портфель Дата = 2015-11-30 00:00:00 Сумма = 0 Кол-во акций = 1970.0 Сдача = 1132.4861699999892 Итерация = 68 ===================== Продажа акций из портфеля Дата = 2015-12-30 00:00:00 Сумма = 269229.77829 Кол-во акций = 0 Сдача = 1132.4861699999892 Итерация = 69 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2016-01-29 00:00:00 Сумма = 0 Кол-во акций = 1970.0 Сдача = 127.7664699999732 Итерация = 70 ===================== Докупка акций в портфель Дата = 2016-02-29 00:00:00 Сумма = 0 Кол-во акций = 2110.0 Сдача = 331.7673099999738 Итерация = 71 ===================== Докупка акций в портфель Дата = 2016-03-31 00:00:00 Сумма = 0 Кол-во акций = 2240.0 Сдача = 1124.2673099999738 Итерация = 72 ===================== Докупка акций в портфель Дата = 2016-04-29 00:00:00 Сумма = 0 Кол-во акций = 2360.0 Сдача = 907.8671899999754 Итерация = 73 ===================== Продажа акций из портфеля Дата = 2016-05-31 00:00:00 Сумма = 344287.86718999996 Кол-во акций = 0 Сдача = 907.8671899999754 Итерация = 74 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2016-10-31 00:00:00 Сумма = 0 Кол-во акций = 2470.0 Сдача = 1353.0770699999994 Итерация = 79 ===================== Докупка акций в портфель Дата = 2016-11-30 00:00:00 Сумма = 0 Кол-во акций = 2610.0 Сдача = 521.0766499999991 Итерация = 80 ===================== Докупка акций в портфель Дата = 2016-12-30 00:00:00 Сумма = 0 Кол-во акций = 2740.0 Сдача = 429.576259999998 Итерация = 81 ===================== Продажа акций из портфеля Дата = 2017-01-31 00:00:00 Сумма = 410881.58448 Кол-во акций = 0 Сдача = 429.576259999998 Итерация = 82 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2017-04-28 00:00:00 Сумма = 0 Кол-во акций = 3000.0 Сдача = 631.5844800000195 Итерация = 85 ===================== Продажа акций из портфеля Дата = 2017-05-31 00:00:00 Сумма = 361471.58148000005 Кол-во акций = 0 Сдача = 631.5844800000195 Итерация = 86 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2017-08-31 00:00:00 Сумма = 0 Кол-во акций = 3060.0 Сдача = 483.37842000008095 Итерация = 89 ===================== Докупка акций в портфель Дата = 2017-09-29 00:00:00 Сумма = 0 Кол-во акций = 3220.0 Сдача = 931.3789000000834 Итерация = 90 ===================== Докупка акций в портфель Дата = 2017-10-31 00:00:00 Сумма = 0 Кол-во акций = 3380.0 Сдача = 787.3785800000842 Итерация = 91 ===================== Докупка акций в портфель Дата = 2017-11-30 00:00:00 Сумма = 0 Кол-во акций = 3530.0 Сдача = 964.8794800000869 Итерация = 92 ===================== Продажа акций из портфеля Дата = 2017-12-29 00:00:00 Сумма = 461629.87948000006 Кол-во акций = 0 Сдача = 964.8794800000869 Итерация = 93 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2018-01-31 00:00:00 Сумма = 0 Кол-во акций = 3220.0 Сдача = 10.676260000036564 Итерация = 94 ===================== Продажа акций из портфеля Дата = 2018-02-28 00:00:00 Сумма = 460985.8891400001 Кол-во акций = 0 Сдача = 10.676260000036564 Итерация = 95 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2018-04-30 00:00:00 Сумма = 0 Кол-во акций = 3150.0 Сдача = 1306.4111900001299 Итерация = 97 ===================== Продажа акций из портфеля Дата = 2018-05-31 00:00:00 Сумма = 458056.41119000013 Кол-во акций = 0 Сдача = 1306.4111900001299 Итерация = 98 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2018-07-31 00:00:00 Сумма = 0 Кол-во акций = 3180.0 Сдача = 804.2334500001743 Итерация = 100 ===================== Докупка акций в портфель Дата = 2018-08-31 00:00:00 Сумма = 0 Кол-во акций = 3310.0 Сдача = 1310.7338400001754 Итерация = 101 ===================== Докупка акций в портфель Дата = 2018-09-28 00:00:00 Сумма = 0 Кол-во акций = 3440.0 Сдача = 171.43371000017214 Итерация = 102 ===================== Продажа акций из портфеля Дата = 2018-10-31 00:00:00 Сумма = 534988.2371500001 Кол-во акций = 0 Сдача = 171.43371000017214 Итерация = 103 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2018-11-30 00:00:00 Сумма = 0 Кол-во акций = 3310.0 Сдача = 1118.3603200000944 Итерация = 104 ===================== Продажа акций из портфеля Дата = 2018-12-28 00:00:00 Сумма = 507548.3603200001 Кол-во акций = 0 Сдача = 1118.3603200000944 Итерация = 105 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2019-01-31 00:00:00 Сумма = 0 Кол-во акций = 3110.0 Сдача = 1178.1385500000906 Итерация = 106 ===================== Продажа акций из портфеля Дата = 2019-02-28 00:00:00 Сумма = 495637.05410000007 Кол-во акций = 0 Сдача = 1178.1385500000906 Итерация = 107 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2019-04-30 00:00:00 Сумма = 0 Кол-во акций = 3020.0 Сдача = 508.0631600000779 Итерация = 109 ===================== Докупка акций в портфель Дата = 2019-05-31 00:00:00 Сумма = 0 Кол-во акций = 3110.0 Сдача = 1149.062620000077 Итерация = 110 ===================== Докупка акций в портфель Дата = 2019-06-28 00:00:00 Сумма = 0 Кол-во акций = 3200.0 Сдача = 194.36244000007719 Итерация = 111 ===================== Докупка акций в портфель Дата = 2019-07-31 00:00:00 Сумма = 0 Кол-во акций = 3280.0 Сдача = 1242.3629200000796 Итерация = 112 ===================== Продажа акций из портфеля Дата = 2019-08-30 00:00:00 Сумма = 762694.3432400001 Кол-во акций = 0 Сдача = 1242.3629200000796 Итерация = 113 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2019-10-31 00:00:00 Сумма = 0 Кол-во акций = 2930.0 Сдача = 894.3432400000747 Итерация = 115 ===================== Продажа акций из портфеля Дата = 2019-11-29 00:00:00 Сумма = 755486.5696100001 Кол-во акций = 0 Сдача = 894.3432400000747 Итерация = 116 ===================== Покупка после продажи [else (countStocksTotal = 0 And Sum = BeginSum)] Дата = 2020-04-30 00:00:00 Сумма = 0 Кол-во акций = 3970.0 Сдача = 1186.5696100001223 Итерация = 121 ===================== =======Итого======== Кол-во акций = 3970.0 Сумма = 0 Сдача = 1186.5696100001223 Всего вложено = 615733.29947 Всего дивидендов (с учётом налога) = 26299.23 Отношение дивидендов к всего вложено (в процентах) = 4.27120476067112 Отношение итого к всего вложено = 1.2685002102733522
Газпром, оценка в деньгах.
Газпром, количество акций.
Сбербанк пр., оценка в деньгах.
Сбербанк пр., количество акций
1. Код и небольшие файлы с данными удобнее выкладывать на GitHub — он нормально отображает py и ipynb (включая графики)
2. Не рекомендуется использовать в pandas операции с флагом inplace=True — часто это приводит к глюкам
3. Когда вы хотите оставить один столбец, лучше не выкидывать все остальные stock_resample.drop(['Open', 'High', 'Low', 'Adj Close', 'Volume'], axis=1), а оставить нужный stock_resample['Close']
В тех лекциях, что смотрел, показывали делать именно с inplace=True, теперь буду знать, что так лучше не делать.