Настройки без изменения кода
Добавьте входной параметр индикатора и меняйте его через Inputs в PyneIDE.
До сих пор для проверки другой длины среднего вы меняли число в коде. Теперь оно станет настройкой индикатора. Одна программа сможет запускаться с разными длинами.
Что такое input?
Input является именованным входным значением, изменяемым извне. Код задаёт тип, значение по умолчанию и допустимые границы. Пользователь выбирает значение внутри них.
Наш вход называется length, по умолчанию 20. Переменная length задаст длину среднего. Также нужно пространство имён input из pynecore.lib.
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. ): завершает его и начинает тело. Расчёт и рисование имеют отступ четыре пробела.
Запятая в конце строки input позволяет добавлять параметры и допустима при единственном параметре. Два блока с отступом имеют разные роли: внутри скобок задаются входы, после них инструкции выполнения.
Запустите на демонстрационных данных. Сначала синяя средняя строится по двадцати свечам.
Откройте Inputs
- Сделайте
adjustable_average.pyактивным. - В правом верхнем углу редактора нажмите шестерёнку на панели рядом с вкладкой. При наведении появляется Edit Inputs….
- Найдите поле Average length.
- Измените на 5 и нажмите Save.
Открыть тот же интерфейс можно из Scripts в Pyne: правая кнопка на adjustable_average.py, затем Edit Inputs…. Действие доступно и в контекстном меню открытого кода.

После Save PyneIDE автоматически пересчитает открытый график с сохранённым значением. Дождитесь обновления: синяя линия теперь показывает среднее пяти свечей.
В коде по умолчанию всё ещё 20. Сохранённое в Inputs число 5 заменяет его в этом проекте.
Установите 50 и сохраните. Сравните реакцию линии на цену за тот же период. Простое перемещение видимого периода графика не меняет input программы.
Где хранится настройка?
Рядом с программой одноимённый файл .toml хранит сохранённые настройки. Здесь это adjustable_average.toml.
TOML является текстовым форматом конфигурации. Файлом управляет PyneIDE, для упражнения достаточно Inputs. Внутри настройка выглядит так:
[inputs.length]
value = 5Квадратные скобки здесь обозначают группу настроек. Это не история свечей из прошлой главы, а другой файл с правилами другого языка.
Имя параметра в коде и его заголовок тоже различаются: length в файле и Average length на экране. Для поведения программы важно имя кода.
Если переименовать input в исходнике, значение, сохранённое под старым именем, не станет настройкой нового. Откройте Inputs заново и проверьте. При копировании программы копируйте .toml только если нужны и сохранённые настройки.
Значение по умолчанию и фактическое
Если поменять в коде 20 на 30, но ранее сохранить пять, выполнение может использовать пять. Сохранённая настройка приоритетнее.
Описывая результат, записывайте фактический input. Значение по умолчанию не описывает все настройки запуска.
Попробуйте самостоятельно
Добавьте вторую длину. У короткого среднего значение по умолчанию 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)Параметры меняются независимо. Границы ещё не требуют, чтобы быстрая длина была меньше медленной. Эту связь нужно проверять отдельно; мы сделаем это в итоговом проекте.
Проверьте сохранение
Установите длину один. Односвечная SMA равна текущему закрытию, линия должна проходить через закрытия. Затем верните двадцать. Снова открыв файл, проверьте, что интерфейс показывает сохранённые двадцать.