Python 算法交易秘籍(五)(3)https://developer.aliyun.com/article/1523027
我们得到以下输出:
{'data': 'STARTING'}
- 再过一段时间后再次检查提交的任务的状态:
>>> algobulls_connection.get_papertrading_job_status( strategy_code1)
我们得到以下输出:
{'data': 'STARTED'}
工作原理…
在步骤 1中,从datetime
模块中导入time
类以及从pyalgotrading.constants
模块中导入所有常量。在步骤 2中,使用algobulls_connection
对象的search_instrument()
方法获取您想要纸上交易策略的工具,EMA-Regular-Order strategy
。search_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-name
和parameter-value
作为键值对。你在这里传递以下参数:timeperiod1: 5
timeperiod2: 12
(回想一下,EMA-Regular-Order 策略的参数已经在其__init__()
方法中定义,就像第八章的第一个示例中展示的那样,按步骤编写算法交易策略。)
candle_interval
: 获取用于模拟交易的历史数据的蜡烛图间隔。这应该是一个CandleInterval
类型的枚举。你在这里传递CandleInterval.MINUTES_15
。(CandleInterval
枚举提供各种蜡烛图间隔的枚举,其中一些是MINUTE_1
、MINUTES_3
、MINUTES_5
、MINUTES_10
、MINUTES_15
、MINUTES_30
、HOUR
和DAY
。)
如果任务提交成功,你将会看到papertrade()
函数打印的Success
消息。
一旦提交了任务,它就需要一段时间才能启动。启动后,根据使用start_time
和end_time
参数指定的模拟交易持续时间,可能需要一些时间才能完成。通常,模拟交易在整个交易日运行,这意味着任务将运行 6-8 小时。
在步骤 5 中,你使用algobulls_connection
对象的get_papertrading_job_status()
方法获取任务状态。你在这里传递strategy_code1
作为参数。该方法返回一个带有单个键值对的字典,即data和job状态。如果在放置任务后立即查询状态,你会得到'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_connection
和strategy_code1
对象在你的 Python 命名空间中可用。请参阅本章的第一个配方,设置algobulls_connection
和strategy_code1
对象。
如何实现…
执行以下步骤以完成此配方:
- 获取
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.
- 过一段时间后,再次获取
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_connection
和 strategy_code1
对象在你的 Python 命名空间中可用。参考本章的第一个示例设置 algobulls_connection
和 strategy_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
: 进入订单的交易类型(可以是BUY
或SELL
)。entry_quantity
: 进入订单数量。entry_price
: 进入订单执行并进入'COMPLETE'
状态的价格。exit_timestamp
: 下达退出订单的时间戳。(注意它可能在进入'COMPLETE'
状态之前保持'OPEN'
状态一段时间。)exit_transaction_type
: 退出订单的交易类型(可以是BUY
或SELL
)。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_connection
和strategy_code1
对象在您的 Python 命名空间中可用。请参考本章的第一个示例设置algobulls_connection
和strategy_code1
对象。
如何做…
获取strategy_code1
的模拟交易统计报告:
>>> algobulls_connection.get_papertrading_report_statistics(strategy_code1)
我们得到以下输出(您的输出可能不同):
工作原理…
在本示例中,您将使用algobulls_connection
对象的get_papertrading_report_statistics()
方法实时获取模拟交易统计表。此方法接受策略代码作为参数。在这里,您传递strategy_code1
。返回数据是一个pandas.DataFrame
对象,具有两列—highlight_type
和highlight_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_connection
和strategy_code1
对象。参考本章的第一个示例来设置algobulls_connection
和strategy_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
:订单的唯一 IDTT
:订单交易类型(BUY
或SELL
)
表格的一个示例如下所示:
+-------------+---------------------+----------------------------------+------+ | 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
。
怎么做……
我们为这个配方执行以下步骤:
- 导入必要的模块:
>>> 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 平台建立了成功的连接。
在第五步中,您将检索到目前在 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 中所示,请参考第八章的最后一个配方的更多内容部分,算法交易策略 - 逐步编码。
Python 算法交易秘籍(五)(5)https://developer.aliyun.com/article/1523039