2:1 strategy with signals
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «2 to 1 strategy with signals.pine» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Мультифункциональный индикатор-оверлей для TradingView, объединяющий несколько аналитических модулей в одном скрипте. Определяет точки разворота (пивоты) и маркирует более высокие/более низкие экстремумы (HH, LH, HL, LL). Строит каналы тренда на основе усреднённого значения и полос ATR, а также отображает уровни Фибоначчи для завершённых сессий. Генерирует сигналы на покупку и продажу с использованием супертренда, скользящих средних и дополнительных фильтров. Включает систему управления рисками с уровнями стоп-лосс, тейк-профита и трейлинг-стоп-лосс, а также визуализацию зон консолидации, ордер-блоков и уровней поддержки/сопротивления.
Настройки программы
| Настройка | Описание |
|---|---|
| srcH | Источник для пивот-хай — Источник данных для расчёта пивотных максимумов (по умолчанию High). |
| leftLenH | Левая длина пивот-хай — Количество баров слева для подтверждения пивотного максимума. |
| rightLenH | Правая длина пивот-хай — Количество баров справа для подтверждения пивотного максимума. |
| colorH | Цвет пивот-хай — Цвет маркеров пивотных максимумов. |
| srcL | Источник для пивот-ло — Источник данных для расчёта пивотных минимумов (по умолчанию Low). |
| leftLenL | Левая длина пивот-ло — Количество баров слева для подтверждения пивотного минимума. |
| rightLenL | Правая длина пивот-ло — Количество баров справа для подтверждения пивотного минимума. |
| colorL | Цвет пивот-ло — Цвет маркеров пивотных минимумов. |
| showhh | Показать HH LH HL LL — Включает отображение маркеров более высоких и более низких экстремумов на графике. |
| maxBarsBack | Максимум баров для отображения — Ограничение количества баров, на которых отображаются пивоты (0 — все бары). |
| showLabelsPriceScaleInput | Показать подписи на шкале цены — Отображает подписи маркеров на шкале цены графика. |
| sess1Hour | Час начала сессии — Час начала торговой сессии для отрисовки горизонтальных линий. |
| sess1Minute | Минута начала сессии — Минута начала торговой сессии. |
| extendHours | Продолжительность горизонтальных линий — Сколько часов продолжать горизонтальные линии сессии. |
| color_up | Цвет роста — Цвет для отображения бычьих элементов и свечей роста. |
| color_dn | Цвет падения — Цвет для отображения медвежьих элементов и свечей падения. |
| horaSeleccionada | Час анализа — Час (в 24-часовом формате) свечи, для которой рассчитываются уровни деления. |
| minutoSeleccionado | Минута анализа — Минута свечи, для которой рассчитываются уровни деления. |
| diferenciaUTC | Смещение UTC — Разница во времени с UTC в часах для определения локального времени свечи. |
| colorTercio1 | Цвет первой трети — Цвет заливки верхней трети свечи. |
| colorTercio2 | Цвет второй трети — Цвет заливки средней трети свечи. |
| colorTercio3 | Цвет третьей трети — Цвет заливки нижней трети свечи. |
| showTrendLevels | Показать уровни тренда — Включает отображение канала трендовых уровней (поддержка, сопротивление, средняя). |
| mult2 | Множитель — Множитель для расчёта полос канала тренда на основе ATR. |
| slope | Наклон — Параметр наклона для расчёта среднего тренда. |
| colUp | Цвет верхней линии — Цвет линий верхней поддержки в канале тренда. |
| colMa | Цвет средней линии — Цвет средней линии канала тренда. |
| colDn | Цвет нижней линии — Цвет линий нижнего сопротивления в канале тренда. |
| time_zone_offset | Смещение часового пояса — Смещение UTC для пересчёта времени сессий в локальный часовой пояс. |
| session_start_hour | Час начала сессии Фиб — Час начала сессии для расчёта уровней Фибоначчи. |
| session_start_minute | Минута начала сессии Фиб — Минута начала сессии для расчёта уровней Фибоначчи. |
| session_end_hour | Час окончания сессии Фиб — Час окончания сессии для расчёта уровней Фибоначчи. |
| session_end_minute | Минута окончания сессии Фиб — Минута окончания сессии для расчёта уровней Фибоначчи. |
| fib_line_width | Толщина линий Фиб — Толщина линий уровней Фибоначчи. |
| line_offset | Смещение подписей Фиб — Расстояние подписей уровней Фибоначчи от линии. |
| background_color | Цвет фона сессии — Цвет фона для выделения активной торговой сессии. |
| themeMode | Цветовая тема — Выбор цветовой темы интерфейса: тёмная, светлая или пользовательская. |
| customLongColor | Цвет быстрой SMA и сигнала покупки — Пользовательский цвет для быстрой скользящей средней и сигналов на покупку. |
| customShortColor | Цвет медленной SMA и сигнала продажи — Пользовательский цвет для медленной скользящей средней и сигналов на продажу. |
| customTableText | Цвет текста таблицы — Цвет текста в информационной таблице. |
| customTableBg | Цвет фона таблицы — Цвет фона ячеек информационной таблицы. |
| customTableHeader | Цвет заголовка таблицы — Цвет фона заголовка информационной таблицы. |
| enableDashboard | Включить панель — Включает или отключает отображение информационной панели на графике. |
| locationDashboard | Расположение панели — Позиция информационной панели на графике. |
| sizeDashboard | Размер панели — Размер информационной панели. |
| colorBackground | Фон панели — Цвет фона информационной панели. |
| colorFrame | Рамка панели — Цвет рамки информационной панели. |
| colorBorder | Граница панели — Цвет границы информационной панели. |
| showSignals | Показать сигналы — Включает отображение сигналов покупки и продажи на графике. |
| strategy | Режим стратегии — Выбор режима расчёта сигналов: обычный или трендовый скальпер. |
| sensitivity | Чувствительность — Параметр чувствительности для определения смены направления тренда. |
| consSignalsFilter | Фильтр сигналов консолидации — Фильтрует сигналы, показывая только те, которые совпадают с зонами консолидации. |
| StrongSignalsOnly | Только сильные сигналы — Отображает только сигналы, подтверждённые дополнительными условиями. |
| candleColors | Цвет свечей — Включает окрашивание свечей в соответствии с направлением сигнала. |
| momentumCandles | Свечи импульса — Включает выделение свечей с импульсным движением. |
| highVolSignals | Только сигналы с высоким объёмом — Фильтрует сигналы, показывая только те, которые сопровождаются высоким объёмом. |
| enableTrailingSL | Включить трейлинг-стоп — Включает отслеживание трейлинг-стоп-лосса по цене. |
| usePercSL | Процентный трейлинг-стоп — Использует процентное значение для расчёта трейлинг-стоп-лосса. |
| percTrailingSL | Процент трейлинг-стопа — Процент от цены для расчёта трейлинг-стоп-лосса. |
| enableSwings | Включить свинг-маркеры — Отображает подписи свинг-хай и свинг-ло на графике. |
| periodSwings | Период свинг-анализа — Период для определения свинг-хай и свинг-ло. |
| enableTpSlAreas | Включить зоны TP/SL — Отображает горизонтальные линии и подписи уровней стоп-лосс и тейк-профита. |
| useTP1 | Использовать TP1 — Включает отображение первого уровня тейк-профита. |
| multTP1 | Множитель TP1 — Множитель расстояния для первого уровня тейк-профита. |
| useTP2 | Использовать TP2 — Включает отображение второго уровня тейк-профита. |
| multTP2 | Множитель TP2 — Множитель расстояния для второго уровня тейк-профита. |
| useTP3 | Использовать TP3 — Включает отображение третьего уровня тейк-профита. |
| multTP3 | Множитель TP3 — Множитель расстояния для третьего уровня тейк-профита. |
| tslLabels | Подписи трейлинг-стопа — Включает отображение подписей трейлинг-стоп-лосса на графике. |
| showTrendCloud | Показать облачко тренда — Включает отображение облачка тренда на основе супертренда. |
| periodTrendCloud | Период облачка тренда — Выбор периода расчёта облачка тренда: краткосрочный, долгосрочный или новый. |
| signalsTrendCloud | Только трендовые сигналы — Фильтрует сигналы, показывая только те, которые совпадают с направлением тренда. |
| fastTrendCloud | Быстрое облачко тренда — Использует ускоренное расчётное облако тренда. |
| fastTrendCloudLen | Длина быстрого облачка — Длина периода для быстрого расчёта облачка тренда. |
| enableAutoTrend | Включить автоматические трендовые линии — Отрисовывает автоматические трендовые линии по каналу. |
| srcTrendChannel | Источник канала тренда — Источник данных для расчёта трендового канала. |
| lenTrendChannel | Длина канала тренда — Длина цикла для расчёта трендового канала. |
| enableSR | Включить поддержку и сопротивление — Отображает уровни поддержки и сопротивления на основе пивотов. |
| lineSrStyle | Стиль линий поддержки/сопротивления — Стиль линий уровней поддержки и сопротивления. |
| lineSrWidth | Толщина линий поддержки/сопротивления — Толщина линий уровней поддержки и сопротивления. |
| showCons | Показать зоны консолидации — Включает отображение зон консолидации на графике. |
| lbPeriod | Период отката — Количество баров для определения максимумов и минимумов при поиске консолидации. |
| lenCons | Минимальная длина консолидации — Минимальное количество баров для подтверждения зоны консолидации. |
| paintCons | Заливка зоны консолидации — Заливает область консолидации на графике цветом. |
| colorZone | Цвет зоны консолидации — Цвет заливки зоны консолидации. |
| box_ob | Показать ордер-блоки — Включает отображение ордер-блоков (зон поглощения) на графике. |
| box_hide_gray | Скрыть серые блоки — Скрывает серые (протестированные) ордер-блоки. |
| bos_type | Тип триггера MSB — Тип свечи, используемой для определения триггера блока: по высокому/низкому или по открытию/закрытию. |
| box_sv | Показать блоки спроса — Отрисовывает блоки спроса (оранжевые) на графике. |
| box_test_delay | Задержка тестирования блока — Количество баров задержки для подтверждения тестирования блока. |
| box_fill_delay | Задержка заполнения блока — Количество баров задержки для подтверждения заполнения блока. |
| box_test_sv | Затемнять протестированные блоки — Затемняет блоки, которые были протестированы ценой. |
| box_stop_sv | Остановить отрисовку заполненных блоков — Прекращает отображение блоков после их заполнения ценой. |
| periodInput | Длина Гауссова фильтра — Период для расчёта коэффициента Гауссова фильтра. |
| polesInput | Порядок фильтра — Порядок (полюса) Гауссова фильтра, влияющий на сглаживание. |
| linreglen | Длина сглаживания — Длина линейной регрессии для дополнительного сглаживания. |
| linregoffset | Множитель сглаживания — Смещение для сглаживания выходной линии фильтра. |
| en_table | Включить таблицу — Включает отображение таблицы дополнительных таймфреймов. |
| table_size | Размер таблицы — Размер таблицы дополнительных таймфреймов. |
| t1 | Таймфрейм 1 — Первый дополнительный таймфрейм для анализа. |
Поиск по коду файла
indicator(title = '2:1 strategy with signals', overlay = true, max_labels_count=500, max_lines_count=200, max_boxes_count=200)
srcParams = 'Pivot Source | Left Length | Right Length'
srcH = input.source(high, title = 'High', inline = 'Pivot High', group = srcParams)
leftLenH = input.int(title = '', defval = 4, minval = 0, inline = 'Pivot High', group = srcParams)
rightLenH = input.int(title = '', defval = 2, minval = 0, inline = 'Pivot High', group = srcParams)
colorH = input.color(title = '', defval = color.new(color.teal, 50), inline = 'Pivot High', group = srcParams)
srcL = input.source(low, title = 'Low', inline = 'Pivot Low', group = srcParams)
leftLenL = input.int(title = '', defval = 4, minval = 0, inline = 'Pivot Low', group = srcParams)
rightLenL = input.int(title = '', defval = 2, minval = 0, inline = 'Pivot Low', group = srcParams)
colorL = input.color(title = '', defval = color.new(color.red, 50), inline = 'Pivot Low', group = srcParams)
markDisplay = 'Pivots Markers'
tip2 = "Higher High\nLower High\nHigher Low\nLower Low"
showhh = input.bool(false, 'Show HH LH HL LL', inline = '1', group = markDisplay, tooltip = tip2)
settings = 'Others'
maxBarsBack = input.int(0, 'Maximum Bars to Display (0 = All)', minval = 0, group = settings)
string GROUP_PLS = 'Labels'
bool showLabelsPriceScaleInput = input.bool(false, 'Show Labels on Price Scale.', tooltip="", group=GROUP_PLS)
labelDisplay = showLabelsPriceScaleInput ? display.all : display.pane // , editable = false, display=labelDisplay)
ph = ta.pivothigh(srcH, leftLenH, rightLenH)
pl = ta.pivotlow(srcL, leftLenL, rightLenL)
ph_value = srcH[rightLenH]
pl_value = srcL[rightLenL]
valuewhen_1 = ta.valuewhen(not na(ph), ph_value, 1)
valuewhen_2 = ta.valuewhen(not na(ph), ph_value, 0)
higherhigh = na(ph) ? na : valuewhen_1 < valuewhen_2 ? ph : na
lowerhigh = na(ph) ? na : valuewhen_1 > valuewhen_2 ? ph : na
valuewhen_3 = ta.valuewhen(not na(pl), pl_value, 1)
valuewhen_4 = ta.valuewhen(not na(pl), pl_value, 0)
higherlow = na(pl) ? na : valuewhen_3 < valuewhen_4 ? pl : na
lowerlow = na(pl) ? na : valuewhen_3 > valuewhen_4 ? pl : na
isInDisplayRange() => maxBarsBack == 0 or (bar_index > (last_bar_index - maxBarsBack))
plotshape(showhh and isInDisplayRange() ? higherhigh : na, title = 'HH', style = shape.triangledown, location = location.abovebar, color = colorH, text = 'HH', textcolor = colorH, offset = -rightLenH,display=labelDisplay)
plotshape(showhh and isInDisplayRange() ? higherlow : na, title = 'HL', style = shape.triangleup, location = location.belowbar, color = colorL, text = 'HL', textcolor = colorL, offset = -rightLenH,display=labelDisplay)
plotshape(showhh and isInDisplayRange() ? lowerhigh : na, title = 'LH', style = shape.triangledown, location = location.abovebar, color = colorH, text = 'LH', textcolor = colorH, offset = -rightLenL,display=labelDisplay)
plotshape(showhh and isInDisplayRange() ? lowerlow : na, title = 'LL', style = shape.triangleup, location = location.belowbar, color = colorL, text = 'LL', textcolor = colorL, offset = -rightLenL,display=labelDisplay)
import Llopezf/Time/1
var grp3 = '***************Show Market Open*************** '
sess1Hour = input.int(1, title='open in hour ', minval=0, maxval=23, inline='0', group=grp3)
sess1Minute = input.int(0, title=' and minute', minval=0, maxval=60, inline='0', group=grp3)
inSession1 = hour == sess1Hour and minute == sess1Minute and second == 0
var grp4 = '*************** Other Settings ***************'
extendHours = input.int(22, title='Extend Horizontal lines( hours)?', minval=1, maxval=22, group=grp4)
color_up = input.color(color.green, title='', inline="1", group=grp4)
color_dn = input.color(color.red, title='', inline="1", group=grp4)
var float open_d=na
var float new_h=na
var float new_l=na
var box candle=na
var line sh_up=na
var line sh_dn=na
var color ca_color=na
_extend = extendHours * 3600000
if inSession1 and not inSession1[1]
open_d:=open
new_h:=open
new_l:=open
if low < new_l
new_l := low
new_l
if high > new_h
new_h := high
new_h
if close !=close[1]
ca_color:=close>open_d? color_up:color_dn
box.delete(candle[1])
candle:=box.new( bar_index+20,open_d ,bar_index+26,close,bgcolor=ca_color,border_color =na)
if close>open_d //Drew upper shadow
line.delete(sh_up[1])
line.delete(sh_dn[1])
sh_up:= line.new(bar_index+23,close,bar_index+23,new_h,width = 2,color = ca_color)
sh_dn:= line.new(bar_index+23,open_d,bar_index+23,new_l,width = 2,color = ca_color)
else
line.delete(sh_up[1])
line.delete(sh_dn[1])
sh_up:= line.new(bar_index+23,open_d,bar_index+23,new_h,width = 2,color = ca_color)
sh_dn:= line.new(bar_index+23,close,bar_index+23,new_l,width = 2,color = ca_color)
horaSeleccionada = input(8, "Hour (24h)")
minutoSeleccionado = input(45, "Minute")
diferenciaUTC = input.int(-8, "UTC offset (hours)", minval=-12, maxval=14)
colorTercio1 = input.color(color.rgb(218, 185, 51, 80), "First section color")
colorTercio2 = input.color(color.rgb(33, 149, 243, 80), "Second section color")
colorTercio3 = input.color(color.rgb(255, 82, 82, 80), "Third section color")
horaActual = hour(time) + diferenciaUTC
if horaActual < 0
horaActual := horaActual + 24
if horaActual >= 24
horaActual := horaActual - 24
minutoActual = minute(time)
esVelaSeleccionada = (horaActual == horaSeleccionada and minutoActual == minutoSeleccionado)
var float highVela = na
var float lowVela = na
var float tercio = na
if esVelaSeleccionada
highVela := high
lowVela := low
tercio := (highVela - lowVela) / 3
if esVelaSeleccionada and not na(tercio)
box.new(left=int(bar_index - 1), right=int(bar_index + 2), top=highVela, bottom=highVela - tercio, border_width=0, bgcolor=colorTercio1)
box.new(left=int(bar_index - 1), right=int(bar_index + 2), top=highVela - tercio, bottom=highVela - 2 * tercio, border_width=0, bgcolor=colorTercio2)
box.new(left=int(bar_index - 1), right=int(bar_index + 2), top=highVela - 2 * tercio, bottom=lowVela, border_width=0, bgcolor=colorTercio3)
showTrendLevels = input(true, "Show Trend Levels", group='Channel')
mult2 = input.float(15, 'Factor', minval=0, group='Channel')
slope = input.float(50, title='Slope', minval=0, group='Channel') * mult2
colUp = input.color(#089981, ' ', inline='color', group='Colors')
colMa = input.color(#787b86, ' ', inline='color', group='Colors')
colDn = input.color(#f23645, ' ', inline='color', group='Colors')
color colUp1 = color.new(colUp, 50)
color colUp2 = color.new(colUp, 0)
color avgCss = color.new(colMa, 0)
color colDn1 = color.new(colDn, 0)
color colDn2 = color.new(colDn, 50)
var float pc_avg = close
var int os = 1
var float hold_atr = 0.
atr = nz(ta.atr(200)) * mult2
pc_avg := math.abs(close - pc_avg) > atr ? close : pc_avg + os * hold_atr / slope
hold_atr := pc_avg == close ? atr / 2 : hold_atr
os := pc_avg > pc_avg[1] ? 1 : pc_avg < pc_avg[1] ? -1 : os
pc_R2 = showTrendLevels ? pc_avg + hold_atr : na
pc_R1 = showTrendLevels ? pc_avg + hold_atr / 2 : na
pc_S1 = showTrendLevels ? pc_avg - hold_atr / 2 : na
pc_S2 = showTrendLevels ? pc_avg - hold_atr : na
pc_avg_plot = showTrendLevels ? pc_avg : na
plot(pc_R2, 'Upper Resistance', color=colDn1,display=labelDisplay)
plot(pc_R1, 'Lower Resistance', color=colDn2,display=labelDisplay)
plot(pc_avg_plot, 'Average', color=avgCss,display=labelDisplay)
plot(pc_S1, 'Upper Support', color=colUp1,display=labelDisplay)
plot(pc_S2, 'Lower Support', color=colUp2,display=labelDisplay)
int time_zone_offset = input.int(-5, 'Time Zone Offset (UTC+/-)', minval = -12, maxval = 14, tooltip = 'Enter the UTC offset for your timezone. For example, UTC-4 would be -4, UTC+5 would be 5')
int session_start_hour = input.int(19, 'Session Start Time', minval = 0, maxval = 23, tooltip = 'Hour in your selected timezone')
int session_start_minute = input.int(0, 'Session Start Minute', minval = 0, maxval = 59)
int session_end_hour = input.int(22, 'Session End Time', minval = 0, maxval = 23, tooltip = 'Hour in your selected timezone')
int session_end_minute = input.int(3, 'Session End Minute', minval = 0, maxval = 59)
int fib_line_width = input.int(1, 'Fibonacci Line Width', minval = 1, maxval = 5)
int line_offset = input.int(10, 'Distance of label from the fib', minval = 1, maxval = 500)
color background_color = input(color.new(#b39ddb, 100))
var array<float> fib_levels = array.new_float()
var array<string> fib_labels_text = array.new_string()
var array<color> fib_colors = array.new_color()
resetFibLevelsAndLabels() =>
array.clear(fib_levels)
array.clear(fib_labels_text)
array.clear(fib_colors)
array.push(fib_levels, 5.0)
array.push(fib_labels_text, 'extreme')
array.push(fib_colors, #E91E63) // Pink
array.push(fib_levels, 4.5)
array.push(fib_labels_text, '')
array.push(fib_colors, #E91E63) // Pink
array.push(fib_levels, 4.0)
array.push(fib_labels_text, 'smr')
array.push(fib_colors, color.black) // Black
array.push(fib_levels, 3.5)
array.push(fib_labels_text, 'x')
array.push(fib_colors, #FF9800) // Orange
array.push(fib_levels, 3.272)
array.push(fib_labels_text, 'micro smr')
array.push(fib_colors, #FF9800) // Orange
array.push(fib_levels, 3.0)
array.push(fib_labels_text, '')
array.push(fib_colors, #FF9800) // Orange
array.push(fib_levels, 2.5)
array.push(fib_labels_text, 'lv')
array.push(fib_colors, color.gray) // Gray
array.push(fib_levels, 2.0)
array.push(fib_labels_text, 'sb')
array.push(fib_colors, color.black) // Black
array.push(fib_levels, 1.5)
array.push(fib_labels_text, 'retracement')
array.push(fib_colors, #00BCD4) // Cyan
array.push(fib_levels, 1.1111)
array.push(fib_labels_text, '')
array.push(fib_colors, #FFCDD2) // Light Pink
array.push(fib_levels, 1.0)
array.push(fib_labels_text, '')
array.push(fib_colors, color.silver) // Light Gray
array.push(fib_levels, 0.62)
array.push(fib_labels_text, '')
array.push(fib_colors, #FF9800) // Orange
array.push(fib_levels, 0.5)
array.push(fib_labels_text, '')
array.push(fib_colors, #00BCD4) // Cyan
array.push(fib_levels, 0.0)
array.push(fib_labels_text, '')
array.push(fib_colors, color.gray) // Gray with pattern
array.push(fib_levels, -0.1111)
array.push(fib_labels_text, '')
array.push(fib_colors, #FFCDD2) // Light Pink
array.push(fib_levels, -0.5)
array.push(fib_labels_text, 'retracement')
array.push(fib_colors, #00BCD4) // Cyan
array.push(fib_levels, -1.0)
array.push(fib_labels_text, 'sb')
array.push(fib_colors, color.black) // Black
array.push(fib_levels, -2.0)
array.push(fib_labels_text, 'micro smr')
array.push(fib_colors, #FF9800) // Orange
array.push(fib_levels, -2.272)
array.push(fib_labels_text, '')
array.push(fib_colors, #FF9800) // Orange
array.push(fib_levels, -2.5)
array.push(fib_labels_text, 'x')
array.push(fib_colors, #FF9800) // Orange
array.push(fib_levels, -3.0)
array.push(fib_labels_text, 'smr')
array.push(fib_colors, color.black) // Black
array.push(fib_levels, -3.5)
array.push(fib_labels_text, '')
array.push(fib_colors, #E91E63) // Pink
array.push(fib_levels, -4.0)
array.push(fib_labels_text, 'extreme')
array.push(fib_colors, #E91E63) // Pink
isSession(int current_hour, int current_minute, int startHour, int startMinute, int endHour, int endMinute) =>
float current_time = current_hour + current_minute / 60.0
float start_time = startHour + startMinute / 60.0
float end_time = endHour + endMinute / 60.0
start_time < end_time ? (current_time >= start_time and current_time < end_time) : (current_time >= start_time or current_time < end_time)
int current_hour_custom_tz = (hour(time) + time_zone_offset) % 24
current_hour_custom_tz := current_hour_custom_tz < 0 ? current_hour_custom_tz + 24 : current_hour_custom_tz
int current_minute = minute(time)
bool in_session = isSession(current_hour_custom_tz, current_minute, session_start_hour, session_start_minute, session_end_hour, session_end_minute)
bgcolor(in_session ? background_color : na)
var float session_high = na
var float session_low = na
var int session_bars = 0
var bool session_processed = false
var int last_session_end_bar = 0
var float last_session_high = na
var float last_session_low = na
var int last_session_bars = 0
var array<line> fib_lines = array.new_line()
var array<label> fib_labels = array.new_label()
createLabel(price, labelText, labelColor) =>
label.new(bar_index - int(last_session_bars / 2) + line_offset, price, text = labelText, style = label.style_label_center, color = color.new(color.white, 100), size = size.small, textcolor = labelColor)
clearAllLinesAndLabels() =>
while array.size(fib_lines) > 0
line.delete(array.pop(fib_lines))
while array.size(fib_labels) > 0
label.delete(array.pop(fib_labels))
if barstate.isnew
if in_session
session_high := na(session_high) ? high : math.max(high, session_high)
session_low := na(session_low) ? low : math.min(low, session_low)
session_bars := session_bars + 1
session_processed := false
else if not in_session and not session_processed and not na(session_high) and not na(session_low) and session_bars > 0
last_session_high := session_high
last_session_low := session_low
last_session_bars := session_bars
last_session_end_bar := bar_index - 1
clearAllLinesAndLabels()
resetFibLevelsAndLabels()
float session_range = last_session_high - last_session_low
float session_midpoint = (last_session_high + last_session_low) / 2
int session_start_index = last_session_end_bar - last_session_bars + 1
for i = 0 to array.size(fib_levels) - 1
float level = array.get(fib_levels, i)
float fibPrice = session_midpoint + (level - 0.5) * session_range
color levelColor = array.get(fib_colors, i)
line fibLine = line.new(session_start_index, fibPrice, last_session_end_bar, fibPrice,
width = fib_line_width, color = levelColor)
label fibLabel = createLabel(fibPrice, array.get(fib_labels_text, i), levelColor)
array.push(fib_lines, fibLine)
array.push(fib_labels, fibLabel)
session_high := na
session_low := na
session_bars := 0
session_processed := true
var g_visuals = '🎨 Visual Settings'
themeMode = input.string('Light', 'Color Theme', options = ['Dark', 'Light', 'Custom'],
tooltip = 'Select color theme for better visibility in different chart modes', group = g_visuals, display = display.none)
var color darkLongColor = #2962FF // Strong blue
var color darkShortColor = #FF6D00 // Orange
var color darkTableText = #ffffff
var color darkTableBg = #1e222d // Darker background
var color darkTableHeader = #2a2e39 // Slightly lighter than background
var color lightLongColor = #0064fe // DARK_BLUE from FibExtender
var color lightShortColor = #10cab8 // TURQUOISE from FibExtender
var color lightTableText = #000000
var color lightTableBg = #f0f3fa // Light background
var color lightTableHeader = #e1e5ef // Slightly darker than background
var g_custom = '🎨 Custom Colors'
showCustomColors = themeMode == 'Custom'
customLongColor = input.color(darkLongColor, 'Fast SMA & Long Signal',
tooltip='Color Settings for Strategy Elements:\n' +
'• Fast SMA & Long Signal: Color for the faster moving average and long position indicators\n' +
'• Slow SMA & Exit: Color for the slower moving average and exit signals',
inline = 'custom1', group = g_custom, display = display.none)
customShortColor = input.color(darkShortColor, 'Slow SMA & Exit',
inline = 'custom1', group = g_custom, display = display.none)
customTableText = input.color(darkTableText, 'Table Text',
tooltip='Table Color Settings:\n' +
'• Table Text: Color for all text elements in the table\n' +
'• Table Background: Main background color for the table cells',
inline = 'custom2', group = g_custom, display = display.none)
customTableBg = input.color(darkTableBg, 'Table Background',
inline = 'custom2', group = g_custom, display = display.none)
customTableHeader = input.color(darkTableHeader, 'Header Background',
tooltip='Color for table header and footer sections',
group = g_custom, display = display.none)
getThemeColors() =>
color longColor = switch themeMode
'Dark' => darkLongColor
'Light' => lightLongColor
=> customLongColor
color shortColor = switch themeMode
'Dark' => darkShortColor
'Light' => lightShortColor
=> customShortColor
color tableText = switch themeMode
'Dark' => darkTableText
'Light' => lightTableText
=> customTableText
color tableBg = switch themeMode
'Dark' => darkTableBg
'Light' => lightTableBg
=> customTableBg
color tableHeader = switch themeMode
'Dark' => darkTableHeader
'Light' => lightTableHeader
=> customTableHeader
[longColor, shortColor, tableText, tableBg, tableHeader]
[themeColorLong, themeColorShort, themeTextColor, themeBgColor, themeHeaderColor] = getThemeColors()
enableDashboard = input(true, "Enable Dashboard", group="DASHBOARD SETTINGS")
locationDashboard = input.string("Bottom right", "Location", ["Top right", "Top left", "Middle right", "Middle left", "Bottom right", "Bottom left"], group="DASHBOARD SETTINGS")
sizeDashboard = input.string("Tiny", "Size", ["Tiny", "Small", "Normal"], group="DASHBOARD SETTINGS")
colorBackground = input(#ffffff, "Bg color", group="DASHBOARD SETTINGS")
colorFrame = input(#000000, "Frame color", group="DASHBOARD SETTINGS")
colorBorder = input(#ffffff, "Border color", group="DASHBOARD SETTINGS")
showSignals = input(true, "Show signals", group="BUY AND SELL SIGNALS SETTINGS")
strategy = input.string("Normal", "Strategy", ["Normal"], group="BUY AND SELL SIGNALS SETTINGS")
sensitivity = input.float(5, "Sensitivity", 0.1, step=0.1, group="BUY AND SELL SIGNALS SETTINGS")
consSignalsFilter = input(false, "Consolidation signals filter", group="BUY AND SELL SIGNALS SETTINGS")
StrongSignalsOnly = input(false, "Strong signals only", group="BUY AND SELL SIGNALS SETTINGS")
candleColors = input(false, "Candle colors", group="BUY AND SELL SIGNALS SETTINGS")
momentumCandles = input(false, "Momentum candles", group="BUY AND SELL SIGNALS SETTINGS")
highVolSignals = input(false, "High volume signals only", group="BUY AND SELL SIGNALS SETTINGS")
enableTrailingSL = input(false, "Enable trailing stop-loss", group="RISK MANAGEMENT SETTINGS")
usePercSL = input(false, "% Trailing sl", inline="2", group="RISK MANAGEMENT SETTINGS")
percTrailingSL = input.float(1, "", 0, step=0.1, inline="2", group="RISK MANAGEMENT SETTINGS")
enableSwings = input(false, "Enable Swing High's & Swing's Low's", inline="3", group="RISK MANAGEMENT SETTINGS")
periodSwings = input.int(10, "", 2, inline="3", group="RISK MANAGEMENT SETTINGS")
enableTpSlAreas = input(true, "Enable take profit/stop-loss areas", group="RISK MANAGEMENT SETTINGS")
useTP1 = input(true, "", inline="4", group="RISK MANAGEMENT SETTINGS")
multTP1 = input.float(1, "TP 1", 0, inline="4", group="RISK MANAGEMENT SETTINGS")
useTP2 = input(true, "", inline="5", group="RISK MANAGEMENT SETTINGS")
multTP2 = input.float(2, "TP 2", 0, inline="5", group="RISK MANAGEMENT SETTINGS")
useTP3 = input(true, "", inline="6", group="RISK MANAGEMENT SETTINGS")
multTP3 = input.float(3, "TP 3", 0, inline="6", group="RISK MANAGEMENT SETTINGS")
tpLabels = true //input(true, "Take profit labels", group="RISK MANAGEMENT SETTINGS")
tslLabels = input(false, "Enable Trailing Stoploss", group="RISK MANAGEMENT SETTINGS")
showTrendCloud = input(true, "Show Trend cloud", group="TREND CLOUD SETTINGS")
periodTrendCloud = input.string("New", "Trend cloud period", ["Short term", "Long term", "New"], group="TREND CLOUD SETTINGS")
signalsTrendCloud = input(false, "Trend only signals", group="TREND CLOUD SETTINGS")
fastTrendCloud = input(false, "Fast trend cloud", group="TREND CLOUD SETTINGS")
fastTrendCloudLen = input.int(55, "Fast trend cloud", 2, group="TREND CLOUD SETTINGS")
enableAutoTrend = input(false, "Enable Auto Trendlines", group="AUTO TRENDLINES SETTINGS")
srcTrendChannel = input(close, "Trend channel source", group="AUTO TRENDLINES SETTINGS")
lenTrendChannel = input.int(200, "Trend channel loopback", 2, group="AUTO TRENDLINES SETTINGS")
enableSR = input(false, "Enable support and resistance", group="AUTO SUPPORT AND RESISTANCE SETTINGS")
lineSrStyle = input.string("Dashed", "Line Style", ["Solid", "Dotted", "Dashed"], group="AUTO SUPPORT AND RESISTANCE SETTINGS")
lineSrWidth = input.int(2, "Line Width", 1, 4, group="AUTO SUPPORT AND RESISTANCE SETTINGS")
showCons = input(false, "Consolidation Zones", group="CONSOLIDATION ZONES")
lbPeriod = input.int(10, "Loopback Period", 2, 50, group="CONSOLIDATION ZONES")
lenCons = input.int(5, "Min Consolidation Length", 2, 20, group="CONSOLIDATION ZONES")
paintCons = input(true, "Paint Consolidation Area", group="CONSOLIDATION ZONES")
colorZone = input(color.new(color.blue, 70), "Zone Color", group="CONSOLIDATION ZONES")
box_ob = input.bool(false, "Toggle Order Block", group="ORDER BLOCK")
box_hide_gray = input.bool(false, "Hide gray boxes", group="ORDER BLOCK")
bos_type = input.string("High and Low", "MSB trigger", ["High and Low", "Close and Open"], group="ORDER BLOCK")
box_sv = input.bool(true, "Plot demand boxes", group="ORDER BLOCK")
box_test_delay = input.int(3, "Delay to count test of demand box", 1, group="ORDER BLOCK")
box_fill_delay = input.int(3, "Delay to count fill of demand box", 1, group="ORDER BLOCK")
box_test_sv = input.bool(true, "Dim tested demand boxes", group="ORDER BLOCK")
box_stop_sv = input.bool(true, "Stop plotting filled demand boxes", group="ORDER BLOCK")
f_chartTfInMinutes() =>
float _resInMinutes = timeframe.multiplier * (
timeframe.isseconds ? 1. / 60 :
timeframe.isminutes ? 1. :
timeframe.isdaily ? 60. * 24 :
timeframe.isweekly ? 60. * 24 * 7 :
timeframe.ismonthly ? 60. * 24 * 30.4375 : na)
atr(len) =>
tr = ta.tr
atr = 0.0
atr := nz(atr[1] + (tr - atr[1]) / len, tr)
supertrend(src, factor, len) =>
atr = ta.atr(len)
upperBand = src + factor * atr
lowerBand = src - factor * atr
prevLowerBand = nz(lowerBand[1])
prevUpperBand = nz(upperBand[1])
lowerBand := lowerBand > prevLowerBand or close[1] < prevLowerBand ? lowerBand : prevLowerBand
upperBand := upperBand < prevUpperBand or close[1] > prevUpperBand ? upperBand : prevUpperBand
int direction = na
float superTrend = na
prevSuperTrend = superTrend[1]
if prevSuperTrend == prevUpperBand
direction := close > upperBand ? 1 : -1
else
direction := close < lowerBand ? -1 : 1
superTrend := direction == 1 ? lowerBand : direction == -1 ? upperBand : na
dchannel(len)=>
hh = ta.highest(len)
ll = ta.lowest (len)
trend = 0
trend := close > hh[1] ? 1 : close < ll[1] ? -1 : nz(trend[1])
trendScalper(show, len1, len2, len3, colorBull, colorBear, colorBarBull, colorBarBear) =>
avgOC = math.avg(open, close)
ha_o = 0.0, ha_o := na(ha_o[1]) ? avgOC : (ha_o[1] + ohlc4[1]) / 2
ema1 = ta.ema(ha_o, len1), ema2 = ta.ema(ha_o, len2), ema3 = ta.ema(ha_o, len3)
ris1 = ema1 > ema1[1], ris2 = ema2 > ema2[1], ris3 = ema3 > ema3[1]
fal1 = ema1 < ema1[1], fal2 = ema2 < ema2[1], fal3 = ema3 < ema3[1]
colorEma1 = ris1 ? colorBull : fal1 ? colorBear : na, colorEma2 = ris2 ? colorBull : fal2 ? colorBear : na, colorEma3 = ris3 ? colorBull : fal3 ? colorBear : na
fillEma1 = avgOC > ema1 ? colorBull : avgOC < ema1 ? colorBear : na, fillEma2 = ema1 > ema2 ? colorBull : ema1 < ema2 ? colorBear : na, fillEma3 = ema2 > ema3 ? colorBull : ema2 < ema3 ? colorBear : na
colorBar = close < ema1 and close < ema2 ? colorBarBear : colorBarBull
[avgOC, show ? ema1 : na, show ? ema2 : na, show ? ema3 : na, color.new(colorEma1, 55), color.new(colorEma2, 45), color.new(colorEma3, 35), color.new(fillEma1, 85), color.new(fillEma2, 80), color.new(fillEma3, 75), colorBar]
candlesMom() =>
[_, _, macd] = ta.macd(close, 12, 26, 9)
(macd > 0 and macd > macd[1]) or (macd < 0 and macd < macd[1])
trailingSL(buy, sell, factor, len, usePerc, perc) =>
atr = atr(len)
upperBand = high + (usePerc ? high * (perc / 100) : factor * atr)
lowerBand = low - (usePerc ? low * (perc / 100) : factor * atr)
prevLowerBand = nz(lowerBand[1])
prevUpperBand = nz(upperBand[1])
lowerBand := lowerBand > prevLowerBand or buy ? lowerBand : prevLowerBand
upperBand := upperBand < prevUpperBand or sell ? upperBand : prevUpperBand
int direction = na
float stop = na
prevSuperTrend = stop[1]
if prevSuperTrend == prevUpperBand
direction := buy ? 1 : -1
else
direction := sell ? -1 : 1
stop := direction == 1 ? lowerBand : direction == -1 ? upperBand : na
add_to_zz(zz, val, bi) =>
array.unshift(zz, bi)
array.unshift(zz, val)
if array.size(zz) > 12
array.pop(zz)
update_zz(zz, val, bi, dir) =>
if array.size(zz) == 0
add_to_zz(zz, val, bi)
else
if dir == 1 and val > array.get(zz, 0) or dir == -1 and val < array.get(zz, 0)
array.set(zz, 0, val)
array.set(zz, 1, bi)
0
float ph1 = ta.pivothigh(high, 10, 10)
float pl1 = ta.pivotlow (low , 10, 10)
LSRstyle = lineSrStyle == "Dashed" ? line.style_dashed : lineSrStyle == "Solid" ? line.style_solid : line.style_dotted
prdhighest = ta.highest(300)
prdlowest = ta.lowest (300)
cwidth = (prdhighest - prdlowest) * 10 / 100
var pivotvals = array.new_float(0)
if ph1 or pl1
array.unshift(pivotvals, ph1 ? ph1 : pl1)
if array.size(pivotvals) > 20
array.pop(pivotvals)
get_sr_vals(ind) =>
float lo = array.get(pivotvals, ind)
float hi = lo
int numpp = 0
for y = 0 to array.size(pivotvals) - 1 by 1
float cpp = array.get(pivotvals, y)
float wdth = cpp <= lo ? hi - cpp : cpp - lo
if wdth <= cwidth
lo := cpp <= lo ? cpp : lo
hi := cpp > lo ? cpp : hi
numpp += 1
numpp
[hi, lo, numpp]
var sr_up_level = array.new_float(0)
var sr_dn_level = array.new_float(0)
sr_strength = array.new_float(0)
find_loc(strength) =>
ret = array.size(sr_strength)
for i = ret > 0 ? array.size(sr_strength) - 1 : na to 0 by 1
if strength <= array.get(sr_strength, i)
break
ret := i
ret
ret
check_sr(hi, lo, strength) =>
ret = true
for i = 0 to array.size(sr_up_level) > 0 ? array.size(sr_up_level) - 1 : na by 1
if array.get(sr_up_level, i) >= lo and array.get(sr_up_level, i) <= hi or array.get(sr_dn_level, i) >= lo and array.get(sr_dn_level, i) <= hi
if strength >= array.get(sr_strength, i)
array.remove(sr_strength, i)
array.remove(sr_up_level, i)
array.remove(sr_dn_level, i)
ret
else
ret := false
ret
break
ret
rsi = ta.rsi(close, 14)
vosc = ta.obv - ta.ema(ta.obv, 20)
bs = ta.ema(nz(math.abs((open - close) / (high - low) * 100)), 3)
ema = ta.ema(close, 200)
emaBull = close > ema
equal_tf(res) => str.tonumber(res) == f_chartTfInMinutes()
higher_tf(res) => str.tonumber(res) > f_chartTfInMinutes()
too_small_tf(res) => (timeframe.isweekly and res=="1") or (timeframe.ismonthly and str.tonumber(res) < 10)
securityNoRep(sym, res, src) =>
bool bull = na
bull := equal_tf(res) ? src : bull
bull := higher_tf(res) ? request.security(sym, res, src, barmerge.gaps_off, barmerge.lookahead_on) : bull
bull_array = request.security_lower_tf(syminfo.tickerid, higher_tf(res) ? str.tostring(f_chartTfInMinutes()) : too_small_tf(res) ? (timeframe.isweekly ? "3" : "10") : res, src)
if array.size(bull_array) > 1 and not equal_tf(res) and not higher_tf(res)
bull := array.pop(bull_array)
array.clear(bull_array)
bull
TF1Bull = securityNoRep(syminfo.tickerid, "1" , emaBull)
TF3Bull = securityNoRep(syminfo.tickerid, "3" , emaBull)
TF5Bull = securityNoRep(syminfo.tickerid, "5" , emaBull)
TF10Bull = securityNoRep(syminfo.tickerid, "10" , emaBull)
TF15Bull = securityNoRep(syminfo.tickerid, "15" , emaBull)
TF30Bull = securityNoRep(syminfo.tickerid, "30" , emaBull)
TF60Bull = securityNoRep(syminfo.tickerid, "60" , emaBull)
TF120Bull = securityNoRep(syminfo.tickerid, "120" , emaBull)
TF240Bull = securityNoRep(syminfo.tickerid, "240" , emaBull)
TF720Bull = securityNoRep(syminfo.tickerid, "720" , emaBull)
TFDBull = securityNoRep(syminfo.tickerid, "1440", emaBull)
ema150 = ta.ema(close, 150)
ema250 = ta.ema(close, 250)
hma55 = ta.hma(close, 55 )
[_, _, macd] = ta.macd(close, 12, 26, 9)
supertrend = supertrend(ohlc4, sensitivity, 10)
maintrend = dchannel(30)
confBull = (ta.crossover (close, supertrend) or (ta.crossover (close, supertrend)[1] and maintrend[1] < 0)) and macd > 0 and macd > macd[1] and ema150 > ema250 and hma55 > hma55[2] and maintrend > 0
confBear = (ta.crossunder(close, supertrend) or (ta.crossunder(close, supertrend)[1] and maintrend[1] > 0)) and macd < 0 and macd < macd[1] and ema150 < ema250 and hma55 < hma55[2] and maintrend < 0
trendcloud = supertrend(ohlc4, periodTrendCloud == "Long term" ? 7 : 4, 10)
hma = fastTrendCloud ? ta.hma(close, fastTrendCloudLen) : na
none = close > 0
[_, _, adx] = ta.dmi(14, 14)
consFilter = adx > 20
StrongFilter = ta.ema(close, 200)
volFilter = (ta.ema(volume, 25) - ta.ema(volume, 26)) / ta.ema(volume, 26) > 0
trendFilter = trendcloud
bull = (strategy == "Normal" ? ta.crossover (close, supertrend) : confBull and not confBull[1]) and strategy != "Trend scalper" and (StrongSignalsOnly ? close > StrongFilter : none) and (consSignalsFilter ? consFilter : none) and (highVolSignals ? volFilter : none) and (signalsTrendCloud ? (periodTrendCloud == "New" ? ema150 > ema250 : close > trendFilter) : none)
bear = (strategy == "Normal" ? ta.crossunder(close, supertrend) : confBear and not confBear[1]) and strategy != "Trend scalper" and (StrongSignalsOnly ? close < StrongFilter : none) and (consSignalsFilter ? consFilter : none) and (highVolSignals ? volFilter : none) and (signalsTrendCloud ? (periodTrendCloud == "New" ? ema150 < ema250 : close < trendFilter) : none)
countBull = ta.barssince(bull)
countBear = ta.barssince(bear)
trigger = nz(countBull, bar_index) < nz(countBear, bar_index) ? 1 : 0
[avgOC, ema5, ema9, ema21, colorEma5, colorEma9, colorEma21, fillEma5, fillEma9, fillEma21, colorBar] = trendScalper(strategy == "Trend scalper" ? true : false, 5, 9, 21, color.green, color.red, #00DD00, #DD0000)
trailingStop = trailingSL(bull, bear, 2.2, 14, usePercSL, percTrailingSL)
float _ph = ta.highestbars(high, periodSwings) == 0 ? high : na
float _pl = ta.lowestbars (low, periodSwings) == 0 ? low : na
var _dir = 0, dir_ = _pl and na(_ph) ? -1 : _dir, _dir := _ph and na(_pl) ? 1 : dir_, dirChg = ta.change(_dir)
var zz = array.new_float(0), zzOld = array.copy(zz)
float zzLive = _ph or _pl ? (dirChg ? add_to_zz(zz, _dir == 1 ? _ph : _pl, bar_index) : update_zz(zz, _dir == 1 ? _ph : _pl, bar_index, _dir)) : na
a = ta.wma(srcTrendChannel, lenTrendChannel), b_ = ta.sma(srcTrendChannel, lenTrendChannel)
A = 4 * b_ - 3 * a, B = 3 * a - 2 * b_
m = (A - B) / (lenTrendChannel - 1)
d = 0., for i = 0 to lenTrendChannel - 1 by 1
l = B + m * i
d += math.pow(srcTrendChannel[i] - l, 2)
rmse = math.sqrt(d / (lenTrendChannel - 1)) * 2
float hb_ = ta.highestbars(lbPeriod) == 0 ? high : na
float lb_ = ta.lowestbars (lbPeriod) == 0 ? low : na
var int dir = 0
float zz_ = na
float pp = na
var int consCnt = 0
var float condHi = na
var float condLo = na
float H_ = ta.highest(lenCons)
float L_ = ta.lowest (lenCons)
var line lineUp = na
var line lineDn = na
bool breakUp = false
bool breakDn = false
var float[] pvh1_price = array.new_float(1000, na)
var int[] pvh1_time = array.new_int (1000, na)
var float[] pvl1_price = array.new_float(1000, na)
var int[] pvl1_time = array.new_int (1000, na)
var float[] pvh2_price = array.new_float(1000, na)
var int[] pvh2_time = array.new_int (1000, na)
var float[] pvl2_price = array.new_float(1000, na)
var int[] pvl2_time = array.new_int (1000, na)
var float htcmrll_price = na
var int htcmrll_time = na
var float ltcmrhh_price = na
var int ltcmrhh_time = na
var box[] long_boxes = array.new_box()
var box[] short_boxes = array.new_box()
var float temp_pv_0 = na
var float temp_pv_1 = na
var float temp_pv_2 = na
bool pvh = high < high[1] and high[1] > high[2]
bool pvl = low > low [1] and low [1] < low [2]
int pv1_time = bar_index[1]
float pv1_high = high[1]
float pv1_low = low [1]
float trigger_high = bos_type == "High and Low" ? high : math.max(open, close)
float trigger_low = bos_type == "High and Low" ? low : math.min(open, close)
var buyBars = array.new_box(365, na)
for i = 0 to 364
box.delete(array.get(buyBars, i))
var sellBars = array.new_box(365, na)
for i = 0 to 364
box.delete(array.get(sellBars, i))
green = #00DD00, green50 = color.new(greПоказано первые 50% кода (символов: 53878)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.