table.new в Pine Script v5. Мы научимся рассчитывать такие важные метрики эффективности, как Winrate (процент прибыльных сделок) и Profit Factor (фактор прибыльности), и динамически выводить их в красивую таблицу в реальном времени.Исходный код
Для демонстрации работы кастомной таблицы мы напишем полноценную стратегию на базе пересечения экспоненциальных скользящих средних (EMA). В конце кода мы добавим блок расчета статистики по закрытым сделкам и отрисовку таблицы в правом верхнем углу графика.
Визуализация статистики прямо на рабочем пространстве значительно упрощает анализ. Например, при создании сложных систем, таких как Создание Heatmap Волатильности Криптопар с Нормализованным ATR в Pine Script v5 или при работе с Кастомным ZigZag с фильтрацией по объему в Pine Script v5, оперативный вывод метрик позволяет моментально оценивать влияние фильтров на результаты торговли.
//@version=5
strategy('Custom Stats Table Strategy', overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// Простая стратегия на пересечении EMA
fast_ema = ta.ema(close, 9)
slow_ema = ta.ema(close, 21)
plot(fast_ema, color=color.blue, title='Fast EMA')
plot(slow_ema, color=color.orange, title='Slow EMA')
if ta.crossover(fast_ema, slow_ema)
strategy.entry('Long', strategy.long)
if ta.crossunder(fast_ema, slow_ema)
strategy.close('Long')
// Инициализация таблицы на первом баре
var table stats_table = table.new(position=position.top_right, columns=2, rows=5, bgcolor=color.new(color.black, 20), border_width=1, border_color=color.gray)
if barstate.islast
int closed_count = strategy.closedtrades
int winning_trades = 0
float gross_profit = 0.0
float gross_loss = 0.0
if closed_count > 0
for i = 0 to closed_count - 1
float profit = strategy.closedtrades.profit(i)
if profit > 0
winning_trades += 1
gross_profit += profit
else
gross_loss += math.abs(profit)
float winrate = closed_count > 0 ? (winning_trades / closed_count) * 100 : 0.0
float profit_factor = gross_loss > 0 ? gross_profit / gross_loss : (gross_profit > 0 ? 999.9 : 0.0)
float net_profit = strategy.netprofit
// Заполнение заголовков
table.cell(stats_table, 0, 0, 'Метрика', bgcolor=color.gray, text_color=color.white, text_size=size.small)
table.cell(stats_table, 1, 0, 'Значение', bgcolor=color.gray, text_color=color.white, text_size=size.small)
// Чистая прибыль
table.cell(stats_table, 0, 1, 'Net Profit', text_color=color.white, text_size=size.small, text_align=text.align_left)
table.cell(stats_table, 1, 1, str.tostring(net_profit, '#.##') + ' ' + syminfo.currency, text_color=net_profit >= 0 ? color.green : color.red, text_size=size.small, text_align=text.align_right)
// Winrate
table.cell(stats_table, 0, 2, 'Winrate', text_color=color.white, text_size=size.small, text_align=text.align_left)
table.cell(stats_table, 1, 2, str.tostring(winrate, '0.0') + '%', text_color=winrate >= 50 ? color.green : color.orange, text_size=size.small, text_align=text.align_right)
// Profit Factor
table.cell(stats_table, 0, 3, 'Profit Factor', text_color=color.white, text_size=size.small, text_align=text.align_left)
table.cell(stats_table, 1, 3, str.tostring(profit_factor, '0.00'), text_color=profit_factor >= 1.5 ? color.green : (profit_factor >= 1.0 ? color.orange : color.red), text_size=size.small, text_align=text.align_right)
// Всего сделок
table.cell(stats_table, 0, 4, 'Total Trades', text_color=color.white, text_size=size.small, text_align=text.align_left)
table.cell(stats_table, 1, 4, str.tostring(closed_count), text_color=color.white, text_size=size.small, text_align=text.align_right) Разбор параметров
Давайте подробно разберем ключевые функции и переменные, которые мы использовали для создания таблицы и расчета метрик:
table.new(): Функция инициализирует новый объект таблицы. Мы указываем ее позицию на экране (position.top_right), количество колонок (2) и строк (5), а также цвет фона и границы.table.cell(): Заполняет конкретную ячейку таблицы. Принимает координаты колонки и строки (индексация начинается с 0), текст, цвет текста, размер и выравнивание.strategy.closedtrades: Встроенная переменная Pine Script, возвращающая общее количество закрытых сделок на текущий момент.strategy.closedtrades.profit(): Функция, возвращающая чистую прибыль или убыток по конкретной закрытой сделке по ее индексу. Мы используем ее в цикле для расчета валовой прибыли и валового убытка.barstate.islast: Логический флаг, который гарантирует, что ресурсоемкие вычисления (цикл по всем закрытым сделкам) и отрисовка таблицы будут происходить только на самом последнем (актуальном) баре, что оптимизирует производительность скрипта.
Если вы внедряете продвинутый мани-менеджмент, например, настраиваете Частичный Take Profit в Pine Script v5: Пошаговое руководство, кастомная таблица поможет вам наглядно увидеть, как фиксация частей позиции влияет на итоговый Profit Factor и Winrate.
Как запустить
Чтобы запустить этот скрипт на платформе TradingView, выполните следующие шаги:
- Откройте график любой валютной пары или криптовалюты на TradingView.
- В нижней панели выберите вкладку Pine Editor (Редактор Pine).
- Удалите стандартный шаблон кода и вставьте скопированный выше исходный код.
- Нажмите кнопку Save (Сохранить), укажите название скрипта и нажмите Add to chart (Добавить на график).
- В правом верхнем углу вашего графика появится аккуратная таблица со статистикой работы стратегии в реальном времени.




