{ "cells": [ { "cell_type": "code", "execution_count": 20, "id": "2acce44b", "metadata": {}, "outputs": [], "source": [ "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 21, "id": "5ba70af7", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TimestampOpenHighLowCloseVolume
73177542025-11-30 23:55:00+00:0090405.090452.090403.090452.00.531700
73177552025-11-30 23:56:00+00:0090452.090481.090420.090420.00.055547
73177562025-11-30 23:57:00+00:0090412.090458.090396.090435.00.301931
73177572025-11-30 23:58:00+00:0090428.090428.090362.090362.04.591653
73177582025-11-30 23:59:00+00:0090363.090386.090362.090382.00.410369
\n", "
" ], "text/plain": [ " Timestamp Open High Low Close \\\n", "7317754 2025-11-30 23:55:00+00:00 90405.0 90452.0 90403.0 90452.0 \n", "7317755 2025-11-30 23:56:00+00:00 90452.0 90481.0 90420.0 90420.0 \n", "7317756 2025-11-30 23:57:00+00:00 90412.0 90458.0 90396.0 90435.0 \n", "7317757 2025-11-30 23:58:00+00:00 90428.0 90428.0 90362.0 90362.0 \n", "7317758 2025-11-30 23:59:00+00:00 90363.0 90386.0 90362.0 90382.0 \n", "\n", " Volume \n", "7317754 0.531700 \n", "7317755 0.055547 \n", "7317756 0.301931 \n", "7317757 4.591653 \n", "7317758 0.410369 " ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv(\"data.csv\")\n", "df['Timestamp'] = pd.to_datetime(df['Timestamp'], unit='s', utc=True)\n", "df.tail()" ] }, { "cell_type": "code", "execution_count": 23, "id": "3b320537", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TimestampOpenHighLowCloseVolumeAvg
73177542025-11-30 23:55:00+00:0090405.090452.090403.090452.00.53170090427.5
73177552025-11-30 23:56:00+00:0090452.090481.090420.090420.00.05554790450.5
73177562025-11-30 23:57:00+00:0090412.090458.090396.090435.00.30193190427.0
73177572025-11-30 23:58:00+00:0090428.090428.090362.090362.04.59165390395.0
73177582025-11-30 23:59:00+00:0090363.090386.090362.090382.00.41036990374.0
\n", "
" ], "text/plain": [ " Timestamp Open High Low Close \\\n", "7317754 2025-11-30 23:55:00+00:00 90405.0 90452.0 90403.0 90452.0 \n", "7317755 2025-11-30 23:56:00+00:00 90452.0 90481.0 90420.0 90420.0 \n", "7317756 2025-11-30 23:57:00+00:00 90412.0 90458.0 90396.0 90435.0 \n", "7317757 2025-11-30 23:58:00+00:00 90428.0 90428.0 90362.0 90362.0 \n", "7317758 2025-11-30 23:59:00+00:00 90363.0 90386.0 90362.0 90382.0 \n", "\n", " Volume Avg \n", "7317754 0.531700 90427.5 \n", "7317755 0.055547 90450.5 \n", "7317756 0.301931 90427.0 \n", "7317757 4.591653 90395.0 \n", "7317758 0.410369 90374.0 " ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['Avg'] = (df['Low'] + df['High']) / 2\n", "df.tail()" ] }, { "cell_type": "code", "execution_count": 25, "id": "4b1cd63c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TimestampAvgOpenMinOpenMaxCloseMinCloseMax
50782025-11-2688057.30173686312.090574.086323.090574.0
50792025-11-2791245.09270890126.091888.090126.091925.0
50802025-11-2891324.30868190255.092970.090283.092966.0
50812025-11-2990746.47951490265.091158.090279.091179.0
50822025-11-3091187.35625090363.091940.090362.091940.0
\n", "
" ], "text/plain": [ " Timestamp Avg OpenMin OpenMax CloseMin CloseMax\n", "5078 2025-11-26 88057.301736 86312.0 90574.0 86323.0 90574.0\n", "5079 2025-11-27 91245.092708 90126.0 91888.0 90126.0 91925.0\n", "5080 2025-11-28 91324.308681 90255.0 92970.0 90283.0 92966.0\n", "5081 2025-11-29 90746.479514 90265.0 91158.0 90279.0 91179.0\n", "5082 2025-11-30 91187.356250 90363.0 91940.0 90362.0 91940.0" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_days = (\n", " df.groupby(df[\"Timestamp\"].dt.date)\n", " .agg(\n", " Avg=(\"Avg\", \"mean\"),\n", " OpenMin=(\"Open\", \"min\"),\n", " OpenMax=(\"Open\", \"max\"),\n", " CloseMin=(\"Close\", \"min\"),\n", " CloseMax=(\"Close\", \"max\"),\n", " )\n", " .reset_index()\n", ")\n", "df_days.tail()" ] }, { "cell_type": "code", "execution_count": 26, "id": "9a7b3310", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
start_dateend_datemin_openmax_openmin_closemax_closestart_avgend_avgchange
3162025-02-272025-04-2574509.095801.074515.095800.085166.06388994303.9072920.107294
3172025-04-262025-05-1192877.0104971.092872.0104965.094500.950347104182.1677080.102446
3182025-05-122025-07-1198384.0118833.098382.0118839.0103569.791319117463.6666670.134150
3192025-07-122025-11-0498944.0126202.098943.0126202.0117640.026389103712.9857640.118387
3202025-11-052025-11-1889291.0107343.089286.0107343.0102514.62118191705.8333330.105437
\n", "
" ], "text/plain": [ " start_date end_date min_open max_open min_close max_close \\\n", "316 2025-02-27 2025-04-25 74509.0 95801.0 74515.0 95800.0 \n", "317 2025-04-26 2025-05-11 92877.0 104971.0 92872.0 104965.0 \n", "318 2025-05-12 2025-07-11 98384.0 118833.0 98382.0 118839.0 \n", "319 2025-07-12 2025-11-04 98944.0 126202.0 98943.0 126202.0 \n", "320 2025-11-05 2025-11-18 89291.0 107343.0 89286.0 107343.0 \n", "\n", " start_avg end_avg change \n", "316 85166.063889 94303.907292 0.107294 \n", "317 94500.950347 104182.167708 0.102446 \n", "318 103569.791319 117463.666667 0.134150 \n", "319 117640.026389 103712.985764 0.118387 \n", "320 102514.621181 91705.833333 0.105437 " ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "intervals = []\n", "start_idx = 0\n", "price_base = df_days.loc[start_idx, \"Avg\"]\n", "\n", "for i in range(1, len(df_days)):\n", " price_now = df_days.loc[i, \"Avg\"]\n", " change = abs(price_now - price_base) / price_base\n", "\n", " if change >= 0.10:\n", " interval = df_days.loc[start_idx:i]\n", " \n", " intervals.append({\n", " \"start_date\": df_days.loc[start_idx, \"Timestamp\"],\n", " \"end_date\": df_days.loc[i, \"Timestamp\"],\n", " \"min_open\": interval[\"OpenMin\"].min(),\n", " \"max_open\": interval[\"OpenMax\"].max(),\n", " \"min_close\": interval[\"CloseMin\"].min(),\n", " \"max_close\": interval[\"CloseMax\"].max(),\n", " \"start_avg\": price_base,\n", " \"end_avg\": price_now,\n", " \"change\": change,\n", " })\n", "\n", " start_idx = i + 1\n", " if start_idx >= len(df_days):\n", " break\n", " price_base = df_days.loc[start_idx, \"Avg\"]\n", "\n", "df_intervals = pd.DataFrame(intervals)\n", "df_intervals.tail()" ] }, { "cell_type": "code", "execution_count": null, "id": "07f1cd58", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.12" } }, "nbformat": 4, "nbformat_minor": 5 }