diff --git a/val_sim.py b/val_sim.py index 9425187269678361d96f4178292aa2d8e1a198f6..0fedc9f29945edf2bf58a194ceb160a210c0299a 100644 --- a/val_sim.py +++ b/val_sim.py @@ -1,59 +1,60 @@ -#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, random, sys, json from statistics import mean, stdev - - -event = json.loads(sys.stdin.read()) - - -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'] -minhistory = h -shots = d -var95_list = [] -var99_list = [] -dates = [] - -for i in range(minhistory, len(close)): - 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) - +import logging + +logging.basicConfig(filename='/var/log/apache2/val_sim.log', level=logging.ERROR) + +try: + event = json.loads(sys.stdin.read()) + + 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'] + + minhistory = h + shots = d + var95_list = [] + var99_list = [] + dates = [] + + for i in range(minhistory, len(close)): + if t == "buy" and 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_val = mean(pct_change) + std = stdev(pct_change) + simulated = [random.gauss(mean_val, 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" and 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_val = mean(pct_change) + std = stdev(pct_change) + simulated = [random.gauss(mean_val, 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} + print("Content-Type: application/json") + print() + print(json.dumps(output)) + +except Exception as e: + logging.error(f"Error: {e}") + sys.exit(1)