Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import pytz
- import requests
- import pandas as pd
- from datetime import datetime, timedelta
- # need Stock and Price models ... are very simple
- from stocks.models import Price, Stock
- def get_working_dir():
- from django_test.settings import MEDIA_ROOT
- working_dir = os.path.join(MEDIA_ROOT, 'scripts')
- return working_dir
- def download_file(download_path, local_filename):
- with requests.get(download_path, stream=True) as r:
- r.raise_for_status()
- with open(local_filename, 'wb') as f:
- for chunk in r.iter_content(chunk_size=8192):
- f.write(chunk)
- def import_csv_main():
- symbol = 'EUR/USD' # 'USD/JPY' ... etc ...
- # symbol = 'USD/JPY'
- symbol_replaced = symbol.replace('/', '')
- # create dataset folder if not exists
- working_dir = get_working_dir()
- dataset_folder = os.path.join(working_dir, 'dataset')
- if not os.path.isdir(dataset_folder):
- os.makedirs(dataset_folder)
- # calculate from / to
- today_0_00 = (datetime.now() + timedelta(days=1)).astimezone(pytz.utc).replace(hour=0, minute=0, second=0, microsecond=0)
- period1 = int(datetime.timestamp(today_0_00 - timedelta(days=365 * 5))) # 5 years
- period2 = int(datetime.timestamp(today_0_00))
- print('from: {}'.format(datetime.fromtimestamp(period1)))
- print('to: {}'.format(datetime.fromtimestamp(period2)))
- # download csv ...
- download_path = 'https://query1.finance.yahoo.com/v7/finance/download/{}=X?period1={}&period2={}&interval=1d&events=history&includeAdjustedClose=true'.format(symbol_replaced, period1, period2)
- local_filename = os.path.join(dataset_folder, '{}.csv'.format(symbol_replaced))
- download_file(download_path, local_filename)
- stock, _ = Stock.objects.update_or_create(name=symbol, defaults={'comment': 'yahoo_csv'})
- # clean prices
- stock.prices.all().delete()
- df = pd.read_csv(local_filename, index_col=['Date'], parse_dates=['Date'])
- for index, row in df.iterrows():
- time = index.to_pydatetime().astimezone(pytz.utc)
- print(time)
- close = float(str(row['Close']).replace(',', ''))
- close_adj = float(str(row['Adj Close']).replace(',', ''))
- openp = float(str(row['Open']).replace(',', ''))
- high = float(str(row['High']).replace(',', ''))
- low = float(str(row['Low']).replace(',', ''))
- volume = float(str(row['Volume']).replace(',', ''))
- Price.objects.update_or_create(time=time, stock=stock,
- defaults={'close': close, 'close_adj': close_adj,
- 'open': openp,
- 'high': high, 'low': low,
- 'volume': volume})
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement