Mini Chart
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «mini-chart.pine» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Мини-график — это индикатор для TradingView, который накладывает миниатюрный график последних свечей выбранного актива справа от основного графика. Он отрисовывает тела и фитили свечей с помощью линий, отображает текущую цену, название актива и значения минимумов/максимумов в виде меток. Индикатор поддерживает режим мультитаймфрейма, позволяя отображать данные другого таймфрейма (ограниченно 10 барами).
Пользователь может настраивать количество отображаемых баров, горизонтальное смещение, вертикальное положение (верх/середина/низ), а также ручное управление пространством сверху и снизу для визуального разделения нескольких экземпляров индикатора. Доступна настройка цветов для бычьих и медвежьих свечей, фитилей и текстовых меток.
Индикатор может скрывать мини-график при закрытом рынке базового актива, что удобно для различения бэктестинга и работы в реальном времени. Все отображаемые элементы управляются отдельными параметрами включения/отключения.
Настройки программы
| Настройка | Описание |
|---|---|
| offset | Горизонтальное смещение мини-графика в барах от текущего бара. Определяет, насколько вправо от основного графика будет сдвинут мини-график. |
| barsToShow | Количество свечей, отображаемых в мини-графике. Определяет, сколько последних баров будет нарисовано. |
| location | Вертикальное положение мини-графика относительно основного. Доступны варианты: top (верх), middle (середина), bottom (низ). |
| plotCurrentTicker | Определяет, отображать ли мини-график для текущего тикера графика или для другого выбранного актива. |
| userInputTimeframe | Включает режим мультитаймфрейма, в котором мини-график отображает данные выбранного таймфрейма (отображается до 10 баров). |
| userTimeframe | Выбранный таймфрейм для отображения данных в мини-графике при включённом режиме мультитаймфрейма. |
| showLivePrice | Включает или отключает отображение метки с текущей ценой закрытия последней свечи. |
| showLowest_Highest | Включает или отключает отображение меток с минимальными и максимальными значениями за отображаемый период. |
| showAssetLabel | Включает или отключает отображение метки с названием актива и таймфреймом на мини-графике. |
| candleBodyWidth | Толщина линий тела свечей в пикселях. Доступны значения от 1 до 10. |
| wickColor | Цвет линий фитилей свечей (тени свечей). |
| bullColor | Цвет линий тела бычьих свечей (когда цена закрытия выше цены открытия). |
| bearColor | Цвет линий тела медвежьих свечей (когда цена закрытия ниже цены открытия). |
| tickerColor | Цвет текста метки с названием актива и таймфреймом. |
| priceLabelColor | Цвет текстовых меток с ценами, минимумами и максимумами на мини-графике. |
| mktClosed_NoPlot | При включении мини-график не отображается, если рынок базового актива закрыт. Полезно для различения режимов бэктеста и торговли в реальном времени. |
| manualSpacerSettings | Включает ручной режим настройки пространства сверху и снизу для точного управления расположением и масштабом мини-графика. |
| spaceBelow_Multiplier | Множитель для расширения пространства снизу мини-графика при включённых ручных настройках расположения. Чем больше значение, тем больше зазор под свечами. |
| spaceAbove_Multiplier | Множитель для расширения пространства сверху мини-графика при включённых ручных настройках расположения. Чем больше значение, тем больше зазор над свечами. |
Поиск по коду файла
indicator('<{Мини-график}>', shorttitle = '<{Мини-график}>', overlay = true, scale = scale.none, max_labels_count = 400, max_lines_count = 500, format = format.inherit)
offset = input(17, 'Смещение (баров)')
barsToShow = input(14, 'Количество отображаемых баров')
location = input.string('middle', 'Вертикальное положение', options = ['top', 'middle', 'bottom'])
plotCurrentTicker = input(true, 'Отображать текущий тикер', group = 'Сравнение')
userSymbol = plotCurrentTicker ? syminfo.ticker : input.symbol('DXY', '..или другой актив', group = 'Сравнение')
userInputTimeframe = input(true, 'Выбрать таймфрейм (только 10 баров)', group = 'Мультитаймфрейм')
userTimeframe = input.timeframe('', 'Таймфрейм', group = 'Мультитаймфрейм')
showLivePrice = input(true, 'Показывать текущую цену', group = 'Метки/Цвет/Стиль')
showLowest_Highest = input(true, 'Показывать минимумы/максимумы', group = 'Метки/Цвет/Стиль')
showAssetLabel = input(true, 'Показывать название актива', group = 'Метки/Цвет/Стиль')
candleBodyWidth = input.int(7, 'Ширина тела свечи', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], group = 'Метки/Цвет/Стиль')
[srcOpen, srcHigh, srcLow, srcClose] = request.security(userSymbol, '', [open, high, low, close])
wickColor = input.color(#525252fa, 'Цвет фитиля', group = 'Метки/Цвет/Стиль')
bullColor = input.color(#00ffee, 'Цвет бычьей свечи', group = 'Метки/Цвет/Стиль')
bearColor = input.color(#ff0057, 'Цвет медвежьей свечи', group = 'Метки/Цвет/Стиль')
tickerColor = input.color(#ffeb3b, group = 'Метки/Цвет/Стиль')
priceLabelColor = input.color(#ffffff, group = 'Метки/Цвет/Стиль')
_color = srcClose <= srcOpen ? bearColor : bullColor
mktClosed_NoPlot = input(false, 'Не показывать мини-графики при закрытом рынке', group = 'Прочее') //Если false, может иногда не показывать последние бары на мини-графике (если базовый рынок закрыт, а мини-график еще открыт). Оставлено для бэктестинга.
liveMkt = mktClosed_NoPlot ? barstate.isrealtime : true
group_1 = 'Ручные настройки расположения/размера'
manualSpacerSettings = input(false, 'Использовать ручные настройки расположения', group = group_1)
lowest = userInputTimeframe ? request.security(userSymbol, userTimeframe, ta.lowest(low, barsToShow)) : request.security(userSymbol, '', ta.lowest(low, barsToShow))
highest = userInputTimeframe ? request.security(userSymbol, userTimeframe, ta.highest(high, barsToShow)) : request.security(userSymbol, '', ta.highest(high, barsToShow))
spaceBelow_Multiplier = input.float(4, step = 0.1, title = 'Сдвиг/Сжатие: Пространство снизу =', group = group_1)
spaceAbove_Multiplier = input.float(0.1, step = 0.1, title = 'Сдвиг/Сжатие: Пространство сверху =', group = group_1)
_range = highest - lowest
frameLow = manualSpacerSettings ? lowest - _range * spaceBelow_Multiplier : location == 'top' ? lowest - _range * 4 : location == 'middle' ? lowest - _range * 1.8 : location == 'bottom' ? lowest - _range * 0.1 : na
frameHigh = manualSpacerSettings ? highest + _range * spaceAbove_Multiplier : location == 'top' ? highest + _range * 0.1 : location == 'middle' ? highest + _range * 1.8 : location == 'bottom' ? highest + _range * 4 : na
var array<line> wickLine = array.new_line()
var array<line> bodyLine = array.new_line()
var array<line> frameLine = array.new_line()
if liveMkt
array.unshift(wickLine, not userInputTimeframe ? line.new(bar_index + offset, srcLow, bar_index + offset, srcHigh, color = wickColor) : na)
array.unshift(bodyLine, not userInputTimeframe ? line.new(bar_index + offset, srcOpen, bar_index + offset, srcClose, color = _color, width = candleBodyWidth) : na)
array.unshift(frameLine, not userInputTimeframe ? line.new(bar_index + offset, frameLow, bar_index + offset, frameHigh, color = color.new(color.yellow, 100)) : na)
if array.size(wickLine) > barsToShow
line.delete(array.pop(wickLine))
if array.size(bodyLine) > barsToShow
line.delete(array.pop(bodyLine))
if array.size(frameLine) > 2
line.delete(array.pop(frameLine))
var array<label> assetLabelArray = array.new_label()
var array<label> livePriceLabelArray = array.new_label()
var array<label> lowestLabelArray = array.new_label()
var array<label> highestLabelArray = array.new_label()
pos = str.pos(userSymbol, ':') //Получаем часть тикера из строки (например, FX:EURUSD -> только EURUSD)
tkr = str.substring(userSymbol, pos + 1) //Получаем часть тикера из строки (например, FX:EURUSD -> только EURUSD)
_timeframeLabel = userInputTimeframe ? str.tostring(userTimeframe) : timeframe.period
_barsToShow = userInputTimeframe ? '10' : str.tostring(barsToShow)
if showAssetLabel
array.unshift(assetLabelArray, label.new(bar_index + offset - 5, highest + _range / 6, tkr + ' : ' + _timeframeLabel, xloc = xloc.bar_index, style = label.style_none, textcolor = tickerColor, size = size.large, textalign = text.align_left))
if showLivePrice
array.unshift(livePriceLabelArray, label.new(bar_index + offset + 2, srcClose, str.tostring(srcClose), xloc = xloc.bar_index, style = label.style_none, textcolor = priceLabelColor, size = size.small, textalign = text.align_left))
if showLowest_Highest
array.unshift(lowestLabelArray, label.new(bar_index + offset - 5, lowest - _range / 12, str.tostring(_barsToShow) + ' бар минимум = ' + str.tostring(math.round_to_mintick(lowest)), xloc = xloc.bar_index, style = label.style_none, textcolor = priceLabelColor, size = size.small, textalign = text.align_left))
array.unshift(highestLabelArray, label.new(bar_index + offset - 5, highest + _range / 12, str.tostring(_barsToShow) + ' бар максимум = ' + str.tostring(math.round_to_mintick(highest)), xloc = xloc.bar_index, style = label.style_none, textcolor = priceLabelColor, size = size.small, textalign = text.align_left))
if array.size(assetLabelArray) > 1
label.delete(array.pop(assetLabelArray))
if array.size(livePriceLabelArray) > 1
label.delete(array.pop(livePriceLabelArray))
if array.size(lowestLabelArray) > 1
label.delete(array.pop(lowestLabelArray))
if array.size(highestLabelArray) > 1
label.delete(array.pop(highestLabelArray))
[srcOpen_htf, srcHigh_htf, srcLow_htf, srcClose_htf] = request.security(userSymbol, userTimeframe, [open, high, low, close])
[srcOpen_htf1, srcHigh_htf1, srcLow_htf1, srcClose_htf1] = request.security(userSymbol, userTimeframe, [open[1], high[1], low[1], close[1]])
[srcOpen_htf2, srcHigh_htf2, srcLow_htf2, srcClose_htf2] = request.security(userSymbol, userTimeframe, [open[2], high[2], low[2], close[2]])
[srcOpen_htf3, srcHigh_htf3, srcLow_htf3, srcClose_htf3] = request.security(userSymbol, userTimeframe, [open[3], high[3], low[3], close[3]])
[srcOpen_htf4, srcHigh_htf4, srcLow_htf4, srcClose_htf4] = request.security(userSymbol, userTimeframe, [open[4], high[4], low[4], close[4]])
[srcOpen_htf5, srcHigh_htf5, srcLow_htf5, srcClose_htf5] = request.security(userSymbol, userTimeframe, [open[5], high[5], low[5], close[5]])
[srcOpen_htf6, sПоказано первые 50% кода (символов: 12014)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.