diff --git a/val_sim.py b/val_sim.py index 845256b66d1d228a9c411089f22cf31372013f93..2d283450fc40b82c6f59f71fc315fd48d5fb7705 100644 --- a/val_sim.py +++ b/val_sim.py @@ -1,31 +1,70 @@ #!/usr/bin/python3 -import sys, json +import math +import random +from statistics import mean, stdev +import json +import sys import cgitb cgitb.enable() -# Load event data from stdin -event = json.loads(sys.stdin.read()) - -# Extract input parameters from the event -dt = eval(event['key1']) -close = eval(event['key2']) -buy = eval(event['key3']) -sell = eval(event['key4']) -h = int(event['key5']) -d = int(event['key6']) -t = event['key7'] - -# Create the output dictionary with the input parameters -output = { - "dates": dt, - "close": close, - "buy": buy, - "sell": sell, - "h": h, - "d": d, - "t": t +# Read input from stdin +input_data = sys.stdin.read() + +# Parse the input data as JSON +event_dict = json.loads(input_data) + +# Extract the values from the event dictionary +dt = eval(event_dict['key1']) +close = eval(event_dict['key2']) +buy = eval(event_dict['key3']) +sell = eval(event_dict['key4']) +h = int(event_dict['key5']) +d = int(event_dict['key6']) +t = event_dict['key7'] + +minhistory = int(h) +shots = int(d) + +var95_list = [] +var99_list = [] +dates = [] + +# Loop through the data to calculate var95 and var99 +for i in range(minhistory, len(close)): + if t == "buy" and buy[i] == 1: # Calculate for Buy signals + data = close[i-minhistory:i] + pct_change = [(data[j] - data[j-1]) / data[j-1] for j in range(1, len(data))] + mean_value = mean(pct_change) + std_value = stdev(pct_change) + simulated = [random.gauss(mean_value, std_value) for _ in range(shots)] + simulated.sort(reverse=True) + var95 = simulated[int(len(simulated) * 0.95)] + var99 = simulated[int(len(simulated) * 0.99)] + var95_list.append(var95) + var99_list.append(var99) + dates.append(str(dt[i])) + + elif t == "sell" and sell[i] == 1: # Calculate for Sell signals + data = close[i-minhistory:i] + pct_change = [(data[j] - data[j-1]) / data[j-1] for j in range(1, len(data))] + mean_value = mean(pct_change) + std_value = stdev(pct_change) + simulated = [random.gauss(mean_value, std_value) for _ in range(shots)] + simulated.sort(reverse=True) + var95 = simulated[int(len(simulated) * 0.95)] + var99 = simulated[int(len(simulated) * 0.99)] + var95_list.append(var95) + var99_list.append(var99) + dates.append(str(dt[i])) + +# Prepare the response +response = { + "dates": dates, + "var95_list": var95_list, + "var99_list": var99_list } -# Print the output as a JSON string -print(json.dumps(output)) +# Print the output as a JSON string, which is how CGI scripts return data +print("Content-Type: application/json\n") +print(json.dumps(response))