Python 算法交易秘籍(五)(1)https://developer.aliyun.com/article/1523014
如何运作…
在这个配方中,你使用algobulls_connection
对象的get_backtesting_report_statistics()
方法实时获取回测统计表。该方法接受策略代码作为参数。你在这里传递了strategy_code1
。返回的数据是一个pandas.DataFrame
对象,有两列 - highlight_type
和 highlight_value
- 以及多行。行的描述如下:
净盈亏
:累积回测盈亏。这也是盈亏表中第一个条目的pnl_cumulative_absolute
值。净盈亏 %
:累积回测盈亏百分比。这也是盈亏表中第一个条目的pnl_cumulative_percentage
值。最大回撤
:盈亏表的pnl_cumulative
列中的最低值。这表明您的策略在执行过程中遇到的最大损失。最大回撤 %
:从数学上讲,这是*(最大回撤)* / *(相应的入场价格) / 出场数量 *× 100。交易次数
:会话期间的总交易次数(入场和出场计为一次)。获利次数
:交易盈亏非负的交易次数。亏损次数
:交易盈亏为负的交易次数。多头交易次数
:输入交易类型为'BUY'
的交易次数。空头交易次数
:输入交易类型为'SELL'
的交易次数。最大收益
:所有交易中收益最大的交易的盈亏。最小收益
:所有交易中收益最小的交易的盈亏。每次盈利交易的平均利润
:在数学上,这是 (盈利交易的总盈亏) / (盈利交易的次数)。每次亏损交易的平均利润
:在数学上,这是 (亏损交易的总盈亏) / (亏损交易的次数)。
还有更多…
如果在回测任务仍在运行时获取统计表,则上述数字将是中间数字,基于截至该时刻完成的交易。随着更多交易被输入,这些数字可能会更改,直到回测任务完成。
一旦回测任务转移到 'STOPPED'
状态,统计表将不再更改。您可以在提交下一个相同策略的回测任务之前的任何时间获取完整的统计表。如果提交了新的回测任务(相同的策略),则通过 get_backtesting_report_statistics()
方法将无法再访问此表。如果您希望以后参考,可以将获取的报告表保存到 .csv
文件中。
EMA-Regular-Order 策略 - 获取回测报告 - 订单历史
在 AlgoBulls 平台提交回测任务后,AlgoBulls 回测引擎开始执行策略。在执行过程中,除了日志外,AlgoBulls 回测引擎的盈亏表和统计表会实时生成订单历史记录。此日志包含每个订单的状态转换,以及每个订单状态的时间戳和附加信息(如果有)。订单历史记录对于理解交易从 'OPEN'
状态到 'COMPLETE'
或 'CANCELLED'
状态所需的时间至关重要。例如,MARKET
订单将立即从 'OPEN'
转换为 'COMPLETE'
,但是 LIMIT
订单可能需要一段时间,根据市场条件从 'OPEN'
转换到 'COMPLETE'
- 甚至可能转为 'CANCELLED'
。所有这些信息都包含在订单历史记录中。(有关订单状态转换的更多信息,请参见第六章的状态机图,在交易所上放置常规订单。)
在本配方中,你将获取你的策略的订单历史记录。只要你的策略首次进行交易,并提交了一个回测任务,这个日志就可以获取。AlgoBulls 平台允许你实时获取订单历史记录,即使回测任务仍在进行中也是如此。这帮助我们获取订单的最终状态的细节,而无需等待回测任务完成。pyalgotrading
包提供了一个简单的方法,我们可以用它来获取给定策略的订单历史记录。
确保你已经阅读了上一章的前六个配方,以完整了解我们将使用的策略类;即StrategyEMARegularOrder
。
准备工作
确保 algobulls_connection
和 strategy_code1
对象在你的 Python 命名空间中可用。参考本章第一个配方设置 algobulls_connection
和 strategy_code1
对象。
如何做…
获取strategy_code1
的回测订单历史报告:
>>> order_history = \ algobulls_connection.get_backtesting_report_order_history( strategy_code1) >>> print(order_history)
我们得到了以下输出(你的输出可能不同):
+-------------+---------------------+----------------------------------+------+ | INST | TIME | ID | TT | |-------------+---------------------+----------------------------------+------| | NSE_EQ:SBIN | 2020-07-01 09:45:00 | 2333198611b744aeb287300d371c8eb5 | BUY | +-------------+---------------------+----------------------------------+------+ +----+---------------------+------------------------+-------+ | | TIME | STATE | MSG | |----+---------------------+------------------------+-------| | 0 | 2020-07-01 09:45:00 | PUT ORDER REQ RECEIVED | | | 1 | 2020-07-01 09:45:00 | VALIDATION PENDING | | | 2 | 2020-07-01 09:45:00 | OPEN PENDING | | | 3 | 2020-07-01 09:45:00 | OPEN | | | 4 | 2020-07-01 09:45:00 | COMPLETE | | +----+---------------------+------------------------+-------+ +-------------+---------------------+----------------------------------+------+ | INST | TIME | ID | TT | |-------------+---------------------+----------------------------------+------| | NSE_EQ:SBIN | 2020-07-01 15:30:00 | 67f39f41885b476295e7e959b0470d49 | SELL | +-------------+---------------------+----------------------------------+------+ +----+---------------------+------------------------+-------+ | | TIME | STATE | MSG | |----+---------------------+------------------------+-------| | 0 | 2020-07-01 15:30:00 | PUT ORDER REQ RECEIVED | | | 1 | 2020-07-01 15:30:00 | VALIDATION PENDING | | | 2 | 2020-07-01 15:30:00 | OPEN PENDING | | | 3 | 2020-07-01 15:30:00 | OPEN | | | 4 | 2020-07-01 15:30:00 | COMPLETE | | +----+---------------------+------------------------+-------+ ...
这里未显示完整的输出。请访问此链接阅读完整的输出:github.com/algobulls/pyalgostrategypool/blob/master/pyalgostrategypool/sample/backtesting/strategy_ema_regular_order/oms_order_history.log
。
工作原理…
在本配方中,你使用algobulls_connection
对象的get_backtesting_report_order_history()
方法实时获取订单历史记录。此方法接受策略代码作为参数。你在这里传递了strategy_code1
。返回的数据是一个字符串,描述如下:
对于每个订单,日志包含以下信息:
- 一个包含以下列的描述性订单表:
INST
: 订单的金融工具TIME
: 下单时间ID
: 订单的唯一 IDTT
: 订单交易类型(BUY
或SELL
)
此表的示例如下:
+-------------+---------------------+----------------------------------+------+ | INST | TIME | ID | TT | |-------------+---------------------+----------------------------------+------| | NSE_EQ:SBIN | 2020-07-01 09:45:00 | 2333198611b744aeb287300d371c8eb5 | BUY | +-------------+---------------------+----------------------------------+------+
这些信息将帮助你在策略执行日志中找到这个确切的订单。
- 一个订单状态转换表,包括以下列:
TIME
: 订单进入由'STATE'
列表示的状态的时间戳。STATE
: 订单在'TIME'
列中提到的时间戳进入此'STATE'
。MSG
: 来自订单管理系统(OMS)的额外信息,用于任何意外状态转换。例如,进入REJECTED
状态的订单有来自 OMS 的拒绝原因的消息。该列通常为空。
此表的示例如下:
+----+---------------------+------------------------+-------+ | | TIME | STATE | MSG | |----+---------------------+------------------------+-------| | 0 | 2020-07-01 09:45:00 | PUT ORDER REQ RECEIVED | | | 1 | 2020-07-01 09:45:00 | VALIDATION PENDING | | | 2 | 2020-07-01 09:45:00 | OPEN PENDING | | | 3 | 2020-07-01 09:45:00 | OPEN | | | 4 | 2020-07-01 09:45:00 | COMPLETE | | +----+---------------------+------------------------+-------+
从这张表中,你可以看到,在上午 9:45 下单后,订单立即转移到'COMPLETE'
状态。这是预期的,因为订单是常规市价订单。
还有更多…
一旦回测作业转移到'STOPPED'
状态,就不会生成新的订单历史记录日志。您可以在提交下一个相同策略的回测作业之前的任何时间获取完整的订单历史记录日志。如果提交了新的回测作业(用于相同的策略),这些日志将不再通过get_backtesting_report_order_history()
方法访问。如果您希望以后参考这些日志,可以将获取的日志保存到文件中。
MACD-Bracket-Order 策略 – 获取策略
在这个配方中,您将从您在 AlgoBulls 平台上的帐户中获取StrategyMACDBracketOrder
策略类,这是您在上一章的最后一个配方中上传的。这个配方从建立到 AlgoBulls 平台的连接开始,查询您帐户中的所有可用策略,并获取所需策略类StrategyMACDBracketOrder
的详细信息。
确保您已经阅读了上一章的最后六个配方,以完全了解我们将要使用的策略类,即StrategyMACDBracketOrder
。
如何实现…
我们为此配方执行以下步骤:
- 导入必要的模块:
>>> from pyalgotrading.algobulls import AlgoBullsConnection
- 创建一个新的 AlgoBulls 连接对象:
>>> algobulls_connection = AlgoBullsConnection()
- 获取授权 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'
- 使用您的 AlgoBulls 凭据登录前面的链接,获取您的令牌,并在此设置它(有关更多详细信息,请参阅附录 II):
>>> algobulls_connection.set_access_token(' 80b7a69b168c5b3f15d56688841a8f2da5e2ab2c')
- 获取并显示您迄今为止创建和上传的所有策略:
>>> all_strategies = algobulls_connection.get_all_strategies() >>> all_strategies
我们得到以下输出。您的输出可能会有所不同(确保您已经按照上一章的配方来获得类似的输出):
- 获取并显示第二个策略 MACD-Bracket-Order 策略 的策略代码:
>>> strategy_code2 = all_strategies.iloc[1]['strategyCode'] >>> strategy_code2
我们得到以下输出(您的输出可能不同):
'49287246f9704bbcbad76ade9e2091d9'
- 在对您的策略进行回测之前,您可以检查您的策略以确保您拥有正确的策略:
>>> 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_connection
的 set_access_token()
方法设置它。如果令牌被接受,则会建立与 AlgoBulls 平台的成功连接。
在步骤 5 中,您获取到目前在 AlgoBulls 平台上创建并上传的所有策略。您使用 get_all_strategies()
方法进行此步骤,并将其赋值给一个新变量 all_strategies
。此变量是一个 pandas.DataFrame
对象,具有 strategyCode
和 strategyName
列。此表包含您之前上传的策略代码和策略名称的信息。如果您遵循了第八章中的 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 中所示,请参考第八章的上一个配方的 更多信息… 部分,算法交易策略 - 逐步编码。
MACD-Bracket-Order 策略 - 回测策略
在这个配方中,您将对 MACD-Bracket-Order 策略 进行回测。您必须在本章的上一个配方中从 AlgoBulls 平台的您的账户中获取此策略。您将利用 pyalgotrading
为这个配方提供的回测功能,这将在 AlgoBulls 平台上提交一个回测任务。
一旦提交,回测将由 AlgoBulls 回测引擎运行。您可以随时查询状态以了解回测作业的状态。作业按以下顺序经历以下状态:
STARTING
(中间状态)STARTED
(稳定状态)STOPPING
(中间状态)STOPPED
(稳定状态)
在提交作业时,它会从中间状态'STARTING'
开始。在此状态下,AlgoBulls 回测引擎获取策略并准备执行环境,这可能需要几分钟。完成后,作业转移到'STARTED'
状态。策略回测发生在此阶段。在此阶段,作业将停留,直到回测完成。完成后,作业将转移到中间状态'STOPPING'
。在此状态下,AlgoBulls 回测引擎清理分配给此作业的资源,通常需要不到一分钟。最后,作业转移到'STOPPED'
状态。
如果您已经为某个策略提交了回测作业,那么在第一个作业完成之前,您不能为同一策略提交另一个作业。这意味着您必须等待第一个作业进入'STOPPED'
状态。如果第一个作业运行时间很长,并且您希望立即停止它,您可以通过pyalgotrading
提交停止作业请求。您需要确保作业在提交请求前处于'STARTED'
状态。
在提交回测作业后,您可以实时获取策略执行的日志和报告。日志和报告有助于验证策略的性能并调试任何潜在问题。
您可以参考本章的第二个配方,查看 AlgoBulls 平台上回测作业的状态机图。它展示了回测作业在其生命周期中的各种状态和转换。
确保您已经阅读了上一章的最后六个配方,以全面了解我们将使用的策略类,即StrategyMACDBracketOrder
。
准备就绪
确保algobulls_connection
和strategy_code2
对象在您的 Python 命名空间中可用。请参考本章的上一配方来设置algobulls_connection
和strategy_code2
对象。
如何操作…
我们执行以下步骤来完成此操作:
- 导入必要的模块:
>>> from datetime import datetime as dt >>> from pyalgotrading.constants import *
- 使用其交易符号作为关键字搜索工具。将返回的对象分配给
instruments
:
>>> instrument = algobulls_connection.search_instrument( 'TATASTEEL') >>> instrument
我们获得以下输出(您的输出可能不同):
[{'id': 1, 'value': 'NSE:TATASTEEL'}]
- 从
instruments
获取所选工具的value
:
>>> instrument = instrument[0]['value'] >>> instrument
我们获得以下输出:
'NSE:TATASTEEL'
- 为
strategy_code2
提交回测作业:
>>> algobulls_connection.backtest( strategy_code=strategy_code2, start_timestamp=dt(year=2020, month=7, day=1, hour=9, minute=15), end_timestamp=dt(year=2020, month=7, day=7, hour=15, minute=30), instrument=instrument, lots=1, strategy_parameters={ 'fastma_period': 26, 'slowma_period': 6, 'signal_period': 9, 'target_trigger': 0.01, 'stoploss_trigger': 0.01, 'trailing_stoploss_trigger': 1 }, candle_interval=CandleInterval.MINUTES_15)
我们获得以下输出:
Setting Strategy Config... Success. Submitting BACKTESTING job... Success.
- 检查提交的回测作业的状态:
>>> algobulls_connection.get_backtesting_job_status(strategy_code2) {'data': 'STARTING'}
- 过一段时间后再次检查提交的回测作业的状态:
>>> algobulls_connection.get_backtesting_job_status(strategy_code2) {'data': 'STARTED'}
工作原理…
在步骤 1中,您从datetime
模块中导入datetime
类,以及从pyalgotrading.constants
模块中导入所有所需的常量。在步骤 2中,您使用algobulls_connection
对象的search_instrument()
方法获取您想要为其回测策略的工具,MACD-Bracket-Order 策略。search_instrument()
方法接受一个搜索字符串作为参数,该字符串应该是您感兴趣的工具的交易代码的部分或完整内容。这里您传递了'TATASTEEL'
。该函数返回一个包含与搜索字符串匹配的工具详细信息的列表。可能会有多个工具的交易代码中含有搜索字符串。在步骤 3中,您获取第一个匹配工具的值,并将其赋值给一个新变量,instrument
。
在步骤 4中,您使用algobulls_connection()
对象的backtest()
方法提交一个回测任务。它接受以下参数:
strategy_code
: 要进行回测的策略的策略代码。这应该是一个字符串。在这里,您传递了strategy_code2
。start_timestamp
: 进行回测的起始时间戳。这应该是一个datetime.datetime
对象。这里,您传递了一个包含 2020 年 7 月 1 日 9:15 小时的值的对象 -dt(year=2020, month=7, day=1, hour=9, minute=15)
。有关创建datetime
对象的详细信息,请参阅第一章的第一个示例,即处理和操作日期、时间和时间序列数据。end_timestamp
: 进行回测的结束时间戳。此对象应持有比start_timestamp
持有的时间戳值要晚的时间戳。这应该是一个datetime.datetime
实例。在这里,您传递了一个包含 2020 年 7 月 7 日 15:30 小时的值的对象 -dt(year=2020, month=7, day=7, hour=15, minute=30)
。instrument
: 应该运行回测的金融工具。将为此工具获取历史数据。这应该是一个字符串。在这里,您传递了instrument
。lots
: 进行回测的手数。这应该是一个整数。该数量由策略计算为手数×金融工具的手数。 (请参阅第八章的MACD-Bracket-Order 策略 - 编写策略 _select_instruments_for_entry 方法,算法交易策略 - 逐步编码。) 在这里,您传递了1
。strategy_parameters
: 策略所需的参数名称和值。这应该是一个字典,其中parameter-name
和parameter-value
是键值对。您在这里传递以下参数:fastma_period: 26
slowma_period: 6
signal_period: 9
target_trigger: 0.01
stoploss_trigger: 0.01
trailing_stoploss_trigger: 1
(回想一下,MACD-Bracket-Order 策略的参数在前一章的__init__()
方法中定义)。
candle_interval
: 用于回测的历史数据获取的蜡烛图间隔。这应该是CandleInterval
类型的枚举。在这里,你传递CandleInterval.MINUTES_15
。(CandleInterval
枚举提供各种蜡烛图间隔的枚举,其中一些是MINUTE_1
、MINUTES_3
、MINUTES_5
、MINUTES_10
、MINUTES_15
、MINUTES_30
、HOUR
和DAY
)。
如果作业提交成功,你会看到backtest()
函数打印出Success
消息。
一旦作业提交,启动需要一段时间。启动后,根据指定的策略复杂度和回测持续时间(使用start_timestamp
和end_timestamp
参数),完成可能需要一些时间。几天的回测可能在几秒内完成,而几个月的回测可能需要几分钟。
在步骤 5中,你使用algobulls_connection
对象的get_backtesting_job_status()
方法获取作业状态。在这里,你将strategy_code2
作为参数传递。该方法返回一个键值对字典 - 数据和作业状态。如果在放置作业后立即查询状态,你会得到'STARTING'
作为状态。在步骤 6中,你再次查询状态,如果作业已经启动,你会得到'STARTED'
的状态。
成功提交意味着以所需格式传递了回测策略的最小输入。然而,这并不保证策略会在回测期间无错误地运行。策略的执行仍然可能在回测过程中遇到错误。要调试执行问题,你需要获取输出日志,这将在下一个示例中解释。错误的可能原因包括策略类的 Python 代码中的错误或传递给backtest()
函数的strategy_parameters
字典不完整。
还有更多…
如果作业运行时间很长,你希望在完成之前停止它,你可以使用algobulls_connection
对象的stop_backtesting_job()
方法。此方法接受策略代码作为参数。在这里,你传递strategy_code2
。该方法向 AlgoBulls 回测引擎提交停止请求。如果请求被接受,你会看到一个Success
消息:
>>> algobulls_connection.stop_backtesting_job(strategy_code2) Stopping BACKTESTING job... Success.
如果在提交停止请求后查询状态,你会得到一个'STOPPING'
的状态:
>>> algobulls_connection.get_backtesting_job_status(strategy_code2) {'data': 'STOPPING'}
如果一段时间后再次查询状态,如果作业已经停止,你会得到'STOPPED'
的状态:
>>> algobulls_connection.get_backtesting_job_status(strategy_code2) {'data': 'STOPPED'}
MACD-Bracket-Order 策略 - 实时获取回测日志
在 AlgoBulls 平台提交回测作业后,AlgoBulls 回测引擎开始执行策略。在执行过程中,AlgoBulls 回测引擎记录了发生的每个事件以及所做出的决策,以确切的时间戳形式记录在文本日志中。记录的活动示例包括给定策略配置、定期生成的每个新蜡烛、您的策略输入的交易、由这些交易创建的头寸的进入和退出、等待新蜡烛等等。这些日志对于验证策略行为以及调试在开发策略时经常遇到的行为或性能问题至关重要。
在这个配方中,您将获取您的策略的回测日志。日志会在您提交的回测作业达到'STARTED'
状态时开始出现。AlgoBulls 平台允许您实时获取日志,即使回测作业仍在进行中。您可以在不等待回测作业完成的情况下深入了解策略执行情况,这在作业运行时间较长时非常有用。pyalgotrading
包提供了一个简单的方法来获取给定策略的执行日志。
确保您已经浏览了上一章的最后六个配方,以完整了解我们将要使用的策略类别;也就是StrategyMACDBracketOrder
。
准备工作
确保algobulls_connection
和strategy_code2
对象在您的 Python 命名空间中可用。请参考本章的MACD-Bracket-Order strategy – fetching the strategy配方来设置algobulls_connection
和strategy_code2
对象。
如何操作…
我们对这个配方执行以下步骤:
- 获取
strategy_code2
的回测执行日志:
>>> logs = algobulls_connection.get_backtesting_logs( strategy_code2) >>> print(logs)
我们得到了以下输出(您的输出可能不同):
[2020-07-30 17:27:25] Logs not available yet. Please retry in sometime.
- 一段时间后再次获取
strategy_code2
的回测执行日志:
>>> logs = algobulls_connection.get_backtesting_logs( strategy_code2) >>> print(logs)
我们得到了以下输出(您的输出可能不同):
... ######################################## INITIALIZING ALGOBULLS CORE (v3.2.0 SECURE MODE)... ######################################## ... [BT] [2020-07-01 09:15:00] [INFO] [tls] STARTING ALGOBULLS CORE... ... [BT] [2020-07-01 12:30:00] [CRITICAL] [order] [PLACING NEW ORDER] [2020-07-01 12:30:00] [1cbefcf395c344c88a228a1b01c32ef6] [BUY] [NSE:TATASTEEL] [QTY:1] [QTY PENDING: 1] [ENTRY PRICE: 322.6] [PRICE:322.6] [TRIGGER PRICE:None] [ORDER_TYPE_BRACKET] [ORDER_CODE_INTRADAY] [ORDER_VARIETY_LIMIT] [ORDER_POSITION_ENTER] [STOPLOSS TRIGGER:319.374] [TARGET TRIGGER:325.826] [TRAILING STOPLOSS TRIGGER:322.6] ... [BT] [2020-07-07 15:30:00] [INFO] [clock] Candle generation has been stopped... [BT] [2020-07-07 15:30:00] [INFO] [tls] Received event END OF MARKET. Stopping Trading Core Engine... [BT] [2020-07-07 15:30:00] [CRITICAL] [tls] [User: ALGOBULLS VIRTUAL USER] Trading session completed ...
此处未显示完整输出。请访问以下链接阅读完整输出:github.com/algobulls/pyalgostrategypool/blob/master/pyalgostrategypool/sample/backtesting/strategy_macd_bracket_order/logs.txt
。
工作原理…
在步骤 1中,您使用algobulls_connection
对象的get_backtesting_logs()
方法实时获取策略回测日志。此方法接受策略代码作为参数。在此处传递strategy_code2
。返回的数据是一个字符串。如果在提交作业后立即尝试此步骤,您将获得一个字符串,指出日志尚未准备好([2020-07-30 17:27:25] 日志尚未准备好,请稍后重试。
)。如果回测作业处于'STARTING'
状态,则会发生这种情况。
在第 2 步中,你在一段时间后再次获取日志。如果作业处于'STARTING'
状态之外,你就开始获取你的策略执行日志。每次调用get_backtesting_logs()
函数时,你都会得到整个回测日志。
还有更多…
一旦回测作业转移到'STOPPED'
状态,就不会生成新的日志。你可以在提交下一个相同策略的回测作业之前的任何时候获取完整的日志。如果提交了一个新的回测作业(针对相同的策略),这些日志将不再通过get_backtesting_logs()
方法访问。如果你希望以后参考,你可以将获取的日志保存到文件中。
Python 算法交易秘籍(五)(3)https://developer.aliyun.com/article/1523027