Pinescript сравнить месяцы

Как сравнить месяцы в сосновом скрипте? В качестве примера на месячном графике я хочу узнать, относится ли текущий бар к январю и т. д. В настоящее время я могу сделать это с дневными барами, используя dayofweek, однако эквивалента monthofyear или подобного нет.

До сих пор я пытался использовать следующий код, чтобы посмотреть, смогу ли я найти способ использовать вывод month(), чтобы определить, в каком месяце находится полоса, однако мне пока это не удалось.

if barstate.islast
    x = bar_index
    y = close[0]
    txt = str.tostring(month(time[0]))
    label.new(x + 10, y, txt)

Конечная цель этого индикатора — определить, какие месяцы в среднем имеют положительную или отрицательную доходность, и отобразить эту информацию с помощью метки.

Что вы получаете в результате? Месяц верен для всего, что я тестировал с использованием вашего кода. В настоящее время в апреле должно вернуться 4

AmphibianTrading 17.04.2024 06:51

Я получаю довольно небольшие цифры. Недостаточно большой, чтобы быть временными метками Linux, просто 10, 24 и подобные числа. Я найду пример, где я получил 24, и добавлю его в вопрос.

John554 17.04.2024 15:49

если вы используете месяц (время), он вернет только месяц года, который будет варьироваться от 1 до 12.

AmphibianTrading 17.04.2024 18:29
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы правы, используя 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-месячный таймфрейм:

Другие вопросы по теме