diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/FinTech_app.iml b/.idea/FinTech_app.iml
new file mode 100644
index 0000000..d791031
--- /dev/null
+++ b/.idea/FinTech_app.iml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
new file mode 100644
index 0000000..ec8f5fa
--- /dev/null
+++ b/.idea/dataSources.xml
@@ -0,0 +1,21 @@
+
+
+
+
+ sqlite.xerial
+ true
+ org.sqlite.JDBC
+ jdbc:sqlite:J:\Desktop\FinTech_app\db.sqlite3
+ $ProjectFileDir$
+
+
+ sqlite.xerial
+ true
+ true
+ $PROJECT_DIR$/FinTech_app/settings.py
+ org.sqlite.JDBC
+ jdbc:sqlite:J:\Desktop\FinTech_app\db.sqlite3
+ $ProjectFileDir$
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..105ce2d
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml
new file mode 100644
index 0000000..3e69f72
--- /dev/null
+++ b/.idea/jsLibraryMappings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..2687556
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..b1cc4a7
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/FinTech_app/Akcje.pdf b/FinTech_app/Akcje.pdf
new file mode 100644
index 0000000..0ab01c0
Binary files /dev/null and b/FinTech_app/Akcje.pdf differ
diff --git a/FinTech_app/Czym jest portfel inwestycyjny.pdf b/FinTech_app/Czym jest portfel inwestycyjny.pdf
new file mode 100644
index 0000000..f112bfe
Binary files /dev/null and b/FinTech_app/Czym jest portfel inwestycyjny.pdf differ
diff --git a/FinTech_app/RYNKI.pdf b/FinTech_app/RYNKI.pdf
new file mode 100644
index 0000000..1306806
Binary files /dev/null and b/FinTech_app/RYNKI.pdf differ
diff --git a/FinTech_app/settings.py b/FinTech_app/settings.py
index 9ce0e62..f859567 100644
--- a/FinTech_app/settings.py
+++ b/FinTech_app/settings.py
@@ -9,7 +9,7 @@ https://docs.djangoproject.com/en/4.1/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/4.1/ref/settings/
"""
-
+import os
from pathlib import Path
# Build paths inside the project like this: BASE_DIR / 'subdir'.
@@ -38,7 +38,9 @@ INSTALLED_APPS = [
'django.contrib.messages',
'django.contrib.staticfiles',
'bootstrap4',
- 'crispy_forms'
+ 'crispy_forms',
+ 'charts',
+ 'matplotlib'
]
@@ -130,3 +132,7 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
LOGIN_REDIRECT_URL = "/"
LOGOUT_REDIRECT_URL = "/"
+
+STATICFILES_DIRS = [
+ os.path.join(BASE_DIR, 'static')
+]
diff --git a/FinTech_app/urls.py b/FinTech_app/urls.py
index 3ef3bb7..f1a5585 100644
--- a/FinTech_app/urls.py
+++ b/FinTech_app/urls.py
@@ -16,8 +16,10 @@ Including another URLconf
from django.contrib import admin
from django.urls import path, include
from django.views.generic.base import TemplateView
+
from . import views
+
urlpatterns = [
path('admin/', admin.site.urls),
path('', TemplateView.as_view(template_name='main.html'), name='home'),
@@ -25,4 +27,11 @@ urlpatterns = [
path("login/", views.login_request, name="login"),
path("logout/", views.logout_request, name="logout"),
path("main/", views.logout_request, name="main"),
+ path('chart/', include('charts.urls')),
+ path('view-pdf1/', views.pdf_view1, name='pdf_view1'),
+ path('view-pdf-rynki/', views.pdf_view_rynki, name='pdf_view_rynki'),
+ path('view-pdf-akcje/', views.pdf_view_akcje, name='pdf_view_akcje'),
+ path('plot/', views.plot, name='plot'),
+ path('wigplot/', views.plot_view, name='plot_view'),
+ path('oblplot/', views.ob_plot_view, name='ob_plot_view'),
]
diff --git a/FinTech_app/views.py b/FinTech_app/views.py
index 3cff995..232853b 100644
--- a/FinTech_app/views.py
+++ b/FinTech_app/views.py
@@ -1,9 +1,21 @@
-from django.shortcuts import render, redirect
+from django.http import HttpResponse
+from django.shortcuts import render, redirect
from .forms import NewUserForm
from django.contrib.auth import login, authenticate, logout
from django.contrib import messages
from django.contrib.auth.forms import AuthenticationForm
-
+import matplotlib.pyplot as plt
+import numpy as np
+from matplotlib.backends.backend_agg import FigureCanvasAgg
+import pandas as pd
+from sklearn.linear_model import LinearRegression
+from io import BytesIO
+import base64
+from datetime import datetime
+from sklearn.preprocessing import PolynomialFeatures
+from sklearn.linear_model import LinearRegression
+from sklearn.metrics import mean_squared_error, r2_score
+from sklearn.model_selection import train_test_split
def register_request(request):
if request.method == "POST":
@@ -43,8 +55,108 @@ def logout_request(request):
return redirect("/")
-def index(request):
- if request.user.is_authenticated:
- print("Logged in")
- else:
- print("Not logged in")
\ No newline at end of file
+def pdf_view1(request):
+ with open('FinTech_app/Czym jest portfel inwestycyjny.pdf', 'rb') as pdf:
+ response = HttpResponse(pdf.read(), content_type='application/pdf')
+ response['Content-Disposition'] = 'inline;filename=mypdf.pdf'
+ return response
+
+
+def pdf_view_rynki(request):
+ with open('FinTech_app/RYNKI.pdf', 'rb') as pdf:
+ response = HttpResponse(pdf.read(), content_type='application/pdf')
+ response['Content-Disposition'] = 'inline;filename=mypdf.pdf'
+ return response
+
+
+def pdf_view_akcje(request):
+ with open('FinTech_app/Akcje.pdf', 'rb') as pdf:
+ response = HttpResponse(pdf.read(), content_type='application/pdf')
+ response['Content-Disposition'] = 'inline;filename=mypdf.pdf'
+ return response
+
+
+def plot(request):
+ # Data for plotting
+ t = np.arange(0.0, 2.0, 0.01)
+ s = 1 + np.sin(2 * np.pi * t)
+
+ fig, ax = plt.subplots()
+ ax.plot(t, s)
+
+ ax.set(xlabel='czas', ylabel='kurs',
+ title='Przewidywany kurs dla ...')
+ ax.grid()
+
+ response = HttpResponse(content_type = 'image/png')
+ canvas = FigureCanvasAgg(fig)
+ canvas.print_png(response)
+ return response
+
+
+def my_view(request):
+ fig, ax = plt.subplots()
+ ax.plot([1, 2, 3, 4])
+ return render(request, 'my_template.html', {'fig': fig})
+
+
+def plot_view(request):
+ data = pd.read_csv("charts/static/akcjeWIG40.csv")
+ months = data['Data']
+ prices = data['Otwarcie']
+ months = np.array(months).reshape(-1, 1)
+ poly_feat = PolynomialFeatures(degree=2)
+ months_poly = poly_feat.fit_transform(months)
+ model = LinearRegression()
+ model.fit(months_poly, prices)
+ future_months = np.array([12, 13, 14, 15, 16, 17, 18]).reshape(-1, 1)
+ future_months_poly = poly_feat.fit_transform(future_months)
+ predictions = model.predict(future_months_poly)
+ plt.plot(months, prices, color='cyan')
+ plt.plot(future_months, predictions, color='pink')
+ plt.title('Wykres cen dla następnych 6 miesięcy dla akcji 40 najwięszych spółek WIG40')
+ plt.xlabel('Miesiące')
+ plt.ylabel('Cena')
+ plt.xticks(range(1, 19))
+ plt.grid()
+
+ #save the figure to a buffer
+ buf = BytesIO()
+ plt.savefig(buf, format='png')
+ buf.seek(0)
+ string = base64.b64encode(buf.read()).decode()
+ uri = 'data:image/png;base64,' + string
+ context = { 'uri': uri }
+ plt.clf()
+ return render(request, 'wigplot.html', context)
+
+
+def ob_plot_view(request):
+ data = pd.read_csv("charts/static/obligacjePL.csv")
+ months = data['Data']
+ prices = data['Otwarcie']
+ months = np.array(months).reshape(-1, 1)
+ poly_feat = PolynomialFeatures(degree=2)
+ months_poly = poly_feat.fit_transform(months)
+ model = LinearRegression()
+ model.fit(months_poly, prices)
+ future_months = np.array([12, 13, 14, 15, 16, 17, 18]).reshape(-1, 1)
+ future_months_poly = poly_feat.fit_transform(future_months)
+ predictions = model.predict(future_months_poly)
+ plt.plot(months, prices, color='cyan')
+ plt.plot(future_months, predictions, color='pink')
+ plt.title('Wykres cen dla następnych 6 miesięcy dla obligacji PL')
+ plt.xlabel('Miesiące')
+ plt.ylabel('Cena')
+ plt.xticks(range(1, 19))
+ plt.grid()
+
+ #save the figure to a buffer
+ buf = BytesIO()
+ plt.savefig(buf, format='png')
+ buf.seek(0)
+ string = base64.b64encode(buf.read()).decode()
+ uri = 'data:image/png;base64,' + string
+ context = { 'uri': uri }
+ plt.clf()
+ return render(request, 'obligacjePLplot.html', context)
\ No newline at end of file
diff --git a/charts/__init__.py b/charts/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/charts/admin.py b/charts/admin.py
new file mode 100644
index 0000000..8c38f3f
--- /dev/null
+++ b/charts/admin.py
@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.
diff --git a/charts/algorithm.py b/charts/algorithm.py
new file mode 100644
index 0000000..919302b
--- /dev/null
+++ b/charts/algorithm.py
@@ -0,0 +1,48 @@
+import csv
+import numpy as np
+from sklearn.svm import SVR
+import matplotlib.pyplot as plt
+
+dates = []
+prices = []
+
+
+def get_data(filename):
+ with open(filename, 'r') as csvfile:
+ csvFileReader = csv.reader(csvfile)
+ next(csvFileReader)
+ for row in csvFileReader:
+ dates.append(int(row[0].split('-')[1]))
+ prices.append(float(row[1]))
+ return
+
+
+def predict_prices(dates, prices, x):
+ dates = np.reshape(dates, (len(dates), 1))
+
+ svr_lin = SVR(kernel='linear', C=1e3)
+ svr_poly = SVR(kernel='poly', C=1e3, degree = 2)
+ svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1)
+ svr_lin.fit(dates, prices)
+ svr_poly.fit(dates, prices)
+ svr_rbf.fit(dates, prices)
+
+ plt.scatter(dates, prices, color='black', label='Data')
+ plt.plot(dates, svr_lin.predict(dates), color='green', label='linear model')
+ plt.plot(dates, svr_poly.predict(dates), color='blue', label='Polynomial model')
+ plt.plot(dates, svr_rbf.predict(dates), color='red', label='RBF model')
+ plt.xlabel('Date')
+ plt.ylabel('Price')
+ plt.title('Support Vector Regression')
+ plt.legend()
+ plt.show()
+
+ return svr_lin.predict(x)[0], svr_poly.predict(x)[0], svr_rbf.predict(x)[0]
+
+
+get_data('static/akcjeWIG40.csv')
+print(dates)
+print(prices)
+predicted_price = predict_prices(dates, prices, 29)
+
+print(predicted_price)
diff --git a/charts/algorithm_2.py b/charts/algorithm_2.py
new file mode 100644
index 0000000..c9c9ade
--- /dev/null
+++ b/charts/algorithm_2.py
@@ -0,0 +1,56 @@
+import numpy as np
+from sklearn.svm import SVR
+import matplotlib.pyplot as plt
+
+
+X = np.sort(5 * np.random.rand(40, 1), axis=0)
+y = np.sin(X).ravel()
+
+# add noise to targets
+y[::5] += 3 * (0.5 - np.random.rand(8))
+svr_rbf = SVR(kernel="rbf", C=100, gamma=0.1, epsilon=0.1)
+svr_lin = SVR(kernel="linear", C=100, gamma="auto")
+svr_poly = SVR(kernel="poly", C=100, gamma="auto", degree=3, epsilon=0.1, coef0=1)
+lw = 2
+
+svrs = [svr_rbf, svr_lin, svr_poly]
+kernel_label = ["RBF", "Linear", "Polynomial"]
+model_color = ["m", "c", "g"]
+
+fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 10), sharey=True)
+for ix, svr in enumerate(svrs):
+ axes[ix].plot(
+ X,
+ svr.fit(X, y).predict(X),
+ color=model_color[ix],
+ lw=lw,
+ label="{} model".format(kernel_label[ix]),
+ )
+ axes[ix].scatter(
+ X[svr.support_],
+ y[svr.support_],
+ facecolor="none",
+ edgecolor=model_color[ix],
+ s=50,
+ label="{} support vectors".format(kernel_label[ix]),
+ )
+ axes[ix].scatter(
+ X[np.setdiff1d(np.arange(len(X)), svr.support_)],
+ y[np.setdiff1d(np.arange(len(X)), svr.support_)],
+ facecolor="none",
+ edgecolor="k",
+ s=50,
+ label="other training data",
+ )
+ axes[ix].legend(
+ loc="upper center",
+ bbox_to_anchor=(0.5, 1.1),
+ ncol=1,
+ fancybox=True,
+ shadow=True,
+ )
+
+fig.text(0.5, 0.04, "data", ha="center", va="center")
+fig.text(0.06, 0.5, "target", ha="center", va="center", rotation="vertical")
+fig.suptitle("Support Vector Regression", fontsize=14)
+plt.show()
\ No newline at end of file
diff --git a/charts/algorithm_3.py b/charts/algorithm_3.py
new file mode 100644
index 0000000..e74e93c
--- /dev/null
+++ b/charts/algorithm_3.py
@@ -0,0 +1,57 @@
+import pandas as pd
+import numpy as np
+import matplotlib.pyplot as plt
+from matplotlib.pylab import rcParams
+from keras.models import Sequential
+from keras.layers import LSTM, Dropout, Dense
+from sklearn.preprocessing import MinMaxScaler
+
+df = pd.read_csv('static/HistoricalData_APL.csv')
+df = df[['Date', 'Close/Last']]
+df = df.replace({'\$': ''}, regex=True)
+print(df.head())
+df = df.astype({"Close/Last": float})
+df["Date"] = pd.to_datetime(df.Date, format="%m/%d/%Y")
+print(df.dtypes)
+df.index = df['Date']
+plt.plot(df["Close/Last"], label='AAPL Close Price history')
+plt.show()
+df = df.sort_index(ascending=True,axis=0)
+data = pd.DataFrame(index=range(0,len(df)),columns=['Date','Close/Last'])
+for i in range(0,len(data)):
+ data["Date"][i]=df['Date'][i]
+ data["Close/Last"][i]=df["Close/Last"][i]
+scaler=MinMaxScaler(feature_range=(0,1))
+data.index=data.Date
+data.drop("Date",axis=1,inplace=True)
+final_data = data.values
+train_data=final_data[0:200,:]
+valid_data=final_data[200:,:]
+scaler=MinMaxScaler(feature_range=(0,1))
+scaled_data=scaler.fit_transform(final_data)
+x_train_data,y_train_data=[],[]
+for i in range(60,len(train_data)):
+ x_train_data.append(scaled_data[i-60:i,0])
+ y_train_data.append(scaled_data[i,0])
+lstm_model=Sequential()
+lstm_model.add(LSTM(units=50,return_sequences=True,input_shape=(np.shape(x_train_data)[1],1)))
+lstm_model.add(LSTM(units=50))
+lstm_model.add(Dense(1))
+model_data=data[len(data)-len(valid_data)-60:].values
+model_data=model_data.reshape(-1,1)
+model_data=scaler.transform(model_data)
+lstm_model.compile(loss='mean_squared_error',optimizer='adam')
+lstm_model.fit(x_train_data,y_train_data,epochs=1,batch_size=1,verbose=2)
+X_test=[]
+for i in range(60,model_data.shape[0]):
+ X_test.append(model_data[i-60:i,0])
+X_test=np.array(X_test)
+X_test=np.reshape(X_test,(X_test.shape[0],X_test.shape[1],1))
+predicted_stock_price=lstm_model.predict(X_test)
+predicted_stock_price=scaler.inverse_transform(predicted_stock_price)
+train_data=data[:200]
+valid_data=data[200:]
+valid_data['Predictions']=predicted_stock_price
+plt.plot(train_data["Close/Last"])
+plt.plot(valid_data[['Close/Last',"Predictions"]])
+plt.show()
\ No newline at end of file
diff --git a/charts/algorithm_4.py b/charts/algorithm_4.py
new file mode 100644
index 0000000..e4e59ce
--- /dev/null
+++ b/charts/algorithm_4.py
@@ -0,0 +1,63 @@
+import pandas as pd
+import numpy as np
+import matplotlib.pyplot as plt
+from sklearn.preprocessing import PolynomialFeatures
+from sklearn.linear_model import LinearRegression
+from sklearn.metrics import mean_squared_error, r2_score
+from sklearn.model_selection import train_test_split
+
+# data = pd.read_csv("static/obligacjePL.csv")
+#
+# months = data['Data']
+# prices = data['Otwarcie']
+#
+# months = np.array(months).reshape(-1, 1)
+#
+# model = LinearRegression()
+# model.fit(months, prices)
+#
+# future_months = np.array([12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]).reshape(-1, 1)
+# predictions = model.predict(future_months)
+# plt.plot(months, prices, label='actual')
+# plt.plot(future_months, predictions, label='prediction')
+# plt.legend()
+# plt.xlabel('Months')
+# plt.ylabel('Prices')
+# plt.title('Stock Prices Prediction')
+# plt.grid()
+# plt.show()
+
+data = pd.read_csv("static/AAPL2.csv")
+months = data['Date']
+prices = data['Open']
+months = np.array(months).reshape(-1, 1)
+poly_feat = PolynomialFeatures(degree=2)
+months_poly = poly_feat.fit_transform(months)
+model = LinearRegression()
+model.fit(months_poly, prices)
+future_months = np.array([12, 13, 14, 15, 16, 17, 18]).reshape(-1, 1)
+future_months_poly = poly_feat.fit_transform(future_months)
+predictions = model.predict(future_months_poly)
+plt.plot(months, prices, color='cyan')
+plt.plot(future_months, predictions, color='pink')
+plt.title('Polynomial Regression')
+plt.xlabel('Months')
+plt.ylabel('Prices')
+plt.xticks(range(1, 18))
+plt.show()
+X_train, X_test, y_train, y_test = train_test_split(months_poly, prices, test_size=0.2, random_state=0)
+
+# Fit the model to the training data
+model = LinearRegression()
+model.fit(X_train, y_train)
+
+# Make predictions on the test data
+y_pred = model.predict(X_test)
+
+# Calculate the MSE and R-Squared
+mse = mean_squared_error(y_test, y_pred)
+r2 = r2_score(y_test, y_pred)
+
+# Print the results
+print("Mean Squared Error:", mse)
+print("R-Squared:", r2)
\ No newline at end of file
diff --git a/charts/apps.py b/charts/apps.py
new file mode 100644
index 0000000..4c223e4
--- /dev/null
+++ b/charts/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class ChartsConfig(AppConfig):
+ default_auto_field = 'django.db.models.BigAutoField'
+ name = 'charts'
diff --git a/charts/management/__init__.py b/charts/management/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/charts/management/commands/__init__.py b/charts/management/commands/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/charts/management/commands/import_stats.py b/charts/management/commands/import_stats.py
new file mode 100644
index 0000000..99a72b2
--- /dev/null
+++ b/charts/management/commands/import_stats.py
@@ -0,0 +1,38 @@
+import csv
+
+from django.core.management.base import BaseCommand
+from dateutil.parser import parse
+
+from charts.models import BiteStat
+
+
+class Command(BaseCommand):
+ help = 'Import bite exercise stats'
+
+ def add_arguments(self, parser):
+ parser.add_argument('-c', '--csv', required=True)
+
+ def handle(self, *args, **options):
+ file = options["csv"]
+ with open(file) as f:
+ reader = csv.DictReader(f)
+ for row in reader:
+ completed = row["first_completed"]
+ if not completed:
+ continue
+
+ level = row["user_level"]
+ if not level:
+ level = 0
+
+ date = parse(completed)
+ stat, created = BiteStat.objects.get_or_create(
+ exercise=row["bite_id"],
+ completed=date,
+ level=level,
+ )
+
+ if created:
+ self.stdout.write(f"{stat} created")
+ else:
+ self.stderr.write(f"{stat} already in db")
\ No newline at end of file
diff --git a/charts/migrations/0001_initial.py b/charts/migrations/0001_initial.py
new file mode 100644
index 0000000..eb61597
--- /dev/null
+++ b/charts/migrations/0001_initial.py
@@ -0,0 +1,23 @@
+# Generated by Django 4.1.3 on 2022-12-19 20:06
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='BiteStat',
+ fields=[
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('exercise', models.PositiveSmallIntegerField()),
+ ('completed', models.DateField()),
+ ('level', models.PositiveSmallIntegerField(blank=True, null=True)),
+ ],
+ ),
+ ]
diff --git a/charts/migrations/__init__.py b/charts/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/charts/models.py b/charts/models.py
new file mode 100644
index 0000000..660ed54
--- /dev/null
+++ b/charts/models.py
@@ -0,0 +1,7 @@
+from django.db import models
+
+
+class BiteStat(models.Model):
+ exercise = models.PositiveSmallIntegerField() # 0 to 32767
+ completed = models.DateField() # I don't care about time here
+ level = models.PositiveSmallIntegerField(null=True, blank=True) # optional, not every Bite has user feedback
diff --git a/charts/static/AAPL.csv b/charts/static/AAPL.csv
new file mode 100644
index 0000000..088233f
--- /dev/null
+++ b/charts/static/AAPL.csv
@@ -0,0 +1,252 @@
+Date,Open,High,Low,Close,Adj Close,Volume
+2022-01-03,177.830002,182.880005,177.710007,182.009995,180.959747,104487900
+2022-01-04,182.630005,182.940002,179.119995,179.699997,178.663071,99310400
+2022-01-05,179.610001,180.169998,174.639999,174.919998,173.910660,94537600
+2022-01-06,172.699997,175.300003,171.639999,172.000000,171.007507,96904000
+2022-01-07,172.889999,174.139999,171.029999,172.169998,171.176529,86709100
+2022-01-10,169.080002,172.500000,168.169998,172.190002,171.196426,106765600
+2022-01-11,172.320007,175.179993,170.820007,175.080002,174.069733,76138300
+2022-01-12,176.119995,177.179993,174.820007,175.529999,174.517151,74805200
+2022-01-13,175.779999,176.619995,171.789993,172.190002,171.196426,84505800
+2022-01-14,171.339996,173.779999,171.089996,173.070007,172.071335,80440800
+2022-01-18,171.509995,172.539993,169.410004,169.800003,168.820206,90956700
+2022-01-19,170.000000,171.080002,165.940002,166.229996,165.270798,94815000
+2022-01-20,166.979996,169.679993,164.179993,164.509995,163.560730,91420500
+2022-01-21,164.419998,166.330002,162.300003,162.410004,161.472855,122848900
+2022-01-24,160.020004,162.300003,154.699997,161.619995,160.687393,162294600
+2022-01-25,158.979996,162.759995,157.020004,159.779999,158.858017,115798400
+2022-01-26,163.500000,164.389999,157.820007,159.690002,158.768539,108275300
+2022-01-27,162.449997,163.839996,158.279999,159.220001,158.301254,121954600
+2022-01-28,165.710007,170.350006,162.800003,170.330002,169.347153,179935700
+2022-01-31,170.160004,175.000000,169.509995,174.779999,173.771469,115541600
+2022-02-01,174.009995,174.839996,172.309998,174.610001,173.602448,86213900
+2022-02-02,174.750000,175.880005,173.330002,175.839996,174.825348,84914300
+2022-02-03,174.479996,176.240005,172.119995,172.899994,171.902313,89418100
+2022-02-04,171.679993,174.100006,170.679993,172.389999,171.613632,82465400
+2022-02-07,172.860001,173.949997,170.949997,171.660004,170.886917,77251200
+2022-02-08,171.729996,175.350006,171.429993,174.830002,174.042633,74829200
+2022-02-09,176.050003,176.649994,174.899994,176.279999,175.486099,71285000
+2022-02-10,174.139999,175.479996,171.550003,172.119995,171.344833,90865900
+2022-02-11,172.330002,173.080002,168.039993,168.639999,167.880524,98670700
+2022-02-14,167.369995,169.580002,166.559998,168.880005,168.119446,86185500
+2022-02-15,170.970001,172.949997,170.250000,172.789993,172.011810,62527400
+2022-02-16,171.850006,173.339996,170.050003,172.550003,171.772903,61177400
+2022-02-17,171.029999,171.910004,168.470001,168.880005,168.119446,69589300
+2022-02-18,169.820007,170.539993,166.190002,167.300003,166.546555,82772700
+2022-02-22,164.979996,166.690002,162.149994,164.320007,163.579987,91162800
+2022-02-23,165.539993,166.149994,159.750000,160.070007,159.349121,90009200
+2022-02-24,152.580002,162.850006,152.000000,162.740005,162.007080,141147500
+2022-02-25,163.839996,165.119995,160.869995,164.850006,164.107590,91974200
+2022-02-28,163.059998,165.419998,162.429993,165.119995,164.376358,95056600
+2022-03-01,164.699997,166.600006,161.970001,163.199997,162.465012,83474400
+2022-03-02,164.389999,167.360001,162.949997,166.559998,165.809875,79724800
+2022-03-03,168.470001,168.910004,165.550003,166.229996,165.481369,76678400
+2022-03-04,164.490005,165.550003,162.100006,163.169998,162.435135,83737200
+2022-03-07,163.360001,165.020004,159.039993,159.300003,158.582581,96418800
+2022-03-08,158.820007,162.880005,155.800003,157.440002,156.730942,131148300
+2022-03-09,161.479996,163.410004,159.410004,162.949997,162.216125,91454900
+2022-03-10,160.199997,160.389999,155.979996,158.520004,157.806091,105342000
+2022-03-11,158.929993,159.279999,154.500000,154.729996,154.033142,96970100
+2022-03-14,151.449997,154.119995,150.100006,150.619995,149.941650,108732100
+2022-03-15,150.899994,155.570007,150.380005,155.089996,154.391541,92964300
+2022-03-16,157.050003,160.000000,154.460007,159.589996,158.871262,102300200
+2022-03-17,158.610001,161.000000,157.630005,160.619995,159.896637,75615400
+2022-03-18,160.509995,164.479996,159.759995,163.979996,163.241501,123511700
+2022-03-21,163.509995,166.350006,163.009995,165.380005,164.635193,95811400
+2022-03-22,165.509995,169.419998,164.910004,168.820007,168.059723,81532000
+2022-03-23,167.990005,172.639999,167.649994,170.210007,169.443436,98062700
+2022-03-24,171.059998,174.139999,170.210007,174.070007,173.286057,90131400
+2022-03-25,173.880005,175.279999,172.750000,174.720001,173.933136,80546200
+2022-03-28,172.169998,175.729996,172.000000,175.600006,174.809174,90371900
+2022-03-29,176.690002,179.009995,176.339996,178.960007,178.154053,100589400
+2022-03-30,178.550003,179.610001,176.699997,177.770004,176.969406,92633200
+2022-03-31,177.839996,178.029999,174.399994,174.610001,173.823639,103049300
+2022-04-01,174.029999,174.880005,171.940002,174.309998,173.524963,78751300
+2022-04-04,174.570007,178.490005,174.440002,178.440002,177.636383,76468400
+2022-04-05,177.500000,178.300003,174.419998,175.059998,174.271591,73401800
+2022-04-06,172.360001,173.630005,170.130005,171.830002,171.056137,89058800
+2022-04-07,171.160004,173.360001,169.850006,172.139999,171.364746,77594700
+2022-04-08,171.779999,171.779999,169.199997,170.089996,169.323975,76575500
+2022-04-11,168.710007,169.029999,165.500000,165.750000,165.003525,72246700
+2022-04-12,168.020004,169.869995,166.639999,167.660004,166.904938,79265200
+2022-04-13,167.389999,171.039993,166.770004,170.399994,169.632584,70618900
+2022-04-14,170.619995,171.270004,165.039993,165.289993,164.545593,75329400
+2022-04-18,163.919998,166.600006,163.570007,165.070007,164.326599,69023900
+2022-04-19,165.020004,167.820007,163.910004,167.399994,166.646088,67723800
+2022-04-20,168.759995,168.880005,166.100006,167.229996,166.476868,67929800
+2022-04-21,168.910004,171.529999,165.910004,166.419998,165.670517,87227800
+2022-04-22,166.460007,167.869995,161.500000,161.789993,161.061356,84882400
+2022-04-25,161.119995,163.169998,158.460007,162.880005,162.146469,96046400
+2022-04-26,162.250000,162.339996,156.720001,156.800003,156.093857,95623200
+2022-04-27,155.910004,159.789993,155.380005,156.570007,155.864883,88063200
+2022-04-28,159.250000,164.520004,158.929993,163.639999,162.903030,130216800
+2022-04-29,161.839996,166.199997,157.250000,157.649994,156.939987,131747600
+2022-05-02,156.710007,158.229996,153.270004,157.960007,157.248627,123055300
+2022-05-03,158.149994,160.710007,156.320007,159.479996,158.761765,88966500
+2022-05-04,159.669998,166.479996,159.259995,166.020004,165.272324,108256500
+2022-05-05,163.850006,164.080002,154.949997,156.770004,156.063980,130525300
+2022-05-06,156.009995,159.440002,154.179993,157.279999,156.801727,116124600
+2022-05-09,154.929993,155.830002,151.490005,152.059998,151.597595,131577900
+2022-05-10,155.520004,156.740005,152.929993,154.509995,154.040131,115366700
+2022-05-11,153.500000,155.449997,145.809998,146.500000,146.054504,142689800
+2022-05-12,142.770004,146.199997,138.800003,142.559998,142.126480,182602000
+2022-05-13,144.589996,148.100006,143.110001,147.110001,146.662643,113990900
+2022-05-16,145.550003,147.520004,144.179993,145.539993,145.097412,86643800
+2022-05-17,148.860001,149.770004,146.679993,149.240005,148.786179,78336300
+2022-05-18,146.850006,147.360001,139.899994,140.820007,140.391785,109742900
+2022-05-19,139.880005,141.660004,136.600006,137.350006,136.932343,136095600
+2022-05-20,139.089996,140.699997,132.610001,137.589996,137.171600,137426100
+2022-05-23,137.789993,143.259995,137.649994,143.110001,142.674820,117726300
+2022-05-24,140.809998,141.970001,137.330002,140.360001,139.933182,104132700
+2022-05-25,138.429993,141.789993,138.339996,140.520004,140.092697,92482700
+2022-05-26,137.389999,144.339996,137.139999,143.779999,143.342773,90601500
+2022-05-27,145.389999,149.679993,145.259995,149.639999,149.184952,90978500
+2022-05-31,149.070007,150.660004,146.839996,148.839996,148.387390,103718400
+2022-06-01,149.899994,151.740005,147.679993,148.710007,148.257797,74286600
+2022-06-02,147.830002,151.270004,146.860001,151.210007,150.750183,72348100
+2022-06-03,146.899994,147.970001,144.460007,145.380005,144.937912,88570300
+2022-06-06,147.029999,148.570007,144.899994,146.139999,145.695602,71598400
+2022-06-07,144.350006,149.000000,144.100006,148.710007,148.257797,67808200
+2022-06-08,148.580002,149.869995,147.460007,147.960007,147.510071,53950200
+2022-06-09,147.080002,147.949997,142.529999,142.639999,142.206253,69473000
+2022-06-10,140.279999,140.759995,137.059998,137.130005,136.713013,91437900
+2022-06-13,132.869995,135.199997,131.440002,131.880005,131.478958,122207100
+2022-06-14,133.130005,133.889999,131.479996,132.759995,132.356277,84784300
+2022-06-15,134.289993,137.339996,132.160004,135.429993,135.018158,91533000
+2022-06-16,132.080002,132.389999,129.039993,130.059998,129.664490,108123900
+2022-06-17,130.070007,133.080002,129.809998,131.559998,131.159927,134520300
+2022-06-21,133.419998,137.059998,133.320007,135.869995,135.456818,81000500
+2022-06-22,134.789993,137.759995,133.910004,135.350006,134.938416,73409200
+2022-06-23,136.820007,138.589996,135.630005,138.270004,137.849533,72433800
+2022-06-24,139.899994,141.910004,139.770004,141.660004,141.229233,89116800
+2022-06-27,142.699997,143.490005,140.970001,141.660004,141.229233,70207900
+2022-06-28,142.130005,143.419998,137.320007,137.440002,137.022064,67083400
+2022-06-29,137.460007,140.669998,136.669998,139.229996,138.806610,66242400
+2022-06-30,137.250000,138.369995,133.770004,136.720001,136.304245,98964500
+2022-07-01,136.039993,139.039993,135.660004,138.929993,138.507507,71051600
+2022-07-05,137.770004,141.610001,136.929993,141.559998,141.129532,73353800
+2022-07-06,141.350006,144.119995,141.080002,142.919998,142.485382,74064300
+2022-07-07,143.289993,146.550003,143.279999,146.350006,145.904968,66253700
+2022-07-08,145.259995,147.550003,145.000000,147.039993,146.592850,64547800
+2022-07-11,145.669998,146.639999,143.779999,144.869995,144.429459,63141600
+2022-07-12,145.759995,148.449997,145.050003,145.860001,145.416443,77588800
+2022-07-13,142.990005,146.449997,142.119995,145.490005,145.047577,71185600
+2022-07-14,144.080002,148.949997,143.250000,148.470001,148.018524,78140700
+2022-07-15,149.779999,150.860001,148.199997,150.169998,149.713333,76259900
+2022-07-18,150.740005,151.570007,146.699997,147.070007,146.622787,81420900
+2022-07-19,147.919998,151.229996,146.910004,151.000000,150.540817,82982400
+2022-07-20,151.119995,153.720001,150.369995,153.039993,152.574615,64823400
+2022-07-21,154.500000,155.570007,151.940002,155.350006,154.877594,65086600
+2022-07-22,155.389999,156.279999,153.410004,154.089996,153.621414,66675400
+2022-07-25,154.009995,155.039993,152.279999,152.949997,152.484894,53623900
+2022-07-26,152.259995,153.089996,150.800003,151.600006,151.138992,55138700
+2022-07-27,152.580002,157.330002,152.160004,156.789993,156.313202,78620700
+2022-07-28,156.979996,157.639999,154.410004,157.350006,156.871521,81378700
+2022-07-29,161.240005,163.630005,159.500000,162.509995,162.015808,101786900
+2022-08-01,161.009995,163.589996,160.889999,161.509995,161.018845,67829400
+2022-08-02,160.100006,162.410004,159.630005,160.009995,159.523407,59907000
+2022-08-03,160.839996,166.589996,160.750000,166.130005,165.624817,82507500
+2022-08-04,166.009995,167.190002,164.429993,165.809998,165.305786,55474100
+2022-08-05,163.210007,165.850006,163.000000,165.350006,165.076172,56697000
+2022-08-08,166.369995,167.809998,164.199997,164.869995,164.596954,60276900
+2022-08-09,164.020004,165.820007,163.250000,164.919998,164.646866,63135500
+2022-08-10,167.679993,169.339996,166.899994,169.240005,168.959732,70170500
+2022-08-11,170.059998,170.990005,168.190002,168.490005,168.210968,57149200
+2022-08-12,169.820007,172.169998,169.399994,172.100006,171.814987,68039400
+2022-08-15,171.520004,173.389999,171.350006,173.190002,172.903183,54091700
+2022-08-16,172.779999,173.710007,171.660004,173.029999,172.743439,56377100
+2022-08-17,172.770004,176.149994,172.570007,174.550003,174.260925,79542000
+2022-08-18,173.750000,174.899994,173.119995,174.149994,173.861588,62290100
+2022-08-19,173.029999,173.740005,171.309998,171.520004,171.235947,70346300
+2022-08-22,169.690002,169.860001,167.139999,167.570007,167.292496,69026800
+2022-08-23,167.080002,168.710007,166.649994,167.229996,166.953049,54147100
+2022-08-24,167.320007,168.110001,166.250000,167.529999,167.252548,53841500
+2022-08-25,168.779999,170.139999,168.350006,170.029999,169.748413,51218200
+2022-08-26,170.570007,171.050003,163.559998,163.619995,163.349014,78961000
+2022-08-29,161.149994,162.899994,159.820007,161.380005,161.112747,73314000
+2022-08-30,162.130005,162.559998,157.720001,158.910004,158.646835,77906200
+2022-08-31,160.309998,160.580002,157.139999,157.220001,156.959625,87991100
+2022-09-01,156.639999,158.419998,154.669998,157.960007,157.698410,74229900
+2022-09-02,159.750000,160.360001,154.970001,155.809998,155.551956,76957800
+2022-09-06,156.470001,157.089996,153.690002,154.529999,154.274078,73714800
+2022-09-07,154.820007,156.669998,153.610001,155.960007,155.701721,87449600
+2022-09-08,154.639999,156.360001,152.679993,154.460007,154.204208,84923800
+2022-09-09,155.470001,157.820007,154.750000,157.369995,157.109375,68028800
+2022-09-12,159.589996,164.259995,159.300003,163.429993,163.159332,104956000
+2022-09-13,159.899994,160.539993,153.369995,153.839996,153.585220,122656600
+2022-09-14,154.789993,157.100006,153.610001,155.309998,155.052780,87965400
+2022-09-15,154.649994,155.240005,151.380005,152.369995,152.117645,90481100
+2022-09-16,151.210007,151.350006,148.369995,150.699997,150.450424,162278800
+2022-09-19,149.309998,154.559998,149.100006,154.479996,154.224152,81474200
+2022-09-20,153.399994,158.080002,153.080002,156.899994,156.640152,107689800
+2022-09-21,157.339996,158.740005,153.600006,153.720001,153.465424,101696800
+2022-09-22,152.380005,154.470001,150.910004,152.740005,152.487045,86652500
+2022-09-23,151.190002,151.470001,148.559998,150.429993,150.180862,96029900
+2022-09-26,149.660004,153.770004,149.639999,150.770004,150.520309,93339400
+2022-09-27,152.740005,154.720001,149.949997,151.759995,151.508667,84442700
+2022-09-28,147.639999,150.639999,144.839996,149.839996,149.591843,146691400
+2022-09-29,146.100006,146.720001,140.679993,142.479996,142.244034,128138200
+2022-09-30,141.279999,143.100006,138.000000,138.199997,137.971115,124925300
+2022-10-03,138.210007,143.070007,137.690002,142.449997,142.214081,114311700
+2022-10-04,145.029999,146.220001,144.259995,146.100006,145.858047,87830100
+2022-10-05,144.070007,147.380005,143.009995,146.399994,146.157532,79471000
+2022-10-06,145.809998,147.539993,145.220001,145.429993,145.189148,68402200
+2022-10-07,142.539993,143.100006,139.449997,140.089996,139.857986,85925600
+2022-10-10,140.419998,141.889999,138.570007,140.419998,140.187439,74899000
+2022-10-11,139.899994,141.350006,138.220001,138.979996,138.749832,77033700
+2022-10-12,139.130005,140.360001,138.160004,138.339996,138.110886,70433700
+2022-10-13,134.990005,143.589996,134.369995,142.990005,142.753204,113224000
+2022-10-14,144.309998,144.520004,138.190002,138.380005,138.150833,88598000
+2022-10-17,141.070007,142.899994,140.270004,142.410004,142.174164,85250900
+2022-10-18,145.490005,146.699997,140.610001,143.750000,143.511932,99136600
+2022-10-19,141.690002,144.949997,141.500000,143.860001,143.621750,61758300
+2022-10-20,143.020004,145.889999,142.649994,143.389999,143.152527,64522000
+2022-10-21,142.869995,147.850006,142.649994,147.270004,147.026108,86548600
+2022-10-24,147.190002,150.229996,146.000000,149.449997,149.202484,75981900
+2022-10-25,150.089996,152.490005,149.360001,152.339996,152.087708,74732300
+2022-10-26,150.960007,151.990005,148.039993,149.350006,149.102661,88194300
+2022-10-27,148.070007,149.050003,144.130005,144.800003,144.560196,109180200
+2022-10-28,148.199997,157.500000,147.820007,155.740005,155.482086,164762400
+2022-10-31,153.160004,154.240005,151.919998,153.339996,153.086044,97943200
+2022-11-01,155.080002,155.449997,149.130005,150.649994,150.400497,80379300
+2022-11-02,148.949997,152.169998,145.000000,145.029999,144.789810,93604600
+2022-11-03,142.059998,142.800003,138.750000,138.880005,138.650009,97918500
+2022-11-04,142.089996,142.669998,134.380005,138.380005,138.380005,140814800
+2022-11-07,137.110001,139.149994,135.669998,138.919998,138.919998,83374600
+2022-11-08,140.410004,141.429993,137.490005,139.500000,139.500000,89908500
+2022-11-09,138.500000,138.550003,134.589996,134.869995,134.869995,74917800
+2022-11-10,141.240005,146.869995,139.500000,146.869995,146.869995,118854000
+2022-11-11,145.820007,150.009995,144.369995,149.699997,149.699997,93979700
+2022-11-14,148.970001,150.279999,147.429993,148.279999,148.279999,73374100
+2022-11-15,152.220001,153.589996,148.559998,150.039993,150.039993,89868300
+2022-11-16,149.130005,149.869995,147.289993,148.789993,148.789993,64218300
+2022-11-17,146.429993,151.479996,146.149994,150.720001,150.720001,80389400
+2022-11-18,152.309998,152.699997,149.970001,151.289993,151.289993,74829600
+2022-11-21,150.160004,150.369995,147.720001,148.009995,148.009995,58724100
+2022-11-22,148.130005,150.419998,146.929993,150.179993,150.179993,51804100
+2022-11-23,149.449997,151.830002,149.339996,151.070007,151.070007,58301400
+2022-11-25,148.309998,148.880005,147.119995,148.110001,148.110001,35195900
+2022-11-28,145.139999,146.639999,143.380005,144.220001,144.220001,69246000
+2022-11-29,144.289993,144.809998,140.350006,141.169998,141.169998,83763800
+2022-11-30,141.399994,148.720001,140.550003,148.029999,148.029999,111380900
+2022-12-01,148.210007,149.130005,146.610001,148.309998,148.309998,71250400
+2022-12-02,145.960007,148.000000,145.649994,147.809998,147.809998,65447400
+2022-12-05,147.770004,150.919998,145.770004,146.630005,146.630005,68826400
+2022-12-06,147.070007,147.300003,141.919998,142.910004,142.910004,64727200
+2022-12-07,142.190002,143.369995,140.000000,140.940002,140.940002,69721100
+2022-12-08,142.360001,143.520004,141.100006,142.649994,142.649994,62128300
+2022-12-09,142.339996,145.570007,140.899994,142.160004,142.160004,76097000
+2022-12-12,142.699997,144.500000,141.059998,144.490005,144.490005,70462700
+2022-12-13,149.500000,149.970001,144.240005,145.470001,145.470001,93886200
+2022-12-14,145.350006,146.660004,141.160004,143.210007,143.210007,82291200
+2022-12-15,141.110001,141.800003,136.029999,136.500000,136.500000,98931900
+2022-12-16,136.690002,137.649994,133.729996,134.509995,134.509995,160156900
+2022-12-19,135.110001,135.199997,131.320007,132.369995,132.369995,79592600
+2022-12-20,131.389999,133.250000,129.889999,132.300003,132.300003,77432800
+2022-12-21,132.979996,136.809998,132.750000,135.449997,135.449997,85928000
+2022-12-22,134.350006,134.559998,130.300003,132.229996,132.229996,77852100
+2022-12-23,130.919998,132.419998,129.639999,131.860001,131.860001,63814900
+2022-12-27,131.380005,131.410004,128.720001,130.029999,130.029999,69007800
+2022-12-28,129.669998,131.029999,125.870003,126.040001,126.040001,85438400
+2022-12-29,127.989998,130.479996,127.730003,129.610001,129.610001,75703700
+2022-12-30,128.410004,129.949997,127.430000,129.929993,129.929993,76960600
\ No newline at end of file
diff --git a/charts/static/AAPL2.csv b/charts/static/AAPL2.csv
new file mode 100644
index 0000000..bf6fbbe
--- /dev/null
+++ b/charts/static/AAPL2.csv
@@ -0,0 +1,54 @@
+Date,Open
+01.02,176.063
+01.09,176.801
+01.16,168.097
+01.23,170.52
+01.30,159.105
+02.06,169.174
+02.13,172.086
+02.20,166.612
+02.27,164.239
+03.06,162.325
+03.13,162.624
+03.20,150.77
+03.27,162.774
+04.03,171.39
+04.10,173.78
+04.17,167.947
+04.24,163.182
+05.01,160.391
+05.08,156.004
+05.15,154.454
+05.22,145.107
+05.29,137.371
+06.05,148.616
+06.12,146.583
+06.19,132.466
+06.26,133.014
+07.03,142.261
+07.10,137.351
+07.17,145.227
+07.24,150.282
+07.31,153.541
+08.07,160.521
+08.14,166.094
+08.21,171.236
+08.28,169.409
+09.04,160.878
+09.11,156.211
+09.18,159.326
+09.25,149.063
+10.02,149.412
+10.09,137.981
+10.16,140.187
+10.23,140.831
+10.30,146.941
+11.06,152.901
+11.13,137.11
+11.20,148.97
+11.27,150.16
+12.04,145.14
+12.11,147.77
+12.18,142.7
+12.25,135.11
+
diff --git a/charts/static/HistoricalData_APL.csv b/charts/static/HistoricalData_APL.csv
new file mode 100644
index 0000000..0af8893
--- /dev/null
+++ b/charts/static/HistoricalData_APL.csv
@@ -0,0 +1,20 @@
+Date,Close/Last,Volume,Open,High,Low
+01/06/2023,$129.62,87754720,$126.01,$130.29,$124.89
+01/05/2023,$125.02,80962710,$127.13,$127.77,$124.76
+01/04/2023,$126.36,89113630,$126.89,$128.6557,$125.08
+01/03/2023,$125.07,112117500,$130.28,$130.9,$124.17
+12/30/2022,$129.93,77034210,$128.41,$129.95,$127.43
+12/29/2022,$129.61,75703710,$127.99,$130.4814,$127.73
+12/28/2022,$126.04,85438390,$129.67,$131.0275,$125.87
+12/27/2022,$130.03,69007830,$131.38,$131.41,$128.72
+12/23/2022,$131.86,63814890,$130.92,$132.415,$129.64
+12/22/2022,$132.23,77852110,$134.352,$134.56,$130.3
+12/21/2022,$135.45,85927990,$132.98,$136.81,$132.75
+12/20/2022,$132.3,77432820,$131.39,$133.25,$129.89
+12/19/2022,$132.37,79592610,$135.11,$135.2,$131.32
+12/16/2022,$134.51,160156900,$136.685,$137.65,$133.73
+12/15/2022,$136.5,98931910,$141.11,$141.8,$136.025
+12/14/2022,$143.21,82291180,$145.35,$146.655,$141.16
+12/13/2022,$145.47,93886160,$149.5,$149.9692,$144.24
+12/12/2022,$144.49,70462650,$142.7,$144.5,$141.06
+12/09/2022,$142.16,76097010,$142.34,$145.57,$140.9
diff --git a/charts/static/akcjeWIG40.csv b/charts/static/akcjeWIG40.csv
new file mode 100644
index 0000000..eb5d31b
--- /dev/null
+++ b/charts/static/akcjeWIG40.csv
@@ -0,0 +1,13 @@
+Data,Otwarcie,Najwyzszy,Najnizszy,Zamkniecie,Wolumen
+01,5310.69
+02,5123.32
+03,4590.48
+04,4786.4
+05,4374.13
+06,4351.82
+07,4069.32
+08,4142.42
+09,3828.67
+10,3539.92
+11,3835.14
+12,4136.36
diff --git a/charts/static/mwig40_m.csv b/charts/static/mwig40_m.csv
new file mode 100644
index 0000000..8f1049d
--- /dev/null
+++ b/charts/static/mwig40_m.csv
@@ -0,0 +1,13 @@
+Data,Otwarcie,Najwyzszy,Najnizszy,Zamkniecie,Wolumen
+2022-01-31,5310.69,5584.52,4960.09,5106.59,110936154
+2022-02-28,5123.32,5299.36,4133.55,4589.49,124463773
+2022-03-31,4590.48,4879.14,4022.22,4778.07,250932976
+2022-04-30,4786.4,4876.56,4298.09,4370.19,178369206
+2022-05-31,4374.13,4398.18,4025.77,4349.02,161111044
+2022-06-30,4351.82,4364.81,3933.24,4069.37,127681534.74069
+2022-07-31,4069.32,4151.32,3871.78,4151.32,152999536
+2022-08-31,4142.42,4300.99,3787.83,3838.57,137259580
+2022-09-30,3828.67,4026.74,3493.06,3552.54,155079325
+2022-10-31,3539.92,3824.04,3489.63,3824.04,136478417
+2022-11-30,3835.14,4142.91,3782.99,4108.81,262803731.84112
+2022-12-31,4136.36,4199.5,3992.16,4154.32,162133955
diff --git a/charts/static/obligacjePL.csv b/charts/static/obligacjePL.csv
new file mode 100644
index 0000000..5f82542
--- /dev/null
+++ b/charts/static/obligacjePL.csv
@@ -0,0 +1,13 @@
+Data,Otwarcie,Najwyzszy,Najnizszy,Zamkniecie
+01,100.11
+02,99.87
+03,99.83
+04,94.69
+05,91.27
+06,91.96
+07,92.03
+08,95.79
+09,93.63
+10,91.88
+11,88.51
+12,95.01
diff --git a/charts/static/xauusd_y.csv b/charts/static/xauusd_y.csv
new file mode 100644
index 0000000..d4a762f
--- /dev/null
+++ b/charts/static/xauusd_y.csv
@@ -0,0 +1,15 @@
+Data;Otwarcie;Najwyzszy;Najnizszy;Zamkniecie
+2010-12-31;1095.2;1430.6;1043.72;1420.55
+2011-12-31;1419;1921.07;1308.26;1564.81
+2012-12-31;1569.36;1795.54;1526.63;1676.4
+2013-12-31;1670.6;1696.09;1180.16;1204.12
+2014-12-31;1205.1;1388.34;1131.78;1183
+2015-12-31;1187.09;1306.43;1046.64;1061.46
+2016-12-31;1064.65;1375.42;1062.61;1150.91
+2017-12-31;1150.53;1357.56;1146.18;1303.33
+2018-12-31;1303.38;1366.12;1160.31;1282.56
+2019-12-31;1282.6;1557.1;1266.48;1517.305
+2020-12-31;1518.17;2075.11;1451.28;1898.705
+2021-12-31;1903.49;1959.11;1671.9;1829.5
+2022-12-31;1830.05;2069.94;1614.905;1823.48
+2023-12-31;1823.65;1826.7;1823.48;1824.14
diff --git a/charts/tests.py b/charts/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/charts/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/charts/urls.py b/charts/urls.py
new file mode 100644
index 0000000..65e0edf
--- /dev/null
+++ b/charts/urls.py
@@ -0,0 +1,6 @@
+from django.urls import path
+from charts import views
+
+urlpatterns = [
+ path('', views.index, name='graph'),
+]
diff --git a/charts/views.py b/charts/views.py
new file mode 100644
index 0000000..e48188c
--- /dev/null
+++ b/charts/views.py
@@ -0,0 +1,28 @@
+from django.shortcuts import render
+
+from collections import Counter
+from math import ceil
+
+from django.shortcuts import render
+
+from charts.models import BiteStat
+
+
+def index(request):
+ stats = BiteStat.objects.order_by('completed')
+
+ data = Counter()
+ for row in stats:
+ yymm = row.completed.strftime("%Y-%m")
+ data[yymm] += 1
+
+ # unpack dict keys / values into two lists
+ labels, values = zip(*data.items())
+
+ context = {
+ "labels": labels,
+ "values": values,
+ }
+ return render(request, "graph.html", context)
+
+
diff --git a/education/__init__.py b/education/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/education/admin.py b/education/admin.py
new file mode 100644
index 0000000..8c38f3f
--- /dev/null
+++ b/education/admin.py
@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.
diff --git a/education/apps.py b/education/apps.py
new file mode 100644
index 0000000..4a92e70
--- /dev/null
+++ b/education/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class EducationConfig(AppConfig):
+ default_auto_field = 'django.db.models.BigAutoField'
+ name = 'education'
diff --git a/education/migrations/__init__.py b/education/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/education/models.py b/education/models.py
new file mode 100644
index 0000000..71a8362
--- /dev/null
+++ b/education/models.py
@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.
diff --git a/education/tests.py b/education/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/education/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/education/urls.py b/education/urls.py
new file mode 100644
index 0000000..e69de29
diff --git a/education/views.py b/education/views.py
new file mode 100644
index 0000000..fb50b76
--- /dev/null
+++ b/education/views.py
@@ -0,0 +1,6 @@
+from django.shortcuts import render
+
+
+def education_view(request):
+ context = {}
+ return render(request, 'education/education.html', context)
diff --git a/pdf_view/__init__.py b/pdf_view/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/pdf_view/admin.py b/pdf_view/admin.py
new file mode 100644
index 0000000..8c38f3f
--- /dev/null
+++ b/pdf_view/admin.py
@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.
diff --git a/pdf_view/apps.py b/pdf_view/apps.py
new file mode 100644
index 0000000..e5af211
--- /dev/null
+++ b/pdf_view/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class PdfViewConfig(AppConfig):
+ default_auto_field = 'django.db.models.BigAutoField'
+ name = 'pdf_view'
diff --git a/pdf_view/migrations/__init__.py b/pdf_view/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/pdf_view/models.py b/pdf_view/models.py
new file mode 100644
index 0000000..71a8362
--- /dev/null
+++ b/pdf_view/models.py
@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.
diff --git a/pdf_view/tests.py b/pdf_view/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/pdf_view/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/pdf_view/urls.py b/pdf_view/urls.py
new file mode 100644
index 0000000..e69de29
diff --git a/pdf_view/views.py b/pdf_view/views.py
new file mode 100644
index 0000000..679ef18
--- /dev/null
+++ b/pdf_view/views.py
@@ -0,0 +1,9 @@
+from django.shortcuts import render
+from django.http import HttpResponse
+
+
+# def pdf_view(request):
+# with open('Czym jest portfel inwestycyjny.pdf', 'rb') as pdf:
+# response = HttpResponse(pdf.read(), content_type='application/pdf')
+# response['Content-Disposition'] = 'inline;filename=mypdf.pdf'
+# return response
diff --git a/static/Zeszyt1.csv b/static/Zeszyt1.csv
new file mode 100644
index 0000000..0634f15
--- /dev/null
+++ b/static/Zeszyt1.csv
@@ -0,0 +1,102 @@
+writer;surprise;science;glass;mixture;current
+79770;551446;3215546;5819979770;1;57
+0;3;273;27;842;99857890
+4;32;7513624;28331;949598;6473025
+89;544527;4467;16834745;606;5681
+1685969;666;8732;21;454322;5578336
+4;71562;94693;;1563;973
+3631;36934012;795;;88505714;995
+993;495569353;52;974896955;319836;
+9771;3626;6;873064;30332721;162
+;4074212;6262;;2849432;57
+47590011;6849;;484402;6079758;1534735461
+6769;;75;127493;1698290;68650519
+3440;8;648;2;;79
+85534467;1512779;21662856;90831;5297001;1389943
+2829;687539227;7099532438;941859;736794314;
+590328791;679306515;3274;96950;3668;
+8841396570;9446;82421547;13;5879;8265
+66115269;;89036;8;864482971;374263079
+73174875;21;6747893;6;63;32319195
+1641585;;383799;518;558775585;8479
+1086906126;5547986218;59448692;795;89;31
+3;946744435;597;1967447;943;4
+17;6587445;1829252;930614;19797732;653
+72375;3958751;;31;335;891
+;18268916;0;504456;266553541;2
+744;5740105;69432484;20109;79;780068002
+1;36;32313;1768860;9;
+3680;0;768;2729;8339;68
+;8199;2593353215;16;;430
+6;30146081;931;4338;216537803;20
+786748;587336;89179;580;8;5
+6295555;54867;499907;5045938847;343916;938
+16922;267671;760146062;343652;1089612006;4
+42628;67;62;1240;50744841;7633
+143836;;14072;58;;69979
+1;379464;5797429598;26;801;6538
+;694662;4161;337;1950084604;36104
+908336621;195365;32;45759;579106;9409
+2;5453152110;;98190650;88;3407217
+7015805;138625;45108;94957732;5;993328285
+8;579734087;349;8147403;1;
+7839;89;9716987;392555822;;709263
+92;672177;88249701;406;2821;26191161
+691541318;42427;827;;6479862;8578
+;71353;79515541;28808360;4388;415
+37;431;49152278;;64221179;9985768
+99;0;71880789;391501222;8729242;51
+247573592;16195;1056140;434610;4;1
+1044887;775;765559;382;7;30876071
+1301488258;231707866;5;53849947;67;2870026
+63;321;290689;899450;269344403;
+5;617874;95157;8;59;61
+473679384;1014;2782;2;1;9005
+59;;651858;1042188;28172;388893
+;8165704708;7040;4;;
+8216685;41987145;7737362423;33269896;1203;47559
+436008;6945;477;977;;7
+6;97402548;3;;9580589874;6786486
+13;6;400120723;15;69019712;8
+;4462640;489;506693;326794017;878508936
+94521445;2201;5;4972;8398;43372
+714440981;461560;2014;193508955;808;
+62977;4;2442541;9899;68539143;2
+568979113;264780;;252982;91730675;
+68421336;3234;319709;20762;39793275;
+478799723;96673;3203817;901;266187;378080791
+1;4;87377;7;96967662;53383429
+1613738;;46831;;79;70826
+202688;5;248936;5810641;392138;0
+4060570;45;58690883;3;4574;853291856
+339;64786;5;819;90982;641
+824;57;35;72936;;81741
+2879184;;7050;4111618;48872334;4
+63552;3;539862;74;30;8963625379
+;5031509;324405811;26;22536;8912375
+313723;88221;377541;616;8;42
+963;2;760;44;247438711;2089
+7564394;495650;3704;6538;;
+69476297;87562683;7;572;273388837;8875187
+105;480986332;843;;5;3
+260;;6;9;409;367381751
+;935937;6757276;3801;54;243322
+7549;703334;2001310;56359;95;497703550
+1394784;74;477;1096980;7200221;68
+97985264;1327741425;;1241589;527;38246691
+18;2638737715;59;978511422;2116;834579498
+47;4498244;32;31192;25128;6429969
+1654209;120;8500864;3;43671386;2390829
+36538;26300;4677116774;39589;;619
+;893;80;49883;3305161;68
+7911115;83407270;8;191;1462621;5018
+591039;542219339;287;;8;7
+65;33786;685;530942859;19;37343359
+1;;45097;9;38741663;
+920;936149731;7074638;3;1;2698
+366;838;12382;125213;13471967;1
+489;;379562;975712;82665;163715
+3;382728;;;134;60717
+9;;7837;60;198;4770
+234;32119;70028;38569167;1;8890501
+10352;17362008;5625;;388629;66536858
diff --git a/static/images/charts.jpg b/static/images/charts.jpg
new file mode 100644
index 0000000..dc09691
Binary files /dev/null and b/static/images/charts.jpg differ
diff --git a/static/main.css b/static/main.css
index 830880c..99844a5 100644
--- a/static/main.css
+++ b/static/main.css
@@ -1,3 +1,9 @@
.grad {
background-image: linear-gradient(to right, orange , white);
+}
+.center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+ width: 50%;
}
\ No newline at end of file
diff --git a/templates/graph.html b/templates/graph.html
new file mode 100644
index 0000000..916b5f2
--- /dev/null
+++ b/templates/graph.html
@@ -0,0 +1,11 @@
+{% load static %}
+
+
+
+Bite exercise stats
+
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/main.html b/templates/main.html
index 62e74ca..a529360 100644
--- a/templates/main.html
+++ b/templates/main.html
@@ -26,19 +26,22 @@
{% if user.is_authenticated %}
Wyloguj
+ Użyj bezpiecznego wariantu
+ Użyj bardziej ryzykownego wariantu
+ Zainwestuj z Xtb
+ Zainwestuj z Etoro
{% else %}
Zaloguj
{% endif %}
- Dropdown
+ Edukacja
@@ -48,8 +51,8 @@
@@ -57,9 +60,10 @@
{% block content %}
Witaj na stronie FinTech!
- Tutaj możesz nauczyć się jak inwestować i prognozować kursy z pomocą sztucznej inteligencji.
+ Tutaj możesz nauczyć się jak inwestować i prognozować kursy z pomocą sztucznej inteligencji.
+
{% endblock %}
diff --git a/templates/my_template.html b/templates/my_template.html
new file mode 100644
index 0000000..263bb89
--- /dev/null
+++ b/templates/my_template.html
@@ -0,0 +1,10 @@
+{% load matplotlib %}
+
+
+ My Plot
+
+
+ My Plot
+ {% matplotlib_inline fig %}
+
+
\ No newline at end of file
diff --git a/templates/obligacjePLplot.html b/templates/obligacjePLplot.html
new file mode 100644
index 0000000..acd959d
--- /dev/null
+++ b/templates/obligacjePLplot.html
@@ -0,0 +1,13 @@
+
+
+
+
+ Title
+
+
+
+Oto wykres obligacji polskich przedstawiający zmianę ich wartości w rozbiciu miesięcznym w roku 2022 z
+ prognozą na kolejne 6 miesięcy. Jak widać wahania nie są duże, więc ryzyko związane z inwestycją
+ jest relatywnie niskie. Trzeba pamiętać jednak, że zysk nie będzie również wysoki.
+
+
\ No newline at end of file
diff --git a/templates/plot.html b/templates/plot.html
new file mode 100644
index 0000000..f7a5a76
--- /dev/null
+++ b/templates/plot.html
@@ -0,0 +1,11 @@
+{% extends "main.html" %}
+
+
+
+
+ Title
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/registration/login.html b/templates/registration/login.html
index 168c41f..486c554 100644
--- a/templates/registration/login.html
+++ b/templates/registration/login.html
@@ -29,7 +29,7 @@
Nie masz konta? Zarejestruj się .
diff --git a/templates/registration/register.html b/templates/registration/register.html
index f0b169e..4c1fa3a 100644
--- a/templates/registration/register.html
+++ b/templates/registration/register.html
@@ -7,13 +7,13 @@
-
Register
+
Zarejestruj się
-
If you already have an account, login instead.
+
Jeżeli masz już konto, zaloguj się .
{% endblock %}
\ No newline at end of file
diff --git a/templates/wigplot.html b/templates/wigplot.html
new file mode 100644
index 0000000..0be0c69
--- /dev/null
+++ b/templates/wigplot.html
@@ -0,0 +1,12 @@
+
+
+
+
+ Title
+
+
+
+Oto wykres wartości 40 największych polskich spółek na przestrzeni roku 2022 w podziale na miesiące
+ z prognozą na kolejne pół roku. Jak widać wahania są całkiem duże, więc można dużo zyskać ale również dużo stracić
+
+
\ No newline at end of file
diff --git a/tests/test_1.py b/tests/test_1.py
new file mode 100644
index 0000000..29d69d9
--- /dev/null
+++ b/tests/test_1.py
@@ -0,0 +1,21 @@
+from django.contrib.auth.models import User
+from django.http import request, HttpResponseRedirect
+from django.test import TestCase
+from django.urls import reverse
+
+
+class LogInTest(TestCase):
+ def setUp(self):
+ self.credentials = {
+ 'username': 'test123',
+ 'password': 'Fintech123'}
+ User.objects.create_user(**self.credentials)
+
+ def test_login(self):
+ response = self.client.post('/accounts/login', self.credentials, follow=True)
+ self.assertFalse(response.context['user'].is_authenticated)
+
+class ButtonTest(TestCase):
+ def button_test(self):
+ if request.POST.get('Submit') == 'Submit':
+ print('user clicked submit')
\ No newline at end of file