aboutsummaryrefslogtreecommitdiff
path: root/app.py
diff options
context:
space:
mode:
authorloit <michael.foiani@gmail.com>2025-07-28 19:47:49 -0400
committerloit <michael.foiani@gmail.com>2025-07-28 19:47:49 -0400
commit1ed62b0e315ca1fc97b3ba8752db24e0bebd706f (patch)
treeaa8fa98027d0b6b3588d4a06bde699964d26f4c7 /app.py
parent8907c286e857b622af171c2d8ac9040b05970549 (diff)
add calculations that determine the percent gain and loss from using this algorithm
Diffstat (limited to 'app.py')
-rw-r--r--app.py56
1 files changed, 37 insertions, 19 deletions
diff --git a/app.py b/app.py
index 5cd5521..51e0564 100644
--- a/app.py
+++ b/app.py
@@ -1,24 +1,11 @@
from dash import Dash, dcc, html, Input, Output
-from analysis import calc_emas, find_intersections, interpolate_intersection
+from analysis import calc_emas, find_intersections, interpolate_intersection, calculate_profit
import plotly.graph_objects as go
import json
import datetime
app = Dash(__name__)
-
-app.layout = html.Div([
- html.H4('Interactive color selection with simple Dash example'),
- html.P("Select color:"),
- dcc.Dropdown(
- id="dropdown",
- options=['Gold', 'MediumTurquoise', 'LightGreen'],
- value='Gold',
- clearable=False,
- ),
- dcc.Graph(id="graph"),
-])
-
# pull stock data from json files
timestamps_file = open('timestamps.json', 'r')
timestamps_file_data = timestamps_file.read()
@@ -31,7 +18,7 @@ prices = json.loads(prices_file.read())
ema_5 = calc_emas(5, prices)
ema_13 = calc_emas(13, prices)
-intersection_indices = find_intersections(ema_5, ema_13)
+intersection_indices = find_intersections(ema_5, ema_13, offset=13) # offset so don't calculate the SMA days
interpolated_intersections = [interpolate_intersection(indices, timestamps, ema_5, ema_13) for indices in intersection_indices]
intersected_x = []
intersected_y = []
@@ -39,7 +26,36 @@ for x,y in interpolated_intersections:
intersected_x.append(x)
intersected_y.append(y)
+profit = calculate_profit(ema_5, ema_13, prices, timestamps, 13)
+buy_info = profit[-2]
+buy_x = []
+buy_y = []
+for x,y,_ in buy_info:
+ buy_x.append(x)
+ buy_y.append(y)
+sell_info = profit[-1]
+sell_x = []
+sell_y = []
+for x,y,_ in sell_info:
+ sell_x.append(x)
+ sell_y.append(y)
+
+print("Result Analysis:\n", "Percent gain/loss:\t", profit[0])
+percent_gain = profit[0] * 100
+
+app.layout = html.Div([
+ html.H4('Interactive color selection with simple Dash example'),
+ html.P("Select color:"),
+ dcc.Dropdown(
+ id="dropdown",
+ options=['Gold', 'MediumTurquoise', 'LightGreen'],
+ value='Gold',
+ clearable=False,
+ ),
+ dcc.Graph(id="graph"),
+ html.P("If bought and sold on these signals, the percent gain/loss would be: " + str(round(percent_gain, 4)))
+])
@app.callback(
Output("graph", "figure"),
@@ -47,10 +63,12 @@ for x,y in interpolated_intersections:
def display_color(color):
fig = go.Figure(
[
- go.Scatter(name='Price', x=timestamps, y=prices, line=dict(color='rgb(0, 255, 255)'), mode='lines'), # prices
- go.Scatter(name='5 day EMA', x=timestamps, y=ema_5, line=dict(color='rgb(0, 255, 0)'), mode='lines'), # 5 ema line
- go.Scatter(name='13 day EMA', x=timestamps, y=ema_13, line=dict(color='rgb(0, 0, 255)'), mode='lines'), # 13 ema line
- go.Scatter(name='EMA Intersections', x=intersected_x, y=intersected_y, line=dict(color='rgb(255, 0, 0)'), mode='markers') # EMA intersection points
+ go.Scatter(name='Price', x=timestamps, y=prices, line=dict(color='rgb(0, 255, 0)'), mode='lines'),
+ # go.Scatter(name='5 day EMA', x=timestamps, y=ema_5, line=dict(color='rgb(0, 255, 0)'), mode='lines'),
+ # go.Scatter(name='13 day EMA', x=timestamps, y=ema_13, line=dict(color='rgb(0, 0, 255)'), mode='lines'),
+ # go.Scatter(name='EMA Intersections', x=intersected_x, y=intersected_y, line=dict(color='rgb(255, 0, 0)'), mode='markers')
+ go.Scatter(name='Buys', x=buy_x, y=buy_y, line=dict(color='rgb(0, 0, 255)'), mode='markers', marker_size=10),
+ go.Scatter(name='Sells', x=sell_x, y=sell_y, line=dict(color='rgb(255, 255, 0)'), mode='markers', marker_size=10),
]
)
return fig