Python 算法交易秘籍(五)(4)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Python 算法交易秘籍(五)

Python 算法交易秘籍(五)(3)https://developer.aliyun.com/article/1523027

我们得到以下输出:

{'data': 'STARTING'}
  1. 再过一段时间后再次检查提交的任务的状态:
>>> algobulls_connection.get_papertrading_job_status(
                                                strategy_code1)

我们得到以下输出:

{'data': 'STARTED'}

工作原理…

步骤 1中,从datetime模块中导入time类以及从pyalgotrading.constants模块中导入所有常量。在步骤 2中,使用algobulls_connection对象的search_instrument()方法获取您想要纸上交易策略的工具,EMA-Regular-Order strategysearch_instrument()方法接受一个搜索字符串作为参数,该参数应该是您感兴趣的工具的交易符号的一部分或全部。这里你传递了'SBIN'。该函数返回一个包含与搜索字符串匹配的工具详细信息的列表。可能有多个工具的交易符号中可能有搜索字符串。在步骤 3中,您获取第一个匹配工具的值并将其分配给一个新变量instrument

步骤 4中,使用algobulls_connection()对象的papertrade()方法提交一个纸上交易任务。它接受以下参数:

  • strategy_code: 要执行纸上交易的策略的策略代码。这应该是一个字符串。你在这里传递了strategy_code1
  • start_time: 今天开始纸上交易的时间。应该是一个datetime.time对象。在这里,你传递了一个包含值为 9 小时 15 分钟的对象 – time(hour=9, minute=15)。请参阅本书第一个配方以了解如何创建time对象的详细信息。
  • end_time: 今天的时间,纸上交易应该执行到什么时候。此对象应该包含一个比start_time所持有的值提前的时间值。应该是一个datetime.time实例。在这里,你传递一个包含值为 15 小时 30 分钟的对象 – time(hour=15, minute=30)
  • instrument: 应该运行纸上交易的金融工具。将为该工具获取历史数据。应该是一个字符串。你在这里传递了instrument
  • lots: 纸上交易应该执行的手数。这应该是一个整数。数量由策略计算为手数×金融工具的手数。你在这里传递了1
  • strategy_parameters: 策略期望的参数名称和值。这应该是一个字典,其中parameter-nameparameter-value作为键值对。你在这里传递以下参数:
  • timeperiod1: 5
  • timeperiod2: 12

(回想一下,EMA-Regular-Order 策略的参数已经在其__init__()方法中定义,就像第八章的第一个示例中展示的那样,按步骤编写算法交易策略。)

  • candle_interval: 获取用于模拟交易的历史数据的蜡烛图间隔。这应该是一个CandleInterval类型的枚举。你在这里传递CandleInterval.MINUTES_15。(CandleInterval枚举提供各种蜡烛图间隔的枚举,其中一些是MINUTE_1MINUTES_3MINUTES_5MINUTES_10MINUTES_15MINUTES_30HOURDAY。)

如果任务提交成功,你将会看到papertrade()函数打印的Success消息。

一旦提交了任务,它就需要一段时间才能启动。启动后,根据使用start_timeend_time参数指定的模拟交易持续时间,可能需要一些时间才能完成。通常,模拟交易在整个交易日运行,这意味着任务将运行 6-8 小时。

步骤 5 中,你使用algobulls_connection对象的get_papertrading_job_status()方法获取任务状态。你在这里传递strategy_code1作为参数。该方法返回一个带有单个键值对的字典,即datajob状态。如果在放置任务后立即查询状态,你会得到'STARTING'作为状态。在步骤 6 中,你再次查询状态,如果任务已经启动,你会得到状态为'STARTED'

成功的提交意味着已经以所需格式传递了模拟交易策略的最小输入。然而,这并不保证策略会在模拟交易过程中无错误地运行。策略执行仍可能在模拟交易期间遇到错误。要调试执行问题,你需要获取输出日志,这将在下一个示例中解释。导致错误的可能原因可能是策略类 Python 代码中的错误或者传递给papertrade()函数的strategy_parameters字典不完整。

还有更多…

如果一个任务运行时间很长,而你希望在其完成之前停止它,你可以使用algobulls_connection对象的stop_papertrading_job()方法。此方法接受策略代码作为参数。你在这里传递strategy_code1。该方法向 AlgoBulls 模拟交易引擎提交停止请求。如果请求被接受,你会看到一个Success消息:

>>> algobulls_connection.stop_papertrading_job(strategy_code1)
 Stopping PAPERTRADING job... Success.

如果在提交停止请求后再次查询状态,你会得到状态为'STOPPING'

>>> algobulls_connection.get_papertrading_job_status(strategy_code1)
{'data': 'STOPPING'}

如果一段时间后再次查询状态,如果任务已经停止,你会得到状态为'STOPPED'

>>> algobulls_connection.get_papertrading_job_status(strategy_code1)
{'data': 'STOPPED'} 

EMA-Regular-Order 策略 - 实时获取模拟交易日志

在 AlgoBulls 平台上提交模拟交易作业后,AlgoBulls 模拟交易引擎开始执行策略。在执行过程中,AlgoBulls 模拟交易引擎记录发生的每一个事件和所采取的决策,并以文本日志的形式记录具有精确时间戳。一些记录的活动示例包括给定策略配置、定期间隔生成的每个新蜡烛、您的策略打出的交易、这些交易创建的持仓的进入和退出、等待新蜡烛等。这些日志在验证策略行为和调试在开发策略时经常遇到的行为或性能问题方面至关重要。

在这个配方中,你将获取你的策略的模拟交易日志。这些日志会在你提交的模拟交易作业达到'STARTED'状态时立即出现(有关模拟交易作业状态的更多信息,请参阅前面的配方)。AlgoBulls 平台允许你实时获取日志,即使模拟交易作业仍在进行中。你可以在无需等待模拟交易作业完成的情况下了解策略执行情况。这对于模拟交易作业通常是长时间运行的情况非常有帮助。pyalgotrading包提供了一个简单的方法来获取给定策略的执行日志。

确保你已经阅读了第八章的前六个配方,算法交易策略 - 逐步编码,以获取使用的完整策略类StrategyEMARegularOrder的完整图片。

准备就绪

确保algobulls_connectionstrategy_code1对象在你的 Python 命名空间中可用。请参阅本章的第一个配方,设置algobulls_connectionstrategy_code1对象。

如何实现…

执行以下步骤以完成此配方:

  1. 获取strategy_code1的模拟交易执行日志:
>>> logs = algobulls_connection.get_papertrading_logs(
                                              strategy_code1)
>>> print(logs)

我们获得以下输出(您的输出可能不同):

[2020-07-09 09:12:18] Logs not available yet. Please retry in sometime.
  1. 过一段时间后,再次获取strategy_code1的模拟交易执行日志:
>>> logs = algobulls_connection.get_papertrading_logs(
                                               strategy_code1)
>>> print(logs)

我们获得以下输出(您的输出可能不同):

...
########################################
 INITIALIZING ALGOBULLS CORE (v3.2.0 SECURE MODE)... 
########################################
[2020-07-09 09:12:31] Welcome ALGOBULLS VIRTUAL USER!
[2020-07-09 09:12:31] Reading strategy…
[PT] [2020-07-09 09:15:00] [INFO] [tls] STARTING ALGOBULLS CORE…
...
[PT] [2020-07-09 10:30:00] [CRITICAL] [order] [PLACING NEW ORDER] [2020-07-09 10:30:00] [96c24ca4b3e448f381fc5c2bc52f7a29] [BUY] [NSE:SBIN] [QTY:1] [QTY PENDING: 1] [ENTRY PRICE: 194.7] [PRICE:None] [TRIGGER PRICE:None] [ORDER_TYPE_REGULAR] [ORDER_CODE_INTRADAY] [ORDER_VARIETY_MARKET] [ORDER_POSITION_ENTER]
[PT] [2020-07-09 15:30:00] [INFO] [clock] Candle generation has been stopped...
[PT] [2020-07-09 15:30:00] [INFO] [tls] Received event END OF MARKET. Stopping Trading Core Engine...
[PT] [2020-07-09 15:30:00] [INFO] [tls] Exiting all open positions with order code: ORDER_CODE_INTRADAY (if any)...
[PT] [2020-07-09 15:30:00] [CRITICAL] [tls] [User: ALGOBULLS VIRTUAL USER] Trading session completed
...

这里没有显示完整的输出。请访问以下链接阅读完整的输出:github.com/algobulls/pyalgostrategypool/blob/master/pyalgostrategypool/sample/papertrading/strategy_ema_regular_order/logs.txt

工作原理…

第 1 步,你使用 algobulls_connection 对象的 get_papertrading_logs() 方法实时获取策略 paper trading 日志。此方法接受策略代码作为参数。你在这里传递了 strategy_code1。返回的数据是一个字符串。如果在提交作业后立即尝试此步骤,你会得到一个字符串,表示日志尚未准备好([2020-07-09 09:14:18] Logs not available yet. Please retry in sometime.)。如果 paper trading 作业处于 'STARTING' 状态,则会发生这种情况。

第 2 步,你会在一段时间后再次获取日志。如果作业不再处于 'STARTING' 状态,你就开始获取策略执行日志。每次调用 get_papertrading_logs() 函数时,你都会获取整个 paper trading 日志。

还有更多…

一旦 paper trading 作业转移到 'STOPPED' 状态,就不会生成新的日志。你可以在提交下一个相同策略的 paper trading 作业之前的任何时候获取完整的日志。如果提交了新的 paper trading 作业(针对相同的策略),则无法再通过 get_papertrading_logs() 方法访问这些日志。如果你想在以后参考它,可以将获取的日志保存到文件中。

EMA-Regular-Order 策略 – 获取 paper trading 报告 – 盈亏表

在 AlgoBulls 平台提交 paper trading 作业后,AlgoBulls paper trading 引擎开始执行策略。在执行过程中,除了日志之外,AlgoBulls paper trading 引擎还实时生成 P&L 表。这张表记录了策略打出的每一笔交易信息。它还有关于入场和出场订单以及交易 P&L 和累计 P&L 之间的映射的详细信息,按时间顺序排序,最新的订单排在最前面。这张表通过个别和累计 P&L 数字提供了对整体策略表现的洞察。入场-出场订单映射也有助于验证策略行为。

在这个示例中,你将获取你的策略的 P&L 表报告。只要提交 paper trading 作业后,你的策略打出第一笔交易,这份报告就会可用。AlgoBulls 平台允许你实时获取 P&L 表,即使 paper trading 作业仍在进行中。这样可以让你在 paper trading 作业完成之前就了解策略的表现。这对于 paper trading 作业通常需要很长时间的情况很有帮助。pyalgotrading 包提供了一种简单的方法来获取给定策略的 P&L 表。

确保你已经通过了 第八章 的前六个示例,算法交易策略 – 逐步编码,以完全了解所使用的策略类 StrategyEMARegularOrder

准备工作

确保 algobulls_connectionstrategy_code1 对象在你的 Python 命名空间中可用。参考本章的第一个示例设置 algobulls_connectionstrategy_code1 对象。

如何实现…

获取strategy_code1的模拟交易 P&L 报告:

>>> algobulls_connection.get_papertrading_report_pnl_table(strategy_code1)

我们获得以下输出。你的输出可能会有所不同(请注意以下输出已分成多个表格以表示,你在 Jupyter 笔记本中将看到单个宽表):


工作原理…

在本示例中,你使用 algobulls_connection 对象的 get_papertrading_report_pnl_table() 方法实时获取模拟交易 P&L 表。此方法接受策略代码作为参数。你在这里传递了 strategy_code1。返回数据是一个 pandas.DataFrame 对象,具有多列,描述如下:

  • instrument: 进行交易的金融工具。
  • entry_timestamp: 下达进入订单的时间戳。(注意它可能在进入 'COMPLETE' 状态之前保持 'OPEN' 状态一段时间。可以使用订单历史表(本章第六个示例中解释)找到此状态转换的时间。)
  • entry_transaction_type: 进入订单的交易类型(可以是 BUYSELL)。
  • entry_quantity: 进入订单数量。
  • entry_price: 进入订单执行并进入 'COMPLETE' 状态的价格。
  • exit_timestamp: 下达退出订单的时间戳。(注意它可能在进入 'COMPLETE' 状态之前保持 'OPEN' 状态一段时间。)
  • exit_transaction_type: 退出订单的交易类型(可以是 BUYSELL)。
  • exit_quantity: 退出订单数量。
  • exit_price: 退出订单执行并进入 'COMPLETE' 状态的价格。
  • pnl_absolute: 退出订单执行价格与进入订单执行价格之间的差异。数学上,这是(exit_price - entry_price)*exit_quantity (长买)或(entry_price - exit_price)*exit_quantity(短卖)。正值意味着交易盈利,负值意味着交易亏损。
  • pnl_percentage: 相对于进入价格的利润或损失的百分比。数学上,这是 pnl_absolute / entry_price / exit_quantity x 100
  • pnl_cumulative_absolute: 累计利润或损失。数学上,这是前期交易的所有 pnl_absolute 值的总和。此数字直接反映了策略相对于模拟时间的表现。
  • pnl_cumulative_percentage: 相对于进入价格的累计利润或损失的百分比。数学上,这是 pnl_cumulative / entry_price / exit_quantity x 100

还有更多…

一旦模拟交易任务转移到“停止”状态,P&L 表报告将不再更新。您可以在提交下一个相同策略的模拟交易任务之前随时获取完整的 P&L 报告。如果提交了新的模拟交易任务(针对相同策略),则将无法通过get_papertrading_report_pnl_table()方法访问此报告。如果您想以后参考它,可以将获取的报告保存为.csv文件。

EMA-Regular-Order 策略 – 获取模拟交易报告 – 统计表

在 AlgoBulls 平台提交模拟交易任务后,AlgoBulls 模拟交易引擎开始执行策略。在执行过程中,除了日志和 P&L 表外,AlgoBulls 模拟交易引擎还实时从 P&L 表生成摘要。此摘要是包含各种统计数字的统计表,例如净 P&L(绝对值和百分比)、最大回撤(绝对值和百分比)、总交易次数、盈利交易次数、亏损交易次数、多头交易次数和空头交易次数、最大盈利和最小盈利(或最大亏损),以及每次盈利和亏损交易的平均利润。此表提供了对整体策略绩效的即时概览。

在本示例中,您将获取策略的统计表报告。在提交模拟交易任务后,您的策略打出第一笔交易后,此报告即可获得。AlgoBulls 平台允许您实时获取统计表,即使模拟交易任务仍在进行中。您可以在等待模拟交易任务完成之前了解策略绩效。这对于长时间运行的模拟交易任务非常有帮助。pyalgotrading包提供了一种简单的方法来获取给定策略的统计表。

确保您已经阅读了第八章中的前六个示例,算法交易策略 – 逐步编码,以完整了解使用的策略类StrategyEMARegularOrder

准备工作

确保algobulls_connectionstrategy_code1对象在您的 Python 命名空间中可用。请参考本章的第一个示例设置algobulls_connectionstrategy_code1对象。

如何做…

获取strategy_code1的模拟交易统计报告:

>>> algobulls_connection.get_papertrading_report_statistics(strategy_code1)

我们得到以下输出(您的输出可能不同):


工作原理…

在本示例中,您将使用algobulls_connection对象的get_papertrading_report_statistics()方法实时获取模拟交易统计表。此方法接受策略代码作为参数。在这里,您传递strategy_code1。返回数据是一个pandas.DataFrame对象,具有两列—highlight_typehighlight_value—以及多行。行描述如下:

  • 净盈亏:累积纸交易盈亏。这也是 P&L 表中第一个条目的pnl_cumulative_absolute值。
  • 净盈亏百分比:累积纸交易盈亏百分比。这也是 P&L 表中第一个条目的pnl_cumulative_percentage值。
  • 最大回撤:P&L 表中pnl_cumulative列中的最低值。这表示您的策略在执行过程中遇到的最大损失。
  • 最大回撤百分比:在数学上,这是*(最大回撤)* / (相应的入场价格/退出数量 x 100)
  • 交易次数:会话期间的总交易数(入场和退出计为一次)。
  • 盈利次数:交易盈亏为非负数的次数。
  • 亏损次数:交易中交易盈亏为负的次数。
  • 多头交易次数:入场交易类型为'BUY'的交易次数。
  • 空头交易次数:入场交易类型为'SELL'的交易次数。
  • 最大获利:所有交易中 P&L 值最大的交易的 P&L。
  • 最小获利:所有交易中 P&L 值最小的交易的 P&L。
  • 每笔盈利交易的平均利润:在数学上,这是*(盈利交易的总 P&L)* / (盈利交易的数量)
  • 每笔亏损交易的平均利润:在数学上,这是*(亏损交易的总 P&L)* / (亏损交易的数量)

还有更多…

如果在纸交易工作仍在运行时获取统计表,则上述数字将是中间数字,基于到达该时间的交易完成情况。随着更多交易被打入,这些数字可能会发生变化,直到纸交易工作完成。

一旦纸张交易工作进入'STOPPED'状态,统计表将不再更改。您可以在提交下一个相同策略的纸交易工作之前的任何时间获取完整的统计表。如果提交了新的纸交易工作(用于相同策略),则将无法通过get_papertrading_report_statistics()方法访问此表。如果您希望稍后参考它,可以将获取的报告表保存到.csv文件中。

EMA-Regular-Order 策略 – 获取纸交易报告 – 订单历史

在 AlgoBulls 平台上提交了一个模拟交易任务后,AlgoBulls 模拟交易引擎开始执行该策略。在执行过程中,除了日志、损益表和统计表之外,AlgoBulls 模拟交易引擎还会实时生成一个订单历史记录。该记录包含每个订单的状态转换,以及每个订单状态的时间戳和附加信息(如果有)。订单历史记录对于理解一个交易从'OPEN''COMPLETE''CANCELLED'状态所需的时间非常重要。例如,MARKET订单会立即从'OPEN'状态转移到'COMPLETE'状态,但LIMIT订单可能需要一段时间,根据市场条件,才能从'OPEN'状态转移到'COMPLETE'状态,或者甚至可能转移到'CANCELLED'状态。所有这些信息都包含在订单历史记录中。(有关订单状态转换的更多信息,请参考第六章的状态机图。)

在这个示例中,你将获取你的策略的订单历史记录。这个记录在你提交一个模拟交易任务后,你的策略进行了第一笔交易后就可以获取。AlgoBulls 平台允许你实时获取订单历史记录,即使模拟交易任务仍在进行中。这有助于我们在等待模拟交易任务完成之前获取订单的最终状态的详细信息。pyalgotrading包提供了一种简单的方法来获取给定策略的订单历史记录。

确保你已经阅读了第八章的前六个示例,算法交易策略 - 逐步编码,以获得所使用的策略类StrategyEMARegularOrder的完整图片。

准备工作

确保你的 Python 命名空间中有algobulls_connectionstrategy_code1对象。参考本章的第一个示例来设置algobulls_connectionstrategy_code1对象。

如何做…

获取strategy_code1的模拟交易订单历史报告:

>>> order_history = \
        algobulls_connection.get_papertrading_report_order_history(
                                                           strategy_code1)

我们获得以下输出。你的输出可能会有所不同:

+-------------+---------------------+----------------------------------+------+
| INST        | TIME                | ID                               | TT   |
|-------------+---------------------+----------------------------------+------|
| NSE_EQ:SBIN | 2020-07-09 10:30:00 | 96c24ca4b3e448f381fc5c2bc52f7a29 | BUY  |
+-------------+---------------------+----------------------------------+------+
+----+---------------------+------------------------+-------+
|    | TIME                | STATE                  | MSG   |
|----+---------------------+------------------------+-------|
|  0 | 2020-07-09 10:30:00 | PUT ORDER REQ RECEIVED |       |
|  1 | 2020-07-09 10:30:00 | VALIDATION PENDING     |       |
|  2 | 2020-07-09 10:30:00 | OPEN PENDING           |       |
|  3 | 2020-07-09 10:30:00 | OPEN                   |       |
|  4 | 2020-07-09 10:30:00 | COMPLETE               |       |
+----+---------------------+------------------------+-------+
+-------------+---------------------+----------------------------------+------+
| INST        | TIME                | ID                               | TT   |
|-------------+---------------------+----------------------------------+------|
| NSE_EQ:SBIN | 2020-07-09 10:45:00 | 3bbd433edd004630b122de07873864d7 | SELL |
+-------------+---------------------+----------------------------------+------+
+----+---------------------+------------------------+-------+
|    | TIME                | STATE                  | MSG   |
|----+---------------------+------------------------+-------|
|  0 | 2020-07-09 10:45:00 | PUT ORDER REQ RECEIVED |       |
|  1 | 2020-07-09 10:45:00 | VALIDATION PENDING     |       |
|  2 | 2020-07-09 10:45:00 | OPEN PENDING           |       |
|  3 | 2020-07-09 10:45:00 | OPEN                   |       |
|  4 | 2020-07-09 10:45:00 | COMPLETE               |       |
+----+---------------------+------------------------+-------+
...

完整输出未在此处显示。请访问以下链接以阅读完整输出:github.com/algobulls/pyalgostrategypool/blob/master/pyalgostrategypool/sample/papertrading/strategy_ema_regular_order/oms_order_history.log

工作原理…

在这个示例中,你可以使用algobulls_connection对象的get_papertrading_report_order_history()方法来实时获取订单历史记录。这个方法接受策略代码作为参数。这里传递了strategy_code1。返回的数据是一个字符串,描述如下:

对于每个订单,记录中都包含以下信息:

  • 一个关于订单的描述性表格,具有以下列:
  • INST:订单的金融工具
  • TIME:订单下单的时间
  • ID:订单的唯一 ID
  • TT:订单交易类型(BUYSELL

表格的一个示例如下所示:

+-------------+---------------------+----------------------------------+------+
| INST        | TIME                | ID                               | TT   |
|-------------+---------------------+----------------------------------+------|
| NSE_EQ:SBIN | 2020-07-09 10:30:00 | 96c24ca4b3e448f381fc5c2bc52f7a29 | BUY  |
+-------------+---------------------+----------------------------------+------+

此信息将帮助您在策略执行日志中找到该订单。

  • 一个订单状态转换表,具有以下列:
  • TIME:订单在 'STATE' 列所表示的状态中出现的时间。
  • STATE:订单在 'TIME' 列中提到的时间进入此状态。
  • MSG:来自 OMS 的任何意外状态转换的额外消息。例如,进入 REJECTED 状态的订单会有来自 OMS 的说明其被拒绝的原因的消息。此列通常为空。

表格的一个示例如下所示:

+----+---------------------+------------------------+-------+
|    | TIME                | STATE                  | MSG   |
|----+---------------------+------------------------+-------|
|  0 | 2020-07-09 10:30:00 | PUT ORDER REQ RECEIVED |       |
|  1 | 2020-07-09 10:30:00 | VALIDATION PENDING     |       |
|  2 | 2020-07-09 10:30:00 | OPEN PENDING           |       |
|  3 | 2020-07-09 10:30:00 | OPEN                   |       |
|  4 | 2020-07-09 10:30:00 | COMPLETE               |       |
+----+---------------------+------------------------+-------+

从这个表格中,您可以看到在上午 10:30 下单后,订单立即转移到 'COMPLETE' 状态。这是预期的,因为订单是常规市价订单。(有关常规市价订单的更多详细信息,请参阅第六章的第一个配方,在交易所上下单。)

还有更多内容……

一旦 paper trading 任务转移到 'STOPPED' 状态,就不会生成新的订单历史记录日志。您可以在提交下一个相同策略的 paper trading 任务之前随时获取完整的订单历史记录日志。如果提交了新的 paper trading 任务(用于相同的策略),则无法通过 get_papertrading_report_order_history() 方法访问这些日志。如果您希望稍后参考,可以将获取的日志保存到文件中。

MACD-Bracket-Order 策略 - 获取策略

在此配方中,您将从 AlgoBulls 平台上的帐户中获取策略类 StrategyMACDBracketOrder,您必须在学习第八章的最后一个配方时上传该策略类。该配方从建立到 AlgoBulls 平台的连接开始,查询您帐户中所有可用的策略,然后获取所需的策略类 StrategyMACDBracketOrder 的详细信息。

确保您已经学习了第八章的最后六个配方,算法交易策略 - 逐步编码,以完全了解所使用的策略类 StrategyMACDBracketOrder

怎么做……

我们为这个配方执行以下步骤:

  1. 导入必要的模块:
>>> from pyalgotrading.algobulls import AlgoBullsConnection
  1. 创建一个新的 AlgoBulls 连接对象:
>>> algobulls_connection = AlgoBullsConnection()
  1. 获取授权 URL:
>>> algobulls_connection.get_authorization_url()

我们获得以下输出:

Please login to this URL with your AlgoBulls credentials and get your developer access token: https://app.algobulls.com/user/login
'https://app.algobulls.com/user/login'
  1. 使用您的 AlgoBulls 凭据登录到上述链接,获取您的令牌,并在此处设置它(有关更多详细信息,请参阅《附录 II》):
>>> algobulls_connection.set_access_token(
                    '80b7a69b168c5b3f15d56688841a8f2da5e2ab2c')
  1. 检索并显示你目前已经创建并上传的所有策略:
>>> all_strategies = algobulls_connection.get_all_strategies()
>>> all_strategies

我们得到以下输出。你的输出可能会有所不同(确保您已经遵循了《第八章》中的配方,算法交易策略-逐步编码,以获得类似的输出):


  1. 检索并显示第二个策略 MACD-Bracket-Order 策略的策略代码:
>>> strategy_code2 = all_strategies.iloc[1]['strategyCode']
>>> strategy_code2

我们得到以下输出(你的输出可能会有所不同):

'49287246f9704bbcbad76ade9e2091d9'
  1. 在模拟交易您的策略之前,您可以检查您的策略以确保您选择了正确的策略:
>>> strategy_details2 = \
        algobulls_connection.get_strategy_details(strategy_code2)
>>> print(strategy_details2)

我们得到以下输出:

class StrategyMACDBracketOrder(StrategyBase):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fastMA_period = \
            self.strategy_parameters['fastma_period']
        self.slowMA_period = \
            self.strategy_parameters['slowma_period']
        self.signal_period = \
            self.strategy_parameters['signal_period']
        self.stoploss = \
            self.strategy_parameters['stoploss_trigger']
        self.target = self.strategy_parameters['target_trigger']
        self.trailing_stoploss = \
            self.strategy_parameters['trailing_stoploss_trigger']
        self.main_order = None
    def initialize(self):
        self.main_order = {}
    @staticmethod
    def name():
        return 'MACD Bracket Order Strategy'
    ….
    def strategy_exit_position(self, candle, instrument, 
                               sideband_info):
        if sideband_info['action'] == 'EXIT':
            self.main_order[instrument].exit_position()
            self.main_order[instrument] = None
            return True
        return False

此处未显示完整输出。请访问以下链接以阅读完整输出:github.com/algobulls/pyalgostrategypool/blob/master/pyalgostrategypool/strategy_macd_bracket_order.py

工作原理…

第 1 步中,您导入所需的模块。在第 2 步中,您创建了AlgoBullsConnection类的一个实例,命名为algobulls_connection。在第 3 步中,您使用algobulls_connection对象的get_authorization_url()方法获取授权 URL。这将打印授权 URL。您应该从您的网络浏览器访问此 URL 以登录到 AlgoBulls 平台并获取您的开发者访问令牌。 (您可以在《附录 II》中的屏幕截图中找到有关从 AlgoBulls 平台获取开发者访问令牌的更多详细信息。)您复制访问令牌,并在第 4 步中使用algobulls_connectionset_access_token()方法设置它。如果令牌被接受,则与 AlgoBulls 平台建立了成功的连接。

第五步中,您将检索到目前在 AlgoBulls 平台上创建并上传的所有策略。您可以使用get_all_strategies()方法来执行此步骤,并将其分配给一个新变量all_strategies。此变量是一个pandas.DataFrame对象,具有strategyCodestrategyName两列。此表格包含了您之前上传的策略代码和策略名称的信息。如果您遵循了来自第八章《算法交易策略-逐步编码》的《MACD-Bracket-Order 策略 - 将策略上传到 AlgoBulls 交易平台》的配方,您会发现一个名为MACD-Regular-Order 策略的策略。在第 6 步中,您将MACD-Regular-Order 策略策略的策略代码分配给一个新变量strategy_code2。此步骤的输出显示了策略代码。此策略代码对于 AlgoBulls 平台上的每个策略都是唯一的。

最后,在步骤 7 中,您确保 strategy_code2 引用的策略确实是您之前上传的策略(在第八章的最后一个配方中,算法交易策略 - 逐步编码)。您使用 algobulls_connection 对象的 get_strategy_details() 方法来检查策略。该方法以策略代码作为参数。您在此处传递 strategy_code2。该方法将整个类代码作为字符串返回。您将其赋值给一个新变量 strategy_details2,并显示它。

如果您想更改由 strategy_code2 引用的类代码,就像步骤 7 中所示,请参考第八章的最后一个配方的更多内容部分,算法交易策略 - 逐步编码

Python 算法交易秘籍(五)(5)https://developer.aliyun.com/article/1523039

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
14天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
43 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
10天前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
22 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
7天前
|
大数据 UED 开发者
实战演练:利用Python的Trie树优化搜索算法,性能飙升不是梦!
在数据密集型应用中,高效搜索算法至关重要。Trie树(前缀树/字典树)通过优化字符串处理和搜索效率成为理想选择。本文通过Python实战演示Trie树构建与应用,显著提升搜索性能。Trie树利用公共前缀减少查询时间,支持快速插入、删除和搜索。以下为简单示例代码,展示如何构建及使用Trie树进行搜索与前缀匹配,适用于自动补全、拼写检查等场景,助力提升应用性能与用户体验。
24 2
|
10天前
|
算法 Python
震惊!Python 算法设计背后,时间复杂度与空间复杂度的惊天秘密大起底!
在 Python 算法设计中,理解并巧妙运用时间复杂度和空间复杂度的知识,是实现高效、优雅代码的必经之路。通过不断地实践和优化,我们能够在这两个因素之间找到最佳的平衡点,创造出性能卓越的程序。
26 4
|
11天前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
在 Python 编程中,算法的性能至关重要。本文将带您深入了解算法复杂度的概念,包括时间复杂度和空间复杂度。通过具体的例子,如冒泡排序算法 (`O(n^2)` 时间复杂度,`O(1)` 空间复杂度),我们将展示如何评估算法的性能。同时,我们还会介绍如何优化算法,例如使用 Python 的内置函数 `max` 来提高查找最大值的效率,或利用哈希表将查找时间从 `O(n)` 降至 `O(1)`。此外,还将介绍使用 `timeit` 模块等工具来评估算法性能的方法。通过不断实践,您将能更高效地优化 Python 程序。
29 4
|
9天前
|
算法 程序员 Python
程序员必看!Python复杂度分析全攻略,让你的算法设计既快又省内存!
在编程领域,Python以简洁的语法和强大的库支持成为众多程序员的首选语言。然而,性能优化仍是挑战。本文将带你深入了解Python算法的复杂度分析,从时间与空间复杂度入手,分享四大最佳实践:选择合适算法、优化实现、利用Python特性减少空间消耗及定期评估调整,助你写出高效且节省内存的代码,轻松应对各种编程挑战。
21 1
|
10天前
|
算法 计算机视觉 Python
Python并查集大揭秘:让你在算法界呼风唤雨,秒杀一切复杂场景!
在编程与算法的广袤天地中,总有一些工具如同神兵利器,能够助你一臂之力,在复杂的问题前游刃有余。今天,我们就来深入探讨这样一件神器——Python并查集(Union-Find),看看它是如何让你在算法界呼风唤雨,轻松应对各种复杂场景的。
25 2
|
10天前
|
机器学习/深度学习 人工智能 算法
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台。果蔬识别系统,本系统使用Python作为主要开发语言,通过收集了12种常见的水果和蔬菜('土豆', '圣女果', '大白菜', '大葱', '梨', '胡萝卜', '芒果', '苹果', '西红柿', '韭菜', '香蕉', '黄瓜'),然后基于TensorFlow库搭建CNN卷积神经网络算法模型,然后对数据集进行训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地文件方便后期调用。再使用Django框架搭建Web网页平台操作界面,实现用户上传一张果蔬图片识别其名称。
29 0
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
13天前
|
缓存 算法 数据处理
时间&空间复杂度,Python 算法的双重考验!如何优雅地平衡两者,打造极致性能?
在Python算法中,时间与空间复杂度的平衡至关重要。时间复杂度反映算法执行时间随输入规模的变化趋势,空间复杂度则关注额外存储空间的需求。优秀的算法需兼顾两者,如线性搜索时间复杂度为O(n),空间复杂度为O(1);二分查找在时间效率上显著提升至O(log n),空间复杂度保持为O(1);动态规划通过牺牲O(n)空间换取O(n)时间内的高效计算。实际应用中,需根据具体需求权衡,如实时数据处理重视时间效率,而嵌入式系统更关注空间节约。通过不断优化,我们能在Python中找到最佳平衡点,实现高性能程序。
35 3
|
2天前
|
传感器 算法 C语言
基于无线传感器网络的节点分簇算法matlab仿真
该程序对传感器网络进行分簇,考虑节点能量状态、拓扑位置及孤立节点等因素。相较于LEACH算法,本程序评估网络持续时间、节点死亡趋势及能量消耗。使用MATLAB 2022a版本运行,展示了节点能量管理优化及网络生命周期延长的效果。通过簇头管理和数据融合,实现了能量高效和网络可扩展性。
下一篇
无影云桌面