-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path3.4.1.py
70 lines (53 loc) · 2.08 KB
/
3.4.1.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import requests
import sys
API_KEY = '14EfzsWYiaU3tBzgizxA'
params = {
'api_key': API_KEY,
'start_date': '2016-12-30',
'end_date': '2017-12-31'
}
# THE SPECIFIED DATASET IS NOT FREE
# CARL ZEISS MEDITEC DATA WAS UNAVAILABLE WITHOUT A PAID SUBSCRIPTION
# THE DATASET USED BELOW IS PROVIDED AS A FREE SAMPLE FROM THE DATABASE
QUANDL_CODE = 'AGB2_UADJ'
# TASK 1: COLLECT DATA
r = requests.get(f'https://www.quandl.com/api/v3/datasets/XFRA/{QUANDL_CODE}', params=params)
# TASK 2: CONVERT TO DICTIONARY
json = r.json()
# COLUMN LOOKUP
column_index = dict(zip(json['dataset']['column_names'], range(0, len(json['dataset']['column_names']))))
data = json['dataset']['data'][1:len(json['dataset']['data'])-1]
highest = 0
lowest = sys.maxsize
max_delta_daily_high_low = 0
prev_close = json['dataset']['data'][0][column_index['Close']]
max_delta_daily_close = 0
volume_sum = 0
for d in data:
high = d[column_index['High']]
low = d[column_index['Low']]
close = d[column_index['Close']]
# TASK 3: CALCULATE HIGHEST AND LOWEST OPENING PRICES
highest = high if high > highest else highest
lowest = low if low < lowest else lowest
# TASK 4: LARGEST DELTA OF DAILY HIGH/LOW
delta = high - low
max_delta_daily_high_low = delta if delta > max_delta_daily_high_low else max_delta_daily_high_low
# TASK 5: LARGEST DELTA OF DAILY CLOSE
close_delta = close - prev_close
max_delta_daily_close = close_delta if close_delta > max_delta_daily_close else max_delta_daily_close
volume_sum += d[column_index['Volume']]
prev_close = close
# TASK 6: VOLUME AVERAGE
volume_average = volume_sum / len(data)
# TASK 7: MEDIAN VOLUME
ci = column_index['Volume']
volume = sorted(map(lambda d: d[ci], data))
vi = int(len(volume) / 2)
median_volume = (volume[vi-1] + volume[vi]) / 2 if len(volume) % 2 == 0 else volume[vi]
print(f'highest: {highest}')
print(f'lowest: {lowest}')
print(f'max_delta_daily_high_low: {max_delta_daily_high_low}')
print(f'max_delta_daily_close: {max_delta_daily_close}')
print(f'volume_average: {volume_average}')
print(f'median_volume: {median_volume}')