开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 21 天,点击查看活动详情
前言
上节文章我们讲了macd买卖点,macd买卖点是我们最常用的买卖点,而均线买卖点也是我们股市的常用指标,接下来几节课我们会多讲几种买卖点,然后把几种买卖点进行组合,得出一种最优的买卖点,好说干就干
均线策略
你在股市是否有这样的疑惑? 到底什么时候该补仓,到底什么时候该减仓?为什么每次止损经常抛出地板价?不止损又跌跌不休。
而今天我们学的均线策略,就是专门解决这类问题的
什么是均线策略
双均线策略,通过建立m天移动平均线,n天移动平均线,则两条均线必有交点。若m>n,n天平均线“上穿越”m天均线则为买入点,反之为卖出点。该策略基于不同天数均线的交叉点,抓住股票的强势和弱势时刻,进行交易
下面是一个双均线策略的例子
双均线函数
def ma_strategy(data, short_window=5, long_window=20):
"""
双均线策略
:param data: dataframe, 投资标的行情数据(必须包含收盘价)
:param short_window: 短期n日移动平均线,默认5
:param long_window: 长期n日移动平均线,默认20
:return:
"""
print("==========当前周期参数对:", short_window, long_window)
data = pd.DataFrame(data)
# 计算技术指标:ma短期、ma长期
data['short_ma'] = data['close'].rolling(window=short_window).mean()
data['long_ma'] = data['close'].rolling(window=long_window).mean()
# 生成信号:金叉买入、死叉卖出
data['buy_signal'] = np.where(data['short_ma'] > data['long_ma'], 1, 0)
data['sell_signal'] = np.where(data['short_ma'] < data['long_ma'], -1, 0)
# 过滤信号:st.compose_signal
data = bs.compose_signal(data)
return data;
整合信号函数修改
def compose_signal(data):
# 整合信号
# buy_signal 为买入信号,设置为1,如果当前买入信号为1并且前一个买入信号也为1,那么设置当前买入信号为零
data.loc[(data['buy_signal'] == 1) & (data['buy_signal'].shift(1) == 1), 'buy_signal'] = 0
# sell_signal 为卖出信号,设置为-1,如果当前卖出信号为-1并且前一个卖出信号也为-1,那么设置当前卖出信号为零
data.loc[(data['sell_signal'] == -1) & (data['sell_signal'].shift(1) == -1), 'sell_signal'] = 0
# signal
data_copy = data.copy();
data_copy.loc[:, 'signal'] = data_copy['buy_signal'] + data_copy['sell_signal']
# 如果第一条数据的sell_signal为-1的话,那么修改sell_signal为0
data_signal = data_copy[data_copy['signal'] != 0];
if data_signal.iloc[0]['signal'] == -1:
data_copy.loc[data_signal.index[0], 'sell_signal'] = 0;
return data_copy
主要是加了如果第一条数据的sell_signal为-1的话,那么修改sell_signal为0,防止出现我们还没买入呢,就卖出
封装计算收益率函数
def calculate_profit(data, code):
"""
计算收益率
:param data: dataframe, 投资标的行情数据(必须包含收盘价)
:param code: 股票代码
:return:
"""
# 计算收益率
data = bs.calculate_profit_pct(data);
# 计算累计收益率
data = bs.calculate_cum_prof(data);
data['cum_profit'] = data['cum_profit'] * 100;
print(data);
bs.show_chart(data, code);
均线策略收益率
也就是5日上穿10日均线买入,5日下穿10日均线卖出
def short_strategy(code, start_time, end_time=None):
"""
短线交易策略
:param data: dataframe, 投资标的行情数据(必须包含收盘价)
:param short_window: 短期n日移动平均线,默认5
:param long_window: 长期n日移动平均线,默认20
:return:
"""
data = st.get_csv_price(code, start_time, end_time);
data = ma_strategy(data, 5, 10);
calculate_profit(data, code);
# bs.show_buy_sell_chart(data, code);
此时看一下我们的收益率
一共买入卖出4次,收益率为
38.77% 还是很可观的
对比一下确实是在这一天形成了死叉
均线策略买卖点是否符合预期
接下来查看一下买卖点,买卖点还是我们上一节课已经封装了,这节课就直接拿来用
good,还是比较符合预期的
总结
- 目前测试000001均线策略比macd策略收益高,所以还是要多测试一些股票,看一下是否交易策略可靠
- 能否把macd策略和均线策略进行融合?
- 如何落地买卖点,真正用于实战?
上面这些问题,都会在后面的文章进行更新,⛽️