Решение на питоне

This commit is contained in:
2025-12-02 12:02:05 +00:00
parent 49b18bc199
commit e0ba85db91

496
data.ipynb Normal file
View File

@@ -0,0 +1,496 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "2acce44b",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "5ba70af7",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Timestamp</th>\n",
" <th>Open</th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Close</th>\n",
" <th>Volume</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>7317754</th>\n",
" <td>2025-11-30 23:55:00+00:00</td>\n",
" <td>90405.0</td>\n",
" <td>90452.0</td>\n",
" <td>90403.0</td>\n",
" <td>90452.0</td>\n",
" <td>0.531700</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7317755</th>\n",
" <td>2025-11-30 23:56:00+00:00</td>\n",
" <td>90452.0</td>\n",
" <td>90481.0</td>\n",
" <td>90420.0</td>\n",
" <td>90420.0</td>\n",
" <td>0.055547</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7317756</th>\n",
" <td>2025-11-30 23:57:00+00:00</td>\n",
" <td>90412.0</td>\n",
" <td>90458.0</td>\n",
" <td>90396.0</td>\n",
" <td>90435.0</td>\n",
" <td>0.301931</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7317757</th>\n",
" <td>2025-11-30 23:58:00+00:00</td>\n",
" <td>90428.0</td>\n",
" <td>90428.0</td>\n",
" <td>90362.0</td>\n",
" <td>90362.0</td>\n",
" <td>4.591653</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7317758</th>\n",
" <td>2025-11-30 23:59:00+00:00</td>\n",
" <td>90363.0</td>\n",
" <td>90386.0</td>\n",
" <td>90362.0</td>\n",
" <td>90382.0</td>\n",
" <td>0.410369</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"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": 14,
"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": 19,
"id": "d4b22f3b",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Timestamp</th>\n",
" <th>Low</th>\n",
" <th>High</th>\n",
" <th>Open</th>\n",
" <th>Close</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>5078</th>\n",
" <td>2025-11-26</td>\n",
" <td>86304.0</td>\n",
" <td>90646.0</td>\n",
" <td>87331.0</td>\n",
" <td>90477.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5079</th>\n",
" <td>2025-11-27</td>\n",
" <td>90091.0</td>\n",
" <td>91926.0</td>\n",
" <td>90476.0</td>\n",
" <td>91325.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5080</th>\n",
" <td>2025-11-28</td>\n",
" <td>90233.0</td>\n",
" <td>93091.0</td>\n",
" <td>91326.0</td>\n",
" <td>90913.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5081</th>\n",
" <td>2025-11-29</td>\n",
" <td>90216.0</td>\n",
" <td>91179.0</td>\n",
" <td>90913.0</td>\n",
" <td>90832.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5082</th>\n",
" <td>2025-11-30</td>\n",
" <td>90362.0</td>\n",
" <td>91969.0</td>\n",
" <td>90832.0</td>\n",
" <td>90382.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Timestamp Low High Open Close\n",
"5078 2025-11-26 86304.0 90646.0 87331.0 90477.0\n",
"5079 2025-11-27 90091.0 91926.0 90476.0 91325.0\n",
"5080 2025-11-28 90233.0 93091.0 91326.0 90913.0\n",
"5081 2025-11-29 90216.0 91179.0 90913.0 90832.0\n",
"5082 2025-11-30 90362.0 91969.0 90832.0 90382.0"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_days = (\n",
" df.groupby(df[\"Timestamp\"].dt.date)\n",
" .agg({\"Low\": \"min\", \"High\": \"max\", \"Open\": \"first\", \"Close\": \"last\"})\n",
" .reset_index()\n",
")\n",
"df_days.tail()"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "91823496",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Timestamp</th>\n",
" <th>Low</th>\n",
" <th>High</th>\n",
" <th>Open</th>\n",
" <th>Close</th>\n",
" <th>Avg</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>5078</th>\n",
" <td>2025-11-26</td>\n",
" <td>86304.0</td>\n",
" <td>90646.0</td>\n",
" <td>87331.0</td>\n",
" <td>90477.0</td>\n",
" <td>88475.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5079</th>\n",
" <td>2025-11-27</td>\n",
" <td>90091.0</td>\n",
" <td>91926.0</td>\n",
" <td>90476.0</td>\n",
" <td>91325.0</td>\n",
" <td>91008.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5080</th>\n",
" <td>2025-11-28</td>\n",
" <td>90233.0</td>\n",
" <td>93091.0</td>\n",
" <td>91326.0</td>\n",
" <td>90913.0</td>\n",
" <td>91662.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5081</th>\n",
" <td>2025-11-29</td>\n",
" <td>90216.0</td>\n",
" <td>91179.0</td>\n",
" <td>90913.0</td>\n",
" <td>90832.0</td>\n",
" <td>90697.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5082</th>\n",
" <td>2025-11-30</td>\n",
" <td>90362.0</td>\n",
" <td>91969.0</td>\n",
" <td>90832.0</td>\n",
" <td>90382.0</td>\n",
" <td>91165.5</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Timestamp Low High Open Close Avg\n",
"5078 2025-11-26 86304.0 90646.0 87331.0 90477.0 88475.0\n",
"5079 2025-11-27 90091.0 91926.0 90476.0 91325.0 91008.5\n",
"5080 2025-11-28 90233.0 93091.0 91326.0 90913.0 91662.0\n",
"5081 2025-11-29 90216.0 91179.0 90913.0 90832.0 90697.5\n",
"5082 2025-11-30 90362.0 91969.0 90832.0 90382.0 91165.5"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_days[\"Avg\"] = (df_days[\"Low\"] + df_days[\"High\"]) / 2\n",
"df_days.tail()"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "9a7b3310",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>start_date</th>\n",
" <th>end_date</th>\n",
" <th>min_open</th>\n",
" <th>max_close</th>\n",
" <th>start_avg</th>\n",
" <th>end_avg</th>\n",
" <th>change</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>335</th>\n",
" <td>2025-02-27</td>\n",
" <td>2025-04-23</td>\n",
" <td>76252.0</td>\n",
" <td>94273.0</td>\n",
" <td>84801.5</td>\n",
" <td>93335.0</td>\n",
" <td>0.100629</td>\n",
" </tr>\n",
" <tr>\n",
" <th>336</th>\n",
" <td>2025-04-24</td>\n",
" <td>2025-05-09</td>\n",
" <td>93730.0</td>\n",
" <td>103261.0</td>\n",
" <td>92867.5</td>\n",
" <td>103341.0</td>\n",
" <td>0.112779</td>\n",
" </tr>\n",
" <tr>\n",
" <th>337</th>\n",
" <td>2025-05-10</td>\n",
" <td>2025-07-11</td>\n",
" <td>100990.0</td>\n",
" <td>117579.0</td>\n",
" <td>103915.0</td>\n",
" <td>117032.5</td>\n",
" <td>0.126233</td>\n",
" </tr>\n",
" <tr>\n",
" <th>338</th>\n",
" <td>2025-07-12</td>\n",
" <td>2025-11-04</td>\n",
" <td>106470.0</td>\n",
" <td>124728.0</td>\n",
" <td>117599.0</td>\n",
" <td>103079.0</td>\n",
" <td>0.123470</td>\n",
" </tr>\n",
" <tr>\n",
" <th>339</th>\n",
" <td>2025-11-05</td>\n",
" <td>2025-11-18</td>\n",
" <td>92112.0</td>\n",
" <td>105972.0</td>\n",
" <td>101737.5</td>\n",
" <td>91471.0</td>\n",
" <td>0.100912</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" start_date end_date min_open max_close start_avg end_avg \\\n",
"335 2025-02-27 2025-04-23 76252.0 94273.0 84801.5 93335.0 \n",
"336 2025-04-24 2025-05-09 93730.0 103261.0 92867.5 103341.0 \n",
"337 2025-05-10 2025-07-11 100990.0 117579.0 103915.0 117032.5 \n",
"338 2025-07-12 2025-11-04 106470.0 124728.0 117599.0 103079.0 \n",
"339 2025-11-05 2025-11-18 92112.0 105972.0 101737.5 91471.0 \n",
"\n",
" change \n",
"335 0.100629 \n",
"336 0.112779 \n",
"337 0.126233 \n",
"338 0.123470 \n",
"339 0.100912 "
]
},
"execution_count": 25,
"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[\"Open\"].min(),\n",
" \"max_close\": interval[\"Close\"].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()"
]
}
],
"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
}