diff --git a/val_sim.py b/val_sim.py index 5251de736e310aa76af8c5de598e6ff0839725c3..9425187269678361d96f4178292aa2d8e1a198f6 100644 --- a/val_sim.py +++ b/val_sim.py @@ -1,16 +1,14 @@ +#The below code was referenced and modified as per the requirement from the code provided on course work desciption document. +#The handling of the input from the GAE(codes from line 9 to 18) are adopted from Python3 documentation https://docs.python.org/3/library/ #!/usr/bin/python3 -import math -import random +import math, random, sys, json from statistics import mean, stdev -import json -import sys -# Read input from stdin -input_data = sys.stdin.read() -event = json.loads(input_data) -# Extract the values from the event dictionary +event = json.loads(sys.stdin.read()) + + dt = eval(event['key1']) close = eval(event['key2']) buy = eval(event['key3']) @@ -18,49 +16,44 @@ sell = eval(event['key4']) h = int(event['key5']) d = int(event['key6']) t = event['key7'] - minhistory = h shots = 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 -} + if t == "buy": + if buy[i] == 1: + close_data = close[i-minhistory:i] + pct_change = [(close_data[i] - close_data[i-1]) / close_data[i-1] for i in range(1,len(close_data))] + mean = mean(pct_change) + std = stdev(pct_change) + simulated = [random.gauss(mean,std) for x 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": + if sell[i] == 1: + close_data = close[i-minhistory:i] + pct_change = [(close_data[i] - close_data[i-1]) / close_data[i-1] for i in range(1,len(close_data))] + mean = mean(pct_change) + std = stdev(pct_change) + simulated = [random.gauss(mean,std) for x 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])) + +output = {"dates" : dates, + "var95" : var95_list, + "var99" : var99_list + } + +output = json.dumps(output) -# Output result as JSON -print("Content-Type: application/json\n") -print(json.dumps(response))