量化投资学习——A股H股套利年化100%

2023-05-16

一、交易对象选取

首先是选取数据,选取数据的来源是wind:

从wind中的交易数据-AH比较 里面可以看到历史收盘价和A/H溢价率, 考虑到在2008年金融危机之后,全球市场发生了较大的变化,我们从2009年取,一共取到了13年的数据如下所示,其中表1是AH溢折数据,价格数据和volume数据
在这里插入图片描述

接下来进行数据分析:根据十三年的数据,我们观察得到,每年由于新上市的股票数目由于上市退市等变动,存在着较大的变化,考虑到题目要求,我们对于股票数据进行滚动设定,即每一个月进行判断股票的协整情况,选择合适的协整股票,在下一个月进行统计配对交易,并且根据股票的交易情况,不断更新股票,去掉ST和停牌情况

首先读取股票数据,我们读取的数据集为三部分,AH股溢折价数据,价格数据和volume数据,其中对于AH股

AH溢折价数据 = (指定日A股股价 x 汇率/H股股价)-1)x 100

以2009年的数据为例,我们首先对数据进行一个可视化的分析,如下所示:

import pandas as pd
import numpy as np

由于要展示的股票数目过多,所以使用以下语句来展示所有的数据

pd.options.display.max_columns = None 
pd.options.display.max_rows = None

由于要画图,为了防止汉字没有办法正常显示,所以要进行一个设置

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

隐藏警告

import warnings
warnings.filterwarnings('ignore')
data_AH = pd.read_excel('data/'+'数据集.xlsx',sheet_name=0,skiprows=2,index_col=0) #AH溢折
data_price = pd.read_excel('data/'+'数据集.xlsx',sheet_name=1,skiprows=2,index_col=0)#价格
data_AH.head()
万科A中集集团中兴通讯中联重科申万宏源潍柴动力晨鸣纸业丽珠集团*ST东电新华制药...*ST拉夏药明康德洛阳钼业德利股份中国通号君实生物-U康希诺-U昊海生科复旦微电复旦张江
日期
Date000002.SZ000039.SZ000063.SZ000157.SZ000166.SZ000338.SZ000488.SZ000513.SZ000585.SZ000756.SZ...603157.SH603259.SH603993.SH605198.SH688009.SH688180.SH688185.SH688366.SH688385.SH688505.SH
2009-08-17 00:00:00NaNNaN6.61132NaNNaN22.433763.8287NaN117.742218.389...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2009-08-18 00:00:00NaNNaN3.57788NaNNaN22.429674.2207NaN117.878216.266...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2009-08-19 00:00:00NaNNaN4.26058NaNNaN21.599159.6792NaN113.953189.984...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2009-08-20 00:00:00NaNNaN10.6395NaNNaN34.554162.2987NaN120.86191.287...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN

5 rows × 133 columns

从上图观察到,一些公司由于未上市原因,出现了NaN的情况,然后一些公司出现了ST标识,因此我们把ST股票去掉,另一个比较有趣的现象是,在早期时候可以发现很多股票AH溢折很大

data_AH = data_AH[[i for i in data_AH.columns if i.find('*ST')==-1]]
data_price = data_price[[i for i in data_price.columns if i.find('*ST')==-1]]
data_AH.head()
万科A中集集团中兴通讯中联重科申万宏源潍柴动力晨鸣纸业丽珠集团新华制药广发证券...昭衍新药药明康德洛阳钼业德利股份中国通号君实生物-U康希诺-U昊海生科复旦微电复旦张江
日期
Date000002.SZ000039.SZ000063.SZ000157.SZ000166.SZ000338.SZ000488.SZ000513.SZ000756.SZ000776.SZ...603127.SH603259.SH603993.SH605198.SH688009.SH688180.SH688185.SH688366.SH688385.SH688505.SH
2009-08-17 00:00:00NaNNaN6.61132NaNNaN22.433763.8287NaN218.389NaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2009-08-18 00:00:00NaNNaN3.57788NaNNaN22.429674.2207NaN216.266NaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2009-08-19 00:00:00NaNNaN4.26058NaNNaN21.599159.6792NaN189.984NaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2009-08-20 00:00:00NaNNaN10.6395NaNNaN34.554162.2987NaN191.287NaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN

5 rows × 131 columns

我们发现第一行数据和表头重复,为了后续处理方便,把第一行数据删除

data_AH = data_AH.iloc[1:,:]
data_price = data_price.iloc[1:,:] 
data_AH.head()
万科A中集集团中兴通讯中联重科申万宏源潍柴动力晨鸣纸业丽珠集团新华制药广发证券...昭衍新药药明康德洛阳钼业德利股份中国通号君实生物-U康希诺-U昊海生科复旦微电复旦张江
日期
2009-08-17 00:00:00NaNNaN6.61132NaNNaN22.433763.8287NaN218.389NaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2009-08-18 00:00:00NaNNaN3.57788NaNNaN22.429674.2207NaN216.266NaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2009-08-19 00:00:00NaNNaN4.26058NaNNaN21.599159.6792NaN189.984NaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2009-08-20 00:00:00NaNNaN10.6395NaNNaN34.554162.2987NaN191.287NaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2009-08-21 00:00:00NaNNaN14.9509NaNNaN33.017856.2165NaN191.174NaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN

5 rows × 131 columns

data_AH = data_AH.astype(float)
data_price = data_price.astype(float)

对价格的处理,由于我们进行AH套利,是对AH股价差进行建模,需要对股票的H股价格数据进行复原

根据公式 AH溢折价数据 = (指定日A股股价 x 汇率/H股股价)-1)x 100,故有:
汇率调整的H价格 = 指定日A股股价/(AH溢折价数据/100+1)

故:

data_Hprice = data_price/(data_AH/100+1)

为了方便处理数据,我们把上述的两份数据按照日期进行遍历,对于股票数据进行滚动设定,即每六个月进行判断股票的协整情况,选择合适的协整股票,在下一个月进行统计配对交易,并且根据股票的交易情况,不断更新股票

date_range = pd.date_range(start='2009-08-01', end='2021-08-01', freq='MS')+ pd.DateOffset(days=14)
date_range
DatetimeIndex(['2009-08-15', '2009-09-15', '2009-10-15', '2009-11-15',
               '2009-12-15', '2010-01-15', '2010-02-15', '2010-03-15',
               '2010-04-15', '2010-05-15',
               ...
               '2020-11-15', '2020-12-15', '2021-01-15', '2021-02-15',
               '2021-03-15', '2021-04-15', '2021-05-15', '2021-06-15',
               '2021-07-15', '2021-08-15'],
              dtype='datetime64[ns]', length=145, freq=None)

这里取出2009年8月到2010年2月之间为一个样例,分析这七个月的情况

首先读取的是用于计算指标的数据,如下所示:

#港股价格
data_Htrain = data_Hprice.loc[date_range[0]:date_range[6]] #取2009年8月到2010年1月,计算股票之间的相关性
data_Htrain = data_Htrain.fillna(method='ffill') #在计算相关性的时间段,对于其中有少部分缺失(停牌)的数据进行向上填充,即使用前一天的数据来填补
data_Htrain = data_Htrain.dropna(how='any',axis=1) #去除未上市或者仍有缺失的数据
#A股价格
data_Atrain = data_price.loc[date_range[0]:date_range[6]] 
data_Atrain = data_Atrain.fillna(method='ffill').dropna(how='any',axis=1)
#AH溢折价
data_AHtrain  = data_AH.loc[date_range[0]:date_range[6]] #取这段时间的AH溢折价
data_AHtrain = data_AHtrain.fillna(method='ffill').dropna(how='any',axis=1)

其次是用于交易的数据,如下所示:

#港股价格
data_Htest = data_Hprice.loc[date_range[6]:date_range[7]] #取2009年8月到2010年1月,计算股票之间的相关性
data_Htest = data_Htest.fillna(method='ffill') #在计算相关性的时间段,对于其中有少部分缺失(停牌)的数据进行向上填充,即使用前一天的数据来填补
data_Htest = data_Htest.dropna(how='any',axis=1) #去除未上市或者仍有缺失的数据
#A股价格
data_Atest = data_price.loc[date_range[6]:date_range[7]] 
data_Atest = data_Atest.fillna(method='ffill').dropna(how='any',axis=1)
#AH溢折价
data_AHtest  = data_AH.loc[date_range[6]:date_range[7]] #取这段时间的AH溢折价
data_AHtest = data_AHtest.fillna(method='ffill').dropna(how='any',axis=1)

计算股票之间的相关性,由于股票数据分布不是正态分布,故在此处使用斯皮尔曼相关性进行计算

data_corr = data_Htrain.corrwith(data_Atrain, method='spearman') 
data_corr
中兴通讯    0.733974
潍柴动力    0.778756
晨鸣纸业    0.706747
新华制药    0.930001
鞍钢股份    0.832888
海信家电    0.884199
华能国际    0.013937
皖通高速    0.836945
中远海能    0.687462
华电国际    0.159516
中国石化    0.343717
南方航空    0.719657
招商银行    0.919855
中国东航    0.737950
兖州煤业    0.914340
白云山     0.787349
江西铜业    0.911707
宁沪高速    0.765715
深高速    -0.054893
海螺水泥    0.307993
青岛啤酒    0.924166
中船防务    0.468789
上海石化    0.478368
南京熊猫    0.870209
马钢股份    0.845260
京城股份    0.938941
石化油服    0.806187
创业环保    0.902609
东方电气    0.607466
洛阳玻璃    0.578598
重庆钢铁    0.417819
中国神华    0.725900
四川成渝    0.680802
中国国航    0.915117
中国铁建    0.310747
中国平安    0.895591
交通银行    0.513391
广深铁路   -0.117188
中国中铁    0.129269
工商银行    0.914482
北辰实业    0.612741
中国铝业    0.448600
中国人寿    0.920370
上海电气    0.396375
中国中车    0.852950
中海油服    0.681948
中国石油    0.569487
中远海发    0.489644
中煤能源    0.718966
紫金矿业    0.857401
中远海控    0.705750
建设银行    0.799872
中国银行    0.388159
大唐发电    0.571597
中信银行    0.714665
万科A          NaN
上海医药         NaN
中信证券         NaN
中国太保         NaN
中联重科         NaN
中集集团         NaN
丽珠集团         NaN
复星医药         NaN
大众公用         NaN
山东黄金         NaN
广发证券         NaN
民生银行         NaN
海尔智家         NaN
海通证券         NaN
福耀玻璃         NaN
金风科技         NaN
dtype: float64

由上可以看出,在2009年8月到9月之间,有若干只股票的A股和H股相关性比较大,其中,出现NaN的股票可能是由于其A(H)股未上市,所以导致数据无法显示,为了进一步使策略可以自适应选择合适的股票对,对于上述存在关联的股票中,我们选取相关性大于75%分位数进行操作,如下所示

data_corr_used = data_corr[data_corr>data_corr.quantile(0.75)]
data_corr_used
新华制药    0.930001
海信家电    0.884199
招商银行    0.919855
兖州煤业    0.914340
江西铜业    0.911707
青岛啤酒    0.924166
南京熊猫    0.870209
京城股份    0.938941
创业环保    0.902609
中国国航    0.915117
中国平安    0.895591
工商银行    0.914482
中国人寿    0.920370
紫金矿业    0.857401
dtype: float64

以新华制药为例,在上述股票中,它的A股和H股股价的相关性是最高的,接下来我们利用协整理论来分析新华制药A股和H股是否满足配对交易的条件

ADF检验

下面对这两组数据进行平稳性检验。

from statsmodels.tsa.stattools import adfuller


result_A = adfuller(data_Atrain['新华制药'])
result_H = adfuller(data_Htrain['新华制药'])
print(result_A)
print(result_H)
(-1.4431310213630189, 0.5614329499694334, 4, 118, {'1%': -3.4870216863700767, '5%': -2.8863625166643136, '10%': -2.580009026141913}, -87.58482797037456)
(-1.503622297562152, 0.5317186850955914, 0, 122, {'1%': -3.4851223522012855, '5%': -2.88553750045158, '10%': -2.5795685622144586}, -352.8340635801403)

从结果可以看出 t-statistic 的值要大于10%,所以说无法拒绝原假设,也就是原数据都是非平稳的。
下面进行一阶差分之后检查一下:

from statsmodels.tsa.stattools import adfuller


result_A = adfuller(np.diff(data_Atrain['新华制药']))
result_H = adfuller(np.diff(data_Htrain['新华制药']))
print(result_A)
print(result_H)
(-6.79882907947638, 2.264371725491006e-09, 3, 118, {'1%': -3.4870216863700767, '5%': -2.8863625166643136, '10%': -2.580009026141913}, -85.47530269642459)
(-6.175010014868815, 6.663231093369651e-08, 5, 116, {'1%': -3.4880216384691867, '5%': -2.8867966864160075, '10%': -2.5802408234244947}, -349.6414355474592)

结果可以看出,一阶差分之后的数据是平稳的,也就是说原数据是一阶单整的,满足协整关系的前提,所以下一步我们对这两组数据进行协整检验,来探究两者是否是协整的。

协整检验

from statsmodels.tsa.stattools import coint

print(coint(np.diff(data_Atrain['新华制药']), np.diff(data_Htrain['新华制药'])))
(-11.816452883662702, 1.0013043392750406e-20, array([-3.98924151, -3.38709271, -3.07968702]))

结果看出 t-statistic 小于5%,所以说有95%的把握说两者具有协整关系。

基于以上条件,在进行后续的策略构造的时候,同样的,对于以上根据相关性方法挑选出来的数据,也要进行以上两步的筛选,只有当满足筛选条件的股票,才纳入到股票池中

考虑到我们的数据中有AH溢折价数据,所以直接使用溢折价数据进行策略构建,还是以新华制药为例,我们计算出该序列的均值,差价围绕着均值上下波动,再计算出方差,并画图如下所示:

sigma = np.std(data_AHtrain['新华制药'])
miu = np.mean(data_AHtrain['新华制药'])
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(len(data_AHtrain['新华制药'])), data_AHtrain['新华制药'])
ax.hlines(miu, 0, len(data_AHtrain['新华制药']))
ax.hlines(1.5 * sigma+miu, 0, len(data_AHtrain['新华制药']), colors='b')
ax.hlines(-1.5 * sigma+miu, 0, len(data_AHtrain['新华制药']), colors='b')
ax.hlines(2.5 * sigma+miu, 0, len(data_AHtrain['新华制药']), colors='r')
ax.hlines(-2.5 * sigma+miu, 0, len(data_AHtrain['新华制药']), colors='r')
<matplotlib.collections.LineCollection at 0x22708a132e0>

在这里插入图片描述

我们计算出该序列的均值,差价围绕着均值上下波动,再计算出方差:
当差价大于均值加1.5个方差时,看空差价,即差价向上偏离均值太多了,操作上做多H股做空A股
当差价大于均值减1.5个方差时,看多差价,即差价向下偏离均值太多了,操作上做多A股做空H股
止损设置为二点五倍标准差

主体策略

下面将构建配对交易的策略,统计套利的关键是要保证策略的市场中性,也就是说无论市场的趋势是上升还是下降,都要使策略或者预期的收益为正。

投资组合的构建
配对交易主要分析的对象是两个品种价格之间的偏离,由均值回归理论知,在股票、期货或者其他金融衍生品的交易市场中,无论高于或低于价值中枢(或均值)都有很高的概率向价值中枢回归的趋势。所以说,在具有协整关系的这两组数据中,当它们两者的价差高与均值时则会有向低走的趋势,价差低于均值时则会有向高走的趋势。

注意这里直接研究的是 A、B 价格差值,统计套利策略中通常会将 B 价格乘以一个协整系数,研究的对象是它们的残差,由于协整检验后可以知道它们的残差具有平稳性,所以更好的应用均值回归的理论。

设置开仓和止损的阈值
为了使开仓和止损的阈值更好地比较,所以就将开仓阈值设置为窗口内数据的两倍标准差,止损设置为三倍标准差。这个标准差的倍数可以通过调参来不断调优,标准差的设置也可以通过 GARCH 等模型拟合的自回归条件异方差类似的时变标准差来代替。

def strategy(price_A,price_H,data_AH):
    spread = data_AH # 读取AH溢折数据
    mspread = spread - np.mean(spread)
    sigma = np.std(mspread)
    open = 1.5 * sigma
    stop = 2.5 * sigma
    profit_list = []
    hold = False
    hold_price_A = 0
    hold_price_H = 0
    hold_state = 0   # 1 (A:long H:short)   -1 (A:short H:long)
    profit = 0

    for i in range(len(price_A)):
        if hold == False:
            if mspread[i] >= open:
                hold_price_A = price_A[i]
                hold_price_H = price_H[i]
                hold_state = -1
                hold = True
            elif mspread[i] <= -open:
                hold_price_A = price_A[i]
                hold_price_H = price_H[i]
                hold_state = 1
                hold = True
        else:
#             print('hold_price_A:',hold_price_A)
#             print('hold_price_H:',hold_price_H)
            if mspread[i] >= stop and hold_state == -1 :
                profit = (hold_price_A - price_A[i])/hold_price_A + (price_H[i] - hold_price_H)/hold_price_H
#                 print('冲破止损线,A:long H:short',profit)
                hold_state = 0
                hold = False
            if mspread[i] <= -stop and hold_state == 1 :
                profit = (price_A[i] - hold_price_A)/hold_price_A + (hold_price_H - price_H[i])/hold_price_H
#                 print('冲破止损线,A:short H:long',profit)
                hold_state = 0
                hold = False
            if mspread[i] <= 0 and hold_state == -1:
                profit = (hold_price_A - price_A[i])/hold_price_A + (price_H[i] - hold_price_H)/hold_price_H
#                 print('开仓,A:short H:long',profit)
                hold_state = 0
                hold = False
            if mspread[i] >= 0 and hold_state == 1:
                profit = (price_A[i] - hold_price_A)/hold_price_A + (hold_price_H - price_H[i])/hold_price_H
#                 print('开仓,A:long H:short',profit)
                hold_state = 0
                hold = False
        profit_list.append(profit)
        profit = 0
#     print(profit_list)
    return profit_list


最终我们绘制出新华制药AH股差价套利策略的净值走势图:

profit_list = strategy(data_Atest['海信家电'],data_Htest['海信家电'],data_AHtest['海信家电'])
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(len(profit_list)), np.cumsum(profit_list))
plt.show()
开仓,A:short H:long 0.0921522222621323
[0, 0, 0, 0, 0.0921522222621323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

在这里插入图片描述

可以看出回测结果看似是比较让人满意的,而且我们并没有对参数进行调优,从上图可以知道统计套利单次的收益是比较薄弱的,主要原因不仅仅是价差带来的这种相对收益本来就比较低,还有就是止损阈值设置的问题,有时一次止损就会cover掉之前所有的收益。所以说在统计套利中,阈值的设置是非常重要的。

此外,在日后的更新中,还要考虑以下的问题:
1、在选择配对数据的品种时,除了要考虑配对品种的相关性之外,还要考虑品种的市场流动性等因素。
2、历史回测时,还需要将手续费、滑点等因素考虑进去。

接下来,我们考虑对多个股票进行操作,首先为了更接近真实条件,我们根据真实的佣金费率进行了设置:

# 股票类交易手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
open_tax=0
close_tax=0.001
open_commission=0.00015
close_commission=0.00015

根据前面的介绍,我们在12年间,进行滚动向前的进行测试

根据前面选择股票的方法,我们构造了如下的函数进行股票选择,并进行测试如下所示:

np.array([1,2])+np.array([3,4])
array([4, 6])
def select_stock(price_A,price_H):
    selected_stock_list = []
    data_corr_selected = price_H.corrwith(price_A, method='spearman')
    data_corr_selected = data_corr_selected[data_corr_selected>data_corr_selected.quantile(0.75)]
    for selected_stock in data_corr_selected.index:
        coint_value = float(coint(np.diff(price_A[selected_stock]), np.diff(price_H[selected_stock]))[0])
        if coint_value<-3.98924151:
            selected_stock_list.append(selected_stock)
    return selected_stock_list
    
select_stock(data_Atest,data_Htest)  
['民生银行', '四川成渝', '中国铁建', '中国平安', '中国人寿']
import pandas as pd


profit_list = []
#把股票根据日期进行分组,一次读取七个月的数据,进行轮动,前六个月的数据用来测试,第七个月用来交易
for i in range(len(date_range[:-7])):
    data_sub_Hprice = data_Hprice.loc[date_range[i]:date_range[i+7]].fillna(method='ffill').dropna(how='any',axis=1) #去除这七个月中存在停牌的股票
    data_sub_Aprice = data_price.loc[date_range[i]:date_range[i+7]].fillna(method='ffill').dropna(how='any',axis=1)  #去除这七个月中存在停牌的股票
    data_sub_AH = data_AH.loc[date_range[i]:date_range[i+7]].fillna(method='ffill').dropna(how='any',axis=1)
    return_array = np.array([0.0]*len(data_sub_Aprice.loc[date_range[i+6]:date_range[i+7]]))
    stock_list_used = select_stock(data_sub_Aprice.loc[:date_range[i+6]],data_sub_Hprice.loc[:date_range[i+6]])
    for stock in stock_list_used:
#         print(stock)
        return_array +=np.array(strategy(data_sub_Aprice.loc[date_range[i+6]:date_range[i+7],stock],data_sub_Hprice.loc[date_range[i+6]:date_range[i+7],stock],data_sub_AH.loc[date_range[i+6]:date_range[i+7],stock]))
#     print(return_array)
    profit_list+=list((return_array)/len(stock_list_used))

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(len(profit_list)), np.cumsum(profit_list))
plt.show()

下图是收益策略的表现,可以看出收益在13年里翻了10多倍
在这里插入图片描述

一些感觉有用的文献还是要写在最后的:
Is pairs trading profitable on China AH-share markets?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

量化投资学习——A股H股套利年化100% 的相关文章

  • 【C、C++系列-1】C语言实现:寻找[1,100]之间的素数

    C C 43 43 系列 1 C语言实现 xff1a 寻找 1 100 之间的素数 1 问题 C语言实现 xff1a 寻找 1 100 之间的素数 2 实现代码 span class token comment 寻找 1 100 之间的素数
  • 【杭电100题】2073 无限的路

    题目链接 xff1a http acm hdu edu cn showproblem php pid 61 2073 xff08 c语言的double类型printf lf 显示0 00000问题 xff09 xff1a https blo
  • html遍历1到100,bat for循环100次:循环100求和

    这篇文章主要为大家详细介绍了bat for循环100次 循环100求和 xff0c 具有一定的参考价值 xff0c 可以用来参考一下 64 echo off setlocal ENABLEDELAYEDEXPANSION set a sum
  • Python求1+2+3+...+100的值,计算平方根的两个代码程序

    目录 前言 一 求1 43 2 43 3 43 43 100的值 1 实现的功能 2 代码程序 3 运行截图 二 计算平方根 1 实现的功能 2 代码程序 3 运行截图 前言 1 因多重原因 xff0c 本博文由两个程序代码部分组成 xff
  • 使用二分法猜1到100之间的一个数最多需要几次猜对

    答案是7次 刚刚编了个程序 xff0c 最多却是6次 xff0c 改天再看 xff01 public static void main String args TODO Auto generated method stub Scanner
  • Blazor入门100天 : 身份验证和授权 (3) - DB改Sqlite

    目录 建立默认带身份验证 Blazor 程序角色 组件 特性 过程逻辑DB 改 Sqlite将自定义字段添加到用户表脚手架拉取IDS文件 本地化资源freesql 生成实体类 freesql 管理ids数据表初始化 Roles freesq
  • python练习100题(5)

    题目054 xff1a 取一个整数a从右端开始的4 7位 切片是左闭右开的 a span class token operator 61 span span class token number 123456789 span a span
  • python数值运算m op n 100+10_【Python】数值运算

    描述 获得用户输入的一个字符串 xff0c 格式如下 xff1a M OP N 其中 xff0c M和N是任何数字 xff0c OP代表一种操作 xff0c 表示为如下四种 xff1a 43 加减乘除
  • C语言经典100题——输出“魔方阵“

    lt 1 gt 题目描述 输出 魔方阵 xff0c 所谓魔方阵是指它的每一行 每一列和对角线之和均相等 例如 xff1a 8 1 6 3 5 7 4 9 2 要求输出1 n 2的自然数构成的魔方阵 lt 2 gt 思路分析 将1放在第1行中
  • 靠写作能挣100万吗

    不要被标题吓到 xff0c 今天说的就是关于写作 Fenng大说 xff0c 同等能力的人绝对要文字写得好的 帅张说编程 英语 写作是程序员的3大底层能力 写作能给我带来什么 xff1f 王朔曾说 xff0c 写作是一条狗 xff0c 只要
  • 编写Python语言,使用循环求解1到100之间数的偶数和

    a 61 1 sum 61 0 while a lt 61 100 if a 2 61 61 0 sum 43 61 a a 43 61 1 print 39 1和100之间的偶数的和为 39 sum
  • ubuntu 18.04 桌面安装 tasksel aptitude failed (100) 问题修复

    ubuntu 18 04 桌面无法启动 xff0c 可能是安装远程桌面时搞坏了图形桌面的配置 因为实在百度不到具体出错的文件和相关配置 只能删除了桌面系统 然后问题来了 xff0c sudo apt install ubuntu desk
  • Atcoder Beginner Contest 100 - 题解

    A 原题 Happy Birthday 本题其实很水 只需要输入这两个整数 xff0c 如果中有一个大于 就输出 xff0c 否则输出 Yay include lt bits stdc 43 43 h gt using namespace
  • nginx CPU 100 跑满问题定位

    1 确定连接数是不是达到了上限 2 确定是不是开启了gzip压缩 xff0c 确定压缩等级 xff0c 小于1kb的不要压缩 xff1b 图片 xff0c 大文件 xff0c 大压缩文件等不要压缩 3 单个CPU占用100 原因的定位 xf
  • 最新的100个微信小程序-极乐Store

    1 团队日历 通过日历管理团队协同任务 在团队内指派 抄送和公开任务事项 xff0c 通过邮件或短信推送消息 到极乐小程序商店中搜索 团队日历 使用 2 同程旅游 同程小程序是一款无需下载安装 xff0c 只需扫描二维码即可 实现产品订购和
  • 【杭电100题】2073 无限的路

    题目链接 xff1a http acm hdu edu cn showproblem php pid 61 2073 xff08 c语言的double类型printf lf 显示0 00000问题 xff09 xff1a https blo
  • C++服务器开发100个知识要点C++RAII惯用法

    最初的写法 在笔者刚学习服务器开发的时候 xff0c 公司给笔者安排了一个练习 xff1a 在 Windows 系统上写一个 C 43 43 程序 xff0c 用该程序实现一个简单的服务 xff0c 在客户端连接上来时 xff0c 给客户端
  • C语言经典算法:求1-100之间素数

    include lt stdio h gt include lt stdlib h gt include lt assert h gt include lt math h gt int prime int n 素数除了1和它本身不能被其他数
  • 20万到100万年薪的算法工程师有什么区别?

    公元七世纪 xff0c 在车迟国国家气象局组织的一次求雨活动中 xff0c 虎力 鹿力 羊力三位大仙成功地祈下甘霖 xff0c 救黎民于水火中 老国王虽然不明就里 xff0c 却从此尊他们为国师 xff0c 奉道教为圭臬 本世纪 xff0c
  • C语言实现1/1-1/2+1/3-...-1/100求和

    观察题目要求可以看出 xff0c 底数为奇数是前面符号为正 xff0c 偶数是则为负 那么我们可以考虑使用一下方式完成求解 解法一 xff1a span class token macro property span class token

随机推荐

  • Ubuntu 更换清华大学镜像源

    Ubuntu 更换镜像源 通常我们使用ubunntu的时候总是出现网络过慢导致的更新下载失败等问题 Ubuntu默认的服务器是在国外 xff0c 自然连接就很慢 这里我们更换成国内的镜像源 xff0c 这里使用清华镜像源 操作步骤如下 xf
  • C语言strtok函数的用法

    先理解strtok函数的定义 xff0c 尤其是指针方面的 xff0c 需要自己理解 原型 xff1a char strtok char s const char delim include lt string h gt 分解字符串为一组字
  • ubuntu mate18.04+树莓派4B+ROS安装详细教程

    前记 最近项目需要 xff0c 需要给树莓派4B 安装Ubuntu mate xff0c 本来是一件很简单的事情 xff0c 因为Ubuntu mate官网已经开始支持树莓派4B了 xff0c 但是实际操作后 xff0c 才发现烧录官方的桌
  • FreeRTOS可视化追踪软件 —— 破解Tracealyzer 4.2.12

    方法一 愚人节破解Tracealyzer 4 2 12 xff08 若发这里不妥 xff0c 可通知删贴 xff09 http www stmcu org cn module forum thread 620069 1 1 html 4 3
  • tensorflow2(GPU)显卡版安装

    准备工作 硬件 xff1a 一张算力3 5以上的NVIDIA显卡 查询链接 link 软件 xff1a Miniconda3 pycharm NVIDIA显卡驱动 30系列以前 xff1a cuda 10 1 cudnn 10 1 v7 6
  • elasticsearch底层引擎替换之索引创建+文档添加

    最近在改elasticsearch的源码 xff0c 真的蛋疼 xff0c 现在先记录一下遇到的问题 首先 xff0c 我们在做的是替换掉elasticsearch的底层引擎 xff0c 也就是把lucene替换成我们自己的引擎 这个工作起
  • Winform 集成零散dll进exe的方法

    Winform程序经常需要引用一些第三方控件 xff0c 这些控件大多以DLL的形式提供 另外 xff0c 一般USB桥芯片的官方提供 net操作类库也都是DLL形式提供的 因此一个稍大的项目中往往有一大堆的零散的DLL文件 xff0c 而
  • vncserver 使用遇到的问题

    今天使用vncserver遇到了几个问题 xff0c 如下 xff1a 1 使用普通账户无法修改该账户下的vncpasswd xff1a 解决方法 xff1a 打开 vnc目录 xff0c ls l看一下发现 passwd这个文件的用户和用
  • slf4j的MDC对象和ThreadLocal简单分析

    MDC xff08 Mapped Diagnostic Context xff0c 映射调试上下文 xff09 是 log4j 和 logback 提供的一种方便在多线程条件下记录日志的功能 某些应用程序采用多线程的方式来处理多个用户的请求
  • springboot中@bean的lite模式

    当 64 Beans相互依赖时 xff0c 表示依赖关系就像一个bean方法调用另一个方法一样简 单 xff1a 64 Configuration public class AppConfig 64 Bean public Foo foo
  • spring bean解析源码分析

    转自https www jianshu com p 19e01388ccc5 前言 Spring源码分析是一个系列 xff0c 源码是Spring 4 X xff0c 本系列主要分析Spring的代码执行流程 xff0c 过于细节的内容将不
  • springboot remote shell简单实例

    springboot项目可以使用远程shell进行监控和管理 xff08 在2 0版本就不可以使用了 xff0c 此处要注意 xff09 使用时先添加spring boot remote shell 的依赖 xff0c gradle项目自己
  • 2021-08-30 创建tensor时,注意不要让梯度消失了

    下面这种是错误的 xff0c 梯度会消失 data span class token operator 61 span torch span class token punctuation span tensor span class to
  • 嵌入式学习项目实战 --- 在线词典

    目录 一 前言 二 项目功能 三 程序流程 1 客户端 2 服务器 四 代码实现 1 客户端代码 2 服务器代码 3 Makefile 一 前言 本文学习自 华清远见 的一个开源嵌入式项目在线词典综合实战 xff0c 涵盖了网络编程 文件I
  • hexo博客的制作

    安装Hexo 首先来看看我的hexo的博客演示 地址 xff1a http 91lyj xyz 我的ssm博客地址 xff1a www iclyj cn a target blank href http 91lyj xyz http 91l
  • win10系统CUDA10.0安装教程(for tensorflow2.0)

    前言 xff1a 目前最新的CUDA版本是10 1 xff0c 但是出于某种神秘的原因 xff0c 目前tensorflow2 0仅支持CUDA10 0 这个已经在我的电脑与一部分网友的反馈中得到了证实 tensorflow2 0不仅绑定了
  • 数学学习——Borel-Cantelli 引理证明

  • linux中的设备名称和设备号

    看赵炯博士的 linux 0 11 源代码注释 已经两三周了 xff0c 从今天起开始将一些个人总结和感悟分小标题写出来 xff0c 聊作记忆以供后来查看 在linux0 11源码的 linux boot bootsect s中 xff0c
  • python学习——numpy savetxt 追加模式

    因为savetxt的第一个参数f xff0c 可以是file handle xff0c 也可以是file name 所以用以下的这个代码就可以 xff1a span class token keyword with span span cl
  • 量化投资学习——A股H股套利年化100%

    一 交易对象选取 首先是选取数据 xff0c 选取数据的来源是wind xff1a 从wind中的交易数据 AH比较 里面可以看到历史收盘价和A H溢价率 xff0c 考虑到在2008年金融危机之后 xff0c 全球市场发生了较大的变化 x