2025-02-08 21:28:06 +04:00
|
|
|
|
{
|
|
|
|
|
"cells": [
|
2025-02-08 21:28:30 +04:00
|
|
|
|
{
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
|
|
|
|
"## Начало лабораторной\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"Цены на кофе - https://www.kaggle.com/datasets/mayankanand2701/starbucks-stock-price-dataset"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
|
|
|
|
"## Выгрузка данных"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"execution_count": 35,
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"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>Date</th>\n",
|
|
|
|
|
" <th>Open</th>\n",
|
|
|
|
|
" <th>High</th>\n",
|
|
|
|
|
" <th>Low</th>\n",
|
|
|
|
|
" <th>Close</th>\n",
|
|
|
|
|
" <th>Adj Close</th>\n",
|
|
|
|
|
" <th>Volume</th>\n",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" </thead>\n",
|
|
|
|
|
" <tbody>\n",
|
|
|
|
|
" <tr>\n",
|
|
|
|
|
" <th>0</th>\n",
|
|
|
|
|
" <td>1992-06-26</td>\n",
|
|
|
|
|
" <td>0.328125</td>\n",
|
|
|
|
|
" <td>0.347656</td>\n",
|
|
|
|
|
" <td>0.320313</td>\n",
|
|
|
|
|
" <td>0.335938</td>\n",
|
|
|
|
|
" <td>0.260703</td>\n",
|
|
|
|
|
" <td>224358400</td>\n",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" <tr>\n",
|
|
|
|
|
" <th>1</th>\n",
|
|
|
|
|
" <td>1992-06-29</td>\n",
|
|
|
|
|
" <td>0.339844</td>\n",
|
|
|
|
|
" <td>0.367188</td>\n",
|
|
|
|
|
" <td>0.332031</td>\n",
|
|
|
|
|
" <td>0.359375</td>\n",
|
|
|
|
|
" <td>0.278891</td>\n",
|
|
|
|
|
" <td>58732800</td>\n",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" <tr>\n",
|
|
|
|
|
" <th>2</th>\n",
|
|
|
|
|
" <td>1992-06-30</td>\n",
|
|
|
|
|
" <td>0.367188</td>\n",
|
|
|
|
|
" <td>0.371094</td>\n",
|
|
|
|
|
" <td>0.343750</td>\n",
|
|
|
|
|
" <td>0.347656</td>\n",
|
|
|
|
|
" <td>0.269797</td>\n",
|
|
|
|
|
" <td>34777600</td>\n",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" <tr>\n",
|
|
|
|
|
" <th>3</th>\n",
|
|
|
|
|
" <td>1992-07-01</td>\n",
|
|
|
|
|
" <td>0.351563</td>\n",
|
|
|
|
|
" <td>0.359375</td>\n",
|
|
|
|
|
" <td>0.339844</td>\n",
|
|
|
|
|
" <td>0.355469</td>\n",
|
|
|
|
|
" <td>0.275860</td>\n",
|
|
|
|
|
" <td>18316800</td>\n",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" <tr>\n",
|
|
|
|
|
" <th>4</th>\n",
|
|
|
|
|
" <td>1992-07-02</td>\n",
|
|
|
|
|
" <td>0.359375</td>\n",
|
|
|
|
|
" <td>0.359375</td>\n",
|
|
|
|
|
" <td>0.347656</td>\n",
|
|
|
|
|
" <td>0.355469</td>\n",
|
|
|
|
|
" <td>0.275860</td>\n",
|
|
|
|
|
" <td>13996800</td>\n",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" <tr>\n",
|
|
|
|
|
" <th>...</th>\n",
|
|
|
|
|
" <td>...</td>\n",
|
|
|
|
|
" <td>...</td>\n",
|
|
|
|
|
" <td>...</td>\n",
|
|
|
|
|
" <td>...</td>\n",
|
|
|
|
|
" <td>...</td>\n",
|
|
|
|
|
" <td>...</td>\n",
|
|
|
|
|
" <td>...</td>\n",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" <tr>\n",
|
|
|
|
|
" <th>8031</th>\n",
|
|
|
|
|
" <td>2024-05-17</td>\n",
|
|
|
|
|
" <td>75.269997</td>\n",
|
|
|
|
|
" <td>78.000000</td>\n",
|
|
|
|
|
" <td>74.919998</td>\n",
|
|
|
|
|
" <td>77.849998</td>\n",
|
|
|
|
|
" <td>77.849998</td>\n",
|
|
|
|
|
" <td>14436500</td>\n",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" <tr>\n",
|
|
|
|
|
" <th>8032</th>\n",
|
|
|
|
|
" <td>2024-05-20</td>\n",
|
|
|
|
|
" <td>77.680000</td>\n",
|
|
|
|
|
" <td>78.320000</td>\n",
|
|
|
|
|
" <td>76.709999</td>\n",
|
|
|
|
|
" <td>77.540001</td>\n",
|
|
|
|
|
" <td>77.540001</td>\n",
|
|
|
|
|
" <td>11183800</td>\n",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" <tr>\n",
|
|
|
|
|
" <th>8033</th>\n",
|
|
|
|
|
" <td>2024-05-21</td>\n",
|
|
|
|
|
" <td>77.559998</td>\n",
|
|
|
|
|
" <td>78.220001</td>\n",
|
|
|
|
|
" <td>77.500000</td>\n",
|
|
|
|
|
" <td>77.720001</td>\n",
|
|
|
|
|
" <td>77.720001</td>\n",
|
|
|
|
|
" <td>8916600</td>\n",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" <tr>\n",
|
|
|
|
|
" <th>8034</th>\n",
|
|
|
|
|
" <td>2024-05-22</td>\n",
|
|
|
|
|
" <td>77.699997</td>\n",
|
|
|
|
|
" <td>81.019997</td>\n",
|
|
|
|
|
" <td>77.440002</td>\n",
|
|
|
|
|
" <td>80.720001</td>\n",
|
|
|
|
|
" <td>80.720001</td>\n",
|
|
|
|
|
" <td>22063400</td>\n",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" <tr>\n",
|
|
|
|
|
" <th>8035</th>\n",
|
|
|
|
|
" <td>2024-05-23</td>\n",
|
|
|
|
|
" <td>80.099998</td>\n",
|
|
|
|
|
" <td>80.699997</td>\n",
|
|
|
|
|
" <td>79.169998</td>\n",
|
|
|
|
|
" <td>79.260002</td>\n",
|
|
|
|
|
" <td>79.260002</td>\n",
|
|
|
|
|
" <td>4651418</td>\n",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" </tbody>\n",
|
|
|
|
|
"</table>\n",
|
|
|
|
|
"<p>8036 rows × 7 columns</p>\n",
|
|
|
|
|
"</div>"
|
|
|
|
|
],
|
|
|
|
|
"text/plain": [
|
|
|
|
|
" Date Open High Low Close Adj Close \\\n",
|
|
|
|
|
"0 1992-06-26 0.328125 0.347656 0.320313 0.335938 0.260703 \n",
|
|
|
|
|
"1 1992-06-29 0.339844 0.367188 0.332031 0.359375 0.278891 \n",
|
|
|
|
|
"2 1992-06-30 0.367188 0.371094 0.343750 0.347656 0.269797 \n",
|
|
|
|
|
"3 1992-07-01 0.351563 0.359375 0.339844 0.355469 0.275860 \n",
|
|
|
|
|
"4 1992-07-02 0.359375 0.359375 0.347656 0.355469 0.275860 \n",
|
|
|
|
|
"... ... ... ... ... ... ... \n",
|
|
|
|
|
"8031 2024-05-17 75.269997 78.000000 74.919998 77.849998 77.849998 \n",
|
|
|
|
|
"8032 2024-05-20 77.680000 78.320000 76.709999 77.540001 77.540001 \n",
|
|
|
|
|
"8033 2024-05-21 77.559998 78.220001 77.500000 77.720001 77.720001 \n",
|
|
|
|
|
"8034 2024-05-22 77.699997 81.019997 77.440002 80.720001 80.720001 \n",
|
|
|
|
|
"8035 2024-05-23 80.099998 80.699997 79.169998 79.260002 79.260002 \n",
|
|
|
|
|
"\n",
|
|
|
|
|
" Volume \n",
|
|
|
|
|
"0 224358400 \n",
|
|
|
|
|
"1 58732800 \n",
|
|
|
|
|
"2 34777600 \n",
|
|
|
|
|
"3 18316800 \n",
|
|
|
|
|
"4 13996800 \n",
|
|
|
|
|
"... ... \n",
|
|
|
|
|
"8031 14436500 \n",
|
|
|
|
|
"8032 11183800 \n",
|
|
|
|
|
"8033 8916600 \n",
|
|
|
|
|
"8034 22063400 \n",
|
|
|
|
|
"8035 4651418 \n",
|
|
|
|
|
"\n",
|
|
|
|
|
"[8036 rows x 7 columns]"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"execution_count": 35,
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"output_type": "execute_result"
|
2025-02-08 21:28:30 +04:00
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
2025-02-13 21:31:35 +04:00
|
|
|
|
"import pandas as pd\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"df = pd.read_csv(\"./static/csv/Starbucks Dataset.csv\")\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"df"
|
2025-02-08 21:28:30 +04:00
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
|
|
|
|
"## Атрибуты\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"Date — Дата\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"Open — Цена открытия\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"High — Макс. цена\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"Low — Мин. цена\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"Close — Цена закрытия\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"Adj Close — Скорректированная цена закрытия\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"Volume — Объем торгов"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
|
|
|
|
"## Выбор входных и выходных переменных"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
|
|
|
|
"Входные переменные будут Open (цена открытия) и Volume (объем торгов)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"Выходная переменная - Close (цена закрытия)"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
|
|
|
|
"## Настройка параметров лингвистических переменных"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"Термы: Низкий (Low) Средний (Medium) Высокий (High)"
|
2025-02-08 21:28:30 +04:00
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"execution_count": null,
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"data": {
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAIjCAYAAAA0vUuxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACYxElEQVR4nOzdeVxU9f7H8dcw7CgiiOKOK2HmnluWdnNJra7tmbtpq5VZmra41DW7pWWrVlZaallm1i1/lXmzXFNTsxLNHTVRcUNBYGDO74+JuY7sw8AZhvfz8fDhmTPfc85n+A4wb873fI/FMAwDERERERERyZef2QWIiIiIiIh4OwUnERERERGRQig4iYiIiIiIFELBSUREREREpBAKTiIiIiIiIoVQcBIRERERESmEgpOIiIiIiEghFJxEREREREQK4W92ASIiIuLb0tPTOXnyJP7+/lSvXt3sckRE3KIzTiIiIuJx33//PTfccAMRERGEhIRQu3ZtHn74YbPLEhFxm844iVQgQ4cOZfHixZw7d87sUkTEh7355ps8+OCDdOnShVdeeYXatWsDUL9+fZMrExFxn8UwDMPsIkSk9Jw4cYIFCxawatUqfvrpJ5KTk+nRowetW7fmtttuo3Xr1maXKCI+ZNeuXVx22WUMGzaMN998E4vFYnZJIiIeoeAk4sM+/vhjRo4cyblz54iNjcVms5GUlETr1q359ddfsdlsDBkyhLfffpvAwECzyxURH/Dggw/yn//8h127dhEQEGB2OSIiHqNrnER81Jo1axg4cCAxMTGsWbOGffv20b17d4KDg9m4cSN//fUX/fv3Z968eTzyyCMAGIZBbGws//znP3PtLz09nSpVqnDPPfcAsHLlSiwWC4sXL87VtlKlSgwdOtT5eO7cuVgsFvbv3+9c98cff1C1alWuu+46srKyXNpt2rTJZX/JyclYLBYmT57ssj6vdS+++CIWi4Vu3bo51+XUunLlSpe2ffv2zXMfF8vZPr9/eb3Wn376iXvuuYeoqCjCw8MZPHgwp06dctlvbGysy7YAn376KRaLhdjYWOe6/fv3Y7FYmD59eq7amjdv7vJaMzMzmThxIm3btqVKlSqEhYVx5ZVX8sMPP+T52nLqvfjfhce/UH5fgwv7FmD+/Pm0bduWkJAQIiMjueOOOzh48KBLnV27dqVhw4YcP37cuX7y5Mm5zlBMnz4df39/li1b5lzXrVs3mjdvnqu+6dOn51nPm2++yaWXXkpQUBC1atXigQce4PTp07m2//nnn+nTpw9Vq1YlLCyMFi1a8MorrwCOoa4FvQ8uPG5R+7YgOf1elK93ztckr7Zz5851aTdr1iyaN29OaGioS7u8vpcvtmXLFnr37k14eDiVKlXimmuuYf369S5t1q9fT9u2bbn//vupUaMGQUFBNG/enHfeecfZ5vTp07nqzOv9fbHTp08zevRo6tatS1BQEI0bN+bf//43drs9z6/b0qVLXbZPT0+natWquY534MAB7r//fuLi4ggJCSEqKopbb701z6/zhQrqo7x+Puzdu5dbb72VyMhIQkND6dixI19//bXLPnN+3ixatIgnnniCmJgYwsLCuOGGG1y+hyD/Pu/evbuzTVZWFs8++yyNGjUiKCiI2NhYnnjiCTIyMlz2FRsb69zez8+PmJgYbr/9dhITEwv8GohUJLrGScRHPf/889jtdj7++GPatm2b6/lq1arxwQcfsH37dt566y0mTZpE9erVGThwIC+88AInT54kMjLS2f4///kPKSkpDBw4sMS1HTx4kGuvvZZLLrmETz75BH9/z/woOn36NNOmTStS259++snlg3hRPPTQQ1x++eUu60aMGJFn21GjRhEREcHkyZPZuXMns2bN4sCBA84PRXnJysriySefLFZNF0tJSWHOnDn079+fkSNHcvbsWd5991169erFhg0baNWqVZ7bPfPMMzRo0ACAGTNm5Ap5F7rxxhu56aabAFi1ahVvv/22y/NTp07l6aef5rbbbmPEiBEcP36c1157jauuuootW7YQERFBYGAgS5YsoWPHjtx4442sWLGCoKCgXMf64osvePzxx5k5cyZ9+vRx62syefJkpkyZQvfu3bnvvvuc/bFx40bWrFnjPCuyfPlyrrvuOmrWrMnDDz9MTEwMCQkJfPXVVzz88MPcc889Lh9IBw0a5PK1AIiOjs6zhpL0bf/+/Z2vfdmyZXz00Uf5tr3kkkucx0lOTnb+USTHokWLuP/+++nWrRsPPvggYWFhJCQk8NxzzxVaxx9//MGVV15JeHg448aNIyAggLfeeotu3brx448/0qFDB8AxPHjTpk34+/vzwAMP0KhRI5YuXcrdd9/NiRMnGD9+PGFhYXz44Yf51pmXtLQ0unbtyuHDh7nnnnuoV68ea9euZcKECRw5coSZM2e6tA8ODub999+nX79+znVLliwhPT091743btzI2rVrueOOO6hTpw779+9n1qxZdOvWje3btxMaGppnTdHR0c7XkbP/zz//3GVdo0aNADh69CidO3cmLS2Nhx56iKioKObNm8cNN9zA4sWLufHGG132PXXqVCwWC48//jjHjh1j5syZdO/ena1btxISEuJsV6dOnVw/92rWrOlcHjFiBPPmzeOWW27h0Ucf5eeff2batGkkJCTw+eefu2x35ZVXcvfdd2O32/n999+ZOXMmf/31F6tWrcrz9YtUOIaI+KTIyEijfv36LuuGDBlihIWFuax7+umnDcD4z3/+YxiGYezcudMAjFmzZrm0u+GGG4zY2FjDbrcbhmEYP/zwgwEYn376aa5jh4WFGUOGDHE+fv/99w3A2Ldvn3Hy5EmjWbNmRlxcnJGcnOyyXU67jRs3uqw/fvy4ARiTJk1yWX/xunHjxhnVq1c32rZta3Tt2tW5PqfWH374wbmuQ4cORu/evfPc78Xcea1t27Y1MjMznetfeOEFAzC++OIL57r69eu7bPvmm28aQUFBxtVXX+3Sd/v27TMA48UXX8x1/EsvvdTltWZlZRkZGRkubU6dOmXUqFHDGD58eK7t3377bQMwNm3a5FzXt2/fXO8dwzAMm81mAMaUKVNyvd59+/YZhmEY+/fvN6xWqzF16lSXbX/77TfD398/1/qdO3caVatWNQYOHGgYhmFMmjTJyPnVtGXLFiMsLMx44IEHctXStWtX49JLL821/sUXX3Sp59ixY0ZgYKDRs2dPIzs729nu9ddfNwDjvffeMwzD8XVr0KCBUb9+fePUqVMu+8x5z1+soPdOUfu2IH/++acBGNOnT8/39V3oiiuuMK6++mrn45z3zfvvv+9c179/fyMiIsI4f/68c11B7+8L9evXzwgMDDT27NnjXPfXX38ZlStXNq666irnuvr16xuAMXfuXOe6rKws45prrjGCgoJyfd8X9P6+0LPPPmuEhYUZf/75p8v68ePHG1ar1UhMTHTZX//+/Q1/f38jKSnJ2faaa64x7rzzzlzHS0tLy3W8devWGYDxwQcfFFjXhS58/15s9OjRBmCsWrXKue7s2bNGgwYNjNjYWOf7M6c/ateubaSkpDjbfvLJJwZgvPLKK851+X0f5Ni6dasBGCNGjHBZ/9hjjxmA8d///te57uL3rGEYxp133mmEhoYW/sJFKggN1RPxUWfPni3S/VJq1KgBOM5UADRt2pQOHTqwYMECZ5uTJ0/yf//3fwwYMCDX2ZKzZ8+SnJzs8i8/6enp3HDDDRw/fpxvvvmGqKgod15ang4fPsxrr73G008/TaVKlQpsu2TJEjZu3Mjzzz/vseNf7O6773a5vuO+++7LNdzsQmlpaTzzzDOMGjWKevXq5dvm4q91dna2Sxur1eq8Xs1ut3Py5EmysrJo164dmzdvzrXPnL++BwcHF/qaMjMzAfI8M5RjyZIl2O12brvtNpc6Y2JiaNKkSa4hg02bNuWzzz5jwYIF/Otf/3KuP3LkCNdffz2dOnVyDpW7WHZ2dq6vR1pamkub77//nszMTEaPHo2f3/9+5Y0cOZLw8HDnMKktW7awb98+Ro8eTUREhMs+Sjq5QVH
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"text/plain": [
|
|
|
|
|
"<Figure size 1000x600 with 1 Axes>"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"output_type": "display_data"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"import numpy as np\n",
|
|
|
|
|
"import matplotlib.pyplot as plt\n",
|
|
|
|
|
"import skfuzzy as fuzz\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Определяем диапазон значений для объема торгов\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"volume_range = np.arange(0, 585508801, 10000) \n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Определение функций принадлежности для термов\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"low = fuzz.trapmf(volume_range, [0, 0, 30000000, 30000000]) \n",
|
|
|
|
|
"medium = fuzz.trimf(volume_range, [25000000, 250000000, 250000000]) \n",
|
|
|
|
|
"high = fuzz.trapmf(volume_range, [200000000, 250000000, 585508800, 585508800]) \n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Визуализация функций принадлежности\n",
|
|
|
|
|
"plt.figure(figsize=(10, 6))\n",
|
|
|
|
|
"plt.plot(volume_range, low, label='Низкий (Low)', color='blue')\n",
|
|
|
|
|
"plt.plot(volume_range, medium, label='Средний (Medium)', color='orange')\n",
|
|
|
|
|
"plt.plot(volume_range, high, label='Высокий (High)', color='green')\n",
|
|
|
|
|
"plt.title('Функции принадлежности для объема торгов')\n",
|
|
|
|
|
"plt.xlabel('Объем торгов')\n",
|
|
|
|
|
"plt.ylabel('Принадлежность')\n",
|
|
|
|
|
"plt.ylim(-0.1, 1.1)\n",
|
|
|
|
|
"plt.axhline(0, color='black', lw=0.5)\n",
|
|
|
|
|
"plt.axvline(0, color='black', lw=0.5)\n",
|
|
|
|
|
"plt.legend()\n",
|
|
|
|
|
"plt.grid()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Отображаем график\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"plt.show()"
|
2025-02-08 21:28:30 +04:00
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
|
|
|
|
"## Формирование базы нечетких правил"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"execution_count": null,
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
|
|
|
|
"Нечеткие правила:\n",
|
|
|
|
|
"Если Цена открытия Низкая И Объем Низкий, Тогда Цена закрытия Низкая.\n",
|
|
|
|
|
"Если Цена открытия Низкая И Объем Средний, Тогда Цена закрытия Средняя.\n",
|
|
|
|
|
"Если Цена открытия Низкая И Объем Высокий, Тогда Цена закрытия Средняя.\n",
|
|
|
|
|
"Если Цена открытия Средняя И Объем Низкий, Тогда Цена закрытия Средняя.\n",
|
|
|
|
|
"Если Цена открытия Средняя И Объем Средний, Тогда Цена закрытия Высокая.\n",
|
|
|
|
|
"Если Цена открытия Средняя И Объем Высокий, Тогда Цена закрытия Высокая.\n",
|
|
|
|
|
"Если Цена открытия Высокая И Объем Низкий, Тогда Цена закрытия Средняя.\n",
|
|
|
|
|
"Если Цена открытия Высокая И Объем Средний, Тогда Цена закрытия Высокая.\n",
|
|
|
|
|
"Если Цена открытия Высокая И Объем Высокий, Тогда Цена закрытия Высокая.\n"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"data": {
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"image/png": "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
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"text/plain": [
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"<Figure size 1000x1200 with 3 Axes>"
|
2025-02-08 21:28:30 +04:00
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"output_type": "display_data"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"data": {
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAJOCAYAAACqS2TfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd5xcZb348c/znHOmbEtvQOi9FwURadKb7V4LeC+IiFeKInj1AiqIBVRE9CrgDxBQ6XARUIqEkAChQ+ihJNnd9GzfnT5zyvP7YwvZ7CbZ3ezsmZn9vl+vvF7ZmTPnfGf27Mx8z/M8368yxhiEEEIIIYQQQggx6nTYAQghhBBCCCGEEJVKkm4hhBBCCCGEEKJIJOkWQgghhBBCCCGKRJJuIYQQQgghhBCiSCTpFkIIIYQQQgghikSSbiGEEEIIIYQQokgk6RZCCCGEEEIIIYpEkm4hhBBCCCGEEKJIJOkWQgghhBBCCCGKRJJuIYQQQgghhBCiSCTpFkKIcei2225DKdXv3/Tp0znyyCN57LHHwg5PCCGEEKJi2GEHIIQQIjw//elP2W677TDG0NTUxG233caJJ57IP/7xD04++eSwwxNCCCGEKHuSdAshxDh2wgkn8LGPfazv57POOosZM2Zw1113SdIthBBCCDEKZHq5EEKIPhMnTiQej2PbH12TbWxsRCnFbbfd1m/b8847D6UUX/va1/pue+CBBzjwwAOZPHky8XicXXfdlV/96lcYYwCYN28eSin+/ve/Dzj2nXfeiVKKF154AYC33nqLr33ta2y//fbEYjFmzpzJ17/+ddra2gaNfdtttx0wZV4pxfz58/tts268APfddx9KKbbddtu+2z744AM+/elPM3PmTKLRKLNnz+Zb3/oW7e3tfdsUCgUuu+wyDjjgACZMmEB1dTWHHnoo8+bN67f/3tfvN7/5zYCY99xzT4444oh+tx1xxBEDbnvllVf6ns+6UqkU3/ve99h+++1xHKff825tbR30dVr3OHvuueeA23/zm9+glKKxsbHf7Y899hiHHnoo1dXV1NbWctJJJ/Huu+/222aw13f+/PkDfg8AL730EscffzwTJkygqqqKww8/nOeee67v/p/85CeD/j4H+90O9pr94he/QGvNnXfe2e85D+W1vfXWW1FKccstt/Tb9sorr0QpxaOPPjrgdVv/ddhY3OtSSnH++edzxx13sMsuuxCLxTjggAN45pln+m23bNkyzj33XHbZZRfi8ThTpkzhi1/84oDf0/pLR6qqqthrr724+eab+233ta99rd85D7BixQri8figv//e3+P6/9bfhxBCiIFkpFsIIcaxrq4uWltbMcbQ3NzMH/7wB1KpFP/xH/+x0cctWbKEm266acDtiUSCgw46iDPOOAPHcXj88ce5+OKLsW2b733vexxxxBHMnj2bO+64g89//vP9HnvHHXewww47cPDBBwMwZ84c6uvrOfPMM5k5cybvvvsuN954I++++y4vvvjigOQF4NBDD+Wb3/wmAO+99x5XXnnlRp+H53n88Ic/HHB7Op1mq6224pRTTqGuro533nmH6667jlWrVvGPf/yj77nefPPNnHrqqZx99tkkk0n+/Oc/c9xxx/Hyyy+z7777bvTYw/E///M/g97+/e9/nz/96U+cddZZHHLIITiOwwMPPDDoRY3N8be//Y0zzjiD4447jl/96ldkMhluuOEGPvWpT/H6668PO/F66qmnOOGEEzjggAO4/PLL0Vpz66238ulPf5pnn32WAw88kC984QvsuOOOfY+58MIL2W233fp+vwC77bbboPu/9dZb+dGPfsQ111zDaaedttFYBnttzzzzTB544AEuuugijjnmGGbPns3bb7/NFVdcwVlnncWJJ564yee477778r3vfa/fbX/961+ZM2fOgG2ffvpp7rnnHr7zne8QjUa5/vrrOf7443n55Zf7Loy88sorPP/883zlK19hq622orGxkRtuuIEjjjiCRYsWUVVV1W+f1157LVOnTiWRSHDLLbdw9tlns+2223L00UdvMObLLruMXC630ed16aWX9r3uN954I8uXL9/kayGEEOOeEUIIMe7ceuutBhjwLxqNmttuu63ftg0NDQYwt956a99tX/rSl8yee+5pZs+ebc4444yNHmv33Xc3J598ct/Pl1xyiYlGo6azs7PvtubmZmPbtrn88sv7bstkMgP2dddddxnAPPPMMwPu23LLLc2ZZ57Z9/O8efMMYObNm9d32zbbbNMv3uuvv95Eo1Fz5JFHmm222Wajz+Pcc881NTU1fT97nmfy+Xy/bTo6OsyMGTPM17/+9b7bel+/q6++esA+99hjD3P44Yf3u+3www/vd9ujjz5qAHP88ceb9T+2Z82aZY477rh+t11++eUGMC0tLRt9PocffrjZY489Btx+9dVXG8A0NDQYY4xJJpNm4sSJ5uyzz+633dq1a82ECRP63b7ddtuZ008/vd926/8egiAwO+20kznuuONMEAR922UyGbPddtuZY445ZtB41//drf9cel+zRx55xNi2bb73ve9tdDtjNv7arlmzxkyePNkcc8wxJp/Pm/32289svfXWpqura9AY1o/1pJNOGnD7eeedN+A4vX97r776at9ty5YtM7FYzHz+85/vu22wv4cXXnjBAOavf/1r3229f9u9vz9jjPnwww8NYH7961/33XbGGWf0O+ffeecdo7U2J5xwwoDHG2PMnDlzDGCefvrpDe5DCCHE4GR6uRBCjGPXXXcdc+bMYc6cOdx+++0ceeSRfOMb3+CBBx7Y4GNee+017rvvPq666iq0HvxjpLW1lZUrV3LbbbexZMkSDjvssL77Tj/9dPL5PPfff3/fbffccw+e5/UbYY/H433/z+VytLa28olPfAKAhQsXDjhmoVAgGo0O+blnMhl++tOfcv7557P11lsPuk1XVxdNTU3MnTuXRx55pN/zsCyLSCQCQBAEtLe343keH/vYxwaNbySMMVxyySX827/9GwcddNCA+5PJJFOmTBnx/n3fp7W1td+/TCbTb5s5c+bQ2dnJqaee2m87y7I46KCD+k2nnz59OitXrtzoMd944w0WL17MaaedRltbW9/+0uk0Rx11FM888wxBEIzo+bz88st86Utf4t/+7d+4+uqrN7rtpl7bmTNn9v19HHroobzxxhvccsst1NXVjSi2jTn44IM54IAD+n7eeuut+exnP8u//vUvfN8H+v89uK5LW1sbO+64IxMnThz0fOvo6KC1tZX6+nquvfZaLMvi8MMP32AMl1xyCfvvvz9f/OIXB72/UCgADOtvTAghRDeZXi6EEOPYgQce2K+Q2qmnnsp+++3H+eefz8knn9yXVK7r4osv5tBDD+Xkk0/m/PPPH3B/Lpdj2rRpQPd61UsvvZTvf//7fffvuuuufPzjH+eOO+7grLPOArqnln/iE5/oN524vb2dK664grvvvpvm5uZ+x+jq6hpw3K6uLmpqaob83H/729+Sy+W49NJLueiiiwbd5rjjjuOll14C4Pjjj+eee+7pd/9f/vIXrrnmGt5//31c1+27fbvtthtyHBtzxx138O6773Lvvff2W5vc6+CDD+bvf/87999/f9/08vWT5o15//33+35XG7J48WIAPv3pTw96/7pJ6Cc/+Un+93//l7vvvptPf/rTaK0H/K5693fGGWds8JhdXV1MmjRpSM+h16pVqzjppJNIp9O0tbUNuvxgXZt6bQG+8pWvcPvtt/PII4/wzW9+k6OOOmpYMQ3VTjvtNOC2nXfemUwmQ0tLCzNnziSbzXLVVVdx6623smrVqr46CTD438P+++/f9/9oNMof//hHDjzwwEGPv2DBAv7xj38wd+7cDU4X7+zsBBjW35gQQohuknQLIYToo7XmyCOP5Pe//z2LFy9mjz326Hf/E088wZNPPtlX7GwwkUiEOXPmkMlkePbZZ/nVr37F7Nmz+a//+q++bU4//XQuuOACVq5cST6f58UXX+SPf/xjv/186Utf4vnnn+f73/8+++67LzU1NQRBwPHHHz9gJLS
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"text/plain": [
|
|
|
|
|
"<Figure size 1000x600 with 1 Axes>"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"output_type": "display_data"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"import numpy as np\n",
|
|
|
|
|
"import skfuzzy as fuzz\n",
|
|
|
|
|
"import matplotlib.pyplot as plt\n",
|
|
|
|
|
"\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"x_open = np.linspace(0, 126, 100) \n",
|
|
|
|
|
"x_volume = np.linspace(0, 585508800, 100) \n",
|
|
|
|
|
"x_close = np.linspace(0, 130, 100) \n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Определение функций принадлежности для цены открытия\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"low_open = fuzz.trapmf(x_open, [0, 0, 10, 40])\n",
|
|
|
|
|
"medium_open = fuzz.trimf(x_open, [35, 63, 90])\n",
|
|
|
|
|
"high_open = fuzz.trapmf(x_open, [85, 90, 126, 126])\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Определение функций принадлежности для объема торгов\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"low_volume = fuzz.trapmf(x_volume, [0, 0, 30000000, 30000000])\n",
|
|
|
|
|
"medium_volume = fuzz.trimf(x_volume, [25000000, 250000000, 250000000])\n",
|
|
|
|
|
"high_volume = fuzz.trapmf(x_volume, [200000000, 250000000, 585508800, 585508800])\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Определение функций принадлежности для цены закрытия\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"low_close = fuzz.trapmf(x_close, [0, 0, 10, 40])\n",
|
|
|
|
|
"medium_close = fuzz.trimf(x_close, [35, 80, 115])\n",
|
|
|
|
|
"high_close = fuzz.trapmf(x_close, [110, 120, 130, 130])\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Определение нечетких правил\n",
|
|
|
|
|
"fuzzy_rules = [\n",
|
|
|
|
|
" (\"Низкая\", \"Низкий\", \"Низкая\"),\n",
|
|
|
|
|
" (\"Низкая\", \"Средний\", \"Средняя\"),\n",
|
|
|
|
|
" (\"Низкая\", \"Высокий\", \"Средняя\"),\n",
|
|
|
|
|
" (\"Средняя\", \"Низкий\", \"Средняя\"),\n",
|
|
|
|
|
" (\"Средняя\", \"Средний\", \"Высокая\"),\n",
|
|
|
|
|
" (\"Средняя\", \"Высокий\", \"Высокая\"),\n",
|
|
|
|
|
" (\"Высокая\", \"Низкий\", \"Средняя\"),\n",
|
|
|
|
|
" (\"Высокая\", \"Средний\", \"Высокая\"),\n",
|
|
|
|
|
" (\"Высокая\", \"Высокий\", \"Высокая\"),\n",
|
|
|
|
|
"]\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Вывод правил\n",
|
|
|
|
|
"print(\"Нечеткие правила:\")\n",
|
|
|
|
|
"for rule in fuzzy_rules:\n",
|
|
|
|
|
" print(f\"Если Цена открытия {rule[0]} И Объем {rule[1]}, Тогда Цена закрытия {rule[2]}.\")\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Визуализация функций принадлежности\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"fig, axs = plt.subplots(3, 1, figsize=(10, 12))\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Цена открытия\n",
|
|
|
|
|
"axs[0].plot(x_open, low_open, label='Низкий (Low)', color='blue')\n",
|
|
|
|
|
"axs[0].plot(x_open, medium_open, label='Средний (Medium)', color='green')\n",
|
|
|
|
|
"axs[0].plot(x_open, high_open, label='Высокий (High)', color='red')\n",
|
|
|
|
|
"axs[0].set_title('Функции принадлежности для цены открытия')\n",
|
|
|
|
|
"axs[0].set_xlabel('Цена открытия')\n",
|
|
|
|
|
"axs[0].set_ylabel('Степень принадлежности')\n",
|
|
|
|
|
"axs[0].legend()\n",
|
|
|
|
|
"axs[0].grid()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Объем торгов\n",
|
|
|
|
|
"axs[1].plot(x_volume, low_volume, label='Низкий (Low)', color='blue')\n",
|
|
|
|
|
"axs[1].plot(x_volume, medium_volume, label='Средний (Medium)', color='orange')\n",
|
|
|
|
|
"axs[1].plot(x_volume, high_volume, label='Высокий (High)', color='green')\n",
|
|
|
|
|
"axs[1].set_title('Функции принадлежности для объема торгов')\n",
|
|
|
|
|
"axs[1].set_xlabel('Объем торгов')\n",
|
|
|
|
|
"axs[1].set_ylabel('Степень принадлежности')\n",
|
|
|
|
|
"axs[1].legend()\n",
|
|
|
|
|
"axs[1].grid()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Цена закрытия\n",
|
|
|
|
|
"axs[2].plot(x_close, low_close, label='Низкая', color='blue')\n",
|
|
|
|
|
"axs[2].plot(x_close, medium_close, label='Средняя', color='green')\n",
|
|
|
|
|
"axs[2].plot(x_close, high_close, label='Высокая', color='red')\n",
|
|
|
|
|
"axs[2].set_title('Функции принадлежности для цены закрытия')\n",
|
|
|
|
|
"axs[2].set_xlabel('Цена закрытия')\n",
|
|
|
|
|
"axs[2].set_ylabel('Степень принадлежности')\n",
|
|
|
|
|
"axs[2].legend()\n",
|
|
|
|
|
"axs[2].grid()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"plt.tight_layout()\n",
|
|
|
|
|
"plt.show()\n",
|
|
|
|
|
"\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"# Визуализация нечетких правил (пример)\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"fig, ax = plt.subplots(figsize=(10, 6))\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"x_rule = np.linspace(0, 126, 100)\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Пример нечеткого вывода для визуализации (примерные значения)\n",
|
|
|
|
|
"for rule in fuzzy_rules:\n",
|
|
|
|
|
" # Определение степени уверенности для каждого правила\n",
|
|
|
|
|
" if rule[0] == \"Низкая\" and rule[1] == \"Низкий\":\n",
|
|
|
|
|
" ax.fill_between(x_open, low_open, low_close, color='lightblue', alpha=0.5, label='Низкий #1')\n",
|
|
|
|
|
" elif rule[0] == \"Низкая\" and rule[1] == \"Средний\":\n",
|
|
|
|
|
" ax.fill_between(x_open, medium_open, medium_close, color='lightgreen', alpha=0.5, label='Средний #2')\n",
|
|
|
|
|
" elif rule[0] == \"Низкая\" and rule[1] == \"Высокий\":\n",
|
|
|
|
|
" ax.fill_between(x_open, low_open, medium_close, color='lightcoral', alpha=0.5, label='Высокий #3')\n",
|
|
|
|
|
" elif rule[0] == \"Средняя\" and rule[1] == \"Низкий\":\n",
|
|
|
|
|
" ax.fill_between(x_open, medium_open, medium_close, color='orange', alpha=0.5, label='Низкий #4')\n",
|
|
|
|
|
" elif rule[0] == \"Высокая\" and rule[1] == \"Высокий\":\n",
|
|
|
|
|
" ax.fill_between(x_open, high_open, high_close, color='salmon', alpha=0.5, label='Высокий #5')\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"ax.set_title('Визуализация нечетких правил')\n",
|
|
|
|
|
"ax.set_xlabel('Цена открытия')\n",
|
|
|
|
|
"ax.set_ylabel('Цена закрытия')\n",
|
|
|
|
|
"ax.legend()\n",
|
|
|
|
|
"ax.grid()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"plt.tight_layout()\n",
|
|
|
|
|
"plt.show()"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
|
|
|
|
"## Оценка качества полученной нечеткой системы, используя метрики регрессии"
|
|
|
|
|
]
|
|
|
|
|
},
|
2025-02-08 21:28:06 +04:00
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
2025-02-08 21:28:40 +04:00
|
|
|
|
"execution_count": null,
|
2025-02-08 21:28:06 +04:00
|
|
|
|
"metadata": {},
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
|
|
|
|
"Цена открытия | Объем торгов | Фактическая цена закрытия | Полученная цена закрытия \n",
|
|
|
|
|
"============================================================================================\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"50 | 150000000 | 60 | 41.07 \n",
|
|
|
|
|
"100 | 300000000 | 120 | 30.55 \n",
|
|
|
|
|
"85 | 450000000 | 110 | 5.24 \n",
|
|
|
|
|
"40 | 100000000 | 30 | 13.69 \n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"Средняя абсолютная ошибка (MAE): 57.36\n",
|
|
|
|
|
"Среднеквадратичная ошибка (RMSE): 70.00\n"
|
2025-02-08 21:28:30 +04:00
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"import numpy as np\n",
|
|
|
|
|
"import skfuzzy as fuzz\n",
|
|
|
|
|
"import matplotlib.pyplot as plt\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Определяем диапазоны значений для входных переменных\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"x_open = np.linspace(0, 126, 100) # Цена открытия\n",
|
|
|
|
|
"x_volume = np.linspace(0, 585508800, 100) # Объем торгов\n",
|
|
|
|
|
"x_close = np.linspace(0, 130, 100) # Цена закрытия\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Определение функций принадлежности для цены открытия\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"low_open = fuzz.trapmf(x_open, [0, 0, 10, 40])\n",
|
|
|
|
|
"medium_open = fuzz.trimf(x_open, [35, 63, 90])\n",
|
|
|
|
|
"high_open = fuzz.trapmf(x_open, [85, 90, 126, 126])\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Определение функций принадлежности для объема торгов\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"low_volume = fuzz.trapmf(x_volume, [0, 0, 30000000, 30000000])\n",
|
|
|
|
|
"medium_volume = fuzz.trimf(x_volume, [30000000, 250000000, 300000000])\n",
|
|
|
|
|
"high_volume = fuzz.trapmf(x_volume, [250000000, 450000000, 585508800, 585508800])\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Определение функций принадлежности для цены закрытия\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"low_close = fuzz.trapmf(x_close, [0, 0, 10, 40])\n",
|
|
|
|
|
"medium_close = fuzz.trimf(x_close, [35, 80, 115])\n",
|
|
|
|
|
"high_close = fuzz.trapmf(x_close, [110, 120, 130, 130])\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Создаем тестовые данные (цена открытия, объем, эталонная цена закрытия)\n",
|
|
|
|
|
"test_data = [\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
" (50, 150000000, 60), # Низкая цена открытия, средний объем и цена закрытия\n",
|
|
|
|
|
" (100, 300000000, 120), # Высокая цена открытия, средний объем и высокая цена закрытия\n",
|
|
|
|
|
" (85, 450000000, 110), # Высокая цена открытия и высокая цена закрытия\n",
|
|
|
|
|
" (40, 100000000, 30) # Средняя цена открытия и низкий объем\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"]\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Функция для вычисления нечеткой оценки\n",
|
|
|
|
|
"def fuzzy_inference(open_price, volume):\n",
|
|
|
|
|
" open_low = fuzz.interp_membership(x_open, low_open, open_price)\n",
|
|
|
|
|
" open_medium = fuzz.interp_membership(x_open, medium_open, open_price)\n",
|
|
|
|
|
" open_high = fuzz.interp_membership(x_open, high_open, open_price)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" volume_low = fuzz.interp_membership(x_volume, low_volume, volume)\n",
|
|
|
|
|
" volume_medium = fuzz.interp_membership(x_volume, medium_volume, volume)\n",
|
|
|
|
|
" volume_high = fuzz.interp_membership(x_volume, high_volume, volume)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" close_low = np.fmin(open_low, volume_low)\n",
|
|
|
|
|
" close_medium = np.fmin(open_medium, volume_medium)\n",
|
|
|
|
|
" close_high = np.fmin(open_high, volume_high)\n",
|
|
|
|
|
"\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
" close0 = fuzz.defuzz(x_close, low_close, 'centroid') * close_low if close_low > 0 else 0\n",
|
|
|
|
|
" close1 = fuzz.defuzz(x_close, medium_close, 'centroid') * close_medium if close_medium > 0 else 0\n",
|
|
|
|
|
" close2 = fuzz.defuzz(x_close, high_close, 'centroid') * close_high if close_high > 0 else 0\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
" return max(close0, close1, close2)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Список для хранения результатов\n",
|
|
|
|
|
"results = []\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Оценка системы на тестовом наборе данных\n",
|
|
|
|
|
"for open_price, volume, actual_close in test_data:\n",
|
|
|
|
|
" inferred_close = fuzzy_inference(open_price, volume)\n",
|
|
|
|
|
" results.append((open_price, volume, actual_close, inferred_close))\n",
|
|
|
|
|
"\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"# Вывод результатов\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"print(f\"{'Цена открытия':<18} | {'Объем торгов':<10} | {'Фактическая цена закрытия':<30} | {'Полученная цена закрытия':<30}\")\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"print(\"=\" * 92)\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"for open_price, volume, actual_close, inferred_close in results:\n",
|
|
|
|
|
" print(f\"{open_price:<18} | {volume:<10} | {actual_close:<30} | {inferred_close:<30.2f}\")\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Вычисление метрик качества\n",
|
|
|
|
|
"actual_closes = [actual for _, _, actual, _ in results]\n",
|
|
|
|
|
"inferred_closes = [inferred for _, _, _, inferred in results]\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"mae = np.mean(np.abs(np.array(actual_closes) - np.array(inferred_closes)))\n",
|
|
|
|
|
"rmse = np.sqrt(np.mean((np.array(actual_closes) - np.array(inferred_closes)) ** 2))\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Вывод метрик\n",
|
|
|
|
|
"print(f\"\\nСредняя абсолютная ошибка (MAE): {mae:.2f}\")\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"print(f\"Среднеквадратичная ошибка (RMSE): {rmse:.2f}\")"
|
2025-02-08 21:28:30 +04:00
|
|
|
|
]
|
2025-02-08 21:28:06 +04:00
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"metadata": {
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"kernelspec": {
|
|
|
|
|
"display_name": "aimenv",
|
|
|
|
|
"language": "python",
|
|
|
|
|
"name": "python3"
|
|
|
|
|
},
|
2025-02-08 21:28:06 +04:00
|
|
|
|
"language_info": {
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"codemirror_mode": {
|
|
|
|
|
"name": "ipython",
|
|
|
|
|
"version": 3
|
|
|
|
|
},
|
|
|
|
|
"file_extension": ".py",
|
|
|
|
|
"mimetype": "text/x-python",
|
|
|
|
|
"name": "python",
|
|
|
|
|
"nbconvert_exporter": "python",
|
|
|
|
|
"pygments_lexer": "ipython3",
|
|
|
|
|
"version": "3.12.6"
|
2025-02-08 21:28:06 +04:00
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"nbformat": 4,
|
|
|
|
|
"nbformat_minor": 2
|
|
|
|
|
}
|