Я новичок в python, но влюбляюсь в него, когда мое понимание становится лучше. При этом мне удалось собрать сценарий для сброса базы данных Quandl WIKI EOD в CSV для каждой соответствующей акции. который я включил ниже (Python 2.7):
import pandas as pd
import Quandl
#this ignores the first symbol in tickers.txt, add a header!
symbols_list = list(pd.read_csv('tickers.txt', index_col=0).T)
print symbols_list
df = {}
for ticker in symbols_list:
stock = str("WIKI/" + ticker + ".11")
#print stock
print str(ticker + ".csv")
df[ticker] = Quandl.get(stock, authtoken="XXXXXXXXXXXXX", trim_start="2016-01-01")
df[ticker].to_csv(str(ticker + ".csv"))
Моя следующая цель - создать исторический столбец с текущими максимумами и минимумами для каждого CSV акций. Это упростило бы создание исторического «газового манометра» для фондового рынка, аналогичного тем, что на http://www.finviz.com/. Новый верхний / новый нижний калибр чрезвычайно полезен. Когда более 2000 акций достигают нового минимума и лишь некоторые из них достигают нового максимума, легко оценить, насколько тяжелая распродажа.
Пока мне удалось перебрать каждый .csv в моей рабочей папке и вести подсчет каждого нового максимума / нового минимума. Моя трубка - это правильный способ ввести эту информацию в каждый CSV в виде новых столбцов. CSV EOD содержат ['Date', 'Adj. Закройте »] для заголовков в каждом, и я хочу добавить [« Высокий »,« Низкий »].
Мой код на данный момент:
import os
import pandas as pd
csv = [f for f in os.listdir('.') if f.endswith('.csv')]
print csv
for i in csv:
df = pd.read_csv(i, index_col=0, parse_dates=True)
print df
j=0
k=0
for i in df['Adj. Close']: #for each value in adj close
if j==0:
j=i
k=i
elif i>j:
j=i #high
elif i<k:
k=i #low
print j,k #print high & low
Я очень ценю вашу помощь, ребята! Все фрагменты кода и ответы на вопросы сделали изучение Python намного более увлекательным.
Вот результат выполнения скрипта на данный момент:
['A.csv', 'AA.csv']
Adj. Close
Date
2016-01-04 40.69
2016-01-05 40.55
2016-01-06 40.73
2016-01-07 39.00
2016-01-08 38.59
2016-01-11 37.94
2016-01-12 38.19
2016-01-13 36.86
2016-01-14 37.61
2016-01-15 37.11
2016-01-19 37.20
2016-01-20 37.26
2016-01-21 37.23
2016-01-22 37.98
40.69 40.69
40.69 40.55
40.73 40.55
40.73 39.0
40.73 38.59
40.73 37.94
40.73 37.94
40.73 36.86
40.73 36.86
40.73 36.86
40.73 36.86
40.73 36.86
40.73 36.86
40.73 36.86
Adj. Close
Date
2016-01-04 9.71
2016-01-05 9.27
2016-01-06 8.61
2016-01-07 8.27
2016-01-08 8.07
2016-01-11 8.00
2016-01-12 7.28
2016-01-13 7.13
2016-01-14 7.24
2016-01-15 6.90
2016-01-19 6.74
2016-01-20 6.74
2016-01-21 7.09
2016-01-22 6.87
9.71 9.71
9.71 9.27
9.71 8.61
9.71 8.27
9.71 8.07
9.71 8.0
9.71 7.28
9.71 7.13
9.71 7.13
9.71 6.9
9.71 6.74
9.71 6.74
9.71 6.74
9.71 6.74
Этот код прекрасно работал:
import os
import pandas as pd
csv = [f for f in os.listdir('.') if f.endswith('.csv')]
print csv
for i in csv:
df = pd.read_csv(i, index_col=0, parse_dates=True)
#print df
df['High'] = pd.rolling_max(df['Adj. Close'], window=df.shape[0], min_periods=1)
df['Low'] = pd.rolling_min(df['Adj. Close'], window=df.shape[0], min_periods=1)
#print df
g = os.path.normcase(os.path.join(os.path.dirname(__file__), i)) #os.getcwd()
print 'full path =', g
with open(g , "w") as f:
df.to_csv(f)
Теперь я займусь созданием исторического списка новых максимумов / минимумов каждого дня.
df
? - person jezrael   schedule 25.01.2016print df
- person jezrael   schedule 25.01.2016