量化选股——基于动量因子的行业风格轮动策略(第1部分—因子测算)
文章目录
- 动量因子与行业轮动概述
- 动量因子的理解
- 投资视角下的行业轮动现象
- 投资者视角与奈特不确定性
- 动量因子在行业风格上的效果测算
- 动量因子效果测算流程概述
- 1. 行业选择:申万一级行业
- 2. 动量因子选择:阿隆指标(Aroon)
- 3. 测算方法
- 1.选择特定的时间区间
- 2.计算阿隆指标(Arron)
- 3. 统计收益率&胜率
- 4. 测算结论
【量化选股——基于动量因子的行业风格轮动策略】分为两部分:
- 第1部分—因子测算
- 第2部分—策略回测
动量因子与行业轮动概述
动量因子的理解
动量,可以理解为“势头”,“强势的程度”。汽车遇到红灯时,不是一下子停下,而是滑行一段再停。滑行的这一段就解释为“动量”造成的。动量因子表示,即便情况发生了变化,这些因子所代表的势头仍会持续一段时间。
动量因子一直饱受争议,因为它的前提假设是股票会表现出马太效应。意思是:股票的相对强弱趋势会延续,并且表现出“强者恒强,弱者恒弱”的态势,除非有意外情况发生才会导致强弱之势逆转。动量因子表现出两种效应:
- 动量效应:股票的收益率会延续
- 反转效应:经过较长时间后,收益会翻转
挖掘动量因子的过程往往是先算出结果,再找一个逻辑来解释。因此动量因子其实没有太多的基础理论支撑,是在实践中被摸索出来的。使用动量因子的风险也很高,因为对动量因子的解释性的逻辑往往超脱了我们过去所知的对市场理解的框架体系,有一种“唯数据论”的感觉。这里博主希望大家能够辩证的看待动量因子,有自己的看法。
通常学界对动量因子的理解有以下几种:
-
投资者的决策行为,导致了动量因子的产生。如中国人个人炒股比例高,而且由于缺乏背景知识,缺乏对基本面的了解,同时好大喜功求快,导致短线操作居多,跟风者居多;
但反对者认为这种猜测无法定量评估,而这样的解释是“为了发展一个理论模型而寻找不合理的逻辑假设”
-
因为每个市场的参与者,接收同一个信息的时间都不同,因此即便某个事件发生了,依旧会因为接收信息的时间差导致参与者在操作上存在时间差,所以时间差导致了动量这种“效应”的产生。同样,也可能因为存在一些信息差,不对称的信息差会随着时间流逝慢慢对称,这个过程也会造成动量。
但反对者同样认为:既然存在操作的时间差,那么利好和利空的消息都应该存在时间差,而往往动量因子只能体现出某一边的动量。(如,某些代表利好的动量因子无法解释利空的情况;或者说,动量因子本身就不应该被分为利好或利空,否则就代表它只验证了对一遍有效)
-
市场的参与者都有自己入场的动机与离场的目的,不同参与者也是在市场中不断博弈与进化的(市场具有“奈特不确定性”)。按照书本所述,股票现在合理的价格,就是对未来现金流的折现。那么不同的参与者因为伴随有不同的入场与离场的目的,因此站在各自的立场上,对“未来现金流折现”的估值也不同,而这种行为伴随着市场的进化与发展,导致“动量”作为一个观测现象而产生。
这就意味着“动量”是一种表面现象,它不是因为固定的几个逻辑直接导致的结果,而是博弈造成的一种被观测出来的现象。
目前动量因子在个股上是作为多因子模型的一部分存在,而如果将视野扩大到行业层面,就可以单独拿动量因子进行建模测算,此时因子的动量效应较为明显。通常认为是因为暴露的因子动量会随着个股传递到整个行业组合上,因此观测较为明显。
我们常见的动量因子通常包含:
- 过去一段时间(1周、10天、一个月、3个月)的收益率
- 5、10、20、30、60天收盘价均线
- 过去一段时间板块、行业的高开低收等数据
投资视角下的行业轮动现象
我们以接收信息的时间差导致参与者在操作上存在时间差,所以时间差导致了动量这种“效应”的产生为视角,就可以发现在行情走势上:
-
市场上有大量未接受到该信息的投资者:标的买卖双方造成的买卖供需关系并不会显著到立即把价格推向其应当达到的位置,此时表现在信息的“反应不足”
-
越来越多的投资者接触到了该信息并做出反应:此时价格逐渐被推至合理价格附近,但后入市场的投资者中有一部分因为各种各样的原因,错误或过分估计了该信息价值,从而将该股票价格再进一步推离了合理价格,此时“反应过度”,出现超买、超卖现象
-
超买超卖现象被发现:市场的投资者捕捉到反映过度带来的盈利空间,通过交易获取超额收益的同时,将股票价格再度往合理价格处推动。
比如:在2022年11月30日ChatGPT就已经向公众开放:
- 11月30日OpenAI(ChatGPT的作者)在维基百科发布关于ChatGPT的百科信息
- 12月6日开始维基百科词条开始普通用户参与修改,并且参与修改的用户账号量每日增长显著
- 12月新闻既有“小学生击败ChatGPT”,“差点被ChatGPT骗了”,“举一千反一,人类离xxx还有多远”等负面看法,也有“爆火的ChatGPT太强了”等正面观点
复盘12、1、2月份到如今的ChatGPT概念(BK1126),可以发现站在投资者的视角上:
- 投资者无法判断信息是从何时开始反映在市场上的,也无法判断未来将持续多长时间
- 投资者难以评估信息的市场价值,信息带来的对预期的影响,能造成的股价涨跌幅难以度量
- 信息源种类、观点、立场繁多,难以主观评价
如今,百度指数上,ChatGpt的搜索指数与资讯关注度依旧很高,但相对高点已经走弱,由于是境外资讯,而百度搜索面向国内用户,因此国内资讯会优先与国内的搜索指数呈现出增长的趋势
因此在行业轮动上,动量指标盈利的来源:
- 市场上有大量未接受到该信息的投资者
- 越来越多的投资者接触到了该信息并做出反应(动量指标盈利主因)
- 超买超卖现象被发现(动量指标亏损主因)
投资者视角与奈特不确定性
奈特把对未来的不确定性分为两种,一种称为“风险”,另一种称为“奈特不确定性”,将未知分为了两类:
- 风险:具有特定概率分布的不确定性
- 奈特不确定性:没有特定概率分布的不确定性
后续的研究证明:
- 人们常对奈特不确定性表现出厌恶的倾向,并愿意为避免奈特不确定性而支付溢价
- 厌恶奈特不确定性的人不一定厌恶风险,即“赌鬼也讨厌奈特不确定”
- 在人们面临奈特不确定性时,会出现群体盲从的现象,形成羊群效应,此时人们更在乎别人的想法
当信息被越来越多的人接触到的时候,投资者面临的其实就不是完全未知的“奈特不确定性”,而是可以评估盈利与亏损区间与概率的“风险”了。但相对的,不同的市场参与者对信息的敏感程度与评估是不同的,从这个角度也验证了上述的第二条:“投资者难以评估信息的市场价值,信息带来的对预期的影响,能造成的股价涨跌幅难以度量”。对于信息的动量与价格走势趋势的判断需要策略研究员进行细致的研究。
动量因子在行业风格上的效果测算
动量因子效果测算流程概述
- 首先我们选择“申万一级”行业指数,阿隆指标(Aroon)作为动量指标进行测算
- 然后根据指数数据集,选择公共的时间段(2015-01-01 至 2023-01-01)将日期分为两个部分:
- 选择 2015-01-01 至 2020-01-01 这一段时期进行测算
- 选择 2020-01-01 至 2023-01-01 这一段时期进行回测
- 选择测算的时间段进行测算
- 选择回测的时间段进行回测
1. 行业选择:申万一级行业
我们选取申万一级行业指数来测算
申万行业分类规则请参考:申万行业分类标准(2021版)
行业代码 | 行业名称 | 成份个数 | 静态市盈率 | TTM(滚动)市盈率 | 市净率 | 静态股息率 | |
---|---|---|---|---|---|---|---|
0 | 801010.SI | 农林牧渔 | 99 | 47.13 | 47.64 | 2.84 | 0.62 |
1 | 801030.SI | 基础化工 | 343 | 15.92 | 15.02 | 2.48 | 2.11 |
2 | 801040.SI | 钢铁 | 44 | 7.27 | 12.03 | 1.06 | 5.65 |
3 | 801050.SI | 有色金属 | 128 | 24.55 | 15.51 | 2.69 | 1.21 |
4 | 801080.SI | 电子 | 308 | 23.88 | 27.29 | 2.94 | 1.21 |
5 | 801880.SI | 汽车 | 240 | 29.28 | 28.17 | 2.27 | 1.31 |
6 | 801110.SI | 家用电器 | 79 | 17.60 | 16.00 | 2.82 | 2.97 |
7 | 801120.SI | 食品饮料 | 119 | 40.73 | 36.84 | 7.84 | 1.77 |
8 | 801130.SI | 纺织服饰 | 113 | 16.82 | 17.74 | 1.97 | 3.48 |
9 | 801140.SI | 轻工制造 | 148 | 21.67 | 25.74 | 2.38 | 1.81 |
10 | 801150.SI | 医药生物 | 360 | 29.34 | 26.32 | 3.57 | 1.08 |
11 | 801160.SI | 公用事业 | 123 | 21.32 | 19.21 | 1.90 | 2.28 |
12 | 801170.SI | 交通运输 | 124 | 9.87 | 8.48 | 1.28 | 4.62 |
13 | 801180.SI | 房地产 | 115 | 9.55 | 12.15 | 0.98 | 3.40 |
14 | 801200.SI | 商贸零售 | 104 | 26.10 | 31.57 | 2.60 | 1.51 |
15 | 801210.SI | 社会服务 | 73 | 62.34 | 62.04 | 3.57 | 0.55 |
16 | 801780.SI | 银行 | 42 | 4.97 | 4.66 | 0.55 | 5.79 |
17 | 801790.SI | 非银金融 | 88 | 13.64 | 16.67 | 1.38 | 2.56 |
18 | 801230.SI | 综合 | 24 | 57.83 | 30.57 | 2.31 | 0.78 |
19 | 801710.SI | 建筑材料 | 74 | 9.34 | 12.55 | 1.48 | 3.83 |
20 | 801720.SI | 建筑装饰 | 158 | 8.50 | 7.91 | 0.89 | 2.35 |
21 | 801730.SI | 电力设备 | 265 | 40.19 | 29.25 | 4.07 | 0.60 |
22 | 801890.SI | 机械设备 | 398 | 24.07 | 27.19 | 2.34 | 1.69 |
23 | 801740.SI | 国防军工 | 98 | 55.91 | 50.13 | 3.74 | 0.49 |
24 | 801750.SI | 计算机 | 268 | 39.49 | 43.27 | 3.89 | 0.88 |
25 | 801760.SI | 传媒 | 140 | 18.93 | 21.97 | 1.88 | 2.49 |
26 | 801770.SI | 通信 | 107 | 17.89 | 15.99 | 1.45 | 4.08 |
27 | 801950.SI | 煤炭 | 38 | 10.12 | 6.64 | 1.42 | 6.61 |
28 | 801960.SI | 石油石化 | 47 | 10.61 | 8.14 | 1.00 | 6.81 |
29 | 801970.SI | 环保 | 109 | 16.60 | 18.72 | 1.58 | 1.75 |
30 | 801980.SI | 美容护理 | 28 | 43.95 | 42.61 | 5.69 | 0.61 |
这里申万一级的行情数据不在之前的股票数据里,这里提供获取代码:
import akshare as ak# 申万一级行业信息
sw_index_first_info_df = ak.sw_index_first_info()
for _, sw_series in sw_index_first_info_df.iterrows():sw_symbol = sw_series["行业代码"].split(".")[0]_ak_df = ak.index_hist_sw(symbol=sw_symbol, period="day")_ak_df.to_csv("../data/select_factor_data/sw_{}.csv".format(sw_symbol),index=False)
2. 动量因子选择:阿隆指标(Aroon)
阿隆(Aroon)指标是由图莎尔·钱德(Tushar Chande)1995 年发明的,它通过计算当前价格达到近期最高值和最低值以来所经过的天数,帮助投资者预测证券价格趋势或反转的变化
阿隆指标计算步骤:
- 确定滑动窗口的长度,比如25个工作日);获取这个窗口中日线的最高价与最低价
- 用最高价计算
AroonUp = [(计算期天数-达到最高价后的天数)/计算期天数]*100
,即:
Aroonup = [ ( 25 - 到达最高价后的天数 ) / 25] * 100 - 用最低价计算
AroonDown = [(计算期天数-达到最低价后的天数)/计算期天数]*100
,即:
Arrondown = [ ( 25 - 达到最低价后的天数 ) / 25 ] * 100
根据公式我们可以推算出:
- 最高价屡创新高时,arronup=1;最低价屡创新低时,arrondown=1;
- 最高价不断走低时,arronup=0;最低价不断走高时,arrondown=0;
- arronup越小,代表离上一次创新高的时间越久;arrondown越小,代表离上一次创新低的时间越久;
- arronup=1且arrondown=1,代表最高价屡创新高的同时,最低价也屡创新低(柱子拉长)
3. 测算方法
1.选择特定的时间区间
我们删除数据不足的“石油石化”,“环保”,“美容护理”,这三个指数,然后划分公共数据区间为两段:
- 统计测算:2015-01-01 至 2020-01-01
- 回测:2020-01-01 至 2023-01-01
#(部分代码)
train_data_dict = {}
test_data_dict = {}
for _sw_key, _sw_df in sw_data_dict.items():train_data_dict[_sw_key] = _sw_df[_sw_df["日期"].between("2015-01-01", "2020-01-01")]test_data_dict[_sw_key] = _sw_df[_sw_df["日期"].between("2020-01-01", "2023-01-01")]
2.计算阿隆指标(Arron)
选择时间区间:2015-01-01 至 2020-01-01,所有指数单独计算,以25天为滑动窗口长度,计算aroonup与aroondown指标
规定交易规则:当arronup>arrondown时,以当天收盘价买入;arronup<arrondown时以当天收盘价卖出
def measure_aroon(dataframe:pd.DataFrame):dataframe.columns = ["code","date",'close','open','high','low','volume','business_volume']dataframe.set_index(["date"], inplace=True)dataframe.index.name = ""dataframe['aroondown'], dataframe['aroonup'] = talib.AROON(dataframe['high'], dataframe['low'], timeperiod=14)dataframe = dataframe.dropna()return dataframe
3. 统计收益率&胜率
统计每一笔完整的交易(从买到卖的完整交易)的年化收益率,并且逐笔统计,以年化收益率>2%记为胜,否则为负
# (部分代码)
total_measure_record = {} # 测算结果for _train_lable,_train_df in train_data_dict.items():measure_record = {} # 测算结果if _train_df.shape[0] ==0:continuemea_df = measure_aroon(_train_df.copy())# 开始测算trade_record_list = []this_trade = {"close_record":[],}for index,series in tqdm(mea_df.iterrows(),total=mea_df.shape[0]):if series['aroondown'] < series['aroonup']:mea_df.loc[index,"label"] = "sell"if "buy_date" not in this_trade.keys():continuethis_trade['sell_date'] = index.to_pydatetime()trade_record_list.append(this_trade)this_trade = this_trade = {"close_record":[],}else:mea_df.loc[index,"label"] = "buy"this_trade['buy_date'] = index.to_pydatetime()this_trade['close_record'].append(series['close'])if "buy_date" in this_trade.keys():this_trade['close_record'].append(series['close'])trade_record_df = pd.DataFrame(trade_record_list)for _i,_trade_series in trade_record_df.iterrows():_trade_record_year_rate = (_trade_series['close_record'][-1] - _trade_series['close_record'][0])/_trade_series['close_record'][0]/(_trade_series['sell_date'] - _trade_series['buy_date']).days * 365 # 年化收益if _trade_record_year_rate > 0.02:trade_record_df.loc[_i,'victory'] = 1else:trade_record_df.loc[_i,'victory'] = 0trade_record_df.loc[_i,'年化收益率'] = _trade_record_year_rate# trade_record_df 即为每一个行业真实的测算结果measure_record['胜率'] = round(sum(trade_record_df['victory']) / trade_record_df.shape[0], 4)measure_record['胜率详情'] = "{}/{}".format(round(sum(trade_record_df['victory']),3), trade_record_df.shape[0])measure_return = trade_record_df['年化收益率'].describe()measure_record['收益率均值'] = measure_return['mean']measure_record['收益率方差'] = measure_return['std']measure_record['25%'] = measure_return["25%"]measure_record['75%'] = measure_return["75%"]measure_record['中位数'] = measure_return['50%']total_measure_record[_train_lable] = measure_record
4. 测算结论
按照上述的测算方法,测算结论如下:
- 综合测算下来,28个申万一级行业中,有15个行业的综合胜率>=50%,有18个年化收益率中位数>=0。
- 没有一个行业可以每年的胜率都达到50%以上
胜率 | 胜率详情 | “年化收益率均值” | “年化收益率方差” | “年化收益率25%” | “年化收益率75%” | “年化收益率中位数” | |
---|---|---|---|---|---|---|---|
801210.SI | 0.65 | 26.0/40 | 1.101328 | 13.854513 | -3.56732 | 8.383193 | 3.277827 |
801110.SI | 0.625 | 20.0/32 | -0.436761 | 16.563576 | -7.324855 | 7.550573 | 1.551451 |
801750.SI | 0.6053 | 23.0/38 | -2.006121 | 22.928017 | -6.959875 | 9.267609 | 2.499013 |
801120.SI | 0.5897 | 23.0/39 | -0.545812 | 12.693933 | -3.180385 | 5.897545 | 1.632406 |
801890.SI | 0.5882 | 20.0/34 | -3.360677 | 22.453205 | -14.620541 | 8.86559 | 2.704538 |
801080.SI | 0.5882 | 20.0/34 | -5.754482 | 25.290329 | -8.024543 | 6.435795 | 1.120838 |
801200.SI | 0.5758 | 19.0/33 | -5.148041 | 20.819803 | -12.940757 | 4.352782 | 1.052707 |
801140.SI | 0.5758 | 19.0/33 | -4.735968 | 18.721499 | -10.971866 | 6.167402 | 1.135974 |
801160.SI | 0.5714 | 20.0/35 | -4.535126 | 17.491513 | -7.79196 | 5.738118 | 0.732191 |
801730.SI | 0.5588 | 19.0/34 | -2.880497 | 19.378822 | -12.30922 | 8.174041 | 0.882168 |
801010.SI | 0.5556 | 20.0/36 | -2.938088 | 17.975981 | -11.395303 | 8.587668 | 0.848525 |
801130.SI | 0.5455 | 18.0/33 | -4.977155 | 21.158295 | -8.858312 | 6.243843 | 1.500513 |
801760.SI | 0.5312 | 17.0/32 | -10.965525 | 27.899573 | -16.372574 | 5.734561 | 0.556964 |
801770.SI | 0.5152 | 17.0/33 | -4.684877 | 24.414547 | -10.702406 | 10.302837 | 0.887308 |
801050.SI | 0.5 | 16.0/32 | -4.539061 | 22.368268 | -16.586735 | 9.285582 | 0.261408 |
801040.SI | 0.4872 | 19.0/39 | -1.247634 | 15.297324 | -10.782248 | 6.769093 | 0.011439 |
801180.SI | 0.4872 | 19.0/39 | -0.804185 | 16.592557 | -3.995552 | 5.56817 | 0 |
801720.SI | 0.4865 | 18.0/37 | -3.747824 | 19.616045 | -15.068235 | 6.508659 | 0 |
801710.SI | 0.4737 | 18.0/38 | -3.010197 | 17.654178 | -7.417362 | 5.759873 | -0.061242 |
801030.SI | 0.4688 | 15.0/32 | -1.807822 | 17.684925 | -6.325593 | 8.010072 | -0.742137 |
801880.SI | 0.4688 | 15.0/32 | -3.92876 | 19.513424 | -9.694596 | 6.653341 | -1.287274 |
801170.SI | 0.45 | 18.0/40 | -0.845161 | 13.940707 | -5.724337 | 4.644774 | -0.482324 |
801790.SI | 0.4474 | 17.0/38 | -5.057097 | 20.558703 | -15.525831 | 4.800522 | -0.754778 |
801150.SI | 0.4062 | 13.0/32 | -6.399064 | 18.282151 | -14.534501 | 4.495543 | -1.321404 |
801230.SI | 0.4062 | 13.0/32 | -7.866193 | 27.87652 | -13.145653 | 6.940749 | -1.782862 |
801740.SI | 0.3333 | 11.0/33 | -9.563876 | 20.308132 | -17.15555 | 1.213517 | -6.112185 |
801950.SI | 0.2857 | 4.0/14 | -15.703477 | 37.098001 | -25.434644 | 0.683044 | -0.548628 |
801780.SI | 0.2683 | 11.0/41 | -3.816884 | 10.615774 | -6.979213 | 0.250093 | -0.675727 |
不同指数分年的胜率统计图(0.5为纯白色,越偏红胜率越高,越偏蓝胜率越低):
相关文章:
量化选股——基于动量因子的行业风格轮动策略(第1部分—因子测算)
文章目录动量因子与行业轮动概述动量因子的理解投资视角下的行业轮动现象投资者视角与奈特不确定性动量因子在行业风格上的效果测算动量因子效果测算流程概述1. 行业选择:申万一级行业2. 动量因子选择:阿隆指标(Aroon)3. 测算方法…...
工作常用git命令
修改hard:git reset --hard md5git push -f合并多次commitsgit rebase -i HEAD~4git push -f冲突文件被覆盖冲突文件被覆盖了,可以用git checkout commitId /path来快速把一个或一些文件还原会之前的提交,重新commit ,merge一次删除分支git b…...
test3
数据链路层故障分析 一、网桥故障 a.主要用途简述 网桥作为一种桥接器,可以连接两个局域网。工作在数据链路层,是早期的两端口二层网络设备。可将一个大的VLAN分割为多个网段,或者将两个以上的LAN互联为一个逻辑LAN,使得LAN上的…...
领证啦,立抵3600,软考证书到手后还有很多作用
2022年下半年软考合格证书发放在2023年2月-3月进行,目前已有多个省市开始发证了,比如上海、江苏、辽宁、浙江、山东等地。还没收到领证通知的考生也不要着急,可以关注当地软考办通知。 拿到证书的朋友可以去申请入户,职称评聘&am…...
响应式布局之viewport-超级简单
之前文章CSS布局之详解_故里2130的博客-CSDN博客 上面的文章可以实现响应式布局,根据浏览器的大小变化而变化,但是相对于viewport来说,之前的还是有点复杂,而使用viewport更加的简单。 当我们使用amfe-flexible的时候࿰…...
分布式计算考试资料
第一章 分布式系统的定义 分布式系统是一个其硬件或软件组件分布在连网的计算机上,组件之间通过传递信息进行通信和动作协调的系统。分布式系统的目标 资源共享(resource sharing) 一些计算机通过网络连接起来,并在这个范围内有效地共享资源。 硬件的共…...
Java修饰符和运算符,超详细整理,适合新手入门
目录 一、访问控制修饰符 1、访问权限 二、运算符 1、算术运算符 2、关系运算符 3、逻辑运算符 4、赋值运算符 5、三元运算符 一、访问控制修饰符 Java 支持 4 种不同的访问权限: private 私有的 protected 受保护的 public 公共的 default 默认 1、…...
软件功能测试包含了哪些测试项目?功能测试报告收费标准
一、软件功能测试是什么? 软件功能测试是测试人员通过执行功能测试用例逐步验证软件产品各项功能是否达到预期需求的测试过程。也是俗称的“点点点测试”,这是基础性的测试类型,软件产品的功能直接影响到用户体验,所以软件功能测试意义重大…...
Netty 学习笔记——概念篇
Netty Home Netty GitHub Netty简介 Netty是由JBOSS提供的一个java开源框架,现为 Github上的独立项目。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。 也就是说,Netty 是一个…...
元宇宙开始告别以资本为主导的野蛮生长,新的竞争格局和态势将形成
欲要成为这样一场洗牌的胜利者,元宇宙的玩家需要真正站在商业的角度,而非资本市场的角度来看待元宇宙,来寻找元宇宙的正确的发展模式和方法。原因在于,在这样一场洗牌过程当中,仅仅只是对于以往以资本为主导的发展模式…...
MySQL 5:MySQL视图
View(视图)是一个不存在的虚拟表。 其实质是根据SQL语句获取动态数据集并命名。 用户只需要使用视图名就可以获取结果集,并作为表来使用。数据库中只存储了视图的定义,不存储视图中的数据。 这些数据存储在原始表中。当使用视图查…...
中国干细胞医疗行业市场规模及未来发展趋势
中国干细胞医疗行业市场规模及未来发展趋势近年来,中国干细胞医疗行业发展迅速,市场规模不断扩大,发挥着越来越重要的作用。根据最新统计数据显示,2018年,中国干细胞医疗行业市场规模达到1242.6亿元,比上一…...
SpringBoot日志文件
日志有什么用? 1)快速的排查和定位问题,直接看报错信息; 2)进行记录用户登录的信息记录业务功能日志方便分析用户是正常登录还是暴力破解用户; 假设我们在这个登录程序中没有写反暴力破解的机制,比如说用户输入密码六次…...
R语言读取Excel表格数据并绘制多系列柱状图、条形图
本文介绍基于R语言中的readxl包与ggplot2包,读取Excel表格文件数据,并绘制具有多个系列的柱状图、条形图的方法。 首先,我们配置一下所需用到的R语言readxl包与ggplot2包;其中,readxl包是用来读取Excel表格文件数据的&…...
【操作系统】操作系统IO技术底层机制和ZeroCopy
1.DMA技术详解 (1)应用程序 从 磁盘读写数据 的时序图(未用DMA技术前) (2)什么是DMA 技术 (Direct Memory Access) 直接内存访问,直接内存访问是计算机科学中的一种内存访问技术。…...
给你的边框加点渐变
目录前言border-imageborder-image实现background父子divbackgorund一个div一个伪元素background-clip🧨🧨🧨 大家好,我是搞前端的半夏 🧑,一个热爱写文的前端工程师 💻. 如果喜欢我的文章&…...
【目标检测】如何使用Yolov8
如何使用Yolov8一、前言二、用法2.1 安装2.2 使用方法2.3 模型2.3.1 目标检测2.3.2 实例分割2.3.3 分类一、前言 一种易于使用的新的对象检测模型。 由 Ultralytics 开发的 Ultralytics YOLOv8 是一种尖端的、最先进的 (SOTA) 模型: https://github.com/ultralyt…...
NVM安装、配置环境、简单使用
nvm 是Node.js 的版本管理工具,可以在同一台电脑上安装多个Node.js版本灵活切换。 安装# sudo curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash 其中0.39.0可以替换为当前最新的版本号。 配置环境变量# cd ~touch .bash_profile…...
【SPSS】数据预处理基础教程(附案例实战)
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...
某饿了么APP最新版逆向分析(二):加密参数初探
二、分析加密参数 说做就做,这边用的python进行模拟请求 万事俱备只欠东风,点击run 发现报错了 怎么回事? 明明请求的内容和抓包的内容完全一致 怎么没有返回我们想要的数据 报错内容为参数错误 因此我就想可能是请求体有参数加密 我…...
程序的编译与链接(预处理详解)+百度面试笔试题+《高质量C/C++编程指南》笔试题
本篇重点介绍程序的编译与链接过程中的预处理阶段,将详细的介绍在预处理阶段会发生什么,以及讲解有关百度该内容的面试笔试题和源于《高质量C/C编程指南》的笔试题。一.【预处理详解】①预定义符号②#define2.1 #define 定义标识符注意:2.2 #…...
全解析 ESM 模块语法,出去还是进来都由你说了算
模块语法是ES6的一个重要特性,它的出现让JavaScript的模块化编程成为了可能。 在JavaScript中可以直接使用import和export关键字来导入和导出模块,但是这种语法并不是ES6的标准,而是ESM(ECMAScript Module)模块语法的…...
MATLAB 粒子群算法
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…...
java微信小程序音乐播放器分享系统
随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,音乐播放器小程序被用户普遍使用,为方便用户能够可以随时进行音乐播放器小程序的数据信息管理,特开发了基于音乐播放器小程序…...
VS各版本VC各版本对应关系
Visual Studio 经过多年的发展,有许多版本,经常我们在拿到一份代码时不知道对应的VS版本 这时候可以打开工程目录下的vcproj/vcxproj文件,如下所示 <?xml version"1.0" encoding"utf-8"?> <Project DefaultT…...
如何处理“WLAN没有有效的IP配置”这一问题?
🚀write in front🚀 📜所属专栏:暂无 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对我最大的…...
ElasticSearch-学习笔记05【SpringDataElasticSearch】
Java后端-学习路线-笔记汇总表【黑马程序员】ElasticSearch-学习笔记01【ElasticSearch基本介绍】【day01】ElasticSearch-学习笔记02【ElasticSearch索引库维护】ElasticSearch-学习笔记03【ElasticSearch集群】ElasticSearch-学习笔记04【Java客户端操作索引库】【day02】Ela…...
【GlobalMapper精品教程】045:空间操作(2)——相交(Intersect)
GlobalMapper提供的空间分析(操作)的方法有:交集、并集、单并集、差异、对称差集、相交、重叠、接触、包含、等于、内部、分离等,本文主要讲述相交工具的使用。 文章目录 一、实验数据二、符号化设置三、相交运算四、结果展示五、心灵感悟一、实验数据 加载配套实验数据(…...
Android 一体机研发之修改系统设置————自动锁屏
Android 一体机研发之修改系统设置————屏幕亮度 Android 一体机研发之修改系统设置————声音 Android 一体机研发之修改系统设置————自动锁屏 修改系统设置系列篇章马上开张了! 本章将为大家细节讲解自动锁屏。 自动锁屏功能,这个可以根据…...
七天实现一个go rpc框架
目录rpc协议目的关于RPC和框架服务端与消息编码确保接口的实现消息的序列化与反序列化通信过程服务端的实现main 函数支持并发与异步的客户端Call 的设计实现客户端服务注册(service register)通过反射实现 service集成到服务端超时处理创建连接超时Client.Call 超时服务端处理…...
东莞保安公司最新招聘/seo外包优化服务商
锚点决定了形状的大小 . 对于线形,默认情况下,线从第一个锚单元的左上边缘到左上边缘加上最后一个锚单元的 dx 和 dy . 第一锚单元是锚的左上方的单元,而最后的锚单元是锚的右下方的单元 . 因此,默认情况下,线条形状将…...
真正做新闻网站/站内seo和站外seo区别
1.首先IP地址为:10.20.105.145 方法1: 1.用wps有个双面打印,然后打印完需要把打印完单面的纸给纵向翻转,让有字体的那一面朝上,并且字的朝向为右,最后一步就是把这些纸的最上面的挪到最下面,依…...
好看的网站页面/深圳经济最新新闻
1.冯诺依曼体系结构 输入设备:键盘,网卡等输出设备:显示器等存储器:进行中间数据缓冲运算器:进行数据运算控制器:进行设备控制 所有的设备都是围绕存储器工作的(CPU控制器运算器)&am…...
杭州投资公司自适应网站/dw网页制作教程
SpringBoot入门一 推荐: Spring Boot系列文章Spring Boot基础教程Spring Boot参考指南springboottutorial 项目属性配置 参考: Spring Boot属性配置文件详解 可以使用properties文件,YAML文件配置。YAML文件相对来说更简洁一点。 如下…...
用jsp做网站的代码/电商平台运营方案
欢迎观看 Acrobat Pro DC 教程,小编带大家学习 Acrobat Pro DC 的基本工具和使用技巧,了解如何将与其他文件合并以创建单个 PDF 文件。 通过利用PDF的通用文件格式,将多个文件合并到一个PDF文档中,简化了与其他人共享内容的过程&…...
做ppt的素材网站/进行seo网站建设
2019独角兽企业重金招聘Python工程师标准>>> mysql出现:Lock wait timeout exceeded; try restarting transaction 什么问题导致的呢?绝对是程序的问题,因为另一个线程锁住了表或者记录导致后来到请求无法完成。 如何产生的&…...