量化选股——基于动量因子的行业风格轮动策略(第1部分—因子测算)

news2024/11/17 3:40:49

文章目录

  • 动量因子与行业轮动概述
    • 动量因子的理解
    • 投资视角下的行业轮动现象
    • 投资者视角与奈特不确定性
  • 动量因子在行业风格上的效果测算
    • 动量因子效果测算流程概述
    • 1. 行业选择:申万一级行业
    • 2. 动量因子选择:阿隆指标(Aroon)
    • 3. 测算方法
      • 1.选择特定的时间区间
      • 2.计算阿隆指标(Arron)
      • 3. 统计收益率&胜率
    • 4. 测算结论

【量化选股——基于动量因子的行业风格轮动策略】分为两部分:

  1. 第1部分—因子测算
  2. 第2部分—策略回测

动量因子与行业轮动概述

动量因子的理解

动量,可以理解为“势头”,“强势的程度”。汽车遇到红灯时,不是一下子停下,而是滑行一段再停。滑行的这一段就解释为“动量”造成的。动量因子表示,即便情况发生了变化,这些因子所代表的势头仍会持续一段时间。

动量因子一直饱受争议,因为它的前提假设是股票会表现出马太效应。意思是:股票的相对强弱趋势会延续,并且表现出“强者恒强,弱者恒弱”的态势,除非有意外情况发生才会导致强弱之势逆转。动量因子表现出两种效应:

  1. 动量效应:股票的收益率会延续
  2. 反转效应:经过较长时间后,收益会翻转

挖掘动量因子的过程往往是先算出结果,再找一个逻辑来解释。因此动量因子其实没有太多的基础理论支撑,是在实践中被摸索出来的。使用动量因子的风险也很高,因为对动量因子的解释性的逻辑往往超脱了我们过去所知的对市场理解的框架体系,有一种“唯数据论”的感觉。这里博主希望大家能够辩证的看待动量因子,有自己的看法。

通常学界对动量因子的理解有以下几种:

  1. 投资者的决策行为,导致了动量因子的产生。如中国人个人炒股比例高,而且由于缺乏背景知识,缺乏对基本面的了解,同时好大喜功求快,导致短线操作居多,跟风者居多;

    但反对者认为这种猜测无法定量评估,而这样的解释是“为了发展一个理论模型而寻找不合理的逻辑假设”

  2. 因为每个市场的参与者,接收同一个信息的时间都不同,因此即便某个事件发生了,依旧会因为接收信息的时间差导致参与者在操作上存在时间差,所以时间差导致了动量这种“效应”的产生。同样,也可能因为存在一些信息差,不对称的信息差会随着时间流逝慢慢对称,这个过程也会造成动量。

    但反对者同样认为:既然存在操作的时间差,那么利好和利空的消息都应该存在时间差,而往往动量因子只能体现出某一边的动量。(如,某些代表利好的动量因子无法解释利空的情况;或者说,动量因子本身就不应该被分为利好或利空,否则就代表它只验证了对一遍有效)

  3. 市场的参与者都有自己入场的动机与离场的目的,不同参与者也是在市场中不断博弈与进化的(市场具有“奈特不确定性”)。按照书本所述,股票现在合理的价格,就是对未来现金流的折现。那么不同的参与者因为伴随有不同的入场与离场的目的,因此站在各自的立场上,对“未来现金流折现”的估值也不同,而这种行为伴随着市场的进化与发展,导致“动量”作为一个观测现象而产生。

    这就意味着“动量”是一种表面现象,它不是因为固定的几个逻辑直接导致的结果,而是博弈造成的一种被观测出来的现象。

目前动量因子在个股上是作为多因子模型的一部分存在,而如果将视野扩大到行业层面,就可以单独拿动量因子进行建模测算,此时因子的动量效应较为明显。通常认为是因为暴露的因子动量会随着个股传递到整个行业组合上,因此观测较为明显。

我们常见的动量因子通常包含:

  1. 过去一段时间(1周、10天、一个月、3个月)的收益率
  2. 5、10、20、30、60天收盘价均线
  3. 过去一段时间板块、行业的高开低收等数据

投资视角下的行业轮动现象

我们以接收信息的时间差导致参与者在操作上存在时间差,所以时间差导致了动量这种“效应”的产生为视角,就可以发现在行情走势上:

  1. 市场上有大量未接受到该信息的投资者:标的买卖双方造成的买卖供需关系并不会显著到立即把价格推向其应当达到的位置,此时表现在信息的“反应不足”

  2. 越来越多的投资者接触到了该信息并做出反应:此时价格逐渐被推至合理价格附近,但后入市场的投资者中有一部分因为各种各样的原因,错误或过分估计了该信息价值,从而将该股票价格再进一步推离了合理价格,此时“反应过度”,出现超买、超卖现象

  3. 超买超卖现象被发现:市场的投资者捕捉到反映过度带来的盈利空间,通过交易获取超额收益的同时,将股票价格再度往合理价格处推动。

在这里插入图片描述
比如:在2022年11月30日ChatGPT就已经向公众开放:

  • 11月30日OpenAI(ChatGPT的作者)在维基百科发布关于ChatGPT的百科信息
  • 12月6日开始维基百科词条开始普通用户参与修改,并且参与修改的用户账号量每日增长显著
  • 12月新闻既有“小学生击败ChatGPT”,“差点被ChatGPT骗了”,“举一千反一,人类离xxx还有多远”等负面看法,也有“爆火的ChatGPT太强了”等正面观点

在这里插入图片描述
复盘12、1、2月份到如今的ChatGPT概念(BK1126),可以发现站在投资者的视角上:

  1. 投资者无法判断信息是从何时开始反映在市场上的,也无法判断未来将持续多长时间
  2. 投资者难以评估信息的市场价值,信息带来的对预期的影响,能造成的股价涨跌幅难以度量
  3. 信息源种类、观点、立场繁多,难以主观评价
    如今,百度指数上,ChatGpt的搜索指数与资讯关注度依旧很高,但相对高点已经走弱,由于是境外资讯,而百度搜索面向国内用户,因此国内资讯会优先与国内的搜索指数呈现出增长的趋势

在这里插入图片描述

因此在行业轮动上,动量指标盈利的来源:

  1. 市场上有大量未接受到该信息的投资者
  2. 越来越多的投资者接触到了该信息并做出反应(动量指标盈利主因)
  3. 超买超卖现象被发现(动量指标亏损主因)

投资者视角与奈特不确定性

奈特把对未来的不确定性分为两种,一种称为“风险”,另一种称为“奈特不确定性”,将未知分为了两类:

  1. 风险:具有特定概率分布的不确定性
  2. 奈特不确定性:没有特定概率分布的不确定性

后续的研究证明:

  1. 人们常对奈特不确定性表现出厌恶的倾向,并愿意为避免奈特不确定性而支付溢价
  2. 厌恶奈特不确定性的人不一定厌恶风险,即“赌鬼也讨厌奈特不确定”
  3. 在人们面临奈特不确定性时,会出现群体盲从的现象,形成羊群效应,此时人们更在乎别人的想法

当信息被越来越多的人接触到的时候,投资者面临的其实就不是完全未知的“奈特不确定性”,而是可以评估盈利与亏损区间与概率的“风险”了。但相对的,不同的市场参与者对信息的敏感程度与评估是不同的,从这个角度也验证了上述的第二条:“投资者难以评估信息的市场价值,信息带来的对预期的影响,能造成的股价涨跌幅难以度量”。对于信息的动量与价格走势趋势的判断需要策略研究员进行细致的研究。

动量因子在行业风格上的效果测算

动量因子效果测算流程概述

  1. 首先我们选择“申万一级”行业指数,阿隆指标(Aroon)作为动量指标进行测算
  2. 然后根据指数数据集,选择公共的时间段(2015-01-01 至 2023-01-01)将日期分为两个部分:
    • 选择 2015-01-01 至 2020-01-01 这一段时期进行测算
    • 选择 2020-01-01 至 2023-01-01 这一段时期进行回测
  3. 选择测算的时间段进行测算
  4. 选择回测的时间段进行回测

1. 行业选择:申万一级行业

我们选取申万一级行业指数来测算

申万行业分类规则请参考:申万行业分类标准(2021版)

行业代码行业名称成份个数静态市盈率TTM(滚动)市盈率市净率静态股息率
0801010.SI农林牧渔9947.1347.642.840.62
1801030.SI基础化工34315.9215.022.482.11
2801040.SI钢铁447.2712.031.065.65
3801050.SI有色金属12824.5515.512.691.21
4801080.SI电子30823.8827.292.941.21
5801880.SI汽车24029.2828.172.271.31
6801110.SI家用电器7917.6016.002.822.97
7801120.SI食品饮料11940.7336.847.841.77
8801130.SI纺织服饰11316.8217.741.973.48
9801140.SI轻工制造14821.6725.742.381.81
10801150.SI医药生物36029.3426.323.571.08
11801160.SI公用事业12321.3219.211.902.28
12801170.SI交通运输1249.878.481.284.62
13801180.SI房地产1159.5512.150.983.40
14801200.SI商贸零售10426.1031.572.601.51
15801210.SI社会服务7362.3462.043.570.55
16801780.SI银行424.974.660.555.79
17801790.SI非银金融8813.6416.671.382.56
18801230.SI综合2457.8330.572.310.78
19801710.SI建筑材料749.3412.551.483.83
20801720.SI建筑装饰1588.507.910.892.35
21801730.SI电力设备26540.1929.254.070.60
22801890.SI机械设备39824.0727.192.341.69
23801740.SI国防军工9855.9150.133.740.49
24801750.SI计算机26839.4943.273.890.88
25801760.SI传媒14018.9321.971.882.49
26801770.SI通信10717.8915.991.454.08
27801950.SI煤炭3810.126.641.426.61
28801960.SI石油石化4710.618.141.006.81
29801970.SI环保10916.6018.721.581.75
30801980.SI美容护理2843.9542.615.690.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 年发明的,它通过计算当前价格达到近期最高值和最低值以来所经过的天数,帮助投资者预测证券价格趋势或反转的变化

阿隆指标计算步骤:

  1. 确定滑动窗口的长度,比如25个工作日);获取这个窗口中日线的最高价与最低价
  2. 用最高价计算AroonUp = [(计算期天数-达到最高价后的天数)/计算期天数]*100,即:
    Aroonup = [ ( 25 - 到达最高价后的天数 ) / 25] * 100
  3. 用最低价计算AroonDown = [(计算期天数-达到最低价后的天数)/计算期天数]*100,即:
    Arrondown = [ ( 25 - 达到最低价后的天数 ) / 25 ] * 100

根据公式我们可以推算出:

  1. 最高价屡创新高时,arronup=1;最低价屡创新低时,arrondown=1;
  2. 最高价不断走低时,arronup=0;最低价不断走高时,arrondown=0;
  3. arronup越小,代表离上一次创新高的时间越久;arrondown越小,代表离上一次创新低的时间越久;
  4. 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:
        continue
    mea_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():
                continue
            this_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'] = 1
        else:
            trade_record_df.loc[_i,'victory'] = 0
        trade_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. 测算结论

按照上述的测算方法,测算结论如下:

  1. 综合测算下来,28个申万一级行业中,有15个行业的综合胜率>=50%,有18个年化收益率中位数>=0。
  2. 没有一个行业可以每年的胜率都达到50%以上
胜率胜率详情“年化收益率均值”“年化收益率方差”“年化收益率25%”“年化收益率75%”“年化收益率中位数”
801210.SI0.6526.0/401.10132813.854513-3.567328.3831933.277827
801110.SI0.62520.0/32-0.43676116.563576-7.3248557.5505731.551451
801750.SI0.605323.0/38-2.00612122.928017-6.9598759.2676092.499013
801120.SI0.589723.0/39-0.54581212.693933-3.1803855.8975451.632406
801890.SI0.588220.0/34-3.36067722.453205-14.6205418.865592.704538
801080.SI0.588220.0/34-5.75448225.290329-8.0245436.4357951.120838
801200.SI0.575819.0/33-5.14804120.819803-12.9407574.3527821.052707
801140.SI0.575819.0/33-4.73596818.721499-10.9718666.1674021.135974
801160.SI0.571420.0/35-4.53512617.491513-7.791965.7381180.732191
801730.SI0.558819.0/34-2.88049719.378822-12.309228.1740410.882168
801010.SI0.555620.0/36-2.93808817.975981-11.3953038.5876680.848525
801130.SI0.545518.0/33-4.97715521.158295-8.8583126.2438431.500513
801760.SI0.531217.0/32-10.96552527.899573-16.3725745.7345610.556964
801770.SI0.515217.0/33-4.68487724.414547-10.70240610.3028370.887308
801050.SI0.516.0/32-4.53906122.368268-16.5867359.2855820.261408
801040.SI0.487219.0/39-1.24763415.297324-10.7822486.7690930.011439
801180.SI0.487219.0/39-0.80418516.592557-3.9955525.568170
801720.SI0.486518.0/37-3.74782419.616045-15.0682356.5086590
801710.SI0.473718.0/38-3.01019717.654178-7.4173625.759873-0.061242
801030.SI0.468815.0/32-1.80782217.684925-6.3255938.010072-0.742137
801880.SI0.468815.0/32-3.9287619.513424-9.6945966.653341-1.287274
801170.SI0.4518.0/40-0.84516113.940707-5.7243374.644774-0.482324
801790.SI0.447417.0/38-5.05709720.558703-15.5258314.800522-0.754778
801150.SI0.406213.0/32-6.39906418.282151-14.5345014.495543-1.321404
801230.SI0.406213.0/32-7.86619327.87652-13.1456536.940749-1.782862
801740.SI0.333311.0/33-9.56387620.308132-17.155551.213517-6.112185
801950.SI0.28574.0/14-15.70347737.098001-25.4346440.683044-0.548628
801780.SI0.268311.0/41-3.81688410.615774-6.9792130.250093-0.675727

不同指数分年的胜率统计图(0.5为纯白色,越偏红胜率越高,越偏蓝胜率越低):

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/342222.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java中字符串首字母变大写的两种方法

public class 快速排序 {public static void main(String[] args) {int[] arr new int[]{5, 2, 9, 6, 22, 21};//System.out.println(Arrays.toString(kuaiPai(arr)));// System.out.println(Arrays.asList("dada", "dda", "ddd"));//System.o…

VR全景带你浪漫“狂飙”情人节,见证甜蜜心动

当情人节遇上VR&#xff0c;足以让情侣过一个难忘的情人节。马上情人节就要到了&#xff0c;大家是不是还在绞尽脑汁的想着&#xff0c;如何和另一半过一个浪漫的情人节呢&#xff1f;老套的剧情已经不能吸引人了&#xff0c;让我们看看VR全景给情人节带来了哪些不同的体验吧&a…

喜欢大屏电视?那就选择酷开系统,实现智能生活享受

随着科技的发展和我们生活水平的提高&#xff0c;越来越多的消费者开始认可并习惯使用各种高质量的科技产品&#xff0c;比如喜欢玩游戏的消费者&#xff0c;他们往往会追求流畅性更强、刷新率更快的大显示屏&#xff0c;以此获得更真实刺激的游戏体验&#xff0c;而喜欢追剧的…

面对“开门红”,跨境支付如何寻求新增长曲线?

易观&#xff1a;2022年是第三方支付行业洗牌加剧的一年&#xff0c;在部分机构选择退出的过程中&#xff0c;也有机构开始瞄准跨境业务&#xff0c;成为了支付机构转型的重要方向之一。跨境支付是指两个或及其以上的国家或地区进行国际贸易、国际投资或其他经济活动&#xff0…

基于乐鑫 ESP32 的智能手表

拥有一块自己制作的智能手表是不是听起来就很酷&#xff1f;工程师 Pcadic 基于乐鑫 ESP32-PICO-D4 实现了这个想法&#xff01;他开发了一款能够与我们的手机或任何其他设备互联的智能手表 ESP32-Pico-Watch。 ESP32-Pico-Watch 支持 Wi-Fi、蓝牙、Mesh&#xff0c;拥有 1 个振…

EMX,PROC文件与电感的简单仿真

How To Write EMX PROC File 编写EMX工艺文件需要2方面的信息&#xff1a; GDSII layer number and type 映射到 layer name。 这个信息可以从layermap文件中获取&#xff1b;EMX的manual有相应的介绍&#xff0c;这个过程十分基础且简单容易&#xff0c;简单说就是把GDSII中…

Vue3 中 axios 的安装及使用

目录前言&#xff1a;一、什么是 axios &#xff1f;二、Axios 的配置项三、Axios 的请求方式四、自定义创建实例五、Axios 请求错误处理六、Axios 解决跨域问题七、Axios 请求案例随机笑话大全总结&#xff1a;前言&#xff1a; 在编写vue里的项目时&#xff0c;必须要用和后台…

微信小程序 java springboot招聘求职应聘简历系统

应聘系统是基于微信小程序&#xff0c;java编程语言&#xff0c;mysql数据库&#xff0c;springboot框架&#xff0c;idea工具开发&#xff0c;本系统主要分为用户&#xff0c;企业&#xff0c;管理员三个角色&#xff0c;用户注册登陆小程序&#xff0c;查看应聘分类&#xff…

C语言经典编程题100例(41~60)

目录41、习题4-4 特殊a串数列求和42、习题4-6 水仙花数43、习题4-7 最大公约数和最小公倍数44、习题7-5 找鞍点45、练习5-1 求m到n之和46、练习5-2 找两个数中最大者47、练习5-3 数字金字塔48、习题5-1 符号函数49、习题5-2 使用函数求奇数和50、习题5-3 使用函数计算两点间的距…

低代码开发平台让数据应用不再复杂

当前&#xff0c;数据已成为实现经济高质量增长的关键要素&#xff0c;最大化释放数据要素的价值是数字经济时代的重点。以数据全方位驱动企业发展&#xff0c;已成为数字经济时代企业塑造核心竞争力的关键。随着人机协同程度的日益提高&#xff0c;数据不再只是用来被动支持决…

没有设置密码,每次打开RAR文件却都要输密码?

有小伙伴说遇到这种情况&#xff1a;用WinRAR软件压缩RAR文件后&#xff0c;再次打开时显示需要输入密码&#xff0c;但自己压缩文件时并没有设置密码&#xff0c;后续不管几次压缩文件都需要密码&#xff0c;这是怎么回事呢&#xff1f; 其实&#xff0c;这很可能是之前设置压…

Echarts 折线图拐点超过某值突出显示,颜色变红

第015个点击查看专栏目录Echarts在折线图处理方面可以变得非常灵活&#xff0c;比如此示例&#xff0c;超过某值后&#xff0c;将节点的大小颜色文字都突出显示出来&#xff0c;关键点是在于处理回调函数&#xff0c;个性化每个值。文章目录示例效果示例源代码&#xff08;共15…

Linux/CenterOS 7.9配置汉化gitlab服务器

1.安装gitlab的依赖项 yum install -y curl openssh-server openssh-clients postfix cronie policycoreutils-python2.启动postfix&#xff0c;并设置为开机启动 systemctl start postfixsystemctl enable postfix3.防火墙和selinux的设置 setenforce 0systemctl stop fire…

怎么从网上办大流量卡呢?具体步骤小编都给你写好的!

都知道网上的流量套餐便宜&#xff0c;但是你知道怎么从网上办理流量卡吗&#xff1f;接下来&#xff0c;跟着小编一块来了解一下吧。怎么从网上办大流量卡呢&#xff1f;提交申请→运营商审核→运营商制卡→运营商发货&#xff0c;这个流程你一定要知道&#xff01;具体步骤小…

《c语言深度解剖》--一套非常经典的笔试题

学习完c语言&#xff0c;需要对所学知识进行一个检测&#xff0c;下面有一套笔试题&#xff0c; 你有四十分钟进行检测&#xff0c;每道题五分&#xff0c;严格要求自己打分。 根据作者原话&#xff1a;在没有何提示的情况下,如果能得满分,那你可以扔掉本书了,因为你的水平已经…

【项目实战】32G的电脑启动IDEA一个后端服务要2min,谁忍的了?

一、背景 本人电脑性能一般&#xff0c;但是拥有着一台高性能的VDI&#xff08;虚拟桌面基础架构&#xff09;&#xff0c;以下是具体的配置 二、问题描述 但是&#xff0c;即便是拥有这么高的性能&#xff0c;每次运行基于Dubbo微服务架构下的微服务都贼久&#xff0c;以下…

认识 CSS pointer-events 属性

pointer-events 的基本信息 pointer-events 属性用来控制一个元素能否响应鼠标操作&#xff0c;常用的关键字有 auto 和 none pointer-events: none; // 让一个元素忽略鼠标操作 pointer-events: auto; // 还原浏览器设定的默认行为 规范定义 条目状态初始值auto可用值适用所…

【表格单元格可编辑】vue-elementul简单实现table表格点击单元格可编辑,点击单元格变成弹框修改数据

前言 这是继我另一个帖子就是单元格点击变成输入框后添加的功能 因为考虑到有些时候修改单元格的信息可能点击后要修改很多&#xff0c;那一个输入框不好用 所以这时候就需要一个弹框可以把所有表单都显示出来修改 所以这里就专门又写了一个demo&#xff0c;用于处理这种情况 …

深兰科技机器人商丘制造基地正式投产,助力商丘经济高质量发展

2月9日&#xff0c;深兰科技机器人商丘制造基地投产仪式在商丘市梁园区北航创新园隆重举行。商丘市人大常委会副主任、梁园区委书记张兵&#xff0c;梁园区区长薛天江、河南省装备制造业协会会长张桦&#xff0c;河南省机器人行业协会会长王济昌&#xff0c;深兰科技集团董事长…

使用ChatGPT和EZDML迅速高效生成可运行的软件系统原型

ChatGPT最近很热&#xff0c;其对程序员可以说影响极大&#xff0c;是不得不跟的潮流趋势&#xff0c;因此EZDML新版也把ChatGPT的支持加上了&#xff0c;可以在几分钟内按您的意思生成一个数据模型&#xff0c;再搭载使用EZDML自带的代码模板&#xff0c;能快速生成可真正运行…