文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
数据模块
数据记录器
一个比较完善的交易系统肯定是能够记录数据啊,然后让你快速调用到交易数据是很重要的事情。 我将从下面三个板块来开始阐述ctpbee
的数据。
1.数据记录器
** 记住所有方法都是在self.app.center
原本的recorder数据访问同样支持,文档中不再阐述此API, 但是你可以通过阅读取源代码
API
- 属性
active_orders
---> 还未成交的报单
注意他返回的是一个列表 [orderdata1, orderdata2, orderdata3]
from ctpbee import CtpbeeApi
class Example(CtpbeeApi):
def on_bar(self, bar):
active_orders = self.app.center.active_orders
print(active_orders)
- 属性
orders
---> 返回所有报单信息
from ctpbee import CtpbeeApi
class Example(CtpbeeApi):
def on_bar(self, bar):
# 拿到所有报单
orders = self.app.center.orders
print(orders)
- 属性
trades
---> 返回当日所有成交单
from ctpbee import CtpbeeApi
class Example(CtpbeeApi):
def on_bar(self, bar):
# 拿到所有成交单
trades = self.app.center.trades
print(trades)
- 属性
account
---> 返回账户信息
from ctpbee import CtpbeeApi
class Example(CtpbeeApi):
def on_bar(self, bar):
# 拿到账户信息
account = self.app.center.account
print(account)
- 函数
get_tick
---> 返回最近一条tick信息 注意: 它返回的是一个TickData, 需要传入local_symbol
from ctpbee import CtpbeeApi
class Example(CtpbeeApi):
def on_bar(self, bar):
# 此处我们拿到ag1912的最新一条tick
tick = self.app.center.get_tick("ag1912.SHFE")
print(tick)
print(type(tick))
- 函数
get_active_order
---> 返回某个合约的未成交单 注意:他返回的是一个列表, 需要传入local_symbol
from ctpbee import CtpbeeApi
class Example(CtpbeeApi):
def on_bar(self, bar):
# 此处我们拿到ag1912的所有未成交单
active_orders = self.app.center.get_active_order("ag1912.SHFE")
print(active_orders)
print(type(active_orders))
2.持仓管理
账户持仓管理
注意: get_position
函数,需要传入一个local_symbol
,返回一个None(如果没有持仓的话)或者PositionModel
, 下面的二级列表中列举了属性名称以及含义
get_position(local_symbol) -> PositionModel
获取某个合约的持仓信息long_volume
长头总持仓long_yd_volume
长头历史持仓long_price
长头持仓均价long_pnl
长头持仓盈利long_frozen
长头冻结short_volume
空头总持仓short_yd_volume
空头历史持仓short_price
空头持仓均价short_pnl
空投持仓盈利short_frozen
空头冻结exchange
交易所代码local_symbol
本地合约代码
调用示例
from ctpbee import CtpbeeApi
class Example(CtpbeeApi):
def on_bar(self, bar):
# 此处我们拿到ag1912的持仓信息
pos = self.app.center.get_position("ag1912.SHFE")
print(pos)
print(type(pos))
if not pos:
print("没持仓不好意思")
else:
print("long: ", pos.long_volume)
print("short: ", pos.short_volume)
策略持仓管理
为了ctpbee
能够更好的适应环境,我们开发了策略持仓管理 基于场景,策略访问自己的持仓和策略访问其他策略的持仓
注意: 上面是使用center,而此处需要使用策略自带的level_position_manager
- 策略访问自己的持仓信息
get_position(local_symbol) -> PositionModel
代码示例
from ctpbee import CtpbeeApi
class Example(CtpbeeApi):
def on_bar(self, bar):
# 此处我们拿到ag1912的持仓信息
pos = self.level_position_manager.get_position("ag1912.SHFE")
print(pos)
print(type(pos))
if not pos:
print("没持仓不好意思")
else:
print("long: ", pos.long_volume)
print("short: ", pos.short_volume)
- 其他地方访问策略的持仓
注意:此处需要用到我们的center
代码示例
from ctpbee import CtpbeeApi
class Example(CtpbeeApi):
def on_bar(self, bar):
# 假定另外一个策略的名字叫somewheve
pos = self.center['somewheve'].level_position_manager.get_position("ag1912.SHFE")
print(pos)
print(type(pos))
if not pos:
print("没持仓不好意思")
else:
print("long: ", pos.long_volume)
print("short: ", pos.short_volume)
注意:不同于账户持仓,策略持仓对某些字段做了删减,你只能访问一些持仓的信息。
long_volume
长头总持仓long_yd_volume
长头历史持仓long_price
长头持仓均价short_volume
空头总持仓short_yd_volume
空头历史持仓short_price
空头持仓均价exchange
交易所代码local_symbol
本地合约代码
3.数据API
关于ctpbee
的数据构成,请参见 数据结构
值得注意的是你需要将明白Data类型的数据都有以下的API,比如on_tick
里面的TickData
_to_df()
转换为DataFrame
_to_dict()
转换为字典, 但是值得注意的是会自动将枚举类变量转换为对应的字符串
_asdict()
返回字典,不做数据转换处理
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论