Войти
Главная / Data science в трейдинге / 📊 Анализ недельной статистики в Pine Script: Пошаговый разбор

📊 Анализ недельной статистики в Pine Script: Пошаговый разбор

Этот скрипт на Pine Script версии 6 представляет собой индикатор для анализа статистики свечей на основе дней недели. Давайте разберем код шаг за шагом и оценим его полезность в трейдинге.


🛠 1. Назначение скрипта

Скрипт анализирует свечи по дням недели и вычисляет:

  • Минимальный и максимальный диапазон свечей (High - Low).
  • Среднюю, минимальную и максимальную разницу между ценами открытия и закрытия (Open - Close).
  • Общее количество свечей для каждого дня недели.
  • Выводит результаты в удобной таблице в окне индикатора.

🛠 2. Основные настройки

Сначала добавляется возможность выбора типа анализа:

  • Both — анализ всех свечей.
  • Bearish — анализ только медвежьих свечей.
  • Bullish — анализ только бычьих свечей.
analyze_mode = input.string(
    title="Analysis Mode",
    defval="Both",
    options=["Both", "Bearish", "Bullish"],
    tooltip="Select which type of candles to analyze:\n- Both: Analyze all candles\n- Bearish: Only analyze bearish candles\n- Bullish: Only analyze bullish candles"
)

🛠 3. Подготовка массивов для статистики

Для хранения данных каждого дня недели создаются массивы:

  • min_ranges, max_ranges — минимальный и максимальный диапазон свечей.
  • total_open_close_diff, total_high_low_diff — суммарные разницы Open - Close и High - Low.
  • max_open_close_diff, min_open_close_diff — максимальная и минимальная разница Open - Close.
  • max_high_low_diff, min_high_low_diff — максимальная и минимальная разница High - Low.
  • counts — количество свечей для каждого дня недели.
var float[] min_ranges = array.new_float(7, na)
var float[] max_ranges = array.new_float(7, na)
var float[] total_open_close_diff = array.new_float(7, na)
var float[] total_high_low_diff = array.new_float(7, na)
var float[] max_open_close_diff = array.new_float(7, na)
var float[] max_high_low_diff = array.new_float(7, na)
var float[] min_open_close_diff = array.new_float(7, na)
var float[] min_high_low_diff = array.new_float(7, na)
var int[] counts = array.new_int(7, 0)

🛠 4. Фильтрация свечей

Свечи фильтруются на основе выбранного режима анализа. Например:

  • Если выбран режим Bearish, то учитываются только свечи, где Close < Open.
is_candle_valid = (
    (analyze_mode == "Both") or
    (analyze_mode == "Bearish" and close < open) or
    (analyze_mode == "Bullish" and close > open)
)

🛠 5. Обновление статистики

Для каждой свечи обновляются значения в соответствующих массивах. Например:

  • Минимальный и максимальный диапазон (High - Low).
  • Суммарная, минимальная и максимальная разница Open - Close.
if is_candle_valid and day_index >= 0 and day_index <= 6
    array.set(min_ranges, day_index, na(array.get(min_ranges, day_index)) ? current_range : math.min(array.get(min_ranges, day_index), current_range))
    array.set(max_ranges, day_index, na(array.get(max_ranges, day_index)) ? current_range : math.max(array.get(max_ranges, day_index), current_range))
    array.set(total_open_close_diff, day_index, na(array.get(total_open_close_diff, day_index)) ? open_close_diff : array.get(total_open_close_diff, day_index) + open_close_diff)
    array.set(max_open_close_diff, day_index, na(array.get(max_open_close_diff, day_index)) ? open_close_diff : math.max(array.get(max_open_close_diff, day_index), open_close_diff))
    array.set(min_open_close_diff, day_index, na(array.get(min_open_close_diff, day_index)) ? open_close_diff : math.min(array.get(min_open_close_diff, day_index), open_close_diff))
    array.set(counts, day_index, array.get(counts, day_index) + 1)

🛠 6. Вычисление средних значений

После сбора данных для каждого дня недели вычисляются средние значения:

  • Средняя разница Open - Close.
  • Средняя разница High - Low.
for i = 0 to 6
    count = array.get(counts, i)
    avg_oc_diff = count > 0 ? array.get(total_open_close_diff, i) / count : na
    avg_hl_diff = count > 0 ? array.get(total_high_low_diff, i) / count : na
    array.set(average_open_close_diffs, i, avg_oc_diff)
    array.set(average_high_low_diffs, i, avg_hl_diff)

🛠 7. Построение таблицы

Результаты отображаются в таблице, где для каждого дня недели выводятся:

  1. Минимальный и максимальный диапазон.
  2. Средняя разница Open - Close и High - Low.
  3. Максимальная и минимальная разница Open - Close и High - Low.
  4. Общее количество свечей.
var table weekly_table = table.new(position.top_center, 10, 8, border_width=1, border_color=color.gray)

if barstate.islast
    // Заголовки таблицы
    table.cell(weekly_table, 0, 0, "Day", bgcolor=color.new(color.blue, 90), text_color=color.white)
    table.cell(weekly_table, 0, 1, "Min Range", bgcolor=color.new(color.blue, 90), text_color=color.white)
    table.cell(weekly_table, 0, 2, "Max Range", bgcolor=color.new(color.blue, 90), text_color=color.white)
    // Заполнение таблицы данными
    for i = 0 to 6
        table.cell(weekly_table, i + 1, 0, array.get(day_labels, i), bgcolor=color.new(color.green, 90), text_color=color.white)
        table.cell(weekly_table, i + 1, 1, str.tostring(array.get(min_ranges, i), "#.##"), bgcolor=color.new(color.green, 80), text_color=color.white)

📈 Польза сбора такой статистики

  1. Определение паттернов поведения рынка:
    • Сравнение диапазонов свечей позволяет определить, в какие дни недели рынок наиболее активен.
    • Помогает найти дни с высокими или низкими изменениями цены.
  2. Планирование сделок:
    • Зная статистику, можно выбрать оптимальные дни для входа в рынок.
    • Например, если понедельники обычно имеют большие диапазоны, это может быть хорошей возможностью для трейдинга.
  3. Улучшение риск-менеджмента:
    • Зная максимальные и минимальные разницы, вы можете точнее устанавливать стоп-лоссы и тейк-профиты.
  4. Понимание рыночной волатильности:
    • Анализ медвежьих и бычьих свечей отдельно позволяет увидеть, как часто рынок подвержен восходящим или нисходящим трендам в определенные дни.

🎯 Вывод

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

📊 4 проверенных источника рыночных данных для трейдера
Данные — один из ключевых инструментов трейдера, с помощью которого можно успешно выявлять закономерности в изменении котировок, анализировать и прогнозировать...
Читать далее
🚀 Все о трейдинге и торговле на рынках. Кто такой трейдер простыми словами
Рассказываем про все азы трейдинга и делимся самым важным про трейдинг на бирже. Из этой статьи вы узнаете:  Что такое...
Читать далее
🔍 Как читать ленту ордеров и футпринт, чтобы анализировать действия игроков
Многие трейдеры при торговле экспериментируют со стратегиями и используют множество индикаторов, но при этом пренебрегают лентой ордеров и футпринтом. В этой...
Читать далее