abupy.TradeBu package

Submodules

abupy.TradeBu.ABuBenchmark module

基准模块,基准的作用在于交易时间范围确定,交易时间序列对齐, 抛弃异常时间序列,交易市场范围限制,以及对比与策略的度量结果等作用

class abupy.TradeBu.ABuBenchmark.AbuBenchmark(benchmark=None, start=None, end=None, n_folds=2, rs=True)[源代码]

Bases: abupy.CoreBu.ABuBase.PickleStateMixin

基准类,混入PickleStateMixin,因为在abu.store_abu_result_tuple会进行对象本地序列化

unpick_extend_work(state)[源代码]

完成 PickleStateMixin中__setstate__结束之前的工作,为kl_pd.name赋予准确的benchmark

abupy.TradeBu.ABuCapital module

资金模块,不区分美元,人民币等类型,做美股交易默认当作美元,a股默认当作人民币

class abupy.TradeBu.ABuCapital.AbuCapital(init_cash, benchmark, user_commission_dict=None)[源代码]

Bases: abupy.CoreBu.ABuBase.PickleStateMixin

资金类

apply_action(a_action, progress)[源代码]

在回测结果生成的交易行为构成的pd.DataFrame对象上进行apply对应本方法,即 将交易行为根据资金情况进行处理,处理手续费以及时序资金对象capital_pd上的 数据更新 :param a_action: 每一个被迭代中的action,即每一个交易行为 :param progress: 进度条对象 :return: 是否成交deal bool

apply_init_kl(action_pd, show_progress)[源代码]

根据回测交易在时序资金对象capital_pd上新建对应的call,put列 :param action_pd: 回测交易行为对象,pd.DataFrame对象 :param show_progress: 外部设置是否需要显示进度条

apply_k_line(a_k_day, kl_pd, buy_type_head)[源代码]

在apply_kl中的do_apply_kl方法中时序资金对象capital进行apply的对应方法, 即迭代金融时间序列的每一个交易日,根据持仓量计算每一个交易日的市场价值 :param a_k_day: 每一个被迭代中的时间,即每一个交易日数据 :param kl_pd: 正在被apply迭代的金融时间序列本体,pd.DataFrame对象 :param buy_type_head: 代表交易类型,范围(_call,_put) :return:

apply_kl(action_pd, kl_pd_manager, show_progress)[源代码]

apply_action之后对实际成交的交易分别迭代更新时序资金对象capital_pd上每一个交易日的实时价值 :param action_pd: 回测结果生成的交易行为构成的pd.DataFrame对象 :param kl_pd_manager: 金融时间序列管理对象,AbuKLManager实例 :param show_progress: 是否显示进度条

buy_stock(a_order)[源代码]

在apply_action中每笔交易进行处理,根据买单计算cost,在时序资金对象capital_pd上修改对应cash_blance, 以及更新对应symbol上的持仓量 :param a_order: 在apply_action中由action转换的AbuOrder对象 :return: 是否成交deal bool

init_k_line(a_symbol)[源代码]

每一个交易对象在时序资金对象capital_pd上都添加对应的call keep(买涨持仓量),call worth(买涨总价值), put keep(买跌持仓量),put worth(买跌总价值) :param a_symbol: symbol str对象

sell_stock(a_order)[源代码]

在apply_action中每笔交易进行处理,根据卖单计算cost,在时序资金对象capital_pd上修改对应cash_blance, 以及更新对应symbol上的持仓量 :param a_order: 在apply_action中由action转换的AbuOrder对象 :return: 是否成交deal bool

abupy.TradeBu.ABuCommission module

手续费模块

class abupy.TradeBu.ABuCommission.AbuCommission(commission_dict)[源代码]

Bases: object

交易手续费计算,记录,分析类,在AbuCapital中实例化

buy_commission_func(a_order)[源代码]

外部用with as 返回的list中需要加入计算的最终结果,否则不进行内部交易费用记录 :param a_order: 买单对象AbuOrder实例

sell_commission_func(a_order)[源代码]

外部用with as 返回的list中需要加入计算的最终结果,否则不进行内部交易费用记录 :param a_order: 卖单对象AbuOrder实例

abupy.TradeBu.ABuCommission.calc_commission_cn(trade_cnt, price)[源代码]

a股计算交易费用:印花税+佣金: 印花税万3,佣金万2.5 :param trade_cnt: 交易的股数(int) :param price: 每股的价格(人民币) :return: 计算结果手续费

abupy.TradeBu.ABuCommission.calc_commission_futures_cn(trade_cnt, price, symbol_name)[源代码]

期货计算交易费用:首先查询对应商品单位交易量(每手单位数量),以及每手手续费,再计算对应手续费 :param trade_cnt: 交易的单位数量(int) :param price: 买入的价格(暂不使用,只是保持接口统一) :param symbol_name: 商品查询symbol :return: 计算结果手续费

abupy.TradeBu.ABuCommission.calc_commission_futures_global(trade_cnt, price)[源代码]

国际期货:差别很大,最好外部自定义自己的计算方法,这里只简单按照0.002计算 :param trade_cnt: 交易的股数(int) :param price: 每股的价格(美元) :return: 计算结果手续费

abupy.TradeBu.ABuCommission.calc_commission_hk(trade_cnt, price)[源代码]

h股计算交易费用:印花税+佣金: 佣金千分之二,印花税千分之一 :param trade_cnt: 交易的股数(int) :param price: 每股的价格(人民币) :return: 计算结果手续费

abupy.TradeBu.ABuCommission.calc_commission_tc(trade_cnt, price)[源代码]

币类计算交易费用:只简单计算手续费,双向都使用流通币计算手续费,不涉及卖出使用币类的手续计算, 如需要更精确计算,请使用自定义计算费率,即在AbuCommission初始化中自定义计算手续费的方法 :param trade_cnt: 交易的币个数(int) :param price: 每币的价格(人民币) :return: 计算结果手续费

abupy.TradeBu.ABuCommission.calc_commission_us(trade_cnt, price)[源代码]

美股计算交易费用:每股0.01,最低消费2.99 :param trade_cnt: 交易的股数(int) :param price: 每股的价格(美元)(暂不使用,只是保持接口统一) :return: 计算结果手续费

abupy.TradeBu.ABuCommission.calc_options_us(trade_cnt, price)[源代码]

美股期权:差别很大,最好外部自定义自己的计算方法,这里只简单按照0.0035计算 :param trade_cnt: 交易的股数(int) :param price: 每股的价格(美元 :return: 计算结果手续费

abupy.TradeBu.ABuKLManager module

金融时间序列管理模块

class abupy.TradeBu.ABuKLManager.AbuKLManager(benchmark, capital)[源代码]

Bases: object

金融时间序列管理类

batch_get_pick_time_kl_pd(choice_symbols, n_process=4)[源代码]

统一批量获取择时金融时间序列获保存在内部的择时字典中,以多进程并行方式运行 :param choice_symbols: 支持迭代的symbol序列 :param n_process: 择时金融时间序列获取并行启动的进程数,默认16个,属于io操作多,所以没有考虑cpu数量 :return:

filter_pick_time_choice_symbols(choice_symbols)[源代码]

使用filter筛选出choice_symbols中的symbol对应的择时时间序列不在内部择时字典中的symbol序列 :param choice_symbols: 支持迭代的symbol序列 :return: 不在内部择时字典中的symbol序列

get_pick_stock_kl_pd(target_symbol, xd=252, min_xd=126)[源代码]

对外获取选股时段金融时间序列,首先在内部择时字典中寻找,没找到使用_fetch_pick_stock_kl_pd获取,且保存选股字典 :param target_symbol: 选股symbol :param xd: 选股周期(默认一年的交易日长度) :param min_xd: 对fetch的选股金融序列进行过滤参数,即最小金融序列长度 :return:

get_pick_time_kl_pd(target_symbol)[源代码]

对外获取择时时段金融时间序列,首先在内部择时字典中寻找,没找到使用_fetch_pick_time_kl_pd获取,且保存择时字典

abupy.TradeBu.ABuKLManager.gen_dict_pick_time_kl_pd(target_symbols, capital, benchmark)[源代码]

在AbuKLManager中batch_get_pick_time_kl_pd批量获取择时时间序列中使用做为并行多进程委托方法 :param target_symbols: 请求的symbol :param capital: 资金类AbuCapital实例化对象 (实现中暂时不使用其中信息) :param benchmark: 交易基准对象,AbuBenchmark实例对象

abupy.TradeBu.ABuMLFeature module

内置特征定义,以及用户特征扩展,定义模块

class abupy.TradeBu.ABuMLFeature.AbuFeatureAtr[源代码]

Bases: abupy.TradeBu.ABuMLFeature.AbuFeatureBase, abupy.TradeBu.ABuMLFeature.BuyFeatureMixin

atr特征,支持买入

calc_feature(kl_pd, combine_kl_pd, day_ind, buy_feature)[源代码]

根据买入或者卖出时的金融时间序列,以及交易日信息构造atr特征 :param kl_pd: 择时阶段金融时间序列 :param combine_kl_pd: 合并择时阶段之前1年的金融时间序列 :param day_ind: 交易发生的时间索引,即对应self.kl_pd.key :param buy_feature: 是否是买入特征构造(bool) :return: 构造atr特征的键值对字典

get_feature_keys(buy_feature)[源代码]

返回对应的atr特征key值,虽然只有一个固定的atr key值,也返回序列,保持接口统一 :param buy_feature: 是否是买入特征构造(bool) :return: atr特征的键值对字典中的key序列

class abupy.TradeBu.ABuMLFeature.AbuFeatureBase[源代码]

Bases: object

特征构造基类

calc_feature(kl_pd, combine_kl_pd, day_ind, buy_feature)[源代码]

子类主要需要实现的函数,根据买入或者卖出时的金融时间序列,以及交易日信息构造特征 :param kl_pd: 择时阶段金融时间序列 :param combine_kl_pd: 合并择时阶段之前1年的金融时间序列 :param day_ind: 交易发生的时间索引,即对应self.kl_pd.key :param buy_feature: 是否是买入特征构造(bool) :return: 构造特征的键值对字典

check_support(buy_feature)[源代码]

根据参数buy_feature检测是否支持特征构建 :param buy_feature: 是否是买入特征构造(bool)

feature_prefix(buy_feature, check=True)[源代码]

根据buy_feature决定返回_feature_buy_prefix或者_feature_sell_prefix,目的是在calc_feature中构成唯一key :param buy_feature: 是否是买入特征构造(bool) :param check: 是否需要检测是否支持特征构建 :return:

get_feature_keys(buy_feature)[源代码]

子类主要需要实现的函数,定义feature的列名称 :param buy_feature: 是否是买入特征构造(bool) :return: 键值对字典中的key序列

get_feature_ump_keys(ump_cls)[源代码]

根据ump_cls,返回对应的get_feature_keys :param ump_cls: AbuUmpEdgeBase子类,参数为类,非实例对象 :return: 键值对字典中的key序列

support_buy_feature()[源代码]

是否支持买入特征构建

support_sell_feature()[源代码]

是否支持卖出特征构建

class abupy.TradeBu.ABuMLFeature.AbuFeatureDeg[源代码]

Bases: abupy.TradeBu.ABuMLFeature.AbuFeatureBase, abupy.TradeBu.ABuMLFeature.BuyFeatureMixin, abupy.TradeBu.ABuMLFeature.SellFeatureMixin

角度特征,支持买入,卖出

calc_feature(kl_pd, combine_kl_pd, day_ind, buy_feature)[源代码]

根据买入或者卖出时的金融时间序列,以及交易日信息构造拟合角度特征 :param kl_pd: 择时阶段金融时间序列 :param combine_kl_pd: 合并择时阶段之前1年的金融时间序列 :param day_ind: 交易发生的时间索引,即对应self.kl_pd.key :param buy_feature: 是否是买入特征构造(bool) :return: 构造角度特征的键值对字典

get_feature_keys(buy_feature)[源代码]

迭代生成所有走势角度特征feature的列名称定, 使用feature_prefix区分买入,卖出前缀key :param buy_feature: 是否是买入特征构造(bool) :return: 角度特征的键值对字典中的key序列

class abupy.TradeBu.ABuMLFeature.AbuFeatureDegExtend[源代码]

Bases: abupy.TradeBu.ABuMLFeature.AbuFeatureBase, abupy.TradeBu.ABuMLFeature.BuyFeatureMixin, abupy.TradeBu.ABuMLFeature.SellFeatureMixin

示例添加新的视角来录制比赛,角度特征,支持买入,卖出

calc_feature(kl_pd, combine_kl_pd, day_ind, buy_feature)[源代码]

根据买入或者卖出时的金融时间序列,以及交易日信息构造拟合角度特征 :param kl_pd: 择时阶段金融时间序列 :param combine_kl_pd: 合并择时阶段之前1年的金融时间序列 :param day_ind: 交易发生的时间索引,即对应self.kl_pd.key :param buy_feature: 是否是买入特征构造(bool) :return: 构造角度特征的键值对字典

get_feature_keys(buy_feature)[源代码]

迭代生成所有走势角度特征feature的列名称定, 使用feature_prefix区分买入,卖出前缀key :param buy_feature: 是否是买入特征构造(bool) :return: 角度特征的键值对字典中的key序列

class abupy.TradeBu.ABuMLFeature.AbuFeatureJump[源代码]

Bases: abupy.TradeBu.ABuMLFeature.AbuFeatureBase, abupy.TradeBu.ABuMLFeature.BuyFeatureMixin, abupy.TradeBu.ABuMLFeature.SellFeatureMixin

跳空特征,支持买入,卖出

calc_feature(kl_pd, combine_kl_pd, day_ind, buy_feature)[源代码]

根据买入或者卖出时的金融时间序列,以及交易日信息构造跳空特征 :param kl_pd: 择时阶段金融时间序列 :param combine_kl_pd: 合并择时阶段之前1年的金融时间序列 :param day_ind: 交易发生的时间索引,即对应self.kl_pd.key :param buy_feature: 是否是买入特征构造(bool) :return: 构造跳空特征的键值对字典

get_feature_keys(buy_feature)[源代码]

返回对应的跳空特征key值 :param buy_feature: 是否是买入特征构造(bool) :return: 跳空特征的键值对字典中的key序列

class abupy.TradeBu.ABuMLFeature.AbuFeaturePrice[源代码]

Bases: abupy.TradeBu.ABuMLFeature.AbuFeatureBase, abupy.TradeBu.ABuMLFeature.BuyFeatureMixin, abupy.TradeBu.ABuMLFeature.SellFeatureMixin

价格rank特征,支持买入,卖出

calc_feature(kl_pd, combine_kl_pd, day_ind, buy_feature)[源代码]

根据买入或者卖出时的金融时间序列,以及交易日信息构造价格rank特征 :param kl_pd: 择时阶段金融时间序列 :param combine_kl_pd: 合并择时阶段之前1年的金融时间序列 :param day_ind: 交易发生的时间索引,即对应self.kl_pd.key :param buy_feature: 是否是买入特征构造(bool) :return: 构造价格rank特征的键值对字典

get_feature_keys(buy_feature)[源代码]

迭代生成所有价格rank特征feature的列名称, 使用feature_prefix区分买入,卖出前缀key :param buy_feature: 是否是买入特征构造(bool) :return: 价格rank特征的键值字典中的key序列

class abupy.TradeBu.ABuMLFeature.AbuFeatureSnapshot[源代码]

Bases: abupy.TradeBu.ABuMLFeature.AbuFeatureBase, abupy.TradeBu.ABuMLFeature.BuyFeatureMixin, abupy.TradeBu.ABuMLFeature.SellFeatureMixin

快照特征,支持买入,卖出 abupy.env.g_enable_take_kl_snapshot开关控制特征是否生成, 生成的走势图在~/abu/data/save_png/今天的日期/目录下

calc_feature(kl_pd, combine_kl_pd, day_ind, buy_feature)[源代码]

根据买入或者卖出时的金融时间序列,以及交易日信息构造快照特征 :param kl_pd: 择时阶段金融时间序列 :param combine_kl_pd: 合并择时阶段之前1年的金融时间序列 :param day_ind: 交易发生的时间索引,即对应self.kl_pd.key :param buy_feature: 是否是买入特征构造(bool) :return: 构造快照特征的键值对字典

get_feature_keys(buy_feature)[源代码]

返回对应的快照特征key值 :param buy_feature: 是否是买入特征构造(bool) :return: 快照特征的键值对字典中的key序列

class abupy.TradeBu.ABuMLFeature.AbuFeatureWave[源代码]

Bases: abupy.TradeBu.ABuMLFeature.AbuFeatureBase, abupy.TradeBu.ABuMLFeature.BuyFeatureMixin, abupy.TradeBu.ABuMLFeature.SellFeatureMixin

波动特征,支持买入,卖出

calc_feature(kl_pd, combine_kl_pd, day_ind, buy_feature)[源代码]

根据买入或者卖出时的金融时间序列,以及交易日信息构造波动特征 :param kl_pd: 择时阶段金融时间序列 :param combine_kl_pd: 合并择时阶段之前1年的金融时间序列 :param day_ind: 交易发生的时间索引,即对应self.kl_pd.key :param buy_feature: 是否是买入特征构造(bool) :return: 构造波动特征的键值对字典

get_feature_keys(buy_feature)[源代码]

迭代生成所有波动特征feature的列名称, 使用feature_prefix区分买入,卖出前缀key :param buy_feature: 是否是买入特征构造(bool) :return: 波动特征的键值对字典中的key序列

class abupy.TradeBu.ABuMLFeature.AbuMlFeature[源代码]

Bases: object

特征对外统一接口类,负责管理构建内部特征,用户扩展特征,提供买入卖出因子的交易特征生成,转换接口

make_feature_dict(kl_pd, combine_kl_pd, day_ind, buy_feature)[源代码]

提供买入卖出因子构建交易特征的接口,使用见AbuFactorBuyBase.make_buy_order_ml_feature :param kl_pd: 择时阶段金融时间序列 :param combine_kl_pd: 合并择时阶段之前1年的金融时间序列 :param day_ind: 交易发生的时间索引,即对应self.kl_pd.key :param buy_feature: 是否是买入特征构造(bool)

unzip_ml_feature(orders_pd)[源代码]

ABuTradeExecute中make_orders_pd使用,将order中dict字典形式的特征解压拆解为独立的 pd.DataFrame列,即一个特征key,对应一个列 :param orders_pd: 回测结果生成的交易行为构成的pd.DataFrame对象 :return:

class abupy.TradeBu.ABuMLFeature.BuyFeatureMixin[源代码]

Bases: object

买入特征标识混入,与BuyUmpMixin不同,具体feature类可能属于多个类别 即可能同时混入BuyFeatureMixin和SellFeatureMixin

class abupy.TradeBu.ABuMLFeature.SellFeatureMixin[源代码]

Bases: object

卖出特征标识混入,与SellUmpMixin不同,具体feature类可能属于多个类别 即可能同时混入BuyFeatureMixin和SellFeatureMixin

abupy.TradeBu.ABuMLFeature.append_user_feature(feature, check=True)[源代码]

外部设置扩展feature接口 :param feature: 可以是feature class类型,也可以是实例化后的feature object :param check: 是否检测feature是AbuFeatureBase实例 :return:

abupy.TradeBu.ABuMLFeature.clear_user_feature()[源代码]

将用户可扩展自定义特征序列清空

abupy.TradeBu.ABuOrder module

交易订单模块

class abupy.TradeBu.ABuOrder.AbuOrder[源代码]

Bases: object

交易订单类

buy_cnt
buy_date
buy_factor
buy_pos
buy_price
buy_symbol
buy_type_str
expect_direction
fit_buy_order(day_ind, factor_object)[源代码]

根据买入交易日当当天数据以及买入因子,拟合计算买入订单 :param day_ind: 买入交易发生的时间索引,即对应self.kl_pd.key :param factor_object: ABuFactorBuyBases子类实例对象

fit_sell_order(day_ind, factor_object)[源代码]

根据卖出交易日当当天数据以及卖出因子,拟合计算卖出信息,完成订单 :param day_ind: 卖出交易发生的时间索引,即对应self.kl_pd.key :param factor_object: AbuFactorSellBase子类实例对象

keep_days
ml_features
order_deal
sell_date
sell_price
sell_type
sell_type_extra
class abupy.TradeBu.ABuOrder.OrderMarket(order)[源代码]

Bases: abupy.MarketBu.ABuMarket.MarketMixin

根据AbuOrder对象,设置混入类MarketMixin中symbol_name

abupy.TradeBu.ABuTradeDrawer module

交易可视化模块

abupy.TradeBu.ABuTradeDrawer.plot_bk_xd(bk_summary, kl_pd_xd_mean, title=None)[源代码]

根据有bk_summary属性的bk交易因子进行可视化,暂时未迁移完成

abupy.TradeBu.ABuTradeDrawer.plot_capital_info(capital_pd, init_cash=-1)[源代码]

资金信息可视化 :param capital_pd: AbuCapital对象或者AbuCapital对象的capital_pd :param init_cash: 初始化cash,如果capital_pd为AbuCapital对象,即从capital_pd获取

abupy.TradeBu.ABuTradeDrawer.plot_his_trade(orders, kl_pd)[源代码]

可视化绘制AbuOrder对象,绘制交易买入时间,卖出时间,价格,生效因子等 :param orders: AbuOrder对象序列 :param kl_pd: 金融时间序列,pd.DataFrame对象 :return:

abupy.TradeBu.ABuTradeDrawer.plot_kp_xd(kp_summary, kl_pd_xd_mean, title=None)[源代码]

根据有bk_summary属性的kp交易因子进行可视化,暂时未迁移完成

abupy.TradeBu.ABuTradeExecute module

交易执行模块

abupy.TradeBu.ABuTradeExecute.apply_action_to_capital(capital, action_pd, kl_pd_manager)[源代码]

多个金融时间序列对应的多个交易行为action_pd,在考虑资金类AbuCapital对象的情况下,对AbuCapital对象进行 资金时间序列更新,以及判定在有限资金的情况下,交易行为是否可以执行 :param capital: 资金类AbuCapital实例化对象 :param action_pd: 交易行为构成的pd.DataFrame对象 :param kl_pd_manager: 金融时间序列管理对象,AbuKLManager实例 :return:

abupy.TradeBu.ABuTradeExecute.calc_simple_profit(orders, kl_pd)[源代码]

计算交易收益,simple的意思是不考虑手续费 :param orders: AbuOrder对象序列 :param kl_pd: 金融时间序列,pd.DataFrame对象 :return:

abupy.TradeBu.ABuTradeExecute.make_orders_pd(orders, kl_pd)[源代码]

AbuOrder对象序列转换为pd.DataFrame对象,order_pd中每一行代表一个AbuOrder信息 :param orders: AbuOrder对象序列 :param kl_pd: 金融时间序列,pd.DataFrame对象

abupy.TradeBu.ABuTradeExecute.transform_action(orders_pd)[源代码]

将在make_orders_pd中交易订单构成的pd.DataFrame对象进行拆解,分成买入交易行为及数据,卖出交易行为和数据, 按照买卖时间顺序,转换构造交易行为顺序序列 :param orders_pd: 交易订单构成的pd.DataFrame对象 :return: 交易行为顺序序列 pd.DataFrame对象

abupy.TradeBu.ABuTradeProxy module

交易执行代理模块

class abupy.TradeBu.ABuTradeProxy.AbuOrderPdProxy(orders_pd, same_rule=<EOrderSameRule.ORDER_SAME_BSPD: 3>)[源代码]

Bases: object

包装交易订单构成的pd.DataFrame对象,外部debug因子的交易结果,寻找交易策略的问题使用, 支持两个orders_pd的并集,交集,差集,类似set的操作,同时支持相等,不等,大于,小于 的比较操作,eg如下:

orders_pd1 = AbuOrderPdProxy(orders_pd1) with orders_pd1.proxy_work(orders_pd2) as (order1, order2):

a = order1 | order2 # 两个交易结果的并集 b = order1 & order2 # 两个交易结果的交集 c = order1 - order2 # 两个交易结果的差集(在order1中,但不在order2中) d = order2 - order1 # 两个交易结果的差集(在order2中,但不在order1中) eq = order1 == order2 # 两个交易结果是否相同 lg = order1 > order2 # order1唯一的交易数量是否大于order2 lt = order1 < order2 # order1唯一的交易数量是否小于order2
proxy_work(orders_pd)[源代码]

传人需要比较的orders_pd,构造ABuOrderPdProxy对象,返回使用者, 对op_result进行统一分析 :param orders_pd: 回测结果生成的交易订单构成的pd.DataFrame对象 :return:

class abupy.TradeBu.ABuTradeProxy.EOrderSameRule[源代码]

Bases: enum.Enum

对order_pd中对order判断为是否相同使用的规则

ORDER_SAME_BD = 0

order有相同的symbol, 买入日期,和卖出日期,即不考虑价格,只要日期相同就相同

ORDER_SAME_BDP = 2

order有相同的symbol, 买入日期, 买入价格, 并且相同的卖出日期和价格才认为是相同,即买入卖出时刻都相同

ORDER_SAME_BSD = 1

order有相同的symbol, 买入日期,相同的买入价格,即单子买入时刻都相同

ORDER_SAME_BSPD = 3
abupy.TradeBu.ABuTradeProxy.difference_in_2orders(orders_pd, other_orders_pd, same_rule=<EOrderSameRule.ORDER_SAME_BSPD: 3>)[源代码]

差集: 分析因子或者参数问题时使用,debug策略问题时筛选出两个orders_pd的不同交易, 注意返回的结果是存在orders_pd中的交易,但不在cmp_orders_pd中的交易,即结果 为差集:orders_pd - cmp_orders_pd或orders_pd.difference(cmp_orders_pd) :param orders_pd: 回测结果生成的交易订单构成的pd.DataFrame对象 :param other_orders_pd: 回测结果生成的交易订单构成的pd.DataFrame对象 :param same_rule: order判断为是否相同使用的规则, 默认EOrderSameRule.ORDER_SAME_BSPD

即:order有相同的symbol和买入日期和相同的卖出日期和价格才认为是相同
返回:orders_pd - cmp_orders_pd
abupy.TradeBu.ABuTradeProxy.find_unique_group_symbol(order_pd)[源代码]

按照’buy_date’, ‘symbol’分组后,只筛选组里的第一个same_group.iloc[0] :param order_pd: :return:

abupy.TradeBu.ABuTradeProxy.find_unique_symbol(order_pd, same_rule=<EOrderSameRule.ORDER_SAME_BSPD: 3>)[源代码]

order_pd中如果一个buy_date对应的一个symbol有多条交易记录,过滤掉, 注意如果在对应多条记录中保留一个,使用find_unique_group_symbol :param order_pd: 回测结果生成的交易订单构成的pd.DataFrame对象 :param same_rule: order判断为是否相同使用的规则, 默认EOrderSameRule.ORDER_SAME_BSPD

即:order有相同的symbol和买入日期和相同的卖出日期和价格才认为是相同
abupy.TradeBu.ABuTradeProxy.intersection_in_2orders(orders_pd, other_orders_pd, same_rule=<EOrderSameRule.ORDER_SAME_BSPD: 3>)[源代码]

交集: 分析因子或者参数问题时使用,debug策略问题时筛选出两个orders_pd中相同的交易, 即结果为交集:orders_pd & cmp_orders_pd或orders_pd.intersection(cmp_orders_pd) :param orders_pd: 回测结果生成的交易订单构成的pd.DataFrame对象 :param other_orders_pd: 回测结果生成的交易订单构成的pd.DataFrame对象 :param same_rule: order判断为是否相同使用的规则, 默认EOrderSameRule.ORDER_SAME_BSPD

即:order有相同的symbol和买入日期和相同的卖出日期和价格才认为是相同
返回:orders_pd & cmp_orders_pd
abupy.TradeBu.ABuTradeProxy.trade_summary(orders, kl_pd, draw=False, show_info=True)[源代码]

主要将AbuOrder对象序列转换为pd.DataFrame对象orders_pd,以及将 交易单子时间序列转换交易行为顺序序列,绘制每笔交易的细节交易图,以及 简单文字度量输出 :param orders: AbuOrder对象序列 :param kl_pd: 金融时间序列,pd.DataFrame对象 :param draw: 是否可视化交易细节图示 :param show_info: 是否输出交易文字信息

abupy.TradeBu.ABuTradeProxy.union_in_2orders(orders_pd, other_orders_pd)[源代码]

并集:分析因子或者参数问题时使用,debug策略问题时筛选出两个orders_pd中所有不同的交易, 注意这里不认为在相同的交易日买入相同的股票,两笔交易就一样,这里只是两个orders_pd合并 后使用drop_duplicates做了去除完全一样的order,即结果为并集: orders_pd | cmp_orders_pd或orders_pd.union(cmp_orders_pd) :param orders_pd: 回测结果生成的交易订单构成的pd.DataFrame对象 :param other_orders_pd: 回测结果生成的交易订单构成的pd.DataFrame对象 :return: orders_pd | cmp_orders_pd

Module contents

class abupy.TradeBu.AbuBenchmark(benchmark=None, start=None, end=None, n_folds=2, rs=True)[源代码]

Bases: abupy.CoreBu.ABuBase.PickleStateMixin

基准类,混入PickleStateMixin,因为在abu.store_abu_result_tuple会进行对象本地序列化

unpick_extend_work(state)[源代码]

完成 PickleStateMixin中__setstate__结束之前的工作,为kl_pd.name赋予准确的benchmark

class abupy.TradeBu.AbuCapital(init_cash, benchmark, user_commission_dict=None)[源代码]

Bases: abupy.CoreBu.ABuBase.PickleStateMixin

资金类

apply_action(a_action, progress)[源代码]

在回测结果生成的交易行为构成的pd.DataFrame对象上进行apply对应本方法,即 将交易行为根据资金情况进行处理,处理手续费以及时序资金对象capital_pd上的 数据更新 :param a_action: 每一个被迭代中的action,即每一个交易行为 :param progress: 进度条对象 :return: 是否成交deal bool

apply_init_kl(action_pd, show_progress)[源代码]

根据回测交易在时序资金对象capital_pd上新建对应的call,put列 :param action_pd: 回测交易行为对象,pd.DataFrame对象 :param show_progress: 外部设置是否需要显示进度条

apply_k_line(a_k_day, kl_pd, buy_type_head)[源代码]

在apply_kl中的do_apply_kl方法中时序资金对象capital进行apply的对应方法, 即迭代金融时间序列的每一个交易日,根据持仓量计算每一个交易日的市场价值 :param a_k_day: 每一个被迭代中的时间,即每一个交易日数据 :param kl_pd: 正在被apply迭代的金融时间序列本体,pd.DataFrame对象 :param buy_type_head: 代表交易类型,范围(_call,_put) :return:

apply_kl(action_pd, kl_pd_manager, show_progress)[源代码]

apply_action之后对实际成交的交易分别迭代更新时序资金对象capital_pd上每一个交易日的实时价值 :param action_pd: 回测结果生成的交易行为构成的pd.DataFrame对象 :param kl_pd_manager: 金融时间序列管理对象,AbuKLManager实例 :param show_progress: 是否显示进度条

buy_stock(a_order)[源代码]

在apply_action中每笔交易进行处理,根据买单计算cost,在时序资金对象capital_pd上修改对应cash_blance, 以及更新对应symbol上的持仓量 :param a_order: 在apply_action中由action转换的AbuOrder对象 :return: 是否成交deal bool

init_k_line(a_symbol)[源代码]

每一个交易对象在时序资金对象capital_pd上都添加对应的call keep(买涨持仓量),call worth(买涨总价值), put keep(买跌持仓量),put worth(买跌总价值) :param a_symbol: symbol str对象

sell_stock(a_order)[源代码]

在apply_action中每笔交易进行处理,根据卖单计算cost,在时序资金对象capital_pd上修改对应cash_blance, 以及更新对应symbol上的持仓量 :param a_order: 在apply_action中由action转换的AbuOrder对象 :return: 是否成交deal bool

class abupy.TradeBu.AbuKLManager(benchmark, capital)[源代码]

Bases: object

金融时间序列管理类

batch_get_pick_time_kl_pd(choice_symbols, n_process=4)[源代码]

统一批量获取择时金融时间序列获保存在内部的择时字典中,以多进程并行方式运行 :param choice_symbols: 支持迭代的symbol序列 :param n_process: 择时金融时间序列获取并行启动的进程数,默认16个,属于io操作多,所以没有考虑cpu数量 :return:

filter_pick_time_choice_symbols(choice_symbols)[源代码]

使用filter筛选出choice_symbols中的symbol对应的择时时间序列不在内部择时字典中的symbol序列 :param choice_symbols: 支持迭代的symbol序列 :return: 不在内部择时字典中的symbol序列

get_pick_stock_kl_pd(target_symbol, xd=252, min_xd=126)[源代码]

对外获取选股时段金融时间序列,首先在内部择时字典中寻找,没找到使用_fetch_pick_stock_kl_pd获取,且保存选股字典 :param target_symbol: 选股symbol :param xd: 选股周期(默认一年的交易日长度) :param min_xd: 对fetch的选股金融序列进行过滤参数,即最小金融序列长度 :return:

get_pick_time_kl_pd(target_symbol)[源代码]

对外获取择时时段金融时间序列,首先在内部择时字典中寻找,没找到使用_fetch_pick_time_kl_pd获取,且保存择时字典

class abupy.TradeBu.AbuOrder[源代码]

Bases: object

交易订单类

buy_cnt
buy_date
buy_factor
buy_pos
buy_price
buy_symbol
buy_type_str
expect_direction
fit_buy_order(day_ind, factor_object)[源代码]

根据买入交易日当当天数据以及买入因子,拟合计算买入订单 :param day_ind: 买入交易发生的时间索引,即对应self.kl_pd.key :param factor_object: ABuFactorBuyBases子类实例对象

fit_sell_order(day_ind, factor_object)[源代码]

根据卖出交易日当当天数据以及卖出因子,拟合计算卖出信息,完成订单 :param day_ind: 卖出交易发生的时间索引,即对应self.kl_pd.key :param factor_object: AbuFactorSellBase子类实例对象

keep_days
ml_features
order_deal
sell_date
sell_price
sell_type
sell_type_extra
class abupy.TradeBu.AbuOrderPdProxy(orders_pd, same_rule=<EOrderSameRule.ORDER_SAME_BSPD: 3>)[源代码]

Bases: object

包装交易订单构成的pd.DataFrame对象,外部debug因子的交易结果,寻找交易策略的问题使用, 支持两个orders_pd的并集,交集,差集,类似set的操作,同时支持相等,不等,大于,小于 的比较操作,eg如下:

orders_pd1 = AbuOrderPdProxy(orders_pd1) with orders_pd1.proxy_work(orders_pd2) as (order1, order2):

a = order1 | order2 # 两个交易结果的并集 b = order1 & order2 # 两个交易结果的交集 c = order1 - order2 # 两个交易结果的差集(在order1中,但不在order2中) d = order2 - order1 # 两个交易结果的差集(在order2中,但不在order1中) eq = order1 == order2 # 两个交易结果是否相同 lg = order1 > order2 # order1唯一的交易数量是否大于order2 lt = order1 < order2 # order1唯一的交易数量是否小于order2
proxy_work(orders_pd)[源代码]

传人需要比较的orders_pd,构造ABuOrderPdProxy对象,返回使用者, 对op_result进行统一分析 :param orders_pd: 回测结果生成的交易订单构成的pd.DataFrame对象 :return:

class abupy.TradeBu.EOrderSameRule[源代码]

Bases: enum.Enum

对order_pd中对order判断为是否相同使用的规则

ORDER_SAME_BD = 0
ORDER_SAME_BDP = 2
ORDER_SAME_BSD = 1
ORDER_SAME_BSPD = 3
class abupy.TradeBu.AbuFeatureDegExtend[源代码]

Bases: abupy.TradeBu.ABuMLFeature.AbuFeatureBase, abupy.TradeBu.ABuMLFeature.BuyFeatureMixin, abupy.TradeBu.ABuMLFeature.SellFeatureMixin

示例添加新的视角来录制比赛,角度特征,支持买入,卖出

calc_feature(kl_pd, combine_kl_pd, day_ind, buy_feature)[源代码]

根据买入或者卖出时的金融时间序列,以及交易日信息构造拟合角度特征 :param kl_pd: 择时阶段金融时间序列 :param combine_kl_pd: 合并择时阶段之前1年的金融时间序列 :param day_ind: 交易发生的时间索引,即对应self.kl_pd.key :param buy_feature: 是否是买入特征构造(bool) :return: 构造角度特征的键值对字典

get_feature_keys(buy_feature)[源代码]

迭代生成所有走势角度特征feature的列名称定, 使用feature_prefix区分买入,卖出前缀key :param buy_feature: 是否是买入特征构造(bool) :return: 角度特征的键值对字典中的key序列

class abupy.TradeBu.AbuFeatureBase[源代码]

Bases: object

特征构造基类

calc_feature(kl_pd, combine_kl_pd, day_ind, buy_feature)[源代码]

子类主要需要实现的函数,根据买入或者卖出时的金融时间序列,以及交易日信息构造特征 :param kl_pd: 择时阶段金融时间序列 :param combine_kl_pd: 合并择时阶段之前1年的金融时间序列 :param day_ind: 交易发生的时间索引,即对应self.kl_pd.key :param buy_feature: 是否是买入特征构造(bool) :return: 构造特征的键值对字典

check_support(buy_feature)[源代码]

根据参数buy_feature检测是否支持特征构建 :param buy_feature: 是否是买入特征构造(bool)

feature_prefix(buy_feature, check=True)[源代码]

根据buy_feature决定返回_feature_buy_prefix或者_feature_sell_prefix,目的是在calc_feature中构成唯一key :param buy_feature: 是否是买入特征构造(bool) :param check: 是否需要检测是否支持特征构建 :return:

get_feature_keys(buy_feature)[源代码]

子类主要需要实现的函数,定义feature的列名称 :param buy_feature: 是否是买入特征构造(bool) :return: 键值对字典中的key序列

get_feature_ump_keys(ump_cls)[源代码]

根据ump_cls,返回对应的get_feature_keys :param ump_cls: AbuUmpEdgeBase子类,参数为类,非实例对象 :return: 键值对字典中的key序列

support_buy_feature()[源代码]

是否支持买入特征构建

support_sell_feature()[源代码]

是否支持卖出特征构建

class abupy.TradeBu.BuyFeatureMixin[源代码]

Bases: object

买入特征标识混入,与BuyUmpMixin不同,具体feature类可能属于多个类别 即可能同时混入BuyFeatureMixin和SellFeatureMixin

class abupy.TradeBu.SellFeatureMixin[源代码]

Bases: object

卖出特征标识混入,与SellUmpMixin不同,具体feature类可能属于多个类别 即可能同时混入BuyFeatureMixin和SellFeatureMixin