不改代码也能调整设置
为指标添加输入项,并通过 PyneIDE 的 Inputs 界面修改。
此前尝试平均线长度时,你需要修改源码中的数字。现在把这个数字变成指标设置,就能用不同长度运行同一个程序。
什么是 input?
input 是程序中带名称、可从外部调整的输入。源码规定输入类型、默认值和允许范围,用户在其中选择数值。
这次输入名为 length,默认值为 20。length 变量决定移动平均线的长度。代码还需要从 pynecore.lib 模块引入 input 命名空间。
length: int = input.int(20, title="Average length", minval=1, maxval=200)这一行放在 main() 的参数列表中。int 表示整数,例如这里可以用 1、20 或 200,不能用 2.5。input.int 描述一个整数输入。
20 是默认值,Average length 是界面标题。minval 和 maxval 是允许的最小值与最大值。零长度没有合理的平均窗口含义,因此排除。
完整程序
创建 adjustable_average.py:
"""
@pyne edge
"""
from pynecore.lib import close, color, input, plot, script, ta
@script.indicator("Adjustable Average", overlay=True)
def main(
length: int = input.int(20, title="Average length", minval=1, maxval=200),
):
average = ta.sma(close, length)
plot(average, "Average", color=color.blue, linewidth=2)我们在 main 的左括号后,将参数列表分成多行。): 结束列表并开始函数体,下方的计算与绘图缩进四个空格。
输入行末尾的逗号便于继续添加参数,即使只有一个参数也允许保留。两个缩进部分的作用不同:括号内定义输入,括号结束后才是要执行的语句。
在演示数据上运行。首次运行时,蓝色平均线使用二十根 K 线。
打开 Inputs 界面
- 让
adjustable_average.py成为当前文件。 - 点击编辑器右上角、文件标签附近工具栏的齿轮图标。鼠标悬停时会显示 Edit Inputs…。
- 在打开的界面找到 Average length。
- 改为 5,然后点击 Save。
也可以从左侧 Pyne 视图的 Scripts 分组打开:右键点击 adjustable_average.py,选择 Edit Inputs…。已打开代码的右键菜单中也有这一项。

点击 Save 后,PyneIDE 会自动按保存的设置重新计算已打开图表。等待刷新完成,蓝线就会变成五根 K 线的平均值。
源码的默认值仍是 20。在 Inputs 保存的 5 会在当前项目中覆盖它。
现在改为 50 并再次保存。在同一时段比较线条对价格变化的反应。仅拖动图表的可见时段,并不会改变程序的输入。
设置保存在哪里?
程序旁的同名 .toml 文件保存设置。本例中是 adjustable_average.toml。
TOML 是文本配置格式。这份文件由 PyneIDE 管理,练习时用 Inputs 界面就够了。若打开文件,长度对应的部分如下:
[inputs.length]
value = 5这里的方括号表示设置分组,不是历史值章节讲过的 K 线历史访问:它处于另一种文件中,遵循另一种语言的规则。
代码参数名与界面标题也不一样。文件中是 length,界面上是 Average length。程序执行使用的是代码名称。
如果在源码中重命名输入,旧名称下保存的值不会成为新输入的设置。此时重新打开 Inputs 检查。复制程序时,只有想同时保留已保存设置,才一起复制旁边的 .toml 文件。
默认值与实际值
如果把源码默认值从 20 改为 30,但此前已保存过 5,运行时仍可能使用 5。保存的覆盖值优先。
所以描述结果时,应记录实际输入。源码中可见的默认值本身并不足以说明一次运行的全部设置。
自己试一试
给指标添加第二个长度参数。短平均线默认长度为 5,长平均线为 20。两者最小为 1,最大为 200。分别绘制并设置不同标题。
参考答案
main() 参数列表:
fast_length: int = input.int(5, title="Fast length", minval=1, maxval=200),
slow_length: int = input.int(20, title="Slow length", minval=1, maxval=200),函数体:
fast_average = ta.sma(close, fast_length)
slow_average = ta.sma(close, slow_length)
plot(fast_average, "Fast average", color=color.blue, linewidth=2)
plot(slow_average, "Slow average", color=color.orange, linewidth=2)两个输入可分别修改。但这些范围还没有规定快速长度必须小于慢速长度。这个关系需要单独检查,结课项目会处理。
检查保存结果
将长度改为一。单根 K 线的 SMA 就是它自己的收盘价,线应经过各根收盘价。随后改回二十。重新打开文件时,检查界面是否显示保存的二十。