写一个简单股票量化交易
程序示例
本示例使用Python编写了一个简单的股票量化交易程序,用于决策何时买入和卖出股票。
首先,我们需要导入需要的Python库,如pandas、numpy和matplotlib等:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
然后,我们需要获取股票市场数据。在此示例中,我们将使用Yahoo Finance API来获取数据:
import yfinance as yf
stock = yf.Ticker("AAPL")
df = stock.history(period="max")
接下来,我们将创建一个函数来计算股票的移动平均线。在此示例中,我们将使用20天和50天的移动平均线:
def moving_average(df, n):
MA = pd.Series(df['Close'].rolling(n, min_periods=n).mean())
return MA
然后,我们将计算股票的20天和50天移动平均线,并将它们添加到数据框中:
df['MA20'] = moving_average(df, 20)
df['MA50'] = moving_average(df, 50)
接下来,我们将创建一个函数来决定何时买入和卖出股票。在此示例中,我们将使用以下规则:
- 当20天移动平均线上穿50天移动平均线时,买入股票。
- 当20天移动平均线下穿50天移动平均线时,卖出股票。
def buy_sell(df):
buy = []
sell = []
flag = -1
for i in range(len(df)):
if df['MA20'][i] > df['MA50'][i]:
if flag != 1:
buy.append(df['Close'][i])
sell.append(np.nan)
flag = 1
else:
buy.append(np.nan)
sell.append(np.nan)
elif df['MA20'][i] < df['MA50'][i]:
if flag != 0:
buy.append(np.nan)
sell.append(df['Close'][i])
flag = 0
else:
buy.append(np.nan)
sell.append(np.nan)
else:
buy.append(np.nan)
sell.append(np.nan)
return (buy, sell)
最后,我们将绘制股票价格图和移动平均线,并将买入和卖出的信号添加到图中:
plt.figure(figsize=(12.2, 4.5))
plt.plot(df['Close'], label='Close Price', alpha=0.5)
plt.plot(df['MA20'], label='MA20', alpha=0.5)
plt.plot(df['MA50'], label='MA50', alpha=0.5)
plt.scatter(df.index, results[0], label='Buy', marker='^', color='green')
plt.scatter(df.index, results[1], label='Sell', marker='v', color='red')
plt.title('Buy and Sell Signals')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend(loc='upper left')
plt.show()
完整的程序示例如下所示:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import yfinance as yf
# Get stock market data
stock = yf.Ticker("AAPL")
df = stock.history(period="max")
# Calculate moving averages
def moving_average(df, n):
MA = pd.Series(df['Close'].rolling(n, min_periods=n).mean())
return MA
df['MA20'] = moving_average(df, 20)
df['MA50'] = moving_average(df, 50)
# Define buy and sell signals
def buy_sell(df):
buy = []
sell = []
flag = -1
for i in range(len(df)):
if df['MA20'][i] > df['MA50'][i]:
if flag != 1:
buy.append(df['Close'][i])
sell.append(np.nan)
flag = 1
else:
buy.append(np.nan)
sell.append(np.nan)
elif df['MA20'][i] < df['MA50'][i]:
if flag != 0:
buy.append(np.nan)
sell.append(df['Close'][i])
flag = 0
else:
buy.append(np.nan)
sell.append(np.nan)
else:
buy.append(np.nan)
sell.append(np.nan)
return (buy, sell)
results = buy_sell(df)
# Plot the stock price and signals
plt.figure(figsize=(12.2, 4.5))
plt.plot(df['Close'], label='Close Price', alpha=0.5)
plt.plot(df['MA20'], label='MA20', alpha=0.5)
plt.plot(df['MA50'], label='MA50', alpha=0.5)
plt.scatter(df.index, results[0], label='Buy', marker='^', color='green')
plt.scatter(df.index, results[1], label='Sell', marker='v', color='red')
plt.title('Buy and Sell Signals')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend(loc='upper left')
plt.show()
``
原文地址: https://www.cveoy.top/t/topic/dV8G 著作权归作者所有。请勿转载和采集!