策略实现

前面,有了统计的的结果改进的美林一/二,现在用历史的数据进行回测
1.所需的库

# coding=utf-8
import math
import tushare as ts
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import talib
import pandas as pd
from datetime import datetime, date
matplotlib.rcParams['axes.unicode_minus']=False
plt.rcParams['font.sans-serif']=['SimHei']
ts.set_token('  token码 ')
pro = ts.pro_api()

2.数据读取和数据的处理,和前面一样python量化策略——改进的美林时钟(二)
若想直接运行此代码,需获取Tushare pro 金融数据的token码,这里获取token码


############################读取数据类###################################
class readData:def read_index_daily(self,code,star,end):#指数数据dsb = pro.index_daily(ts_code=code, start_date=star, end_date=end,fields='ts_code,trade_date,close,change')#默认读取三个数据return dsbdef read_daily(self,code,star,end):dsc1 = pro.daily(ts_code=code, start_date=star, end_date=end,fields='ts_code,trade_date,close,change')return dsc1def read_CPI(self,star,end):#时间格式start_cpi='201609'dc=pro.cn_cpi(start_m=star, end_m=end,fields='month,nt_yoy')return dcdef read_GDP(self,star,end):#时间格式star='2016Q4'df1 = pro.cn_gdp(start_q=star, end_q=end,fields='quarter,gdp_yoy')return df1def read_bond(self,code,star,end):df=pro.cb_daily(ts_code=code,start_date=star,end_date=end)return df
#####################################################################    start_time='20000430'#发布GDP需要时间,我们延迟1个月,即第一季度的GDP4月份才发布。
end_time="20200731"star_GDP='2006Q1'#延后一年,因为我们找的是差分
end_GDP='2020Q1'#不是以3 4季度结尾
star_CPI='200601'
end_CPI='202003'
df1=readData()#读取
dc=readData()
dsc1=readData()
dsp=readData()
dsb=readData()
df1=df1.read_GDP(star_GDP,end_GDP)
dc=dc.read_CPI(star_CPI,end_CPI)
dsc1=dsc1.read_index_daily('000300.SH',start_time,end_time)
dsb=dsb.read_index_daily('000012.SH',start_time,end_time)
dsp=dsp.read_index_daily('NHCI.NH',start_time,end_time)  ##########################GDP信号处理################################
def GDP_fun(df1):df1.set_index('quarter',inplace=True)#设置日期索引df2=(df1.shift(4)-df1).shift(-4)df2=df2.dropna()G=pd.Series(0,index=df2.gdp_yoy.index)for i in range(len(df2.gdp_yoy)):if df2.gdp_yoy[i]>0:G[i]=1elif df2.gdp_yoy[i]<0:G[i]=0else:G[i]=G[i-1]return G
G=GDP_fun(df1)
###############################################################################################CPI信号函数##############################
def CPI_fun(dc):dc=dc.sort_index()dc.set_index('month',inplace=True)dc2=(dc.shift(12)-dc.shift()).shift(-12).dropna()C=pd.Series(0,index=dc2.nt_yoy.index)for j in range(len(dc2.nt_yoy)-3):if (3+j)%3==0:if dc2.nt_yoy[j]>0:C[j]=1elif dc2.nt_yoy[j]<0:C[j]=0else:C[j]=C[j-1] else:pass return C
C=CPI_fun(dc)
########################################################################

3.收益计算函数


############################计算收益率+索引函数##########################
class ZC_fun:def ret_function(self,ds):#standard_base=pro.index_daily( ts_code='000300.SH', start_date='20081031', end_date="20200430")standard_base=ds.sort_index()standard_base.index=pd.to_datetime(standard_base.trade_date,format='%Y-%m-%d')#设置日期索引close_base= standard_base.closestandard_ret=standard_base.change/standard_base.close.shift(-1)ret=standard_ret.sort_index(axis=0,ascending=True)ret=ret.dropna()return retdef bsc_fun(self,ds):dsc=ds.drop(['ts_code'],axis=1)dsc=dsc.sort_index()dsc.index=pd.to_datetime(dsc.trade_date,format='%Y-%m-%d')#设置日期索引dsc=dsc.drop(['trade_date'],axis=1)return dsc
#########################################################################    gc=ZC_fun()
R_c=gc.ret_function(dsc1)#股票的利率
gb=ZC_fun()
R_b=gb.ret_function(dsb)#债券的利率
gp=ZC_fun()
R_p=gp.ret_function(dsp)#商品的利率

4.季度收益函数

############################对应季度的收益####################################
def RET_sig(sig_c,i):#输入利率,输出i对应的时间段利率#####截取利率段if G.index[i][5:6] =='1':a=G.index[i][0:4]+'0501'b=G.index[i][0:4]+'0731'at1=pd.to_datetime(a,format='%Y-%m-%d')bt1=pd.to_datetime(b,format='%Y-%m-%d')sig_c=sig_c[ sig_c.index<=bt1]  sig_c=sig_c[ sig_c.index>=at1]elif G.index[i][5:6] =='2':a=G.index[i][0:4]+'0801'b=G.index[i][0:4]+'1031'at1=pd.to_datetime(a,format='%Y-%m-%d')bt1=pd.to_datetime(b,format='%Y-%m-%d')sig_c=sig_c[ sig_c.index<=bt1]  sig_c=sig_c[ sig_c.index>=at1]elif G.index[i][5:6] =='3':a=G.index[i][0:4]+'1101'a1=G.index[i][0:4]+'1231'at1=pd.to_datetime(a,format='%Y-%m-%d')bt1=pd.to_datetime(a1,format='%Y-%m-%d')sig_c1=sig_csig_c1=sig_c1[ sig_c1.index<=bt1]  sig_c1=sig_c1[ sig_c1.index>=at1]sig_c1=sig_c1b=G.index[i-2][0:4]+'0101'b1=G.index[i-2][0:4]+'0131'at11=pd.to_datetime(b,format='%Y-%m-%d')bt11=pd.to_datetime(b1,format='%Y-%m-%d')sig_c=sig_c[ sig_c.index<=bt11]  sig_c=sig_c[ sig_c.index>=at11]sig_c=sig_c1.append(sig_c)else:a=G.index[i-1][0:4]+'0201'b=G.index[i-1][0:4]+'0430'at1=pd.to_datetime(a,format='%Y-%m-%d')bt1=pd.to_datetime(b,format='%Y-%m-%d')sig_c=sig_c[ sig_c.index<=bt1]  sig_c=sig_c[ sig_c.index>=at1]return sig_c
###########################################################################

5.策略判断信号函数

#################################策略条件##################################
RETT=None
for i in range(len(G)):if  G[i]>0 and CP(i)>0:RETT=( 0*RET_sig(R_c,i)+1*RET_sig(R_p,i) +0*RET_sig(R_b,i)  ).append(RETT)elif   G[i]==0 and CP(i)>0:RETT=( 0*RET_sig(R_c,i)+0*RET_sig(R_p,i)+1*RET_sig(R_b,i)    ).append(RETT)elif  G[i]>0 and CP(i)==0:RETT=( 1*RET_sig(R_c,i)+0*RET_sig(R_p,i)  +0*RET_sig(R_b,i)  ).append(RETT)else:RETT=( 1*RET_sig(R_c,i)+0*RET_sig(R_p,i)+0*RET_sig(R_b,i)  ).append(RETT)
RETT=RETT.sort_index(axis=0)
cum=np.cumprod(1+RETT)-1
cum=cum.dropna()

6.基准函数(直接调用)


############################指数基准图#########################################
start_time_jz=str(RETT.index[0])[:4]+str(RETT.index[0])[5:7]+str(RETT.index[0])[8:10]#获取开始时间
end_time_jz=str(RETT.index[-1])[:4]+str(RETT.index[-1])[5:7]+str(RETT.index[-1])[8:10]
#计算函数
def bj_standard(code,lab='沪深300',col='k'):#针对沪深股票,直接画出比较基准(收益情况)standard_base = pro.index_daily( ts_code=code, start_date=start_time_jz, end_date=end_time_jz)standard_base=standard_base.sort_index()standard_base.index=pd.to_datetime(standard_base.trade_date,format='%Y-%m-%d')#设置日期索引close_base= standard_base.closestandard_ret=standard_base.change/standard_base.close.shift(-1)standard_sig=pd.Series(0,index=close_base.index) standard_trade=standard_sig.shift(1).dropna()/100#shift(1)整体下移一行standard_SmaRet=standard_ret*standard_trade.dropna()standard_cum=np.cumprod(1+standard_ret[standard_SmaRet.index[0:]])-1plt.plot(standard_cum,label=lab,color=col)return standard_cum
###########################################################################

7.结果统计函数(最大回撤、波动率等信息)


#############################策略的年化统计######################################
def Tongji(RET,cum):RET1 = RET*100 - (4/252)NH=cum[-2]*100*252/len(RET.index)BD=np.std(RET)*100*np.sqrt(252)SR=(NH-400/252)/BDClose=Nonefor i in range(len(G)):Close=RET_sig( gc.ret_function(dsc1)[1] ,i).append(Close)for i in range(len(cum)):if Close[Close.index[i]]==Close.max():MHC=(Close.max()-Close[Close.index[i:]].min())*100/Close.max()print("年化收益率:{:.2f}%:,年化夏普率:{:.2f},波动率为:{:.2f}%,最大回撤:{:.2f}%".format( NH,SR,BD,MHC))
############################################################################

8.调用函数

if __name__=="__main__":bj_standard('000300.SH')#比较基准函数(图)bj_standard('000012.SH',lab='上证国债',col='b')bj_standard('NHCI.NH',lab='南华商品指数',col='y')Tongji(RETT,cum)plt.plot(cum,label="组合策略",color='r',linestyle='-')plt.title("策略收益率")plt.legend()      

9输出结果:
2007-2020年回测结果:

年化收益率:28.01%:,年化夏普率:1.31,波动率为:20.13%,最大回撤:72.30%

看看其他年份的结果
2009-2020

年化收益率:9.78%:,夏普率:0.44,波动率为:18.77%,最大回撤:72.30%

2007-2014年
结果:

年化收益率:26.73%:,夏普率:1.20,波动率为:20.92%,最大回撤:37.91%

可以看出单资产策略抓住06-08年的行情,总体还是不错的收益率。

如果不选择单资产配置,采用组合配置呢,每次配2-3个大类资产。
下面来看下
只要平均收益率大于0,就选择它,权重根据平均收益的大小按比例配置。

2006-2010年

年化收益率:42.01%:,年化夏普率:1.80,波动率为:22.45%,最大回撤:36.23%

07年的那一波行情没抓住。

下面看下最近十年的情况(2010-今)

年化收益率:6.71%:,夏普率:0.33,波动率为:17.78%


效果也不是很夸张,但是最后都跑赢了三个基准,但是波动确实相对较大。

完整代码:
注:若想直接运行此代码,需获取Tushare pro 金融数据的token码,这里获取token码

# coding=utf-8
import math
import tushare as ts
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import talib
import pandas as pd
from datetime import datetime, date
matplotlib.rcParams['axes.unicode_minus']=False
plt.rcParams['font.sans-serif']=['SimHei']
ts.set_token('填入token码')###填入token码
pro = ts.pro_api()def CP(x):#转换CPI为季度数据return C[3*x]############################读取数据类###################################
class readData:def read_index_daily(self,code,star,end):#指数数据dsb = pro.index_daily(ts_code=code, start_date=star, end_date=end,fields='ts_code,trade_date,close,change')#默认读取三个数据return dsbdef read_daily(self,code,star,end):dsc1 = pro.daily(ts_code=code, start_date=star, end_date=end,fields='ts_code,trade_date,close,change')return dsc1def read_CPI(self,star,end):#时间格式start_cpi='201609'dc=pro.cn_cpi(start_m=star, end_m=end,fields='month,nt_yoy')return dcdef read_GDP(self,star,end):#时间格式star='2016Q4'df1 = pro.cn_gdp(start_q=star, end_q=end,fields='quarter,gdp_yoy')return df1def read_bond(self,code,star,end):df=pro.cb_daily(ts_code=code,start_date=star,end_date=end)return df
#####################################################################
start_time='20000430'#发布GDP需要时间,我们延迟1个月,即第一季度的GDP4月份才发布。
end_time="20200731"star_GDP='2006Q1'#延后一年,因为我们找的是差分
end_GDP='2014Q1'#不是以3 4季度结尾
star_CPI='200601'
end_CPI='201403'
df1=readData()#读取
dc=readData()
dsc1=readData()
dsp=readData()
dsb=readData()
df1=df1.read_GDP(star_GDP,end_GDP)
dc=dc.read_CPI(star_CPI,end_CPI)
dsc1=dsc1.read_index_daily('000300.SH',start_time,end_time)
dsb=dsb.read_index_daily('000012.SH',start_time,end_time)
dsp=dsp.read_index_daily('NHCI.NH',start_time,end_time)  ##########################GDP信号处理################################
def GDP_fun(df1):df1.set_index('quarter',inplace=True)#设置日期索引df2=(df1.shift(4)-df1).shift(-4)df2=df2.dropna()G=pd.Series(0,index=df2.gdp_yoy.index)for i in range(len(df2.gdp_yoy)):if df2.gdp_yoy[i]>0:G[i]=1elif df2.gdp_yoy[i]<0:G[i]=0else:G[i]=G[i-1]return G
G=GDP_fun(df1)
###############################################################################################CPI信号函数##############################
def CPI_fun(dc):dc=dc.sort_index()dc.set_index('month',inplace=True)dc2=(dc.shift(12)-dc.shift()).shift(-12).dropna()C=pd.Series(0,index=dc2.nt_yoy.index)for j in range(len(dc2.nt_yoy)-3):if (3+j)%3==0:if dc2.nt_yoy[j]>0:C[j]=1elif dc2.nt_yoy[j]<0:C[j]=0else:C[j]=C[j-1] else:pass return C
C=CPI_fun(dc)
####################################################################################################计算收益率+索引函数##########################
class ZC_fun:def ret_function(self,ds):#standard_base=pro.index_daily( ts_code='000300.SH', start_date='20081031', end_date="20200430")standard_base=ds.sort_index()standard_base.index=pd.to_datetime(standard_base.trade_date,format='%Y-%m-%d')#设置日期索引close_base= standard_base.closestandard_ret=standard_base.change/standard_base.close.shift(-1)ret=standard_ret.sort_index(axis=0,ascending=True)ret=ret.dropna()return retdef bsc_fun(self,ds):dsc=ds.drop(['ts_code'],axis=1)dsc=dsc.sort_index()dsc.index=pd.to_datetime(dsc.trade_date,format='%Y-%m-%d')#设置日期索引dsc=dsc.drop(['trade_date'],axis=1)return dsc
#########################################################################    gc=ZC_fun()
R_c=gc.ret_function(dsc1)#股票的利率
gb=ZC_fun()
R_b=gb.ret_function(dsb)#债券的利率
gp=ZC_fun()
R_p=gp.ret_function(dsp)#商品的利率############################对应季度的收益####################################
def RET_sig(sig_c,i):#输入利率,输出i对应的时间段利率#####截取利率段if G.index[i][5:6] =='1':a=G.index[i][0:4]+'0501'b=G.index[i][0:4]+'0731'at1=pd.to_datetime(a,format='%Y-%m-%d')bt1=pd.to_datetime(b,format='%Y-%m-%d')sig_c=sig_c[ sig_c.index<=bt1]  sig_c=sig_c[ sig_c.index>=at1]elif G.index[i][5:6] =='2':a=G.index[i][0:4]+'0801'b=G.index[i][0:4]+'1031'at1=pd.to_datetime(a,format='%Y-%m-%d')bt1=pd.to_datetime(b,format='%Y-%m-%d')sig_c=sig_c[ sig_c.index<=bt1]  sig_c=sig_c[ sig_c.index>=at1]elif G.index[i][5:6] =='3':a=G.index[i][0:4]+'1101'a1=G.index[i][0:4]+'1231'at1=pd.to_datetime(a,format='%Y-%m-%d')bt1=pd.to_datetime(a1,format='%Y-%m-%d')sig_c1=sig_csig_c1=sig_c1[ sig_c1.index<=bt1]  sig_c1=sig_c1[ sig_c1.index>=at1]sig_c1=sig_c1b=G.index[i-2][0:4]+'0101'b1=G.index[i-2][0:4]+'0131'at11=pd.to_datetime(b,format='%Y-%m-%d')bt11=pd.to_datetime(b1,format='%Y-%m-%d')sig_c=sig_c[ sig_c.index<=bt11]  sig_c=sig_c[ sig_c.index>=at11]sig_c=sig_c1.append(sig_c)else:a=G.index[i-1][0:4]+'0201'b=G.index[i-1][0:4]+'0430'at1=pd.to_datetime(a,format='%Y-%m-%d')bt1=pd.to_datetime(b,format='%Y-%m-%d')sig_c=sig_c[ sig_c.index<=bt1]  sig_c=sig_c[ sig_c.index>=at1]return sig_c
############################################################################################################策略条件##################################
RETT=None
for i in range(len(G)):if  G[i]>0 and CP(i)>0:RETT=( 0*RET_sig(R_c,i)+1*RET_sig(R_p,i) +0*RET_sig(R_b,i)  ).append(RETT)elif   G[i]==0 and CP(i)>0:RETT=( 0*RET_sig(R_c,i)+0*RET_sig(R_p,i)+1*RET_sig(R_b,i)    ).append(RETT)elif  G[i]>0 and CP(i)==0:RETT=( 1*RET_sig(R_c,i)+0*RET_sig(R_p,i)  +0*RET_sig(R_b,i)  ).append(RETT)else:RETT=( 1*RET_sig(R_c,i)+0*RET_sig(R_p,i)+0*RET_sig(R_b,i)  ).append(RETT)
RETT=RETT.sort_index(axis=0)
cum=np.cumprod(1+RETT)-1
cum=cum.dropna()############################指数基准图#########################################
start_time_jz=str(RETT.index[0])[:4]+str(RETT.index[0])[5:7]+str(RETT.index[0])[8:10]
end_time_jz=str(RETT.index[-1])[:4]+str(RETT.index[-1])[5:7]+str(RETT.index[-1])[8:10]
def bj_standard(code,lab='沪深300',col='k'):#针对沪深股票,直接画出比较基准(收益情况)standard_base = pro.index_daily( ts_code=code, start_date=start_time_jz, end_date=end_time_jz)standard_base=standard_base.sort_index()standard_base.index=pd.to_datetime(standard_base.trade_date,format='%Y-%m-%d')#设置日期索引close_base= standard_base.closestandard_ret=standard_base.change/standard_base.close.shift(-1)standard_sig=pd.Series(0,index=close_base.index) standard_trade=standard_sig.shift(1).dropna()/100#shift(1)整体下移一行standard_SmaRet=standard_ret*standard_trade.dropna()standard_cum=np.cumprod(1+standard_ret[standard_SmaRet.index[0:]])-1plt.plot(standard_cum,label=lab,color=col)return standard_cum
###########################################################################   #############################策略的年化统计######################################
def Tongji(RET,cum):RET1 = RET*100 - (4/252)NH=cum[-2]*100*252/len(RET.index)BD=np.std(RET)*100*np.sqrt(252)SR=(NH-400/252)/BDfor i in range(len(cum)):if cum[cum.index[i]]==cum.max():MHC=(cum.max()-cum[cum.index[i:]].min())*100/cum.max()print("年化收益率:{:.2f}%:,年化夏普率:{:.2f},波动率为:{:.2f}%,最大回撤:{:.2f}%".format( NH,SR,BD,MHC))
############################################################################
if __name__=="__main__":bj_standard('000300.SH')#比较基准函数(图)bj_standard('000012.SH',lab='上证国债',col='b')bj_standard('NHCI.NH',lab='南华商品指数',col='y')Tongji(RETT,cum)plt.plot(cum,label="组合策略",color='r',linestyle='-')plt.title("策略收益率")plt.legend()      

其他策略
1.python量化——alpha股票-指数期货对冲策略
2.多因子选股策略
3.海龟交易策略
4.移动平均策略——单/双均线策略
5.改进的美林时钟策略(一)
5.改进的美林时钟策略(二)

python量化策略——改进的美林时钟轮动策略(三)相关推荐

  1. 抱团股会一直涨?无脑执行大小盘轮动策略,轻松跑赢指数5倍【附Python代码】

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. 前言: 巴蛇吞象,扬州跨鹤.人性之贪婪,逝者如此, ...

  2. 搭建系统|继承backtrader的本地量化回测平台如何玩转多股轮动策略!

    前言 一个完整的量化交易系统离不开人机交互功能的应用,特别是在回测阶段,我们需要不断更改参数因子.更换交易策略以应对当前的市场.因此创建完整的.功能键全的GUI用户界面至关重要. 市面上也出现了很多相 ...

  3. 使用python量化交易接口有哪些分析指标和策略?

    量化交易有哪些指标可以用于分析呢?主要有技术面和基本面可以用于分析! 来看一下技术面和基本面有什么区别? 技术面更关注具体的价格,比如每天的开盘价.收盘价.以及和开盘价/收盘价/最低价/最高价相关的K ...

  4. [Tushare+Python] AH股轮动策略基础

    [Tushare+Python] AH股轮动策略基础 摘要:为做AH股轮动策略需进行基础数据处理,这里代码主要涉及AH溢价计算及相关数据清洗. 文章目录 [Tushare+Python] AH股轮动策 ...

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

    文章目录 动量因子与行业轮动概述 动量因子的理解 投资视角下的行业轮动现象 投资者视角与奈特不确定性 动量因子在行业风格上的效果测算 动量因子效果测算流程概述 1. 行业选择:申万一级行业 2. 动量 ...

  6. 股债轮动策略之行业版

    股债轮动策略之行业版 雪球上的 宜昌白云飞 的原创专栏里有一个系列文章, 现将其摘录如下: 年化20%七年无亏损的简单策略--股债轮动行业版(一) https://xueqiu.com/1884493 ...

  7. html如何设置轮动,手把手教你构建轮动策略

    A股市场具有明显的大小盘风格轮动现象,比如2015年以中证500为代表的中小盘全面跑赢沪深300指数(大盘),但在随后的几年中沪深300指数成为市场的主流,收益也大幅跑赢中证500. 而最近一年,市场 ...

  8. 多因子策略_单因子选股轮动测试

    多因子策略 因子 因子就是在选择一只股票时,能够帮助你做出决定的一个因素 类型 规模因子 1. 总市值 2. 流通市值 3. 自由流通市值 4. 小市值因子(市值越小,其操纵涨跌所需要的资金越少,股票 ...

  9. akshare改写公募基金轮动策略

    群友说,行业指数不行,没办法跟买.这次我换成了etf进行动量策略,选择本周上涨最强的5个etf,平均持仓,一周后移仓.查看回测效果. 不废话,上传代码,但还是有点毛糙.下次加上日期这些数据,做成df格 ...

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

    文章目录 1. 交易策略 2. Backtrader回测程序 3. 回测效果 3.1 2020年1月1日 - 2021年1月1日 3.2 2021年1月1日 - 2022年1月1日 3.3 2022年 ...

最新文章

  1. 谷歌自动驾驶专利大曝光!
  2. ios 添加block 类别_ios之Block的详细使用和具体说明
  3. 【小白学习PyTorch教程】九、基于Pytorch训练第一个RNN模型
  4. ftp无法显示服务器web文件夹,Web和Ftp服务器.ppt
  5. DVbbs8.2入侵思路与总结
  6. 4.3.2模拟匹配的一种改价算法(KMP及KMP优化算法)
  7. linux禁用root登录
  8. 最大最小标准化 数值_分享丨实验数据标准化处理方法
  9. 高性能服务器程序框架,高性能服务器程序框架
  10. centos6.5 mysql主从_centos 6.5设置mysql主从同步过程记录
  11. xdb 服务_[20200115]监听中没有xdb服务.txt
  12. 困了累了到底喝啥?浅谈饮料品牌如何进行推广策略定位
  13. com词根词缀_英语词根词缀,cor和con分别代表什么意思
  14. 转自【AI科技评论】专访李海洲教授 | 机器智能对话是毕生所求
  15. Bagging和Boosting的概念和区别
  16. 14、Kanzi插件——通过Kanzi Engine插件创建自定义属性类型及其元数据+代码解析
  17. Echarts 柱状图渐变色设置
  18. 美颜换妆之BeautyGAN
  19. jQuery仿真翻书炫酷翻页动画插件
  20. IDEA 远程断点调试

热门文章

  1. 使用echart的小指南
  2. 程序员去面试的梗!面试官:“哦了,明天来上班吧”
  3. hadoopsnappy解压_配置Hadoop2.7.2和Hbase1.1.5支持Snappy解压压缩库
  4. linux查询数据库归档日志,关于 Oracle 归档日志
  5. (转)Spark中对Dataframe的union 、unionAll和 unionByName方法说明
  6. Class类的使用和背后实现的原理
  7. day3-作业(18-23)(java泛型总结一)
  8. 圆角半角数据库_数据库使用技巧――SQL 全角与半角切换_MySQL
  9. java正则表达式 后顾_正则表达式 - CrazyManDF的个人空间 - OSCHINA - 中文开源技术交流社区...
  10. [论文分享] Stegozoa: Enhancing WebRTC Covert Channels with Video Steganography for Internet Censorship