Files
V20pyPro/backend/pricing.py
T
2018-05-08 20:51:20 +08:00

58 lines
1.9 KiB
Python

# price history or stream functions
from .config import token, accountID, env
from oandapyV20 import API
from oandapyV20.endpoints.instruments import InstrumentsCandles
from oandapyV20.endpoints.pricing import PricingStream
import pandas as pd
import time
api = API(token)
# returns the last 500 OHLCV candles for an instrument
# maximum count is 500
# window: M1, M5, M15, H, H4, D, etc.
def history(instrument, window, collection=False):
instrument = instrument
data = list()
client = API(token)
params = {"count": 500, "granularity": window}
r = InstrumentsCandles(instrument, params)
client.request(r)
resp = r.response
for candle in resp.get('candles'):
dt = candle['time']
Open = candle['mid']['o']
High = candle['mid']['h']
Low = candle['mid']['l']
Close = candle['mid']['c']
Volume = candle['volume']
update = [dt, Open, High, Low, Close, Volume]
data.append(update)
df = pd.DataFrame(data, columns=['dt','Open','High','Low','Close','Volume'])
# collect data, useful for research and weekends/holidays when the market isn't open
if collection == True:
title = 'data/%s_%s_history.csv' % (instrument, window)
df.to_csv(title)
return df
# creates a pricing stream,
def stream(instrument, window):
request_params = {"timeout":100}
params = {"instruments":instrument, "granularity":window}
api = API(access_token=token,environment=env, request_params=request_params)
r = PricingStream(accountID=accountID, params=params)
while True:
try:
api.request(r)
for R in r.response:
time = R['time']
ask = R['asks'][0]['price']
bid = R['bids'][0]['price']
return time, ask, bid
except Exception as e:
print(e)
continue