Меня постоянно спрашивают про то, как делать статы для ПТ4, поэтому я решил описать весь процесс на примере одного отдельно взятого стата здесь, чтобы не объяснять каждый раз заново.
Прежде всего немного теории.
Во время импорта раздачи вся информация о ней, а также о всех действиях совершенных игроками записывается в базу данных, указанную как активную в настройках ПокерТрэкера. Любая база данных состоит из таблиц, так база ПТ4 включает в себя около 35-ти таблиц, в каждую из которую заносится информация разного характера: в одну нотсы, во вторую настройки программы, в третью информация о продолжительности сессий и так далее. Вся информация о том, какие действия и в какой последовательности были совершены игроками во время кэш-игр, находится в таблице "cash_hand_player_statistics".
Вот, какой эта таблица имеет вид:

Каждая строка соответствует одному игроку и его действиям в каждой конкретной раздаче. В каждом поле (столбцы) содержится информация о том, было или не было выполнено для этого игрока определенное условие. Основных типов полей два: те, что начинаются с префикса "cnt" и те, что начинаются с "flg". Первое поле всегда содержит числовое значение (от слова "count" — считать), второе всегда имеет логический тип, то есть в него записывается либо "true" либо "false".На скрине выше можно найти поле "cnt_p_raise", в которое записывается число рейзов игроком на префлопе ("p" означает "preflop"). А вот в поле "flg_p_fold" запишет "t", если игрок на префлопе сфолдил и "f", если фолда не было. Надеюсь, здесь все понятно.
Теперь о том, какой вид имеют статы.
В ПТ4 все статы можно найти в меню Configure>Statistics. Рассмотрим внешний вид стата "3Bet Flop":
Нас интересует та информация, которая записана в поле "Value Expression", а именно "(cnt_f_3bet / cnt_f_3bet_opp) * 100". Эта запись и является формулой, по которой считается данный стат. То есть он берет общее количество совершенных игроком 3бетов, делит его на количество ситуаций, когда 3бет был возможен ("opp" — "opportunity") и таким образом получает соотношение, которое при умножении на 100 приобретает процентный вид.
Выражения "cnt_f_3bet" и "cnt_f_3bet_opp" отсылают не к соответствующим полям в базе данных напрямую, а через функции, расположенные во вкладке "Columns". Зайдя в эту вкладку и введя в строке поиска наименование, мы легко найдем соответствующую запись:

Осталось разобраться, как работает указанная функция "sum(if[cash_hand_player_statistics.flg_f_3bet, 1, 0])".
"if[x,y,z]" возвращает y, если выполняется условие x и возвращает z, если условие х не выполняется. "Sum" же суммирует все возращенные функцией "if" значения. Таким образом, вся конструкция смотрит все записи на игрока, где "flg_f_3bet=true" и возвращает количество таких ситуаций.
Выражение "cnt_f_3bet_opp", которое тоже используется в стате 3бета флопа имеет такой же вид, но возвращает уже общее количество ситуаций, где трибет был возможен, но не обязательно был выполнен: "sum(if[cash_hand_player_statistics.flg_f_3bet_opp, 1, 0])".
Стат вида "(cnt_f_3bet / cnt_f_3bet_opp) * 100" использует обе функции, чтобы посчитать необходимое нам значение.
Надеюсь, механизм работы статистики стал понятен. Можно попробовать создать стат, которого пор умолчанию в ПТ4 не существует, но информация для создания которого в базе данных содержится. Так, например, нет стата фолда на конбет флопа после кэпа противником префлопа. Зато есть стат фолда на конбет после 3бета+ на префлопе. Воспользуемся им, создав уже на его основе новый стат.
Стат "Fold to F CBet in 3Bet+ Pot" имеет следующую структуру:
"(cnt_p_3bet_f_cbet_def_action_fold / cnt_p_3bet_f_cbet_def_opp) * 100",
то есть берет все ситуации 3-бет+ потов, где на флопе игрок без инициативы фолдит на продолженную ставку и делит на все ситуации, где фолд был возможен.
Рассмотрим каждую из используемых функций во вкладке "Columns".
cnt_p_3bet_f_cbet_def_action_fold:
sum(if[(cash_hand_player_statistics.flg_p_3bet_def_opp OR cash_hand_player_statistics.flg_p_4bet_def_opp) AND cash_hand_player_statistics.enum_f_cbet_action='F', 1, 0])
cnt_p_3bet_f_cbet_def_opp:
sum(if[(cash_hand_player_statistics.flg_p_3bet_def_opp OR cash_hand_player_statistics.flg_p_4bet_def_opp) AND cash_hand_player_statistics.flg_f_cbet_def_opp, 1, 0])
Как мы видим, первая возвращает количество фолдов на цбет флопа в тех ситуациях, когда игрок подвергся либо 3бету либо 4бету. Вторая же возвращает количество возможностей фолда при тех же условиях. Так как мы хотим оставить в нашем стате только ситуации при кэпанном банке, то изменим обе функции соответствующим образом, нажав "Duplicate", поменяв формулу, задав функциям новые имена и нажав "Save". У нас получится следующее.
cnt_p_4bet_f_cbet_def_action_fold:
sum(if[cash_hand_player_statistics.flg_p_4bet_def_opp AND cash_hand_player_statistics.enum_f_cbet_action='F', 1, 0])
cnt_p_4bet_f_cbet_def_opp:
sum(if[cash_hand_player_statistics.flg_p_4bet_def_opp AND cash_hand_player_statistics.flg_f_cbet_def_opp, 1, 0])
Теперь все, что остается — это вернуться во вкладку "Stats", выбрать стат "Fold to F CBet in 3Bet+ Pot", копировать его и изменить соответствующим образом:
Fold to F CBet in 4Bet Pot
(cnt_p_4bet_f_cbet_def_action_fold / cnt_p_4bet_f_cbet_def_opp) * 100
На этом создание нашего собственного стата можно считать завершенным, осталось его добавить в ХАД — и можно пользоваться. Конечно, используемый пример базировался на уже готовом стате и нам оставалось лишь немного его изменить, однако по такой методике можно создать полностью уникальные статы, т.к. база данных ПТ4 содержит всю необходимую для этого информацию. Надеюсь, я описал последовательность действий более-менее понятно, но если будут вопросы, готов на них ответить. Всем, кто не только прочел всю стену текста, но и хочет попытаться создать свою собственную статистику, желаю удачи!