Как сравнить месяцы в сосновом скрипте? В качестве примера на месячном графике я хочу узнать, относится ли текущий бар к январю и т. д. В настоящее время я могу сделать это с дневными барами, используя dayofweek
, однако эквивалента monthofyear
или подобного нет.
До сих пор я пытался использовать следующий код, чтобы посмотреть, смогу ли я найти способ использовать вывод month()
, чтобы определить, в каком месяце находится полоса, однако мне пока это не удалось.
if barstate.islast
x = bar_index
y = close[0]
txt = str.tostring(month(time[0]))
label.new(x + 10, y, txt)
Конечная цель этого индикатора — определить, какие месяцы в среднем имеют положительную или отрицательную доходность, и отобразить эту информацию с помощью метки.
Я получаю довольно небольшие цифры. Недостаточно большой, чтобы быть временными метками Linux, просто 10, 24 и подобные числа. Я найду пример, где я получил 24, и добавлю его в вопрос.
если вы используете месяц (время), он вернет только месяц года, который будет варьироваться от 1 до 12.
Вы правы, используя month()
, но если вы используете это на парах Форекс, у вас возникнут проблемы, когда сессия текущего дня начнется в предыдущий календарный день.
Для таких случаев есть еще одна встроенная переменная, называемая time_tradingday
.
time_tradingday
Время начала торгового дня, к которому принадлежит текущий бар, в Формат UNIX (количество миллисекунд, прошедших с момента 00:00:00 UTC, 1 января 1970 г.).
ЗАМЕЧАНИЯ
Эта переменная полезна для ночных сеансов, когда сеанс текущего дня может начаться в предыдущий календарный день (например, в EURUSD сессия понедельника начнется в воскресенье в 17:00). В отличие от времени, который вернет метку времени воскресенья в 17:00 понедельника. дневной бар, time_tradingday вернет метку времени понедельника, 00:00.При использовании на таймфреймах выше 1D time_tradingday возвращает торговый день последнего дня внутри бара (например, на 1W он вернет последний торговый день недели).
Вот тестовый код для вас. Первая часть — это ваш код без проверки lastbar
, а вторая часть — тот же код, но вместо нее используется time_tradingday
.
//@version=5
indicator("My script", overlay=true, max_labels_count=100)
m1 = month(time[0])
txt = str.tostring(m1)
label.new(bar_index, high, txt)
m2 = month(time_tradingday)
txt2 = str.tostring(m2)
label.new(bar_index, low, txt2, yloc=yloc.belowbar, style=label.style_label_up, color=color.green, textcolor=color.white)
is_not_equal = (m1 != m2)
bgcolor(is_not_equal ? color.new(color.red, 85) : na)
Синие метки над полосами — это ваш исходный код, а зеленые метки под полосой — это новый результат. Красный фон — это то место, где эти два значения различаются.
EURUSD, 1-месячный таймфрейм:
Что вы получаете в результате? Месяц верен для всего, что я тестировал с использованием вашего кода. В настоящее время в апреле должно вернуться 4