Python 中的自动化交易2025年3月17日 | 阅读 10 分钟 由于 Python 加速了交易过程,因此这种方法被称为自动化交易或量化交易。Python 的流行归功于其强大的库,如 Pyplot、TA-Lib、Scipy、NumPy、Zipline、Matplotlib、Pandas 等。 什么是自动化交易?自动化交易通过计算机程序执行预设程序来接受和退出交易,从而参与资本市场。作为交易员,您将深入的统计分析与头寸特征(如开仓、止损和追踪止损)的创建相结合。 自动交易使我们能够在短时间内进行大量交易,同时还能消除投资决策中的情绪因素。这是因为我们的约束条件已经包含了所有交易规则。我们甚至可以使用预先确定的技术来监控趋势并根据某些算法进行交易。 自动化交易如何运作?我们将首先选择一个平台并定义交易计划的特征。我们将根据我们的交易经验构建一组条款和规则,我们的定制算法将使用这些信息来执行我们账户上的交易。交易的安排、必须开仓或平仓的价格以及数量通常是决定性因素。例如,“当 100 天移动平均线穿过 250 天移动平均线时,买入 100 股谷歌股票。” 建立的自动化交易系统将持续监控金融市场汇率,并在达到预定义条件时自动完成交易。目标是以更快、更有效的方式进行交易,并从技术性市场波动中获利。 自动化系统的优势让计算机监控市场交易活动并执行交易有很多好处,包括: 情绪控制 在买卖过程中,自动化交易系统可以减少情绪的影响。通过控制情绪,交易员通常能更好地遵守交易计划。当交易规则满足时,交易指令会自动执行,因此交易员无法暂停或质疑交易。 回测 回测通过将交易规则应用于之前的市场数据来确定概念的可行性。在构建自动化交易框架时,所有规则都必须精确,不留任何歧义。机器无法进行有根据的猜测,必须给出明确的指示。交易员可以在冒着资本风险进行交易之前,利用历史数据来评估这些特定规则。 保持纪律 即使在波动时期,纪律也能得到维持,因为市场规则已经形成,并且交易操作会自动执行。诸如害怕亏损或想从交易中榨取更多利润之类的情绪考虑会导致注意力丢失。由于计算机将完全按照设定的方式执行交易策略,因此自动化交易有助于保持纪律。 提高订单输入速度 由于计算机系统对波动的市场情况做出快速响应,因此自动化系统可以在交易条件满足时尽快生成订单。 交易多元化 自动化交易系统可以同时交易多个投资组合或策略。这可以在多个工具之间分散风险,同时为亏损交易提供缓冲。 自动化交易的必要要素
Python 中用于自动化交易的有用软件包/库Python 拥有大量的库,我们可以将其用于编码、机器学习、可视化等各种目的。我们将需要导入金融信息、进行数值分析、创建交易策略、绘制图表以及回测数据。以下是必需的库:
设置工作环境安装 Anaconda 是开始自动化交易最快的方法。Python 包 Anaconda 包含各种 IDE,包括 Spyder、Jupyter、__、___、分析库等。 安装 Yahoo-Finance 模块我们可以借助 Yahoo Finance 模块检索股票的历史数据。在终端中键入以下命令行并按 Enter 键来安装 Yahoo Finance: 代码 导入所需包安装 yfinance 后的下一步是在我们的程序中导入包以运行交易算法。由于回测需要大量数据修改,在本课程中我们将严格使用 Pandas。 代码 获取股票财务信息yfinance 中的财务数据检索也非常简单。只需将公司的股票代码作为 ticker 函数的参数。下面的代码以特斯拉股票为例: 代码 输出 {'zip': '78725', 'sector': 'Consumer Cyclical', 'fullTimeEmployees': 99290, 'longBusinessSummary': 'Tesla, Inc. designs, develops, manufactures, leases, and sells electric vehicles, and energy generation and storage systems in the United States, China, and internationally? The company was formerly known as Tesla Motors, Inc. and changed its name to Tesla, Inc. in February 2017. Tesla, Inc. was incorporated in 2003 and is headquartered in Austin, Texas.', 'city': 'Austin', 'phone': '(512) 516-8177', 'state': 'TX', 'country': 'United States', 'companyOfficers': [], 'website': 'https://www.tesla.com', 'maxAge': 1, 'address1': '13101 Tesla Road', 'industry': 'Auto Manufacturers', 'ebitdaMargins': 0.20424, 'profitMargins': 0.13505, 'grossMargins': 0.27096, 'operatingCashflow': 13850999808, 'revenueGrowth': 0.805, 'operatingMargins': 0.1549, 'ebitda': 12702000128, 'targetLowPrice': 67, 'recommendationKey': 'buy', 'grossProfits': 13606000000, 'freeCashflow': 7054624768,...} print 语句会生成一个 Python 字典,我们可以从中获取所需的特定财务数据,然后在分析中使用它。让我们以几个关键的财务指标为例。 info 字典包含所有公司信息。因此,我们可以通过解析字典来提取所需的元素。 代码 输出 0.85 759.19 728613322752 info 字典中还有大量其他内容。通过打印 info 的键,我们可以查看所有内容: 代码 输出 dict_keys(['zip', 'sector', 'fullTimeEmployees', 'longBusinessSummary', 'city', 'phone', 'state', 'country', 'companyOfficers', 'website', 'maxAge', 'address1', 'industry', 'ebitdaMargins', 'profitMargins', 'grossMargins', 'operatingCashflow', 'revenueGrowth', 'operatingMargins', 'ebitda', 'targetLowPrice', 'recommendationKey', 'grossProfits', 'freeCashflow', 'targetMedianPrice', 'currentPrice', 'earningsGrowth', 'currentRatio', 'returnOnAssets',?) 检索历史市场价格继续介绍 yf 库提供的其他资源。此外,我们还可以利用它来获取历年的市场数据。 我们将在下面的示例中使用特斯拉过去几年的历史股票价格。完成这项任务相对容易,如下所示: 代码 输出 Open High Low Close Volume Dividends Stock Splits Date 2010-06-29 3.800 5.000 3.508 4.778 93831500 0 0.0 2010-06-30 5.158 6.084 4.660 4.766 85935500 0 0.0 2010-07-01 5.000 5.184 4.054 4.392 41094000 0 0.0 2010-07-02 4.600 4.620 3.742 3.840 25699000 0 0.0 2010-07-06 4.000 4.000 3.166 3.222 34334500 0 0.0 由于我们将 period 设置为 max,因此我们获得了特斯拉目前可用的最大数量的日价格。较短的范围也是可以接受的,例如 1d = 1 天,5d = 5 天,1mo = 1 个月,2y = 2 年都是可接受的选项。 或者,我们可以指定开始和结束日期: 代码 输出 Open High Low Close Volume \ Date 2010-06-29 3.800000 5.000000 3.508000 4.778000 93831500 2010-06-30 5.158000 6.084000 4.660000 4.766000 85935500 2010-07-01 5.000000 5.184000 4.054000 4.392000 41094000 2010-07-02 4.600000 4.620000 3.742000 3.840000 25699000 2010-07-06 4.000000 4.000000 3.166000 3.222000 34334500 ... ... ... ... ... ... 2020-12-23 632.200012 651.500000 622.570007 645.979980 33173000 2020-12-24 642.989990 666.090027 641.000000 661.770020 22865600 2020-12-28 674.510010 681.400024 660.799988 663.690002 32278600 2020-12-29 661.000000 669.900024 655.000000 665.989990 22910800 2020-12-30 672.000000 696.599976 668.359985 694.780029 42846000 此外,我们还可以同时下载多只股票的历史价格: 代码 输出 Date 2010-02-01 6.159000 6.243000 5.691000 5.943500 5.943500 2010-02-02 5.939500 5.949000 5.720000 5.906000 5.906000 2010-02-03 5.856000 5.980500 5.828000 5.955000 5.955000 2010-02-04 5.932000 6.016500 5.787000 5.797000 5.797000 2010-02-05 5.794000 5.882500 5.705000 5.869500 5.869500 ... ... ... ... ... ... 2020-12-23 160.250000 160.506500 159.208496 159.263504 159.263504 2020-12-24 159.695007 160.100006 158.449997 158.634506 158.634506 2020-12-28 159.699997 165.199997 158.634506 164.197998 164.197998 2020-12-29 165.496994 167.532501 164.061005 166.100006 166.100006 2020-12-30 167.050003 167.104996 164.123505 164.292496 164.292496 上面的程序会生成一个 Pandas DataFrame,其中包含指定股票的各种价格信息。 然后,我们可以通过打印 DataFrame 的间隔价格来选择一只特定的股票。 亚马逊的 AMZN 股票的历史市场数据将可用。 重要词汇和短语理解数据意味着什么以及它显示了什么非常重要。
计算每日回报率回报率是指交易员或投资者在建立多头或空头头寸后股票产生的收益或损失。我们只需使用 pct_change() 函数。 代码 输出 [*********************100%***********************] 1 of 1 completed Open High Low Close Adj Close \ Date 2010-06-29 3.800000 5.000000 3.508000 4.778000 4.778000 2010-06-30 5.158000 6.084000 4.660000 4.766000 4.766000 2010-07-01 5.000000 5.184000 4.054000 4.392000 4.392000 2010-07-02 4.600000 4.620000 3.742000 3.840000 3.840000 2010-07-06 4.000000 4.000000 3.166000 3.222000 3.222000 ... ... ... ... ... ... 2020-12-23 632.200012 651.500000 622.570007 645.979980 645.979980 2020-12-24 642.989990 666.090027 641.000000 661.770020 661.770020 2020-12-28 674.510010 681.400024 660.799988 663.690002 663.690002 2020-12-29 661.000000 669.900024 655.000000 665.989990 665.989990 2020-12-30 672.000000 696.599976 668.359985 694.780029 694.780029 Date 2010-06-29 0.000000 2010-06-30 -0.002512 2010-07-01 -0.078472 2010-07-02 -0.125683 2010-07-06 -0.160938 ... 2020-12-23 0.008808 2020-12-24 0.024444 2020-12-28 0.002901 2020-12-29 0.003465 2020-12-30 0.043229 Name: Adj Close, Length: 2646, dtype: float64 移动平均线基于动量的交易策略建立在移动平均线的概念之上。金融领域的分析师使用移动周期估计值在可滑动的周期内持续评估统计量。让我们将窗口移动 1 天,以说明我们如何计算 55 天周期的滚动平均值。 代码 输出 Date 2020-12-16 482.089091 2020-12-17 486.214364 2020-12-18 490.702364 2020-12-21 494.970909 2020-12-22 498.873819 2020-12-23 503.092000 2020-12-24 507.391455 2020-12-28 511.714546 2020-12-29 515.932546 2020-12-30 520.523092 Name: Adj Close, dtype: float64 移动平均线通过消除任何数据异常值或不一致之处,为我们提供了更平滑的公司业绩概况。 绘图以查看差异为了更清晰地显示,我们将绘制移动平均线和经调整的收盘价。 代码 输出 ![]() 将它们一起绘制代码 输出 ![]() 下一主题Python 自动化项目创意 |
我们请求您订阅我们的新闻通讯以获取最新更新。