自由贸易应用程序API
freetrade的Python项目详细描述
自由贸易API
这是试图为FreeTrade制作一个非正式的python包。 目前还没有正式的api发布。自由贸易是英国监管的零收费股票经纪人。
支持的内容
- 查找包含资产类别、市场、货币、国家等信息的
tradable securities
列表。 - 为
Trading View
的监视列表创建一个标记列表。 Historical prices
- 登录自由贸易帐户并将会话保存到
ft-session.json
文件中。
安装
通过pip
包管理器安装:
pip install freetrade
或者,对于开发此软件包:
conda create -n myenv python=3.7 conda activate myenv pip install -r requirements.txt
先决条件
在运行之前,必须设置api密钥。编辑ft-keys.json
以包含必要的api键。
这些密钥可以使用一个工具找到,该工具可以提取StringCare机密,例如DeStringCare。
API
创建ft
自由贸易对象
未经验证
fromfreetradeimportFreeTradeft=FreeTrade()
唯一有效的方法是Index
类,即获取支持的股票代码列表。
使用身份验证
fromfreetradeimportFreeTradeemail='...'# Email to use for the loginft=FreeTrade(email)
默认情况下,在创建对象时,它将尝试从ft-session.json
文件加载较旧的已验证会话。
否则它将再次登录,并请求一次性密码(otp),该密码将发送到电子邮件。
代码从标准用户输入解析otp。或者在FreeTrade
对象中指定otp_parser
参数
一个可以获取电子邮件并解析otp本身的函数。
Index
-不需要身份验证
股票行情记录
假设创建了ft
对象,下面是一个股票一个月的历史价格。
prices=ft.index.get_ticker_history('TSLA','XNAS')forhistory_date,priceinprices.items():print(f'{history_date}: ${price:.2f}')
获取资产
assets=ft.index.get_assets()
返回具有子类别的不同类别的词典。 这些子类别包含库存资产的列表。
currency
GBP
/USD
:资产列表
exchange
XLON
/XNYS
/XNAS
:资产列表
asset_class
ETF
/EQUITY
/ADR
:资产列表
country_of_incorporation
IE
/GB
/US
/KY
/……:资产列表
all
:资产列表
ETF资产样本LSE:ERNU
:
{"asset_class":"ETF","symbol":"ERNU","isin":"IE00BCRY6227","exchange":"XLON","currency":"GBP","country_of_incorporation":"IE","long_title":"iShares $ Ultrashort Bond UCITS ETF (Dist.)","short_title":"$ Ultrashort","subtitle":"Very short maturity $ debt","logo_4x":"//a.storyblok.com/f/41481/640x640/7ec0a292de/ishares-symbol-4x.png","isa_eligible":true,"coming_soon":false,"required_version":"1.0","objectID":"IE00BCRY6227",...}
获取票据
tickers=ft.index.get_tickers()
返回字典,其中:
- 密钥是自由贸易使用的交换符号,并且
- value是一个ticker符号列表
tickers={'XLON':['ERNU','III','3IN',...],'XNYS':['MMM','ABBV','BABA',...],'XNAS':['ATVI','ADBE','AMD','GOOGL','AMZN',...]}
获取交易视图监视列表的票务列表
tickers_union=ft.index.get_tradingview_tickers(join_exchanges=True)
返回用于导入交易视图监视列表的字符串格式。
使用join_exchanges = True
:
tickers_union='LSE:ERNU,LSE:III,LSE:3IN,LSE:ABF,LSE:ACA,LSE:ADM,...'
默认值(当join_exchanges = False
时):
tickers_union={'XLON':'LSE:ERNU,LSE:III,LSE:3IN,LSE:ABF,LSE:ACA,LSE:ADM,...','XNYS':'NYSE:MMM,NYSE:ABBV,NYSE:BABA,NYSE:AXP,NYSE:APA,NYSE:T,...','XNAS':'NASDAQ:ATVI,NASDAQ:ADBE,NASDAQ:AMD,NASDAQ:GOOGL,NASDAQ:AMZN,...'}
API
-需要验证
查找邮政编码的地址
postcode='E15JL'address=ft.api.get_address_by_postcode(postcode)
返回地址列表,例如示例地址:
[{"summaryline":"Freetrade, 68-80 Hanbury Street, London, Greater London, E1 5JL","organisation":"Freetrade","number":"68-80","premise":"68-80","street":"Hanbury Street","posttown":"London","county":"Greater London","postcode":"E1 5JL"}]
验证银行号码
bank=ft.api.validate_bank('308012','15887060')
返回有关帐号的许多信息,例如示例值:
{"result":"VALID","sortcode":"308012","bicbank":"LOYDGB21","bankname":"CITY OFFICE (308012)","owningbank":"LLOYDS BANK PLC","chapssrbicbank":"LOYDGB2L","chapssrbicbr":"XXX",...}
获取价格历史记录
tesla=ft.api.get_ticker_history('TSLA','XNAS',duration='1m')national_grid=ft.api.get_ticker_history('NG.','XLON',duration='1m')
可能的持续时间值,其中1m
是默认值:
5y
,2y
,1y
,ytd
,6m
,3m
,1m
,1d
返回按日期升序排序的数据点OrderedDict
。
样本输出:
tesla=OrderedDict([('2019-04-04',267.78),('2019-04-05',274.96),('2019-04-08',273.2),('2019-04-09',272.31),('2019-04-10',276.06),...])
注意:
- 对英国证券使用
Quandl
; - 对其他证券使用
IEXTrading
。
DataStore
-需要认证
下载或更新历史价格
ft.datastore.update_historical_prices()
将资产调整后的历史收盘价保存到history
目录中。如果它不存在,它就被创建了。
文件名是ticker的符号,每个价格都按升序保存。
样本输入history/TSLA.csv
:
2014-05-05,216.61 2014-05-06,207.28 2014-05-07,201.35 2014-05-08,178.59 2014-05-09,182.26 2014-05-12,184.67 2014-05-13,190.16 ...
将历史数据加载为pd.DataFrame
此函数从history
目录加载历史数据。
注THA一些资产由于没有在当天交易而丢失了价格,因此显示为nan
。
df=ft.datastore.load_historical_data_as_dataframe()print(df.head(),df.shape)
样本输出:
CSCO SVT ... WTB NXT Date ... 2014-05-05 19.5875 1486.452691 ... 3650.414898 5184.507159 2014-05-06 19.3870 1489.696450 ... 3659.383977 5137.446580 2014-05-07 19.5150 1509.159006 ... 3645.033451 5094.307715 2014-05-08 19.6413 1510.780885 ... 3677.322133 5082.542570 2014-05-09 19.6430 1512.402765 ... 3676.425226 5070.777425 [5 rows x 341 columns] (1305, 341)
还有别的吗?
如果您发现任何问题或有改进的想法,请随时制作
GitHub issue
。Pull requests
如果您对此代码进行了改进,欢迎使用。