用Python做股票进场分析

用Python买卖股票

上班无聊的时候研究了下公司的401k,然后通过简单的分析各个选项的correlation,找到负相关最大的bond和大盘股进行交易。

简单来说,就是看跌的时候提高bond的持有率,看涨的时候提高stock的持有率,这样暂时到达了16%左右的收益率。

这篇文章主要是总结一下我平时的操作策略。

S&P500 均线买卖分析

这里会和大家分享下如何通过简单的均线进行大盘指数ETF的投资策略

获取数据

1
2
3
4
5
6
7
8
9
10
11
12
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import yfinance as yf
import mpl_finance as mpf
plt.style.use("fivethirtyeight")
# 通过yahoo finance获取每日SPY500 ETF 信息
data = yf.download("SPY", period = "2y")
data.head()

绘制曲线

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 我们需要通过OHLC者四个指标进行分析
# 第一步获取这四个metric并转化成list
dvalues = data[['Open', 'High', "Low", "Close"]].values.tolist()
# 给dvalues添加日期
pdates = mdates.date2num(data.index)
ohlc = [[pdates[i]] +dvalues[i] for i in range(len(pdates)) ]
# 计算均线,我们用的是40天最高,40天最低, 和15天收盘价指数移动平均线
# 用指数移动平均的原因是我们能更好地加权当前股价,从而发现趋势
hsma40 = data['High'].rolling(40).mean()
lsma40 = data['Low'].rolling(40).mean()
ema15 = data['Close'].ewm(15).mean()
fig, ax = plt.subplots(figsize = (15, 6))
mpf.plot_day_summary_ohlc(ax, ohlc[-100:], ticksize=4, colorup='#77d879', colordown='#db3f3f')
ax.plot(hsma40[-100:], color='blue', linewidth=2, label='High, 40-Day SMA')
ax.plot(lsma40[-100:], color='black', linewidth=2, label="Low, 40-Day SMA")
ax.plot(ema15[-100:], color='red', linestyle='--', linewidth=2, label='Close, 15-Day EMA')
ax.set_xlabel('Date')
ax.set_ylabel('Price')
ax.set_title('SPDR S&P 500 ETF Bar Chart with Moving Averages')
ax.legend()
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b %d'))
fig.autofmt_xdate()

投资策略

  1. 何时买?

    • 股价最低超过40天最高均线
    • 15天ema超过40天最高均线
    • 股价严重低于15天ema
  2. 何时卖?

    • 股价最高低于40天最低均线
    • 15天ema低于40天最低均线
    • 股价严重高于15天ema
1
2
3
4
5
6
7
8
9
10
11
# 蜡烛图
# 可以通过蜡烛的形态,决定购买和离场的机会
# 蜡烛图比较敏感,可以作为观察信号,买入和卖出还需要配合其他指标
fig, ax = plt.subplots(figsize =(15,6))
mpf.candlestick_ohlc(ax, ohlc[-100:], width=0.4)
ax.set_xlabel('Date')
ax.set_ylabel('Price')
ax.set_title('SPDR S&P 500 ETF Candlestick Chart')
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b %d'))
fig.autofmt_xdate()