我试图从我的经纪人API(xTrade Brokers)
获取历史数据我先尝试过:
import json
import pandas as pd
data=json.loads(history)
dafr = pd.DataFrame(data,columns=['col1','col2'])
之后我尝试了下面的版本,但仍然没有进行管理以获得正确的DataFrame格式,因此我可以将其用于回测。
def main():
# create new api client and connect to the SERVER
apiClient = APIClient(address=SERVER, port=PORT, encrypt=True)
# prepare the login command
loginCmd = loginCommand(USERID, PASSWORD)
# execute login command and get streaming session ID
loginResponse = apiClient.execute(loginCmd)
streamSessionId = loginResponse['streamSessionId']
print('Logged in as ' + str(USERID))
# create new stream client with given stream session ID
streamClient = APIStreamClient(address=SERVER, port=STREAMING_PORT, ssId=streamSessionId)
print('Streaming opened')
# prepare get server time command
getServerTimeCmd = baseCommand('getServerTime', dict())
# get server time
getServerTimeResponse = apiClient.execute(getServerTimeCmd)
print('Server time: ' + str(getServerTimeResponse['returnData']['timeString']))
# prepare get all symbols command`
mySymbol = 'EURUSD'
getHistory = baseCommand("getChartLastRequest", dict(info = dict(symbol = mySymbol, period = 5, start = 1384981096762)))
history = apiClient.execute(getHistory)
x = pd.DataFrame(history['returnData']['rateInfos'])
我无法将该JSON中的数据提取到DataFrame。
如果我在上面的脚本后打印x。此外,如果我只是打印x,它只是告诉我名字'x'没有定义。
答案 0 :(得分:0)
将字符串传递给DataFrame构造函数将不起作用(它只会传播该值)。
执行此操作的最佳方法是使用read_json
直接读取url /字符串(0.12中的新内容):
df = pd.read_json(history)
如果您已将其作为字符串使用,则可以使用StringIO使其类似于文件:
from StringIO import StringIO # alternatively, from io import StringIO
pd.DataFrame(StringIO(data))