将上面获取数据的CSV文件中的日期设为索引的代码,并用数据画出MA20,MA50,MA200
时间: 2024-02-25 19:57:29 浏览: 15
好的,以下是将日期设为索引的代码,并画出MA20,MA50,MA200的代码:
```python
import pandas as pd
import matplotlib.pyplot as plt
# 读取数据
df = pd.read_csv('data.csv', parse_dates=['date'])
# 将日期设为索引
df.set_index('date', inplace=True)
# 计算MA20,MA50,MA200
df['MA20'] = df['close'].rolling(window=20).mean()
df['MA50'] = df['close'].rolling(window=50).mean()
df['MA200'] = df['close'].rolling(window=200).mean()
# 画图
plt.figure(figsize=(10, 6))
plt.plot(df['close'], label='Close')
plt.plot(df['MA20'], label='MA20')
plt.plot(df['MA50'], label='MA50')
plt.plot(df['MA200'], label='MA200')
plt.legend()
plt.show()
```
注意:需要先安装`pandas`和`matplotlib`库。
相关问题
python中60分钟周期下MA60>MA120>MA250,30分钟周期下MA60>MA120>MA250,15分钟周期下MA60>MA120>MA250 用python怎么写代码
假设你已经导入了pandas和numpy库,可以按照以下步骤实现:
1. 获取60分钟周期的数据,计算MA60、MA120、MA250指标:
```
import pandas as pd
import numpy as np
# 获取60分钟周期的数据
data_60min = pd.read_csv('data_60min.csv')
data_60min['MA60'] = data_60min['Close'].rolling(window=60).mean()
data_60min['MA120'] = data_60min['Close'].rolling(window=120).mean()
data_60min['MA250'] = data_60min['Close'].rolling(window=250).mean()
```
2. 获取30分钟周期的数据,计算MA60、MA120、MA250指标:
```
# 获取30分钟周期的数据
data_30min = pd.read_csv('data_30min.csv')
data_30min['MA60'] = data_30min['Close'].rolling(window=60).mean()
data_30min['MA120'] = data_30min['Close'].rolling(window=120).mean()
data_30min['MA250'] = data_30min['Close'].rolling(window=250).mean()
```
3. 获取15分钟周期的数据,计算MA60、MA120、MA250指标:
```
# 获取15分钟周期的数据
data_15min = pd.read_csv('data_15min.csv')
data_15min['MA60'] = data_15min['Close'].rolling(window=60).mean()
data_15min['MA120'] = data_15min['Close'].rolling(window=120).mean()
data_15min['MA250'] = data_15min['Close'].rolling(window=250).mean()
```
4. 判断MA指标是否符合条件:
```
if data_60min['MA60'].iloc[-1] > data_60min['MA120'].iloc[-1] > data_60min['MA250'].iloc[-1] and \
data_30min['MA60'].iloc[-1] > data_30min['MA120'].iloc[-1] > data_30min['MA250'].iloc[-1] and \
data_15min['MA60'].iloc[-1] > data_15min['MA120'].iloc[-1] > data_15min['MA250'].iloc[-1]:
print('符合条件')
else:
print('不符合条件')
```
需要注意的是,这里假设数据已经按照时间顺序排序,且最近一条数据在DataFrame中的索引为-1。如果需要判断多个股票是否符合条件,可以将上述代码写入一个循环中,依次对每个股票进行判断。
使用python根据已读取的十只股票的数据,算出当日个股收盘价的 5 日均值:MA5 算出当日个股收盘价到 5 日均值的偏离程度 ratio:(closePrice-MA5)/MA5 根据给出的十只股票当日的 ratio,挑出 ratio 为负的个股,第二天等权持仓根据每日的持仓个股和个股的收益率,计算每日的策略收益率.
好的,这个问题可以分为以下几个步骤来解决:
1. 读取十只股票的数据并计算出当日个股收盘价的 5 日均值 MA5,以及当日个股收盘价到 5 日均值的偏离程度 ratio。
2. 挑出 ratio 为负的个股。
3. 计算每日的策略收益率。
下面我会依次介绍每个步骤的具体实现方法。
第一步:计算 MA5 和 ratio
首先,我们需要读取十只股票的数据。假设我们已经将这些数据存储在了一个名为 `stocks` 的 DataFrame 中,其中每行表示某只股票的某一天的数据,包含以下列:
- `date`:日期
- `code`:股票代码
- `close`:收盘价
那么,我们可以按照如下代码计算 MA5 和 ratio:
```python
import pandas as pd
# 读取数据
stocks = pd.read_csv('stocks.csv')
# 对每只股票分组,计算 MA5 和 ratio
groups = stocks.groupby('code')
for name, group in groups:
ma5 = group['close'].rolling(window=5).mean()
ratio = (group['close'] - ma5) / ma5
group['ma5'] = ma5
group['ratio'] = ratio
```
这里,我们使用了 Pandas 中的 `rolling()` 方法计算 MA5,使用了 DataFrame 的 `groupby()` 方法对每只股票进行分组计算 ratio。计算结果存储在了原 DataFrame 中的 `ma5` 和 `ratio` 列中。
第二步:挑出 ratio 为负的个股
接下来,我们需要挑出 ratio 为负的个股。可以按照如下代码实现:
```python
# 挑出 ratio 为负的个股
neg_ratio_stocks = stocks[stocks['ratio'] < 0]['code'].unique()
```
这里,我们使用了 DataFrame 的布尔索引来挑选出 ratio 小于 0 的行,然后使用 `unique()` 方法去重得到了 ratio 为负的个股代码。
第三步:计算每日的策略收益率
最后,我们需要根据每日的持仓个股和个股的收益率,计算每日的策略收益率。假设我们已经将每日的持仓个股存储在了一个名为 `portfolio` 的列表中,其中每个元素表示某一天的持仓个股代码。
另外,假设我们已经将每只股票的收益率存储在了一个名为 `returns` 的 DataFrame 中,其中每行表示某只股票的某一天的收益率,包含以下列:
- `date`:日期
- `code`:股票代码
- `return`:收益率
那么,我们可以按照如下代码计算每日的策略收益率:
```python
# 读取收益率数据
returns = pd.read_csv('returns.csv')
# 计算每日的策略收益率
portfolio_returns = []
for i in range(1, len(stocks['date'].unique())):
# 获取当前持仓和前一天持仓的交集
curr_portfolio = set(portfolio[i])
prev_portfolio = set(portfolio[i - 1])
intersection = curr_portfolio & prev_portfolio
# 计算交集股票的收益率之和
daily_return = returns[returns['code'].isin(intersection)]['return'].sum()
# 将策略收益率加入列表中
portfolio_returns.append(daily_return / len(intersection))
```
这里,我们首先读取了收益率数据,并使用了 Python 的 `set` 类型来计算当前持仓和前一天持仓的交集。接着,我们对交集内的股票计算收益率之和,再除以持仓股票数量得到每日的策略收益率。最后,将每日的策略收益率存储在了列表 `portfolio_returns` 中。
至此,我们就完成了这个问题的解决。完整代码如下: