什么是 Pyne?
了解 Pyne code、它与 Python 的关系,以及 PyneIDE 的作用。
Pyne 是一个用于编写市场数据处理程序的系统。你可以通过程序计算和显示由价格推导出的数值,也可以定义交易策略的规则。本书会带你走完从编写程序到检查结果的全过程。
什么是 Pyne code?
我们使用 Pyne code 编写程序。这是一种专门用于处理市场数据的独立编程语言。代码描述系统应当计算什么、显示什么,以及在什么条件下执行某项操作。
edge 变体只允许使用 Python 的特定功能子集,因此我们学习的并不是完整的通用 Python 语言。例如,一个指标可以计算最近十根 K 线的平均价格,并将其绘制为价格图表上的一条线。价格图表展示价格随时间的变化。策略还会定义入场和出场规则,例如在条件满足时开立买入持仓。在历史数据上运行策略,可以查看在指定成交条件下,这些规则本来会产生哪些交易。这称为回测。
本书先从简单指标入手。你会通过它们熟悉数据和语言,然后再编写交易规则。
它与 Python 有什么关系?
Pyne code 使用 Python 的书写规则。这些规则称为语法,例如括号放在哪里、如何表示属于同一代码块的行。你不需要先学 Python;本书会通过示例介绍所需规则。
因此,文件采用 Python 常用的 .py 扩展名。安装 PyneCore 后,Pyne code 也能在 Python 运行环境中执行。Python 提供运行环境,PyneCore 则提供 Pyne 特有的执行方式和函数库。
程序如何处理数据?
示例中的市场数据是一串 K 线。每根 K 线汇总一个时间段的数据,包括开盘价和收盘价等。对于日线数据,一根 K 线代表一天。
PyneCore 按顺序在这些 K 线上执行程序的计算。例如,每到一根 K 线,它都可以利用截至当时可用的价格重新计算平均值。同时,系统还会管理之前的计算值,以及需要保留到下一根 K 线的数据。
这种执行方式与普通 Python 程序不同。文件开头的 @pyne 标记告诉 PyneCore 应按这套规则准备并运行代码。在代码解读章节中,我们会查看标记的具体写法,以及书中示例在其后添加的 edge 是什么意思。
它与向量化处理有什么不同?
Python 交易框架中既有逐根 K 线处理的方案,也有向量化方案。向量化处理对整组数列进行运算,例如一次性计算所有 K 线对应的平均值和买入信号。此时通常使用表格或数组管理数据。
在 PyneCore 中,你描述的是当前 K 线需要做什么。系统执行完之后,再移到下一根 K 线。历史计算值和需要保留的状态都按 Pyne 自身的语言规则管理。
在简单函数中写出各个步骤
一些逐根 K 线工作的框架要求你为策略创建类。类将相关数据和操作组织在一起;类中的函数称为方法。你需要将设置和交易规则分别写进框架规定的方法,并通过类的数据访问价格或持仓。
在 Pyne code 示例中,你在 main() 函数里写出要计算什么,以及满足什么条件时采取行动。每处理一根 K 线,函数内的行就依次执行:先计算一个值,再检查条件,最后绘制信号或发出订单。遍历 K 线由 PyneCore 负责。
因此,入门时不必先学习创建类和继承,也不必将程序拆散到框架的各个方法中。简单示例只需要变量、函数调用和条件判断;这些都会在后续章节学习。
可以按时间顺序理解规则
这与思考交易决策的方式接近:“先看看当前价格和此前的变化。条件满足就入场。持仓期间持续检查出场条件。”你可以在代码中按同样的顺序跟踪事件,并用调试器检查某根 K 线上的变量。
更难意外用到未来数据
向量化处理时,整个数据序列可能已经可用。因此,一次方向错误的位移或选错范围的平均计算,就可能纳入决策时尚未知晓的价格。例如,全年平均价会让一月份的决策使用后来几个月的价格。程序依然可能正常运行,甚至显示出很漂亮的结果,而错误不容易被发现。这称为前视偏差,英文为 look-ahead bias。
Pyne 自带的时间序列提供当前 K 线及已处理 K 线的数值。访问历史值时,无法读到下一根 K 线的价格。这降低了意外使用未来数据的风险,也更容易核查某次决策依据了什么。
不过,数据准备仍需仔细检查。如果外部数据已经包含后来才知道的信息,单凭逐根 K 线执行并不能识别这种问题。
速度可能有所取舍
对于某些程序,逐根 K 线执行可能慢于编写良好的向量化计算。在大数据集上尝试大量策略或参数组合时,这一点尤其可能产生影响。向量化系统通常用优化过的计算库加速批量运算。实际差距取决于程序和数据量。
本书学习逐根 K 线的工作方式:按时间顺序表达规则,以及检查某次决策所依据的历史信息。
其他方案可参考:VectorBT 的向量化处理,以及 Backtrader 的逐根 K 线策略(英文)。
PyneIDE 和 PyneCore 分别做什么?
PyneIDE 是 Visual Studio Code 编辑器的扩展。你在其中编写程序、选择数据并启动运行,也在其中查看图表结果和查找错误。
PyneCore 负责执行。它加载并准备程序,用程序处理 K 线,然后生成计算和交易结果。PyneIDE 在后台调用它,并展示结果。
下一章会带你设置 PyneIDE 并创建第一个项目。学习时使用示例数据,因此你可以反复运行同一个程序,比较自己修改后的结果。