5日均线与10日均线交叉交易程序
时间: 2023-03-21 18:01:54 浏览: 232
以下是一个基本的5日均线与10日均线交叉的交易策略程序:
```python
import pandas as pd
import yfinance as yf
# 获取股票数据
stock_data = yf.download("AAPL", start="2022-01-01", end="2022-02-28")
# 计算5日均线和10日均线
stock_data['MA5'] = stock_data['Close'].rolling(5).mean()
stock_data['MA10'] = stock_data['Close'].rolling(10).mean()
# 判断交叉信号
stock_data['Signal'] = 0
stock_data['Signal'][5:] = np.where(stock_data['MA5'][5:] > stock_data['MA10'][5:], 1, 0)
stock_data['Position'] = stock_data['Signal'].diff()
# 建立交易策略
initial_capital = float(100000.0)
positions = pd.DataFrame(index=stock_data.index).fillna(0.0)
portfolio = pd.DataFrame(index=stock_data.index).fillna(0.0)
positions['AAPL'] = 100*(portfolio['AAPL']/stock_data['Close'])
# 进行交易
for i, row in enumerate(stock_data.iterrows()):
if row[1]['Position'] == 1:
positions.iloc[i, :] = 100
initial_capital -= 100 * row[1]['Close']
elif row[1]['Position'] == -1:
positions.iloc[i, :] = -100
initial_capital += 100 * row[1]['Close']
else:
positions.iloc[i, :] = positions.iloc[i-1, :]
portfolio.iloc[i,:] = positions.iloc[i,:] * stock_data.iloc[i,:]['Close']
total_positions = positions.sum(axis=1)
total_portfolio = portfolio.sum(axis=1)
total_assets = total_positions + initial_capital
# 输出回测结果
print(f"初始资金: {initial_capital}")
print(f"最终资产: {total_assets[-1]}")
```
这个程序使用了pandas和yfinance库,其中:
- yfinance用于获取AAPL的历史数据
- pandas用于计算5日均线和10日均线,并基于均线交叉计算交易信号和持仓变化
- 交易策略模拟了在信号发生时持有100股AAPL的情况,并计算最终的总资产和回测结果
这个策略的基本思路是,当5日均线向上穿过10日均线时买入,当5日均线向下穿过10日均线时卖出,其它时间不进行交易。需要注意的是,这个策略是一个简单的示例,不代表实际交易时的效果。
阅读全文