程序示例

本示例使用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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录