Теперь программа различит растущие и падающие свечи: сравнит открытие с закрытием и покажет результат цветом и отметкой.

Истина или ложь

Результат 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)

Запустите на демонстрационных данных. Цвет линии закрытия меняется по свечам. Под растущими свечами появляются зелёные треугольники.

На графике candle_conditions.py видны линия закрытия переменного цвета и зелёные треугольники.
Логическое условие выбирает цвет и рисует треугольники под растущими свечами.

Первый аргумент 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 не выполнена.