开发环境: Ubuntu 16.04 / Python 3.5
相关量化交流论坛
获取新浪免费实时行情的类库: easyquotation
简单的股票量化交易框架 使用 easytrader 和 easyquotation
支持券商 佣金宝 广发 银河 模拟交易 雪球组合 by @haogefeifei( 说明 ) requirementspip install -r requirements.txt
佣金宝 的自动登录需要安装以下二者之一, 广发的自动登录需要安装下列的 tesseract:
JAVA : 推荐, 识别率高,安装简单, 需要命令行下 java -version 可用 (感谢空中园的贡献) tesseract : 非 pytesseract , 需要单独安装,地址,保证在命令行下 tesseract 可用 安装 pip install easytrader注: windows 用户 pip 安装时会提示 No module named xxx , 请使用 pip install xxx 安装对应缺失的 module , 然后再重新 pip install easytrader , 可以参考此文档INSTALL4Windows.md
升级 pip install easytrader --upgrade 用法 引入: import easytrader 设置账户: 佣金宝 user = easytrader.use('yjb') # 佣金宝支持 ['yjb', 'YJB', '佣金宝'] 广发 user = easytrader.use('gf') # 广发支持 ['gf', 'GF', '广发'] 银河 user = easytrader.use('yh') # 银河支持 ['yh', 'YH', '银河'] 登录帐号 user.prepare('/path/to/your/ht.json') // 或者 yjb.json 或者 yh.json 等配置文件路径 注:配置文件需要自己用编辑器编辑生成, 请勿使用记事本, 推荐使用 notepad++ 或者 sublime text
格式可以参照 Github 目录下对应的 json 文件
佣金宝需要配置 yjb.json 并填入相关信息, 其中的 password 为加密后的 password 雪球配置中 username 为邮箱, account 为手机, 填两者之一即可,另一项改为 "" , 密码直接填写登录的明文密码即可,不需要抓取 POST 的密码如何获取配置所需信息, 可参考此文章
交易相关以下用法以佣金宝为例
获取资金状况: user.balance return [{ 'asset_balance': '资产总值', 'current_balance': '当前余额', 'enable_balance': '可用金额', 'market_value': '证券市值', 'money_type': '币种', 'pre_interest': '预计利息' ]} 获取持仓: user.position return [{'cost_price': '摊薄成本价', 'current_amount': '当前数量', 'enable_amount': '可卖数量', 'income_balance': '摊薄浮动盈亏', 'keep_cost_price': '保本价', 'last_price': '最新价', 'market_value': '证券市值', 'position_str': '定位串', 'stock_code': '证券代码', 'stock_name': '证券名称'}] 获取今日委托单 user.entrust return [{'business_amount': '成交数量', 'business_price': '成交价格', 'entrust_amount': '委托数量', 'entrust_bs': '买卖方向', 'entrust_no': '委托编号', 'entrust_price': '委托价格', 'entrust_status': '委托状态', # 废单 / 已报 'report_time': '申报时间', 'stock_code': '证券代码', 'stock_name': '证券名称'}] 买入: user.buy('162411', price=0.55, amount=100) return [{'entrust_no': '委托编号', 'init_date': '发生日期', 'batch_no': '委托批号', 'report_no': '申报号', 'seat_no': '席位编号', 'entrust_time': '委托时间', 'entrust_price': '委托价格', 'entrust_amount': '委托数量', 'stock_code': '证券代码', 'entrust_bs': '买卖方向', 'entrust_type': '委托类别', 'entrust_status': '委托状态', 'fund_account': '资金帐号', 'error_no': '错误号', 'error_info': '错误原因'}] 卖出: user.sell('162411', price=0.55, amount=100) 撤单 佣金宝 user.cancel_entrust('委托单号', '股票代码') 查询交割单需要注意通常券商只会返回有限天数最新的交割单,如查询2015年整年数据, 华泰只会返回年末的90天的交割单
user.exchangebill # 查询最近30天的交割单 user.get_exchangebill('开始日期', '截止日期') # 指定查询时间段, 日期格式为 "20160214" return {["entrust_bs": "操作", # "1":"买入", "2":"卖出", " ":"其他" "business_balance": "成交金额", "stock_name": "证券名称", "fare1": "印花税", "occur_balance": "发生金额", "stock_account": "股东帐户", "business_name": "摘要", # "证券买入", "证券卖出", "基金拆分", "基金合并", "交收证券冻结", "交收证券冻结取消", "开放基金赎回", "开放基金赎回返款", "基金资金拨入", "基金资金拨出", "交收资金冻结取消", "开放基金申购" "farex": "", "fare0": "手续费", "stock_code": "证券代码", "occur_amount": "成交数量", "date": "成交日期", "post_balance": "本次余额", "fare2": "其他杂费", "fare3": "", "entrust_no": "合同编号", "business_price": "成交均价", ]} 基金申购 银河 user.fundpurchase(stock_code, amount): 基金赎回 银河 user.fundredemption(stock_code, amount): 基金认购 银河 user.fundsubscribe(stock_code, amount): 基金分拆 银河 user.fundsplit(stock_code, amount): 基金合并 银河 user.fundmerge(stock_code, amount): 查询当日成交 佣金宝 user.current_deal return [{'business_amount': '成交数量', 'business_price': '成交价格', 'entrust_amount': '委托数量', 'entrust_bs': '买卖方向', 'stock_account': '证券帐号', 'fund_account': '资金帐号', 'position_str': '定位串', 'business_status': '成交状态', 'date': '发生日期', 'business_type': '成交类别', 'business_time': '成交时间', 'stock_code': '证券代码', 'stock_name': '证券名称'}] 佣金宝 user.get_ipo_limit('申购代码') return {'high_amount': '最高申购股数', 'enable_amount': '申购额度', 'last_price': '发行价',} 查询今天可以申购的新股信息 from easytrader import helpers ipo_data = helpers.get_today_ipo_data() print(ipo_data) return [{'stock_code': '股票代码', 'stock_name': '股票名称', 'price': 发行价, 'apply_code': '申购代码'}] 雪球组合调仓 user.adjust_weight('000001', 10) 命令行模式 登录 python cli.py --use ht --prepare ht.json注: 此时会生成 account.session 文件保存生成的 user 对象
获取余额 / 持仓 / 以及其他变量 python cli.py --get balance 买卖 / 撤单 python cli.py --do buy 162411 0.450 100 查看帮助 python cli.py --help Q&A Question哪里可以找到对应的 ht.json , xq.json 的说明
Answer这个文件需要自己新建,对应的格式在 github 项目的根目录下有对应的模板
Question如何关闭 debug 日志的输出
Answer user = easytrader.use('ht', debug=False) Question编辑完配置文件,运行后出现 json 解码报错的信息。类似于下面
raise JSONDecodeError("Expecting value", s, err.value) from None JSONDecodeError: Expecting value Answer请勿使用 记事本 编辑账户的 json 配置文件,推荐使用 notepad++ 或者 sublime text
其他软件实现原理