Условия и отметки
Выбирайте цвет сравнением и отмечайте только свечи, удовлетворяющие условию.
Теперь программа различит растущие и падающие свечи: сравнит открытие с закрытием и покажет результат цветом и отметкой.
Истина или ложь
Результат close > open равен True, если закрытие выше открытия, иначе False. Это логическое значение типа bool.
Сравнение не изменяет цены, только отвечает на вопрос.
| Знак | Значение | Пример |
|---|---|---|
> | Больше | close > open |
< | Меньше | close < open |
>= | Больше или равно | close >= open |
<= | Меньше или равно | close <= open |
== | Равно | close == open |
!= | Не равно | close != open |
= присваивает переменной значение, == сравнивает. Строка bullish = close > open помещает результат сравнения в bullish.
При равенстве цен ни close > open, ни close < open не истинно. Для полного решения учтём и это.
if, elif и else
Условие после if решает, выполнять ли блок с отступом:
if bullish:
line_color = color.green
elif bearish:
line_color = color.red
else:
line_color = color.grayСначала проверяется if. При истине выбирается зелёный и остальные ветви пропускаются. При лжи проверяется elif. else выполняется, когда ни одно прежнее условие не истинно.
Строки начала ветвей заканчиваются двоеточием. Внутри добавляются четыре пробела. В main() строка if начинается с четырёх, а присваивание внутри с восьми.
Полная программа
Создайте candle_conditions.py:
"""
@pyne edge
"""
from pynecore.lib import close, color, location, open, plot, plotshape, script, shape
@script.indicator("Candle Conditions", overlay=True)
def main():
bullish = close > open
bearish = close < open
if bullish:
line_color = color.green
elif bearish:
line_color = color.red
else:
line_color = color.gray
plot(close, "Close", color=line_color, linewidth=2)
plotshape(bullish, "Bullish candle", style=shape.triangleup,
location=location.belowbar, color=color.green)Запустите на демонстрационных данных. Цвет линии закрытия меняется по свечам. Под растущими свечами появляются зелёные треугольники.

Первый аргумент plotshape задаёт, когда рисовать. style определяет форму, location положение относительно свечи. Отмеченная свеча здесь лишь закрылась выше открытия. Отметка не означает приказ купить.
Запоминать параметры не нужно: наведите указатель на plotshape и прочитайте справку. Шаги и переход к определению описаны в главе о помощи редактора.
Место вычисления имеет значение
plot и plotshape выполняются на каждой свече. Мы меняем рисуемое значение, цвет или условие. Так отображение получает результат для всех свечей.
Для среднего подходит тот же порядок:
average = ta.sma(close, 20)
above_average = close > averageСначала вычисляем среднее на каждой свече, потом условие использует его. Не помещайте ta.sma внутрь if bullish:, иначе расчёт будет лишь на растущих свечах.
При начальном отсутствующем значении SMA условие close > average не даёт истинного сигнала. Для отдельной реакции на отсутствие используйте na(average). average == na не является корректной проверкой.
Объединение условий
and истинно, когда истинны обе стороны. or истинно, если истинна хотя бы одна. not обращает логическое значение.
strong_bullish = close > open and close > close[1]Условие требует одновременно растущую свечу и закрытие выше предыдущего. Растущая свеча может закрыться ниже прежнего закрытия, поэтому проверки разные.
and и or сокращают вычисление: если первая часть уже определила результат, вторая не вычисляется. Для and это происходит при ложной первой части, для or при истинной. Поэтому расчёты с состоянием выполняйте отдельными строками и затем объединяйте логические результаты.
Краткий выбор значения
Выбрать одно из двух значений можно одним выражением:
line_color = color.green if bullish else color.redПри истинном bullish выбирается зелёный, иначе красный. При равных ценах тоже получится красный. Для серого в этом случае оставьте полное решение из трёх ветвей.
Попробуйте самостоятельно
Нарисуйте красный треугольник вниз над падающими свечами, сохранив зелёные. Затем ужесточите оба условия сравнением с предыдущим закрытием.
Решение
bullish_signal = bullish and close > close[1]
bearish_signal = bearish and close < close[1]
plotshape(bullish_signal, "Bullish signal", style=shape.triangleup,
location=location.belowbar, color=color.green)
plotshape(bearish_signal, "Bearish signal", style=shape.triangledown,
location=location.abovebar, color=color.red)Замените прежний зелёный plotshape двумя новыми. Цвет всё ещё зависит только от открытия и закрытия текущей свечи. Отметки учитывают и прошлое закрытие.
Найдите пропущенную свечу
Найдите растущую свечу без зелёной отметки в строгом варианте. Проверьте её открытие и прошлое закрытие. Объясните, какая часть and не выполнена.