当前位置: 首页 > news >正文

北京响应式的网站制作代码的软件

北京响应式的网站,制作代码的软件,腾讯云网站建设教程视频,深圳外贸平台建站创建自定义因子选股策略 使用qteasy创建自定义因子选股交易策略开始前的准备工作本节的目标Alpha选股策略的选股思想计算选股指标用FactorSorter定义Alpha选股策略交易策略的回测结果用GeneralStg定义一个Alpha选股策略回测结果#xff1a;本节回顾 使用qteasy创建自定义因子选… 创建自定义因子选股策略 使用qteasy创建自定义因子选股交易策略开始前的准备工作本节的目标Alpha选股策略的选股思想计算选股指标用FactorSorter定义Alpha选股策略交易策略的回测结果用GeneralStg定义一个Alpha选股策略回测结果本节回顾 使用qteasy创建自定义因子选股交易策略 qteasy是一个完全本地化部署和运行的量化交易分析工具包Github地址在这里并且可以通过pip安装 $ pip install qteasy -Uqteasy具备以下功能 金融数据的获取、清洗、存储以及处理、可视化、使用量化交易策略的创建并提供大量内置基本交易策略向量化的高速交易策略回测及交易结果评价避免未来函数的内核设计交易策略参数的优化、评价、部署、以及实盘运行 通过本系列教程您将会通过一系列的实际示例充分了解qteasy的主要功能以及使用方法。 开始前的准备工作 在开始本节教程前请先确保您已经掌握了下面的内容 安装、配置qteasy —— QTEASY教程1设置了一个本地数据源并已经将足够的历史数据下载到本地——QTEASY教程2学会创建交易员对象使用内置交易策略——QTEASY教程3学会使用混合器将多个简单策略混合成较为复杂的交易策略——QTEASY教程4了解如何自定义交易策略——QTEASY教程5 在QTEASY文档中还能找到更多关于使用内置交易策略、创建自定义策略等等相关内容。对qteasy的基本使用方法还不熟悉的同学可以移步那里查看更多详细说明。 本节的目标 在本节中我们将承接上一节开始的内容介绍qteasy的交易策略基类在介绍过一个最简单的择时交易策略类以后我们将介绍如何使用qteasy提供的另外两种策略基类创建一个多因子选股策略。 为了提供足够的使用便利性qteasy的提供的各种策略基类本质上并无区别只是为了减少用户编码工作量而提供的预处理形式甚至可以将不同的交易策略基类理解成为了特定交易策略设计的“语法糖”因此同一交易策略往往可以用多种不同的交易策略基类实现因此在本节中我们将用两种不同的策略基类来实现一个Alpha选股交易策略。 Alpha选股策略的选股思想 我们在这里讨论的Alpha选股策略是一个低频运行的选股策略这个策略可以每周或者每月运行一次每次选股时会遍历HS300指数的全部成分股依照一定的标准将这300支股票进行优先级排序从中选择出排位靠前的30支股票等权持有也就是说每个月进行一次调仓换股调仓时将排名靠后的股票卖掉买入排名靠前的股票并确保股票的持有份额相同。 Alpha选股策略的排名依据每一支股票的两个财务指标EV企业市场价值以及EBITDA息税折旧摊销前利润来计算对每一支股票计算EV与EBITDA的比值当这个比值大于0的时候说明该上市公司是盈利的因为EBITDA为正。这时这个比值代表该公司每赚到一块钱利润需要投入的企业总价值。自然这个比值越低越好。例如下面两家上市公司数据如下 A公司的EBITDA为一千万而企业市场价值为一百亿EV/EBITDA1000.。说明该公司每一千元的市场价值可以挣到一元钱利润B公司的EBITDA同样为一千万企业市场价值为一千亿EV/EBITDA10000说明该公司每一万元的市场价值可以挣到一元钱利润 从常理分析我们自然会觉得A公司比较好因为靠着较少的公司市场价值就挣到了同样的利润这时我们认为A公司的排名比较靠前。 按照上面的规则我们在每个月的最后一天将HS300成分股的所有上市公司全部进行一次从小到大排名剔除掉EV/EBITDA小于0的公司盈利为负的公司当然应该剔除以后选择排名最靠前的30个公司持有就是Alpha选股交易策略。 其实类似于这样的指标排序选股策略qteasy提供了一个内置交易策略可以直接实现 import qteasy as qtqt.built_ins(finance)以股票过去一段时间内的财务指标的平均值作为选股因子选股基础选股策略。以股票的历史指标的平均值作为选股因子因子排序参数可以作为策略参数传入改变策略数据类型根据不同的历史数据选股选股参数可以通过pars传入策略参数:- sort_ascending: enum, 是否升序排列因子- True: 优先选择因子最小的股票,- False, 优先选择因子最大的股票- weighting: enum, 股票仓位分配比例权重- even :默认值, 所有被选中的股票都获得同样的权重- linear :权重根据因子排序线性分配- distance :股票的权重与他们的指标与最低之间的差值距离成比例- proportion :权重与股票的因子分值成正比- condition: enum, 股票筛选条件- any :默认值选择所有可用股票- greater :筛选出因子大于ubound的股票- less :筛选出因子小于lbound的股票- between :筛选出因子介于lbound与ubound之间的股票- not_between:筛选出因子不在lbound与ubound之间的股票- lbound: float, 股票筛选下限值, 默认值np.-inf- ubound: float, 股票筛选上限值, 默认值np.inf- max_sel_count: float, 抽取的股票的数量(p1)或比例(p1), 默认值0.5表示选中50%的股票信号类型:PT型百分比持仓比例信号信号规则:使用data_types指定一种数据类型将股票过去的datatypes数据取平均值将该平均值作为选股因子进行选股策略属性缺省值:默认参数(True, even, greater, 0, 0, 0.25)数据类型eps 每股收益单数据输入采样频率年窗口长度270参数范围[(True, False),(even, linear, proportion),(any, greater, less, between, not_between),(-np.inf, np.inf),(-np.inf, np.inf),(0, 1.)]策略不支持参考数据不支持交易数据class qteasy.built_in.SelectingAvgIndicator不过这个内置交易策略仅支持以qteasy内置历史数据类型为选股因子例如pe市盈率、profit利润等数据是qteasy的内置历史数据可以直接引用。但如果是qteasy内置历史数据中找不到的选股因子就不能直接使用内置交易策略了。EV/EBITDA这个指标是一个计算指标因此我们必须使用自定义交易策略。并在自定义策略中计算该指标。 计算选股指标 为了计算EV/EBITDA我们必须至少先确认qteasy中是否已经提供了EV和EBITDA这两种历史数据 我们可以使用find_history_data()来查看历史数据是否被qteasy支持 import qteasy as qtqt.find_history_data(ev) matched following history data, use qt.get_history_data() to load these historical data by its data_id: ------------------------------------------------------------------------ Empty DataFrame Columns: [freq, asset_type, table_name, description] Index: [][]qt.find_history_data(ebitda) matched following history data, use qt.get_history_data() to load these historical data by its data_id: ------------------------------------------------------------------------freq asset table desc data_id income_ebitda q E income 上市公司利润表 - 息税折旧摊销前利润 ebitda q E financial 上市公司财务指标 - 息税折旧摊销前利润[income_ebitda, ebitda]从上面的返回值可以看出在qteasy的内置历史数据类型中EBITDA是一个标准的历史数据类型可以通过’ebitda‘ / income_ebitda 这两个ID来获取我们将使用’ebitda’但是EV企业现金价值并不在内置数据类型中但我们知道EV可以通过下面的公式计算 E V 总市值 总负债 − 总现金 EV 总市值 总负债 - 总现金 EV总市值总负债−总现金 而上面几个财务指标都是qteasy直接支持的 总市值 - 数据类型 total_mv总负债 - 数据类型 total_liab总现金 - 数据类型 c_cash_equ_end_period 我们可以测试一下 htypes total_mv, total_liab, c_cash_equ_end_period, ebitda # 获取沪深300指数成分股 shares qt.filter_stock_codes(index000300.SH, date20220131) # 获取所有股票的总市值、总负债、总现金、EBITDA数据 dt qt.get_history_data(htypes, sharesshares, asset_typeany, freqm) # 随便选择一支股票转化为DataFrame检查数据是否正确获取 one_share shares[24] df dt[one_share] # 计算EV/EBITDA选股因子 df[ev_to_ebitda] (df.total_mv df.total_liab - df.c_cash_equ_end_period) / df.ebitda 可以看到选股因子已经计算出来了那么我们可以开始定义交易策略了。 用FactorSorter定义Alpha选股策略 针对这种定时选股类型的交易策略qteasy提供了FactorSorter交易策略类顾名思义这个交易策略基类允许用户在策略的实现方法中计算一组选股因子这样策略就可以自动将所有的股票按照选股因子的值排序并选出排名靠前的股票。至于排序方法、筛选规则、股票持仓权重等都可以通过策略参数设置。 如果符合上面定义的交易策略使用FactorSorter策略基类将会非常方便。 下面我们就来一步步定义看看首先继承FactorSorter并定义一个类在上一个章节中我们在自定义策略的__init__()方法中定义名称、描述以及默认参数等信息然而我们也可以忽略__init__方法仅仅在创建策略对象时传入参数等信息这也是可以的我们在这里就这样做 class AlphaFac(qt.FactorSorter): # 注意这里使用FactorSorter策略类# 忽略__init__()方法直接定义realize()方法def realize(self, h, **kwargs):pass 与上一节相同在realize()中需要做的第一步是获取历史数据。我们知道历史数据包括’total_mv, total_liab, c_cash_equ_end_period, ebitda’等四种这些历史数据同样是打包后存储在历史数据属性h中的。与上一章节不同的是h是一个三维ndarray形状shape为(L, M, N)包含L层M行、N列分别代表每个股票、每个日期以及每种数据类型。 因此要获取四种数据类型最后一个周期的所有股票的数据应该使用如下方法切片 class AlphaFac(qt.FactorSorter): # 注意这里使用FactorSorter策略类def realize(self, h, **kwargs):# 从历史数据编码中读取四种历史数据的最新数值total_mv h[:, -1, 0] # 总市值total_liab h[:, -1, 1] # 总负债cash_equ h[:, -1, 2] # 现金及现金等价物总额ebitda h[:, -1, 3] # ebitda息税折旧摊销前利润...这样我们获取到的每一种数据类型都是一个一维数组这个数组的长度与我们传入的备选股票池中的股票数量相同每一个元素代表该股票的数据。加入我们的投资股票池中有三支股票那么total_mv中就会有三个数字分别代表三支股票的总市值以此类推。 做好上述准备后计算选股因子就非常方便了而且由于我们使用了FactorSorter策略基类计算好选股因子后直接返回选股因子就可以了qteasy会处理剩下的选股操作 class AlphaFac(qt.FactorSorter): # 注意这里使用FactorSorter策略类def realize(self, h, **kwargs):... # 略# 选股因子为EV/EBIDTA使用下面公式计算factor (total_mv total_liab - cash_equ) / ebitdareturn factor # 直接返回选股因子策略就定义完了至此仅仅用六行代码一个自定义Alpha选股交易策略就定义好了。是不是非常简单 好了我们来看看回测的结果如何 交易策略的回测结果 由于我们忽略了策略类的__init__()方法因此在实例化策略对象时必须输入完整的策略参数 alpha AlphaFac(pars(),par_count0,par_types[],par_range[],nameAlphaSel,description本策略每隔1个月定时触发计算SHSE.000300成份股的过去的EV/EBITDA并选取EV/EBITDA大于0的股票,data_typestotal_mv, total_liab, c_cash_equ_end_period, ebitda,strategy_run_freqm,data_freqd,window_length100,max_sel_count30, # 设置选股数量最多选出30个股票conditiongreater, # 设置筛选条件仅筛选因子大于ubound的股票ubound0.0, # 设置筛选条件仅筛选因子大于0的股票weightingeven, # 设置股票权重所有选中的股票平均分配权重sort_ascendingTrue) # 设置排序方式因子从小到大排序选择头30名然后创建一个Operator对象因为我们希望控制持仓比例因此最好使用“PT”信号类型 op qt.Operator(alpha, signal_typePT) res op.run(mode1,asset_typeE,asset_poolshares,PT_buy_threshold0.0,PT_sell_threshold0.0,trade_batch_size100,sell_batch_size1)回测结果如下 | || BACK TESTING RESULT || |qteasy running mode: 1 - History back testing time consumption for operate signal creation: 9.4ms time consumption for operation back looping: 5s 831.0msinvestment starts on 2016-04-05 00:00:00 ends on 2021-02-01 00:00:00 Total looped periods: 4.8 years.-------------operation summary:------------ Only non-empty shares are displayed, call loop_result[oper_count] for complete operation summarySell Cnt Buy Cnt Total Long pct Short pct Empty pct 000301.SZ 1 2 3 10.3% 0.0% 89.7% 000786.SZ 2 3 5 27.5% 0.0% 72.5% 000895.SZ 1 0 1 62.6% 0.0% 37.4% 002001.SZ 2 2 4 55.8% 0.0% 44.2% 002007.SZ 3 1 4 68.3% 0.0% 31.7% 002027.SZ 2 9 11 41.3% 0.0% 58.7% 002032.SZ 2 0 2 5.9% 0.0% 94.1% 002044.SZ 1 1 2 1.8% 0.0% 98.2% 002049.SZ 1 1 2 5.1% 0.0% 94.9% 002050.SZ 4 5 9 13.8% 0.0% 86.2% ... ... ... ... ... ... ... 603517.SH 1 1 2 1.8% 0.0% 98.2% 603806.SH 6 3 9 39.8% 0.0% 60.2% 603899.SH 1 1 2 31.0% 0.0% 69.0% 000408.SZ 3 6 9 35.5% 0.0% 64.5% 002648.SZ 1 1 2 5.2% 0.0% 94.8% 002920.SZ 1 1 2 1.7% 0.0% 98.3% 300223.SZ 1 1 2 5.2% 0.0% 94.8% 600219.SH 1 1 2 6.1% 0.0% 93.9% 603185.SH 1 1 2 5.2% 0.0% 94.8% 688005.SH 1 1 2 5.2% 0.0% 94.8% Total operation fee: ¥ 928.22 total investment amount: ¥ 100,000.00 final value: ¥ 159,072.14 Total return: 59.07% Avg Yearly return: 10.09% Skewness: -0.28 Kurtosis: 3.29 Benchmark return: 65.96% Benchmark Yearly return: 11.06%------strategy loop_results indicators------ alpha: -0.012 Beta: 1.310 Sharp ratio: 1.191 Info ratio: -0.010 250 day volatility: 0.105 Max drawdown: 20.49% peak / valley: 2018-05-22 / 2019-01-03recovered on: 2019-12-26END OF REPORT回测结果显示这个策略并不能非常有效地跑赢沪深300指数不过总体来说回撤较小一些风险较低是一个不错的保底策略。 但策略的表现并不是我们讨论的重点下面我们再来看一看如果不用FactorSorter基类如何定义同样的Alpha选股策略。 用GeneralStg定义一个Alpha选股策略 前面已经提过了两种策略基类 RuleIterator 用户只需要针对一支股票定义选股规则qteasy便能将同样的规则应用到股票池中所有的恶股票上而且还能针对不同股票设置不同的可调参数FactorSorter用户只需要定义一个选股因子qteasy便能根据选股因子自动排序后选择最优的股票持有并卖掉不够格的股票。 而GeneralStg是qteasy提供的一个最基本的策略基类它没有提供任何“语法糖”功能帮助用户降低编码工作量但是正是因为没有语法糖它才是一个真正的“万能”策略类可以用来更加自由地创建交易策略。 上面的Alpha选股交易策略可以很容易用FactorSorter实现但为了了解GeneralStg我们来看看如何使用它来创建相同的策略 直接把完整的代码贴出来 class AlphaPT(qt.GeneralStg):def realize(self, h, rNone, tNone, parsNone):# 从历史数据编码中读取四种历史数据的最新数值total_mv h[:, -1, 0] # 总市值total_liab h[:, -1, 1] # 总负债cash_equ h[:, -1, 2] # 现金及现金等价物总额ebitda h[:, -1, 3] # ebitda息税折旧摊销前利润# 选股因子为EV/EBIDTA使用下面公式计算factors (total_mv total_liab - cash_equ) / ebitda# 处理交易信号将所有小于0的因子变为NaNfactors np.where(factors 0, np.nan, factors)# 选出数值最小的30个股票的序号arg_partitioned factors.argpartition(30)selected arg_partitioned[:30] # 被选中的30个股票的序号not_selected arg_partitioned[30:] # 未被选中的其他股票的序号包括因子为NaN的股票# 开始生成PT交易信号signal np.zeros_like(factors)# 所有被选中的股票的持仓目标被设置为0.03表示持有3.3%signal[selected] 0.0333# 其余未选中的所有股票持仓目标在PT信号模式下被设置为0代表目标仓位为0signal[not_selected] 0 return signal 将上面的代码与FactorSorter的代码对比可以发现GeneralStg的代码在计算出选股因子以后还多出了因子处理的工作 剔除小于零的因子排序并选出剩余因子中最小的30个选出股票后将他们的持仓比例设置为3.3% 事实上上面的这些工作都是FactorSorter提供的“语法糖”在这里我们必须手动实现而已。值得注意的是我在上面例子中使用的排序等代码都是从FactorSorter中直接提取出来的高度优化的numpy代码它们的运行速度是很快的比一般用户能写出的代码快很多因此只要条件允许用户都应该尽量利用这些语法糖只有在不得已的情况下才自己编写排序代码。 大家可以研究一下上面的代码但是请注意如果使用GeneralStg策略类策略的输出应该是股票的目标仓位而不是选股因子。 下面看看回测结果 回测结果 使用同样的数据进行回测 alpha AlphaPT(pars(),par_count0,par_types[],par_range[],nameAlphaSel,description本策略每隔1个月定时触发计算SHSE.000300成份股的过去的EV/EBITDA并选取EV/EBITDA大于0的股票,data_typestotal_mv, total_liab, c_cash_equ_end_period, ebitda,strategy_run_freqm,data_freqd,window_length100) op qt.Operator(alpha, signal_typePT) res op.run(mode1,asset_typeE,asset_poolshares,PT_buy_threshold0.00, # 如果设置PBT0.00PST0.03最终收益会达到30万元PT_sell_threshold0.00,trade_batch_size100,sell_batch_size1,maximize_cash_usageTrue,trade_logTrue)回测结果如下 | || BACK TESTING RESULT || |qteasy running mode: 1 - History back testing time consumption for operate signal creation: 7.2ms time consumption for operation back looping: 6s 308.5msinvestment starts on 2016-04-05 00:00:00 ends on 2021-02-01 00:00:00 Total looped periods: 4.8 years.-------------operation summary:------------ Only non-empty shares are displayed, call loop_result[oper_count] for complete operation summarySell Cnt Buy Cnt Total Long pct Short pct Empty pct 000301.SZ 1 1 2 10.3% 0.0% 89.7% 000786.SZ 2 3 5 27.5% 0.0% 72.5% 000895.SZ 1 1 2 68.7% 0.0% 31.3% 002001.SZ 2 2 4 57.5% 0.0% 42.5% 002007.SZ 0 1 1 68.3% 0.0% 31.7% 002027.SZ 6 7 13 41.3% 0.0% 58.7% 002032.SZ 3 1 4 7.5% 0.0% 92.5% 002044.SZ 1 1 2 1.8% 0.0% 98.2% 002049.SZ 1 1 2 5.1% 0.0% 94.9% 002050.SZ 4 4 8 13.8% 0.0% 86.2% ... ... ... ... ... ... ... 603806.SH 5 3 8 62.1% 0.0% 37.9% 603899.SH 2 3 5 36.3% 0.0% 63.7% 000408.SZ 3 5 8 35.5% 0.0% 64.5% 002648.SZ 1 1 2 5.2% 0.0% 94.8% 002920.SZ 1 1 2 5.1% 0.0% 94.9% 300223.SZ 1 2 3 5.2% 0.0% 94.8% 300496.SZ 1 1 2 10.5% 0.0% 89.5% 600219.SH 1 1 2 6.1% 0.0% 93.9% 603185.SH 1 1 2 5.2% 0.0% 94.8% 688005.SH 1 2 3 5.2% 0.0% 94.8% Total operation fee: ¥ 985.25 total investment amount: ¥ 100,000.00 final value: ¥ 189,723.44 Total return: 89.72% Avg Yearly return: 14.18% Skewness: -0.41 Kurtosis: 2.87 Benchmark return: 65.96% Benchmark Yearly return: 11.06%------strategy loop_results indicators------ alpha: 0.044 Beta: 1.134 Sharp ratio: 1.284 Info ratio: 0.011 250 day volatility: 0.120 Max drawdown: 20.95% peak / valley: 2018-05-22 / 2019-01-03recovered on: 2019-09-09END OF REPORT两种交易策略的输出结果基本相同 本节回顾 通过本节的学习我们了解了qteasy提供的另外两种交易策略基类FactorSorter和GeneralStg的使用方法实际创建了两个交易策略虽然使用不同的基类但是创建出了基本相同的Alpha选股交易策略。 在下一个章节中我们仍然将继续介绍自定义交易策略但是会用一个更加复杂的例子来演示自定义交易策略的使用方法。敬请期待
http://www.pierceye.com/news/541811/

相关文章:

  • 将网站保存怎么做wordpress 后台菜单
  • 2.0网站线上建设什么意思做外贸网站哪家的好
  • 网站域名可以更改吗安装wordpress插件目录下
  • 海南省澄迈住房和城乡建设厅网站ui设计师创意平台
  • 青岛网站设计公司排名wordpress 下载主题
  • 外包做网站不满意中级经济师考试成绩查询
  • 苏州企业网站建站系统网页制作基础步骤
  • 新河网站规划电子商务网站流程
  • 免费网站建设免代码杭州建设工程交易平台
  • 网页网站导读怎么做百度问答兼职怎么做
  • wordpress建站环境报喜鸟集团有限公司网页制作
  • 怎么利用网站赚广告费网站开发服务费入什么科目
  • 求网站2021在线观看设计app的软件
  • 百度文库登录入口昆明网站建设优化技术
  • 江苏建设教育协会网站网络营销专员岗位职责
  • 遂宁门户网站建设先进工作单位帮别人做违法网站会判刑吗
  • 设计公司网站套餐怎么样做短视频
  • 化妆品做网站流程什么是网络营销产品
  • windows搭建php网站推荐商城网站建设
  • php网站开发门槛高吗网络推广网站推广
  • 网站推广的8种方法微信怎么开创公众号
  • 大鹏外贸网站建设海口网站网站建设
  • 手表东莞网站建设技术支持信创网站
  • 中小企业为什么要建网站wordpress特效 插件推荐
  • 好的门户网站龙南建设局网站
  • 深圳住房和建设局官网网站设计导航精选最好的设计网站大全
  • 个人备案网站建设方案书网站开发实训教程
  • 周口网站关键词优化重庆招商网
  • 国内优秀网站设计师江西宜春市城市建设档案馆网站
  • 怎么查看网站用的php还是.networdpress博客页修改