尾盘选股策略(选股策略 python)
(本文由公众号越声投顾(yslcw927))整理,仅供参考,不构成操作建议。如自行操作,注意仓位控制和风险自负。)
短线操作能在短时间获取比较丰厚的利润,也是很多投资者都会选择的操作模式,但机会和风险共生,想要有短时间的利润,就要承担更大的风险。
Unit=(1%∗账户总资金)/N
【qstock开源了】数据篇之行情交易数据
动态止损或清仓条件
并初步得出结论:
01 引言
02 Python计算均线动量
#均线可视化 cols=['close']+[str(i)+'日均线' for i in np.linspace(10, 100, 10)] qs.line(df['2020':][cols])
03 动量回测
策略思路:当短期均线大于长期均线呈现多条均线的多头排列时,买入做多,当均线呈现空头排列时卖出。使用汉明距离可以度量均线的多头与空头排列得分,当出现完美的均线多头时(短期均线依次大于长期均线,如10日MA > 20日MA >… 100日MA),得分为1;当出现完美的空头时,即短期均线依次小于长期均线,如10日MA < 20日MA <… <100日MA)得为0,其他均线排列得分位于0-1之间。可以根据得分设定一个门槛值,如当scores得分大于0.5,给出买入或持有的信号,否则为卖出或做空信号。
#封装成函数方便后面进行回测分析 def ma_momentum(code,benchmark='hs300',start='20100101',end='202201219',ma_list=None,threshold=0.8): df=qs.data_feed(code,index=benchmark,start=start,end=end,fqt=2) ss=np.linspace(10, 100, 10) if ma_list is None else ma_list for i in ss: df[str(i)+'日均线']=df['close'].rolling(window=int(i),center=False).mean() df.dropna(inplace=True) cols=[str(i)+'日均线' for i in ss] for date in df.index: ranking = stats.rankdata(df.loc[date,cols].values) df.loc[date,'scores']= distance.hamming(ranking, range(1,len(ss)+1)) #当日均线多头排列scores=1发出买入信号设置为1 df.loc[df['scores']>threshold, 'signal'] = 1 #当日均线空头排列scores=0发出买入信号设置为0 df.loc[df['scores']<=threshold, 'signal'] = 0 df['position']=df['signal'].shift(1) df['position'].fillna(method='ffill',inplace=True) d=df[df['position']==1].index[0]-timedelta(days=1) df1=df.loc[d:].copy() df1['position'][0]=0 #当仓位为1时,买入持仓,当仓位为0时,空仓,计算资金净值 df1['capital_ret']=df1.rets.values*df1['position'].values #计算策略累计收益率 df1['capital_line']=(df1.capital_ret+1.0).cumprod() return df1
#可以通过ma_list自定义设置ma均线计算周期 #如ma_list=[3, 5, 8, 13, 21, 34, 55, 89, 144, 233] #ma_list=None表示默认使用10-100日均线 data=ma_momentum('中国平安',ma_list=None,threshold=0.8)
fib=[3, 5, 8, 13, 21, 34, 55, 89, 144, 233] data=ma_momentum('贵州茅台',ma_list=fib,threshold=0.5) qs.start_backtest(data)
04 结语
下一篇:钻石底部很朦胧(钻石底什么意思)