Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

python 量化交易

作者:▄对对碰   发布日期:2025-05-08   浏览:103

# Python 量化交易示例代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import yfinance as yf
from datetime import datetime

# 获取股票数据
def get_stock_data(ticker, start_date, end_date):
    """
    使用 yfinance 库获取指定股票在指定时间段内的历史数据。

    参数:
    ticker (str): 股票代码
    start_date (str): 开始日期,格式为 'YYYY-MM-DD'
    end_date (str): 结束日期,格式为 'YYYY-MM-DD'

    返回:
    DataFrame: 包含股票历史数据的 DataFrame
    """
    stock_data = yf.download(ticker, start=start_date, end=end_date)
    return stock_data

# 计算移动平均线
def calculate_moving_averages(data, short_window=40, long_window=100):
    """
    计算短期和长期移动平均线。

    参数:
    data (DataFrame): 包含股票历史数据的 DataFrame
    short_window (int): 短期移动平均线窗口大小,默认为 40 天
    long_window (int): 长期移动平均线窗口大小,默认为 100 天

    返回:
    DataFrame: 包含短期和长期移动平均线的 DataFrame
    """
    signals = pd.DataFrame(index=data.index)
    signals['price'] = data['Adj Close']
    signals['short_mavg'] = data['Adj Close'].rolling(window=short_window, min_periods=1, center=False).mean()
    signals['long_mavg'] = data['Adj Close'].rolling(window=long_window, min_periods=1, center=False).mean()
    return signals

# 生成交易信号
def generate_trading_signals(signals):
    """
    根据短期和长期移动平均线生成买卖信号。

    参数:
    signals (DataFrame): 包含短期和长期移动平均线的 DataFrame

    返回:
    DataFrame: 包含买卖信号的 DataFrame
    """
    signals['signal'] = 0.0
    signals['signal'][short_window:] = np.where(signals['short_mavg'][short_window:] > signals['long_mavg'][short_window:], 1.0, 0.0)
    signals['positions'] = signals['signal'].diff()
    return signals

# 绘制结果
def plot_results(signals, ticker):
    """
    绘制股票价格、短期和长期移动平均线以及买卖信号。

    参数:
    signals (DataFrame): 包含买卖信号的 DataFrame
    ticker (str): 股票代码
    """
    fig = plt.figure(figsize=(12, 8))
    ax1 = fig.add_subplot(111, ylabel='Price in $')

    # 绘制股票价格
    signals['price'].plot(ax=ax1, color='r', lw=2.)

    # 绘制短期和长期移动平均线
    signals[['short_mavg', 'long_mavg']].plot(ax=ax1, lw=2.)

    # 绘制买入信号
    ax1.plot(signals.loc[signals.positions == 1.0].index,
             signals.short_mavg[signals.positions == 1.0],
             '^', markersize=10, color='m')

    # 绘制卖出信号
    ax1.plot(signals.loc[signals.positions == -1.0].index,
             signals.short_mavg[signals.positions == -1.0],
             'v', markersize=10, color='k')

    plt.title(f'{ticker} Moving Average Crossover')
    plt.show()

if __name__ == "__main__":
    ticker = 'AAPL'  # 苹果公司股票代码
    start_date = '2020-01-01'
    end_date = datetime.now().strftime('%Y-%m-%d')

    # 获取股票数据
    stock_data = get_stock_data(ticker, start_date, end_date)

    # 计算移动平均线
    signals = calculate_moving_averages(stock_data)

    # 生成交易信号
    signals = generate_trading_signals(signals)

    # 绘制结果
    plot_results(signals, ticker)

这段代码展示了如何使用Python进行简单的量化交易策略。具体步骤包括:

  1. 获取指定股票的历史数据。
  2. 计算短期和长期移动平均线。
  3. 根据移动平均线生成买卖信号。
  4. 绘制股票价格、移动平均线以及买卖信号。

你可以根据需要调整参数(如股票代码、时间范围、移动平均线窗口大小等)来适应不同的交易策略。

上一篇:python rsa加密

下一篇:python中判断字符串包含其他字符串

大家都在看

python时间格式

python ord和chr

python list.pop

python的for i in range

npm config set python

python代码简单

python读取文件夹

python中turtle

python 输出时间

python中list代表什么

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站