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

python编写股票买卖程序

作者:续写丶未来式   发布日期:2025-10-26   浏览:25

# 股票买卖程序示例代码

# 导入必要的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime
import yfinance as yf

# 获取股票数据
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 simple_moving_average_strategy(data, short_window, long_window):
    """
    实现简单的移动平均线交叉策略。

    参数:
    data (DataFrame): 股票历史数据
    short_window (int): 短期移动平均窗口大小
    long_window (int): 长期移动平均窗口大小

    返回:
    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()
    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_signals(signals):
    """
    绘制股票价格和买卖信号图。

    参数:
    signals (DataFrame): 包含买卖信号的DataFrame
    """
    fig = plt.figure(figsize=(12, 6))
    ax1 = fig.add_subplot(111, ylabel='Price in $')

    # 绘制价格和移动平均线
    signals[['price', '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='g', lw=0, label='买入信号')

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

    plt.legend(loc='best')
    plt.show()

# 主函数
if __name__ == "__main__":
    # 设置参数
    ticker = 'AAPL'  # 苹果公司股票代码
    start_date = '2020-01-01'
    end_date = '2023-01-01'
    short_window = 40
    long_window = 100

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

    # 生成买卖信号
    signals = simple_moving_average_strategy(stock_data, short_window, long_window)

    # 可视化结果
    plot_signals(signals)

解释说明:

  1. 导入库:我们使用了pandasnumpymatplotlibyfinance等库来处理数据和绘图。yfinance用于获取股票历史数据。

  2. 获取股票数据get_stock_data函数通过yfinance库下载指定股票在指定时间段内的历史数据。

  3. 简单移动平均线策略simple_moving_average_strategy函数实现了基于短期和长期移动平均线交叉的买卖信号生成逻辑。当短期均线上穿长期均线时发出买入信号,反之则发出卖出信号。

  4. 可视化买卖信号plot_signals函数绘制了股票价格、短期和长期移动平均线以及买卖信号。

  5. 主函数:在主函数中,我们设置了股票代码、时间范围和移动平均窗口大小,然后调用上述函数完成数据获取、信号生成和结果可视化。

希望这段代码能帮助你理解如何编写一个简单的股票买卖程序!

上一篇:python yield from

下一篇:python递归函数怎么写

大家都在看

python时间格式

python读取文件路径

staticmethod在python中有

python开发windows应用程序

python中len是什么意思

python ord和chr

python中的yield

python自定义异常

python判断路径是否存在

python list.pop

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

Laravel 中文站