diff options
Diffstat (limited to 'app.py')
-rw-r--r-- | app.py | 56 |
1 files changed, 37 insertions, 19 deletions
@@ -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 |