ptrade量化原理其实是在进行tushare量化实盘交易前,需要先进行回测和模拟,以确定策略是否有效,才能及时的改进回测框架的完善,便于交易者及时的捕抓市场热点,再执行股票量化策略。不过,tushare量化是基于一些股票数交易口来构建回测框架,以便验证是否实盘。tushare量化回测框架如下:
1、Zipline:事件驱动框架:国外很流行。缺陷是不适合国内市场。
2、PyAlgoTrade :事件驱动框架,最新更新日期为16年8月17号。支持国内市场,应用python
2.7开发,最大的bug在于不支持3.5的版本,以及不支持强大的pandas。
3、pybacktest:以处理向量数据的方式进行回测,最新更新日期为2个月前,更新不稳定。
4、TradingWithPython:基于pybacktest,进行重构。
5、ultra-finance:在github的项目两年前就停止更新了,最新的项目在谷歌平台,无奈打不开网址,感兴趣的话,请自行查看吧。
6、RQAlpha:事件驱动框架,适合A股市场,自带日线数据。是米筐的回测开源框架,相对而言,这个平台更能适应于普通投资者。
tushare量化回测框架执行部分程序的开发原理:
(1)查询各类历史数据:
签名 |
int Init(); |
功能 |
API 初始化 |
参数 |
无 |
返回值 |
授权成功的交易账户数量 返回值< 1 时, 无需调用 Deinit 接口, 也不能调用其它接口, 否则会出错! |
签名 |
void Deinit(); |
功能 |
API 反初始化 |
参数 |
无 |
返回值 |
无 |
签名 |
int Logon(const char* Ip, short Port, const char* Version, short Yybid, const char* Account, const char* TradeAccount, const char* JyPassword, const char* TxPassword, char* ErrorInfo); |
|
功能 |
登录交易账户 |
|
参数 |
Ip |
券商交易服务器IP, 注意区分普通和两融 |
Port |
券商交易服务器端口, 注意区分普通和两融 |
|
Version |
客户端的版本号, 一般为空字符串 |
|
Yybid |
营业部代码, 一般为 0 |
Account |
登录账号,一般为券商的资金账号或客户号 注: 两融账号需要额外添加 .C 结尾, 如 123456 变为 123456.C |
|
TradeAccount |
交易账号, 一般与登录账号相同, 但无需额外添加 .C 结尾 可登录券商软件, 查看股东列表, 股东列表内的资金账号就是交易账号 |
|
JyPassword |
交易密码 |
|
TxPassword |
通讯密码, 一般为空字符串或与交易密码相同 |
|
ErrorInfo |
错误信息, 需要分配 256 字节的空间 |
|
返回值 |
调用成功: 客户端 Id 调用失败: 返回 <= 0 |
签名 |
void Logoff(int ClientId); |
|
功能 |
登出交易账户 |
|
参数 |
ClientId |
客户端Id |
返回值 |
无 |
签名 |
void QueryData(int |
ClientId, int Category, |
char* Result, char* |
ErrorInfo); |
|
功能 |
查询各类交易数据 |
||||
参数 |
ClientId |
客户端Id |
|||
Category |
查询信息类别 0: 资金, 1: 股份, 2: 当日委托, 3: 当日成交, 4: 可撤单, 5: 股东代码, 6: 融资余额, 7: 融券余额, 8: 可融证券, 9: 各券商不同, 10-11: 无, 12: 可申购新股查询, 13: 新股申购额度查询, 14: 配号查询, 15: 中签查询 |
||||
Result |
查询结果, 需要分配 1024*1024 字节的空间 格式请参阅[Result 格式] |
||||
ErrorInfo |
错误信息, 需要分配 256 字节的空间 |
||||
返回值 |
无, 查询成功与否通过 ErrorInfo 是否为空字符串来判断 |
签名 |
void QueryDatas(int ClientId, int Category[], int Count, char* Result[], char* ErrorInfo[]); |
|
功能 |
单账户批量查询各类交易数据, 通过下标区分每项查询 |
|
参数 |
ClientId |
客户端Id |
Category[] |
查询信息类别数组, 具体含义请参阅[查询信息类别] |
|
Count |
查询项数, 即数组长度 |
|
Result[] |
查询结果数组, 每项结果需要分配 1024*1024 字节的空间 格式请参阅[Result 格式] |
|
ErrorInfo[] |
错误信息数组, 每项错误信息需要分配 256 字节的空间 |
|
返回值 |
无, 第 i 项查询成功与否通过 ErrorInfo[i]是否为空字符串来判断 |
签名 |
void QueryMultiAccountsDatas(int ClientId[], int Category[], int Count, char* Result[], char* ErrorInfo[]); |
|
功能 |
多账户批量查询各类交易数据, 通过下标区分每项查询 |
|
参数 |
ClientId[] |
客户端Id 数组 |
Category[] |
查询信息类别数组, 具体含义请参阅[查询信息类别] |
|
Count |
查询项数, 即数组长度 |
|
Result[] |
查询结果数组, 每项结果需要分配 1024*1024 字节的空间 |
委托下单可以通过程序来表示:
@param string $IP 券商交易服务器IP *
@param integer $Version 设置客户端的版本号 *
@param integer $YybID 营业部代码 *
@param string $AccountNo 完整的登录账号 *
@param string $TradeAccount 交易账号,一般与登录帐号相同. *
@param string $JyPassword 交易密码 *
@param string $Port 券商交易服务器端口 *
@param string $TxPassword 通讯密码 *
@param integer $Category 表示委托的种类,0买入 1卖出 *
@param integer $PriceType 表示报价方式,0上海限价委托 深圳限价委托 1(市价委托)深圳对方最优价格 2(市价委托)深圳本方最优价格 3(市价委托) 深圳即时成交剩余撤销 4(市价委托)上海五档即成剩撤 深圳五档即成剩撤 5(市价委托)深圳全额成交或撤销 6(市价委托)上海五档即成转限价 *
@param string $Gddm 股东代码 交易上海股票填上海的股东代码;交易深圳的股票填入深圳的股东代码 * @param string $Zqdm 证券代码 *
@param string $Price 委托价格 *
@param string $Quantity 委托数量 *
/ function SendOrder($IP,$Version,$YybID,$AccountNo,$TradeAccount,$JyPassword,$Port,$TxPassword,$Category,$PriceType,$Gddm,$Zqdm,$Price,$Quantity){ $api = $this->API;
//接口地址 $data = 'IP='.$IP.'&Version='.$Version.'&YybID='.$YybID.'&AccountNo='.$AccountNo.'&TradeAccount='.$TradeAccount.'&JyPassword='.$JyPassword.'&Port='.$Port.'&TxPassword='.$TxPassword.'&Category='.$Category.'&PriceType='.$PriceType.'&Gddm='.$Gddm.'&Zqdm='.$Zqdm.'&Price='.$Price.'&Quantity='.$Quantity; $url = $api.'SendOrder'; $header = ['Content-Type'=>'application/x-www-form-urlencoded'];//默认方式 $res = $this->https_request($url,$header,$data);
//CURL获取数据 return $res;
}
/** * 下委托交易证券(买入或卖出)
不过,在验证实盘时tushare量化原理的自动交易容易被限制时,要先去破解券商网页版的交易接口,或者说应用爬虫爬去操作,才能更快的响应挂单速度。