应聚宽官方要求,删除了一些不合规的内容,给JoinQuant官方与大家造成困扰,深表歉意!
一、登陆教程
废话不多说,教程开始:
下载【雪球组合连接-聚宽专用版】(链接:http://pan.baidu.com/s/1hsO4C0s 密码:gx3y)
修改其中的xq.json 文件:
- 配置文件需要自己用编辑器编辑生成, 请勿使用记事本, 推荐使用 notepad++ 或者 sublime text
- 雪球配置中
username 为邮箱, account 为手机, 填两者之一即可,另一项改为 "" , 密码直接填写登录的明文密码即可
修改完毕后,将所有文件传至个人研究根目录! 根目录! 根目录!
进入回测页面 - 新建回测 - 输入如下代码并编译运行:
from api import *
from webtrader import WebTrader
from cli import *
from httpserver import *
def copy(path):
c = read_file(path)
with open(path, 'wb') as f:
f.write(c)
def initialize(context):
user = use('xq')
user.prepare('xq.json')
# 打印持仓、资金状况
log.info(user.position)
log.info(user.balance)
出现如下结果表明登陆成功,恭喜你!你可以开始实盘了!
API用法见下方【二、交易API】
用法示例见下方【三、用法示例】
注:
- ●因为改过文件内容,所以在研究模块无法进行测试。
- ●买入卖出只用股票代码六位数字,无后缀。因此从JoinQuant获取的到股票代码字符串只需取前六位即可,如stock[:6]即可。
二、交易API
1. 设置账户:
user = use('xq')
2. 登陆账户:
user = use('xq')
3. 交易相关:
获取资金状况:
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.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.entrust
return
[{'business_amount': '成交数量',
'business_price': '成交价格',
'entrust_amount': '委托数量',
'entrust_bs': '买卖方向',
'entrust_no': '委托编号',
'entrust_price': '委托价格',
'entrust_status': '委托状态', # 废单 / 已报
'report_time': '申报时间',
'stock_code': '证券代码',
'stock_name': '证券名称'}]
撤单:
user.cancel_entrust('委托单号', '股票代码')
查询当日成交:
佣金宝
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': '证券名称'}]
三、用法示例
from api import *
from webtrader import WebTrader
from cli import *
from httpserver import *
def copy(path):
c = read_file(path)
with open(path, 'wb') as f:
f.write(c)
def loading(context):
''' 登陆 '''
global user
user = use('xq')
user.prepare('xq.json')
def initialize(context):
g.security = ['600132.XSHG','600600.XSHG']
run_daily(loading, 'before_open')
run_daily(trade,'open')
run_daily(check, 'after_close')
def trade(context):
'''
交易
雪球组合的净值为1,easytrader使用1:1000000的比例放大。
price*amout为雪球组合的改变比例。
如下所示,如果price=10000,如果amount=1,比例则为1%;如果amount=10,比例则为10%
'''
user.buy(g.security[0][:6], price=10000, amount=1) #买入1%
user.sell(g.security[1][:6], price=10000, amount=1) #卖出1%
def check(context):
''' 获取信息并输出 '''
log.info('获取今日委托单:')
log.info('今日委托单:', user.entrust)
log.info('-'*30)
log.info('获取资金状况:')
log.info('资金状况:', user.balance )
log.info('enable_balance(可用金额):', user.balance[0]['enable_balance'])
log.info('-'*30)
log.info('持仓:')
log.info('获取持仓:', user.position)
log.info('enable_amount(可卖数量):', user.position[0]['enable_amount'])
输出结果:
2015-12-31 15:10:00 - INFO - 获取今日委托单:
2015-12-31 15:10:00 - INFO - 今日委托单: [{'entrust_status': '\xe5\xb7\xb2\xe6\x8a\xa5', 'report_time': '2016-06-24 19:04:48', 'stock_name': u'\u9752\u5c9b\u5564\u9152', 'stock_code': u'SH600600', 'business_price': 0.0, 'business_amount': 100, 'entrust_no': 100764777, 'entrust_price': 0.0, 'entrust_bs': u'\u5356\u51fa', 'entrust_amount': 100}, {'entrust_status': '\xe5\xb7\xb2\xe6\x8a\xa5', 'report_time': '2016-06-24 19:04:48', 'stock_name': u'\u91cd\u5e86\u5564\u9152', 'stock_code': u'SH600132', 'business_price': 655.0000000000001, 'business_amount': 100, 'entrust_no': 100764779, 'entrust_price': 655.0000000000001, 'entrust_bs': u'\u4e70\u5165', 'entrust_amount': 100}]
2015-12-31 15:10:00 - INFO - ------------------------------
2015-12-31 15:10:00 - INFO - 获取资金状况:
2015-12-31 15:10:00 - INFO - 资金状况: [{'enable_balance': 313607.16000000003, 'pre_interest': 0.25, 'current_balance': 313607.16000000003, 'asset_balance': 1001300.0000000001, 'market_value': 687692.8400000001, 'money_type': u'\u4eba\u6c11\u5e01'}]
2015-12-31 15:10:00 - INFO - enable_balance(可用金额): 313607.16
2015-12-31 15:10:00 - INFO - ------------------------------
2015-12-31 15:10:00 - INFO - 持仓:
2015-12-31 15:10:00 - INFO - 获取持仓: [{'last_price': 1138.4781, 'market_value': 113847.81, 'stock_code': u'SH600600', 'income_balance': 0, 'current_amount': 100, 'enable_amount': 100, 'stock_name': u'\u9752\u5c9b\u5564\u9152', 'keep_cost_price': 1138.4781, 'position_str': 'xxxxxx', 'cost_price': 1138.4781}, {'last_price': 1761.2867000000003, 'market_value': 176128.67000000004, 'stock_code': u'SH600132', 'income_balance': 0, 'current_amount': 100, 'enable_amount': 100, 'stock_name': u'\u91cd\u5e86\u5564\u9152', 'keep_cost_price': 1761.2867000000003, 'position_str': 'xxxxxx', 'cost_price': 1761.2867000000003}]
2015-12-31 15:10:00 - INFO - enable_amount(可卖数量): 100
四、中文查看示例
输入:
a = [{u'stock_name': u'\u5927\u540c\u7164\u4e1a',u'amount': 100}]
jd = json.dumps(a,ensure_ascii=False)
log.info(jd)
输出:
2015-12-31 09:20:00 - INFO - [{"stock_name": "大同煤业", "amount": 100}]
因为雪球组合是按比例调仓的,所以模拟成券商实盘接口会有一些要注意的问题
- ●接口基本与佣金宝接口调用参数返回一致
- ●委托单不支持挂高挂低(开盘时间都是直接市价成交的)
- ●初始资金是按组合净值 1:1000000 换算来的
- ●委托单的委托价格和委托数量目前换算回来都是按1手拆的(雪球是按比例调仓的)
- ●持仓价格和持仓数量问题同上, 但持股市值是对的.
- ●一些不合理的操作会直接抛TraderError,注意看错误信息
|