交易管理

交易管理可理解为一个模拟账户进行模拟交易。一般使用 crtTM 创建交易管理实例。

公共参数:

  • precision=2 (int) : 价格计算精度

  • support_borrow_cash=False (bool) : 是否自动融资

  • support_borrow_stock=False (bool) : 是否自动融券

  • save_action=True (bool) : 是否保存 Python 命令序列

hikyuu.trade_manage.crtTM([date=Datetime(199001010000), init_cash=100000, cost_func=TC_Zero(), name="SYS"])

创建交易管理模块,管理帐户的交易记录及资金使用情况

参数:
  • date (Datetime) -- 账户建立日期

  • init_cash (float) -- 初始资金

  • cost_func (TradeCost) -- 交易成本算法

  • name (string) -- 账户名称

返回类型:

TradeManager

class hikyuu.trade_manage.TradeManager

交易管理类,可理解为一个模拟账户进行模拟交易。一般使用 crtTM 创建交易管理实例。

name

名称

cost_func

交易成本算法

init_cash

(只读)初始资金

current_cash

(只读)当前资金

init_datetime

(只读)账户建立日期

first_datetime

(只读)第一笔买入交易发生日期,如未发生交易返回 Datetime()

last_datetime

(只读)最后一笔交易日期,注意和交易类型无关,如未发生交易返回账户建立日期

precision

(只读)价格精度,同公共参数"precision"

broker_last_datetime

实际开始订单代理操作的时刻。

默认情况下,TradeManager 会在执行买入/卖出操作时,调用订单代理执行代理的买入/卖出动作,但这样在实盘操作时会存在问题。因为系统在计算信号指示时,需要回溯历史数据才能得到最新的信号,这样 TradeManager 会在历史时刻就执行买入/卖出操作,此时如果订单代理本身没有对发出买入/卖出指令的时刻进行控制,会导致代理发送错误的指令。此时,需要指定在某一个时刻之后,才允许指定订单代理的买入/卖出操作。属性 brokeLastDatetime 即用于指定该时刻。

__init__()

初始化构造函数

get_param(self, name)

获取指定的参数

参数:

name (str) -- 参数名称

返回:

参数值

抛出:

out_of_range -- 无此参数

set_param(self, name, value)

设置参数

参数:
抛出:

logic_error -- Unsupported type! 不支持的参数类型

have_param(self, name)

检查是否存在指定参数

参数:

name (str) -- 参数名称

返回类型:

bool

reset(self)

复位,清空交易、持仓记录

clone(self)

克隆(深复制)实例

返回类型:

TradeManager

checkin(self, datetime, cash)

向账户内存入现金

参数:
  • datetime (Datetime) -- 交易时间

  • cash (float) -- 存入的现金量

返回类型:

TradeRecord

checkout(self, datetime, cash)

从账户内取出现金

参数:
  • datetime (Datetime) -- 交易时间

  • cash (float) -- 取出的资金量

返回类型:

TradeRecord

checkin_stock(self, datetime, stock, price, number)

存入股票资产

参数:
  • datetime (Datetime) -- 交易时间

  • stock (Stock) -- 待存入的股票

  • price (float) -- 存入股票的每股价格

  • number (float) -- 存入股票的数量

返回类型:

TradeRecord

checkout_stock(self, datetime, stock, price, number)

取出股票资产

参数:
  • datetime (Datetime) -- 交易时间

  • stock (Stock) -- 待取出的股票

  • price (float) -- 取出的每股价格

  • number (float) -- 取出的数量

返回类型:

TradeRecord

borrow_cash(self, datetime, cash)

借入资金(融资)

参数:
  • datetime (Datetime) -- 交易时间

  • cash (float) -- 借入的现金额

返回类型:

TradeRecord

return_cash(self, datetime, cash)

归还借入的资金

参数:
  • datetime (Datetime) -- 交易时间

  • cash (float) -- 归还的现金额

返回类型:

TradeRecord

borrow_stock(self, datetime, stock, price, number)

借入股票(融券)

参数:
  • datetime (Datetime) -- 交易时间

  • stock (Stock) -- 借入的股票

  • price (float) -- 借入时的每股价格

  • number (float) -- 借入的数量

返回类型:

TradeRecord

return_stock(self, datetime, stock, price, number)

归还借入的股票

参数:
  • datetime (Datetime) -- 交易时间

  • stock (Stock) -- 归还的股票

  • price (float) -- 归还时的每股价格

  • number (float) -- 归还的数量

返回类型:

TradeRecord

buy(self, datetime, stock, real_price, number[, stoploss=0.0, goal_price=0.0, plan_price=0.0, part=System.INVALID, remark=""])

买入操作

参数:
  • datetime (Datetime) -- 买入时间

  • stock (Stock) -- 买入的证券

  • real_price (float) -- 实际买入价格

  • number (float) -- 买入数量

  • stoploss (float) -- 止损价

  • goal_price (float) -- 目标价格

  • plan_price (float) -- 计划买入价格

  • part (SystemPart) -- 交易指示来源

  • remark (str) -- 备注信息

返回类型:

TradeRecord

sell(self, datetime, stock, real_price[, number=constant.max_double, stoploss=0.0, goal_price=0.0, plan_price=0.0, part=System.INVALID, remark=""])

卖出操作

参数:
  • datetime (Datetime) -- 卖出时间

  • stock (Stock) -- 卖出的证券

  • real_price (float) -- 实际卖出价格

  • number (float) -- 卖出数量,如果等于 constant.max_double, 表示全部卖出

  • stoploss (float) -- 新的止损价

  • goal_price (float) -- 新的目标价格

  • plan_price (float) -- 原计划卖出价格

  • part (SystemPart) -- 交易指示来源

  • remark (str) -- 备注信息

返回类型:

TradeRecord

buy_short(self, datetime, stock, real_price, number[, stoploss=0.0, goal_price=0.0, plan_price=0.0, part=System.INVALID, remark=""])

卖空操作(先卖后买)

参数:
  • datetime (Datetime) -- 卖空时间

  • stock (Stock) -- 卖空的证券

  • real_price (float) -- 实际卖空价格

  • number (float) -- 卖空数量

  • stoploss (float) -- 止损价

  • goal_price (float) -- 目标价格

  • plan_price (float) -- 计划卖空价格

  • part (SystemPart) -- 交易指示来源

  • remark (str) -- 备注信息

返回类型:

TradeRecord

sell_short(self, datetime, stock, real_price[, number=constant.max_double, stoploss=0.0, goal_price=0.0, plan_price=0.0, part=System.INVALID, remark=""])

卖空回补操作(买回平仓)

参数:
  • datetime (Datetime) -- 回补时间

  • stock (Stock) -- 回补的证券

  • real_price (float) -- 实际回补价格

  • number (float) -- 回补数量,如果等于 constant.max_double, 表示全部回补

  • stoploss (float) -- 止损价

  • goal_price (float) -- 目标价格

  • plan_price (float) -- 计划回补价格

  • part (SystemPart) -- 交易指示来源

  • remark (str) -- 备注信息

返回类型:

TradeRecord

have(self, stock)

当前是否持有指定的证券(多头仓位)

参数:

stock (Stock) -- 指定证券

返回类型:

bool

have_short(self, stock)

当前空头仓位是否持有指定的证券

参数:

stock (Stock) -- 指定证券

返回类型:

bool

cash(self, datetime[, ktype=Query.KType.DAY])

获取指定日期的现金。(注:如果不带日期参数,无法根据权息信息调整持仓。)

参数:
  • datetime (Datetime) -- 指定时刻

  • ktype -- K 线类型

返回类型:

float

get_stock_num(self)

当前持有的证券种类数量,即当前持有几只股票(非各个股票的持仓数)

返回类型:

int

get_short_stock_num(self)

当前空头持有的证券种类数量

返回类型:

int

get_hold_num(self, datetime, stock)

获取指定时刻指定证券的多头持有数量

参数:
  • datetime (Datetime) -- 指定时刻

  • stock (Stock) -- 指定的证券

返回类型:

float

get_short_hold_num(self, datetime, stock)

获取指定时刻指定证券的空头持有数量

参数:
  • datetime (Datetime) -- 指定时刻

  • stock (Stock) -- 指定的证券

返回类型:

float

get_debt_number(self, datetime, stock)

获取指定时刻已借入的股票数量

参数:
  • datetime (Datetime) -- 指定时刻

  • stock (Stock) -- 指定的证券

返回类型:

float

get_debt_cash(self, datetime)

获取指定时刻已借入的现金额

参数:

datetime (Datetime) -- 指定时刻

返回类型:

float

get_position(self, date, stock)

获取指定时间证券持仓记录,如当前未持有该票,返回 PositionRecord()

参数:
  • date (Datetime) -- 指定时间

  • stock (Stock) -- 指定的证券

返回类型:

PositionRecord

get_short_position(self, stock)

获取指定证券的当前空头仓位持仓记录,如当前未持有该票,返回 PositionRecord()

参数:

stock (Stock) -- 指定的证券

返回类型:

PositionRecord

get_position_list(self)

获取当前全部持仓记录(多头)

返回类型:

PositionRecordList

get_positions(self)

以字典方式获取当前全部持仓记录,stock 为 key,PositionRecord 为 value

返回类型:

dict

get_history_position_list(self)

获取全部历史持仓记录,即已平仓记录(多头)

返回类型:

PositionRecordList

get_short_position_list(self)

获取当前全部空头仓位记录

返回类型:

PositionRecordList

get_short_history_position_list(self)

获取全部空头历史持仓记录

返回类型:

PositionRecordList

get_borrow_stock_list(self)

获取当前借入的股票列表

返回类型:

BorrowRecordList

get_trade_list(self[, start, end])

获取交易记录,未指定参数时,获取全部交易记录

参数:
返回类型:

TradeRecordList

get_buy_cost(self, datetime, stock, price, num)

计算买入成本

参数:
  • datetime (Datetime) -- 交易时间

  • stock (Stock) -- 交易的证券

  • price (float) -- 买入价格

  • num (float) -- 买入数量

返回类型:

CostRecord

get_sell_cost(self, datetime, stock, price, num)

计算卖出成本

参数:
  • datetime (Datetime) -- 交易时间

  • stock (Stock) -- 交易的证券

  • price (float) -- 卖出价格

  • num (float) -- 卖出数量

返回类型:

CostRecord

get_borrow_cash_cost(self, datetime, cash)

计算借入资金的成本

参数:
  • datetime (Datetime) -- 交易时间

  • cash (float) -- 借入的现金额

返回类型:

CostRecord

get_return_cash_cost(self, datetime, cash)

计算归还借入资金的成本

参数:
  • datetime (Datetime) -- 交易时间

  • cash (float) -- 归还的现金额

返回类型:

CostRecord

get_borrow_stock_cost(self, datetime, stock, price, num)

计算借入股票的成本

参数:
  • datetime (Datetime) -- 交易时间

  • stock (Stock) -- 借入的股票

  • price (float) -- 借入时的每股价格

  • num (float) -- 借入的数量

返回类型:

CostRecord

get_return_stock_cost(self, datetime, stock, price, num)

计算归还借入股票的成本

参数:
  • datetime (Datetime) -- 交易时间

  • stock (Stock) -- 归还的股票

  • price (float) -- 归还时的每股价格

  • num (float) -- 归还的数量

返回类型:

CostRecord

get_funds(self[, ktype=Query.DAY])

获取指定时刻的资产市值详情

方式1:get_funds(self[, ktype = Query.DAY])

方式2:get_funds(self, datetime[, ktype = Query.DAY])

get_funds(self, datetime[, ktype = Query.DAY]) 获取指定时刻的资产市值详情

参数:

ktype (Query.KType) -- K 线类型

返回类型:

FundsRecord

get_funds_list(self, dates[, ktype=Query.DAY])

获取指定日期列表的每日资产记录

参数:
返回类型:

FundsList

get_funds_curve(self, dates[, ktype=Query.DAY])

获取资产净值曲线

参数:
  • dates (DatetimeList) -- 日期列表,根据该日期列表获取其对应的资产净值曲线

  • ktype (Query.KType) -- K 线类型,必须与日期列表匹配

返回:

资产净值列表

返回类型:

PriceList

get_profit_curve(self, dates[, ktype=Query.DAY])

获取收益曲线,即扣除历次存入资金后的资产净值曲线

参数:
  • dates (DatetimeList) -- 日期列表,根据该日期列表获取其对应的收益曲线,应为递增顺序

  • ktype (Query.KType) -- K 线类型,必须与日期列表匹配

返回:

收益曲线

返回类型:

PriceList

get_profit_cum_change_curve(self, dates[, ktype=Query.DAY])

获取累积收益率曲线

参数:
返回类型:

PriceList

get_base_assets_curve(self, dates[, ktype=Query.DAY])

获取投入本值资产曲线(投入本钱)

参数:
返回类型:

PriceList

add_trade_record(self, tr)

直接加入交易记录,如果加入初始化账户记录,将清除全部已有交易及持仓记录。

参数:

tr (TradeRecord) -- 交易记录

返回:

True(成功) | False(失败)

返回类型:

bool

add_position(self, position)

建立初始账户后,直接加入持仓记录,仅用于构建初始有持仓的账户

参数:

position (PositionRecord) -- 持仓记录

返回:

True | False

返回类型:

bool

tocsv(self, path)

以 csv 格式输出交易记录、未平仓记录、已平仓记录、资产净值曲线

参数:

path (str) -- 输出文件所在目录

reg_broker(self, broker)

注册订单代理。可执行多次该命令注册多个订单代理。

参数:

broker (OrderBrokerBase) -- 订单代理实例

clear_broker(self)

清空所有已注册订单代理

get_margin_rate(self, datetime, stock)

获取指定对象的保证金比率

参数:
返回类型:

float

update_with_weight(self, date)

根据权息信息更新当前持仓及交易记录,必须按时间顺序被调用

参数:

date (Datetime) -- 当前时刻

fetch_asset_info_from_broker(self, broker[, date=Datetime.now()])

从 Broker 同步当前时刻的资产信息,必须按时间顺序被调用

参数:
  • broker (OrderBrokerBase) -- 订单代理实例

  • date (Datetime) -- 同步时,通常为当前时间(Null),也可以强制为指定的时间点

get_performance(self[, datetime=Datetime.now(), ktype=Query.DAY, ext=False]) Performance

获取账户指定时刻的账户表现

参数:
  • datetime (Datetime) -- 指定时刻

  • ktype (Query.KType) -- K 线类型

  • ext (bool) -- 是否获取扩展统计项 (需 捐赠用户 权限),否则仅为基础统计项

返回:

账户表现

返回类型:

Performance

get_max_pull_back(self, date, ktype=Query.DAY) float

获取指定时刻时账户的最大回撤百分比(负数)

参数:
返回:

最大回撤百分比

get_position_ext_info_list(self, current_time, ktype=Query.DAY, trade_mode=0) list[PositionExtInfo]

获取账户最后交易时刻之后指定时间的持仓详情(未平常记录)

参数:
  • current_time (Datetime) -- 当前时刻(需大于等于最后交易时刻)

  • ktype (Query.KType) -- k 线类型

  • trade_mode (int) -- 交易模式,影响部分统计项:0-收盘时交易,1-下一开盘时交易

返回:

持仓扩展详情列表

get_position_ext_info(self, stock, current_time, ktype=Query.DAY, trade_mode=0) PositionExtInfo

获取账户指定时刻的扩展持仓详情(仅针对指定股票)

参数:
  • stock (Stock) -- 指定股票

  • current_time (Datetime) -- 当前时刻(需大于等于最后交易时刻)

  • ktype (Query.KType) -- K 线类型,默认日线

  • trade_mode (int) -- 交易模式,影响部分统计项:0-收盘时交易,1-下一开盘时交易,默认 0

返回:

扩展持仓详情,包含以下字段:

  • position (PositionRecord): 基础持仓记录

  • max_high_price (float): 期间最高价最大值

  • min_low_price (float): 期间最低价最小值

  • max_close_price (float): 期间收盘价最高值

  • min_close_price (float): 期间收盘价最低值

  • current_close_price (float): 当前收盘价

  • max_pull_back1 (float): 最大回撤百分比 1(仅使用最大收盘价和最低收盘价计算)(负数)

  • max_pull_back2 (float): 最大回撤百分比 2(使用期间最高价最大值和最低价最小值计算)(负数)

  • current_profit (float): 当前浮动盈亏(不含预计卖出成本)

以及以下计算方法:

  • current_pull_back1(): 当前回撤百分比 1(仅使用最大收盘价和当前收盘价计算)

  • current_pull_back2(): 当前回撤百分比 2(使用期间最高价最大值和当前收盘价计算)

  • max_floating_profit1(): 期间最大浮盈百分比 1(仅使用收盘价计算,不含预计卖出成本,多次买卖时统计不准)

  • max_floating_profit2(): 期间最大浮盈百分比 2(使用最高价最大值进行计算,不含预计卖出成本,多次买卖时统计不准)

  • min_loss_profit1(): 期间最大浮亏百分比 1(仅使用收盘价计算,不含预计卖出成本,多次买卖时统计不准)

  • min_loss_profit2(): 期间最大浮亏百分比 2(仅使用期间最低价计算,不含预计卖出成本,多次买卖时统计不准)

Note:

该功能只适合一买一卖的情况,对于一买多卖的情况,部分统计可能不准确,仅供参考

get_history_position_ext_info_list(self, ktype=Query.DAY, trade_mode=0) list[PositionExtInfo]

获取账户历史持仓扩展详情(已平仓记录)

参数:
  • ktype (Query.KType) -- k 线类型

  • trade_mode (int) -- 交易模式,影响部分统计项:0-收盘时交易,1-下一开盘时交易

返回:

持仓扩展详情列表

get_profit_percent_monthly(self[, datetime=Datetime.now()]) list[tuple[Datetime, double]]

获取账户指定截止时刻的账户收益百分比(月度)

参数:

datetime (Datetime) -- 指定截止时刻

返回:

账户收益百分比(月度),元素为 (日期,收益率) 的元组列表

get_profit_percent_yearly(self[, datetime=Datetime.now()]) list[tuple[Datetime, double]]

获取账户指定截止时刻的账户收益百分比(年度)

参数:

datetime (Datetime) -- 指定截止时刻

返回:

账户收益百分比(年度),元素为 (日期,收益率) 的元组列表