📊 Анализ недельной статистики в 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. Построение таблицы
Результаты отображаются в таблице, где для каждого дня недели выводятся:
- Минимальный и максимальный диапазон.
- Средняя разница
Open - Close
иHigh - Low
. - Максимальная и минимальная разница
Open - Close
иHigh - Low
. - Общее количество свечей.
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)
📈 Польза сбора такой статистики
- Определение паттернов поведения рынка:
- Сравнение диапазонов свечей позволяет определить, в какие дни недели рынок наиболее активен.
- Помогает найти дни с высокими или низкими изменениями цены.
- Планирование сделок:
- Зная статистику, можно выбрать оптимальные дни для входа в рынок.
- Например, если понедельники обычно имеют большие диапазоны, это может быть хорошей возможностью для трейдинга.
- Улучшение риск-менеджмента:
- Зная максимальные и минимальные разницы, вы можете точнее устанавливать стоп-лоссы и тейк-профиты.
- Понимание рыночной волатильности:
- Анализ медвежьих и бычьих свечей отдельно позволяет увидеть, как часто рынок подвержен восходящим или нисходящим трендам в определенные дни.
🎯 Вывод
Этот индикатор полезен для трейдеров, которые хотят углубленно анализировать поведение рынка по дням недели. Используя его, можно лучше понимать рыночные паттерны, оптимизировать торговые стратегии и улучшить управление рисками.