pine script - проблема с разрывом пользовательской сессии

//@version=4
study("custom Session breakout", overlay=true)
my_session = input("1145-1215", type=input.session, title='Custom Session')


// Determine if we are in a session
// ----------------------------------
in_session = time(timeframe.period, my_session)
is_new_session(res, sess) =>
    t = time(res, sess)
    na(t[1]) and not na(t) or t[1] < t

new_session = is_new_session("1400", my_session)

// Get the High/Low of the EMA for the session
highH = float(na)
lowH = float(na)

highH := new_session ? close : in_session ? max(high , highH[1]) : high
lowH := new_session ? close : in_session ? min(low, lowH[1]) : low

plot(highH, color=color.green , style=plot.style_circles, title='High')
plot(lowH, color=color.red, style=plot.style_circles, title='Low')

над кодом, который я написал (помощь от https://www.pinecoders.com/), но он делает не рисовать линии пробоя в нашем пользовательском сеансе. Любая помощь будет оценена.

URL изображения – https://prnt.sc/tzpiff

Неправильная маркировка свечей — https://prnt.sc/tzzwdj

Обновлен код с предупреждением - код ниже

//@version=4
study("custom Session breakout", overlay=true)
my_session = input("0945-1015", type=input.session, title='Custom Session')

is_new_session(res, sess) =>
    t = time(res, sess)
    na(t[1]) and not na(t) or t[1] < t

f_tickFormat() =>
    _s = tostring(syminfo.mintick)
    _s := str.replace_all(_s, "25", "00")
    _s := str.replace_all(_s, "5",  "0")
    _s := str.replace_all(_s, "1",  "0")

new_session  = is_new_session("1400", my_session)
var hiLine   = line.new(bar_index, high, bar_index, high, color = color.orange, width = 2, extend = extend.both)
var loLine   = line.new(bar_index, low,  bar_index, low,  color = color.orange, width = 2, extend = extend.both)
var hiLabel  = label.new(bar_index, na, "", color = color(na), style = label.style_none, textcolor = color.silver)
var loLabel  = label.new(bar_index, na, "", color = color(na), style = label.style_none, textcolor = color.silver)
var float hi = na
var float lo = na
if new_session
    // Update hi and lo.
    hi := high
    lo := low
    // Update lines.
    line.set_xy1(  hiLine,  bar_index - 1, hi)   
    line.set_xy2(  hiLine,  bar_index, hi)   
    line.set_xy1(  loLine,  bar_index - 1, lo)   
    line.set_xy2(  loLine,  bar_index, lo)
    // Update labels.
    label.set_xy(  hiLabel, bar_index, hi)
    label.set_text(hiLabel, tostring(hi, f_tickFormat()))
    label.set_xy(  loLabel, bar_index, lo)
    label.set_text(loLabel, tostring(lo, f_tickFormat()))

// Crosses
xUp = crossover( close, hi)
xDn = crossunder(close, lo)

//Alert
alertcondition(xUp, title='Up Breakout', message='Up Breakout')
alertcondition(xDn, title='Down Breakout', message='Down Breakout')


// Mark session beginnings for debugging.
plotchar(new_session, "new_session", "•", location.abovebar, size = size.tiny)
plotchar(xUp, "xUp", "▲", location.belowbar, color.lime, size = size.tiny)
plotchar(xDn, "xDn", "▼", location.abovebar, color.fuchsia, size = size.tiny)

Примечание. Я добавил условие оповещения в pinescript, а также установил оповещение в TradingView, но оповещение не срабатывает вовремя, т. е. при прорыве HIGH/LOW.


person Pawan Kumar    schedule 12.08.2020    source источник
comment
Было бы полезно, если бы вы показали график с линиями, которые вы ищете. линии прорыва могут означать много разных вещей.   -  person PineCoders-LucF    schedule 14.08.2020
comment
Спасибо. Я добавил URL-адрес изображения диаграммы ниже описания.   -  person Pawan Kumar    schedule 14.08.2020


Ответы (1)


Версия 1

Это нарисует линии на максимуме и минимуме первого бара последней сессии и покажет цену на нем. Идея заключается в том, что мы рисуем первую бесполезную линию и метку, а затем корректируем ее, когда обнаруживаем начало нового сеанса. Если вам нужно изменить цвета, измените их в объявлениях переменных перед оператором if.

Элемент f_tickformat() форматирует десятичные дроби цены с точностью до тика символа графика.

//@version=4
study("custom Session breakout", overlay=true)
my_session = input("1145-1215", type=input.session, title='Custom Session')

is_new_session(res, sess) =>
    t = time(res, sess)
    na(t[1]) and not na(t) or t[1] < t

f_tickFormat() =>
    _s = tostring(syminfo.mintick)
    _s := str.replace_all(_s, "25", "00")
    _s := str.replace_all(_s, "5",  "0")
    _s := str.replace_all(_s, "1",  "0")

new_session = is_new_session("1400", my_session)
var hiLine  = line.new(bar_index, high, bar_index, high, color = color.orange, width = 2, extend = extend.both)
var loLine  = line.new(bar_index, low,  bar_index, low,  color = color.orange, width = 2, extend = extend.both)
var hiLabel = label.new(bar_index, na, "", color = color(na), style = label.style_none, textcolor = color.silver)
var loLabel = label.new(bar_index, na, "", color = color(na), style = label.style_none, textcolor = color.silver)
if new_session
    // Update lines.
    line.set_xy1(  hiLine,  bar_index - 1, high)   
    line.set_xy2(  hiLine,  bar_index, high)   
    line.set_xy1(  loLine,  bar_index - 1, low)   
    line.set_xy2(  loLine,  bar_index, low)
    // Update labels.
    label.set_xy(  hiLabel, bar_index, high)
    label.set_text(hiLabel, tostring(high, f_tickFormat()))
    label.set_xy(  loLabel, bar_index, low)
    label.set_text(loLabel, tostring(low, f_tickFormat()))

// Mark session beginnings for debugging.
plotchar(new_session, "new_session", "•", location.abovebar, size = size.tiny)

введите здесь описание изображения

Версия 2

Это покажет маркеры на крестах уровней. Вы можете использовать то же условие для определения ваших предупреждений, используя alertcondition():

//@version=4
study("custom Session breakout", overlay=true)
my_session = input("1145-1215", type=input.session, title='Custom Session')

is_new_session(res, sess) =>
    t = time(res, sess)
    na(t[1]) and not na(t) or t[1] < t

f_tickFormat() =>
    _s = tostring(syminfo.mintick)
    _s := str.replace_all(_s, "25", "00")
    _s := str.replace_all(_s, "5",  "0")
    _s := str.replace_all(_s, "1",  "0")

new_session  = is_new_session("1400", my_session)
var hiLine   = line.new(bar_index, high, bar_index, high, color = color.orange, width = 2, extend = extend.both)
var loLine   = line.new(bar_index, low,  bar_index, low,  color = color.orange, width = 2, extend = extend.both)
var hiLabel  = label.new(bar_index, na, "", color = color(na), style = label.style_none, textcolor = color.silver)
var loLabel  = label.new(bar_index, na, "", color = color(na), style = label.style_none, textcolor = color.silver)
var float hi = na
var float lo = na
if new_session
    // Update hi and lo.
    hi := high
    lo := low
    // Update lines.
    line.set_xy1(  hiLine,  bar_index - 1, hi)   
    line.set_xy2(  hiLine,  bar_index, hi)   
    line.set_xy1(  loLine,  bar_index - 1, lo)   
    line.set_xy2(  loLine,  bar_index, lo)
    // Update labels.
    label.set_xy(  hiLabel, bar_index, hi)
    label.set_text(hiLabel, tostring(hi, f_tickFormat()))
    label.set_xy(  loLabel, bar_index, lo)
    label.set_text(loLabel, tostring(lo, f_tickFormat()))

// Crosses
xUp = crossover( close, hi)
xDn = crossunder(close, lo)

// Mark session beginnings for debugging.
plotchar(new_session, "new_session", "•", location.abovebar, size = size.tiny)
plotchar(xUp, "xUp", "▲", location.belowbar, color.lime, size = size.tiny)
plotchar(xDn, "xDn", "▼", location.abovebar, color.fuchsia, size = size.tiny)

введите здесь описание изображения

person PineCoders-LucF    schedule 15.08.2020
comment
Спасибо. Я попробую самостоятельно добавить алерт на пробой линии, т.е. алерт на прорыв максимума/минимума. Вы очень помогаете PineCoders-LucF - person Pawan Kumar; 15.08.2020
comment
Если вы пытались использовать синтаксис условий оповещения pinescript, но когда я создавал оповещение на телевизоре, у меня возникало диалоговое окно с проблемой перерисовки. Что мне нужно, так это то, что всякий раз, когда цена пробивает ВЫСОКИЙ или НИЗКИЙ (после завершения пользовательского сеанса), телевидение должно генерировать предупреждение. спасибо учусь с вами - person Pawan Kumar; 15.08.2020
comment
Обновил ответ. - person PineCoders-LucF; 15.08.2020
comment
Спасибо!! вы такие быстрые PineCoders-LucF. Вы отличный программист. - person Pawan Kumar; 15.08.2020
comment
@ PineCoders-LucF Я добавил условия оповещения, но он не предупреждает, когда происходит пересечение. Посмотри пожалуйста. - person Pawan Kumar; 17.08.2020
comment
Во-первых, мы не будем писать для вас полный индикатор. Мы предоставили вам код состояния, поэтому все, что вам нужно сделать, это настроить оповещения с помощью alertcondition(). Во-вторых, если что-то не работает, и вы не предоставляете код, который не работает, мы не сможем это исправить. - person PineCoders-LucF; 18.08.2020
comment
Извините за неудобства, которые произошли с вами. Я добавил коды pinescript внизу описания. Спасибо - person Pawan Kumar; 18.08.2020