finance-api/notebooks/sma.ipynb
2024-07-01 21:46:49 +00:00

128 KiB
Raw Blame History

In [25]:
import sys
import os


import pandas as pd
import matplotlib.pyplot as plt


# Prevent scientific notation in pandas output.
pd.set_option('display.float_format', lambda x: '%.3f' % x)


# Add the parent directory to sys.path
sys.path.insert(0, os.path.abspath(os.path.join(os.getcwd(), '..')))


from database import Database
from model.ticker import Ticker


DB_PATH = "sqlite:///../finance.db"


db = Database(database_url=DB_PATH)
In [26]:
year = 2010
year_2010 = f"SELECT * FROM sma WHERE strftime('%Y', sma.date) = '{year}'"
In [27]:
year = 2000
year_2000 = f"SELECT * FROM sma WHERE strftime('%Y', sma.date) = '{year}'"
In [28]:
year = 2020
year_2020 = f"SELECT * FROM sma WHERE strftime('%Y', sma.date) = '{year}'"
In [29]:
df_2010 = pd.read_sql(year_2010, db.engine)
df_2010['date'] = pd.to_datetime(df_2010['date'], format='%Y-%m-%d %H:%M:%S.%f')
In [30]:
df_2000 = pd.read_sql(year_2000, db.engine)
df_2000['date'] = pd.to_datetime(df_2000['date'], format='%Y-%m-%d %H:%M:%S.%f')
In [31]:
df_2020 = pd.read_sql(year_2020, db.engine)
df_2020['date'] = pd.to_datetime(df_2020['date'], format='%Y-%m-%d %H:%M:%S.%f')
In [32]:
symbol = 'HPAR-fake'

hpar_2000 = df_2000[df_2000['symbol'] == symbol]
hpar_2010 = df_2010[df_2010['symbol'] == symbol]
hpar_2020 = df_2020[df_2020['symbol'] == symbol]
In [33]:
hpar_2000
Out[33]:
id date symbol sma_5 sma_10 sma_20 sma_50 sma_100 sma_200
0 1 2000-01-03 HPAR-fake NaN NaN NaN NaN NaN NaN
1 2 2000-01-04 HPAR-fake NaN NaN NaN NaN NaN NaN
2 3 2000-01-05 HPAR-fake NaN NaN NaN NaN NaN NaN
3 4 2000-01-06 HPAR-fake NaN NaN NaN NaN NaN NaN
4 5 2000-01-07 HPAR-fake 99.581 NaN NaN NaN NaN NaN
... ... ... ... ... ... ... ... ... ...
255 256 2000-12-25 HPAR-fake 59.474 59.585 60.467 63.515 67.022 73.605
256 257 2000-12-26 HPAR-fake 59.345 59.454 60.366 63.277 66.897 73.417
257 258 2000-12-27 HPAR-fake 59.264 59.338 60.278 63.063 66.769 73.238
258 259 2000-12-28 HPAR-fake 59.412 59.436 60.205 62.887 66.644 73.064
259 260 2000-12-29 HPAR-fake 59.502 59.465 60.078 62.721 66.512 72.893

260 rows × 9 columns

In [34]:
hpar_2010
Out[34]:
id date symbol sma_5 sma_10 sma_20 sma_50 sma_100 sma_200
0 2610 2010-01-01 HPAR-fake 51.884 52.313 52.161 53.432 51.925 53.475
1 2611 2010-01-04 HPAR-fake 51.872 52.260 52.077 53.417 51.946 53.449
2 2612 2010-01-05 HPAR-fake 51.959 52.312 52.072 53.405 51.973 53.428
3 2613 2010-01-06 HPAR-fake 52.078 52.271 52.069 53.409 52.005 53.407
4 2614 2010-01-07 HPAR-fake 52.306 52.229 52.119 53.403 52.030 53.391
... ... ... ... ... ... ... ... ... ...
256 2866 2010-12-27 HPAR-fake 49.988 50.002 48.291 46.279 45.890 47.166
257 2867 2010-12-28 HPAR-fake 49.941 50.039 48.499 46.411 45.926 47.165
258 2868 2010-12-29 HPAR-fake 49.998 50.082 48.723 46.551 45.963 47.166
259 2869 2010-12-30 HPAR-fake 50.082 50.165 48.949 46.695 46.005 47.170
260 2870 2010-12-31 HPAR-fake 50.299 50.207 49.212 46.852 46.059 47.180

261 rows × 9 columns

In [35]:
hpar_2020
Out[35]:
id date symbol sma_5 sma_10 sma_20 sma_50 sma_100 sma_200
0 5218 2020-01-01 HPAR-fake 51.882 52.465 52.040 50.035 50.018 51.250
1 5219 2020-01-02 HPAR-fake 51.558 52.415 52.081 50.111 50.063 51.197
2 5220 2020-01-03 HPAR-fake 51.527 52.330 52.115 50.209 50.117 51.147
3 5221 2020-01-06 HPAR-fake 51.618 52.193 52.117 50.298 50.171 51.102
4 5222 2020-01-07 HPAR-fake 51.828 52.109 52.120 50.398 50.237 51.065
... ... ... ... ... ... ... ... ... ...
257 5475 2020-12-25 HPAR-fake 63.722 62.907 64.027 65.468 62.996 61.716
258 5476 2020-12-28 HPAR-fake 64.075 62.987 63.950 65.420 63.055 61.731
259 5477 2020-12-29 HPAR-fake 64.307 63.241 63.903 65.383 63.123 61.752
260 5478 2020-12-30 HPAR-fake 64.618 63.615 63.860 65.360 63.187 61.767
261 5479 2020-12-31 HPAR-fake 64.922 64.063 63.843 65.348 63.255 61.776

262 rows × 9 columns

In [55]:
# Plot the SMAs
plt.figure(figsize=(12, 6))

plt.plot(hpar_2020.index, hpar_2020['sma_200'], label="sma_200_days")
plt.plot(hpar_2020.index, hpar_2020['sma_50'], label="sma_50_days")
plt.plot(hpar_2020.index, hpar_2020['sma_5'], label="sma_5_days")

plt.xlabel('Date')
plt.ylabel('SMA Value')
plt.title(f'5, 50, 200 Day Moving Averages For {symbol}')
plt.legend()
plt.grid(True)
plt.show()
No description has been provided for this image
In [ ]:

In [ ]: