Stock/test.ipynb

979 lines
63 KiB
Plaintext
Raw Normal View History

2022-05-25 03:16:39 +09:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import sqlite3\n",
"from typing import Dict\n",
"from render import * \n",
"import db as database\n",
"from jinja2 import Environment, PackageLoader, select_autoescape\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
2022-06-06 10:55:12 +09:00
"execution_count": 2,
2022-05-25 03:16:39 +09:00
"metadata": {},
"outputs": [],
"source": [
"import importlib"
]
},
{
"cell_type": "code",
2022-06-06 10:55:12 +09:00
"execution_count": 3,
2022-05-25 03:16:39 +09:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
2022-06-06 10:55:12 +09:00
"<module 'db' from '/data/sss/f/tt/Stock/db.py'>"
2022-05-25 03:16:39 +09:00
]
},
2022-06-06 10:55:12 +09:00
"execution_count": 3,
2022-05-25 03:16:39 +09:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"importlib.reload(database)"
]
},
{
"cell_type": "code",
2023-07-24 09:10:32 +09:00
"execution_count": 2,
2022-05-25 03:16:39 +09:00
"metadata": {},
"outputs": [],
"source": [
"db = sqlite3.connect(\"stock.db\")\n"
]
},
2022-06-19 17:58:08 +09:00
{
"cell_type": "code",
2023-07-24 09:10:32 +09:00
"execution_count": 3,
2022-06-19 17:58:08 +09:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
2023-07-24 09:10:32 +09:00
"execution_count": 3,
2022-06-19 17:58:08 +09:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"db.in_transaction"
]
},
2022-05-25 03:16:39 +09:00
{
"cell_type": "code",
2023-07-24 09:10:32 +09:00
"execution_count": 4,
2022-05-25 03:16:39 +09:00
"metadata": {},
"outputs": [],
"source": [
"krx = database.GetAllKRXCorp(db)"
]
},
{
"cell_type": "code",
2023-07-24 09:10:32 +09:00
"execution_count": 5,
2022-05-25 03:16:39 +09:00
"metadata": {},
"outputs": [],
"source": [
"krxDf = pd.DataFrame([corp.toDict() for corp in krx])"
]
},
{
"cell_type": "code",
2023-07-24 09:10:32 +09:00
"execution_count": 6,
2022-05-25 03:16:39 +09:00
"metadata": {},
"outputs": [],
"source": [
2023-07-24 09:10:32 +09:00
"data = GetStockPriceFrom(db,\"212310\", 61)\n"
2022-05-25 03:16:39 +09:00
]
},
{
"cell_type": "code",
2023-07-24 09:10:32 +09:00
"execution_count": 7,
2022-05-25 03:16:39 +09:00
"metadata": {},
"outputs": [],
"source": [
"s = pd.DataFrame(data, columns=[s for s in database.STOCK_INDEX.__members__.keys()])"
]
},
{
"cell_type": "code",
2023-07-24 09:10:32 +09:00
"execution_count": 8,
2022-05-25 03:16:39 +09:00
"metadata": {},
"outputs": [],
"source": [
"s.set_index(\"DATE\", inplace=True)"
]
},
{
"cell_type": "code",
2023-07-24 09:10:32 +09:00
"execution_count": 9,
2022-05-25 03:16:39 +09:00
"metadata": {},
"outputs": [],
"source": [
"stock = s"
]
},
{
"cell_type": "code",
2023-07-24 09:10:32 +09:00
"execution_count": 10,
2022-05-25 03:16:39 +09:00
"metadata": {},
2022-06-06 10:55:12 +09:00
"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>CODE</th>\n",
" <th>CLOSE</th>\n",
" <th>DIFF</th>\n",
" <th>OPEN</th>\n",
" <th>HIGH</th>\n",
" <th>LOW</th>\n",
" <th>VOLUME</th>\n",
" </tr>\n",
" <tr>\n",
" <th>DATE</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
2023-07-24 09:10:32 +09:00
" <th>2023-06-02</th>\n",
" <td>212310</td>\n",
" <td>2375</td>\n",
" <td>75</td>\n",
" <td>2205</td>\n",
" <td>2615</td>\n",
" <td>2205</td>\n",
" <td>19</td>\n",
2022-06-06 10:55:12 +09:00
" </tr>\n",
" <tr>\n",
2023-07-24 09:10:32 +09:00
" <th>2023-06-01</th>\n",
" <td>212310</td>\n",
" <td>2300</td>\n",
" <td>35</td>\n",
" <td>2335</td>\n",
" <td>2645</td>\n",
" <td>2215</td>\n",
" <td>16</td>\n",
2022-06-06 10:55:12 +09:00
" </tr>\n",
" <tr>\n",
2023-07-24 09:10:32 +09:00
" <th>2023-05-31</th>\n",
" <td>212310</td>\n",
" <td>2335</td>\n",
" <td>0</td>\n",
" <td>2340</td>\n",
" <td>2340</td>\n",
" <td>2335</td>\n",
" <td>145</td>\n",
2022-06-06 10:55:12 +09:00
" </tr>\n",
" <tr>\n",
2023-07-24 09:10:32 +09:00
" <th>2023-05-30</th>\n",
" <td>212310</td>\n",
" <td>2335</td>\n",
" <td>190</td>\n",
" <td>2275</td>\n",
" <td>2790</td>\n",
" <td>2275</td>\n",
" <td>6245</td>\n",
2022-06-06 10:55:12 +09:00
" </tr>\n",
" <tr>\n",
2023-07-24 09:10:32 +09:00
" <th>2023-05-26</th>\n",
" <td>212310</td>\n",
" <td>2525</td>\n",
" <td>30</td>\n",
" <td>2450</td>\n",
" <td>2780</td>\n",
" <td>2420</td>\n",
" <td>658</td>\n",
2022-06-06 10:55:12 +09:00
" </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",
2023-07-24 09:10:32 +09:00
" <th>2023-03-13</th>\n",
" <td>212310</td>\n",
" <td>3190</td>\n",
" <td>100</td>\n",
" <td>3695</td>\n",
" <td>3695</td>\n",
" <td>2805</td>\n",
" <td>2967</td>\n",
2022-06-06 10:55:12 +09:00
" </tr>\n",
" <tr>\n",
2023-07-24 09:10:32 +09:00
" <th>2023-03-10</th>\n",
" <td>212310</td>\n",
" <td>3290</td>\n",
" <td>15</td>\n",
" <td>3675</td>\n",
" <td>3675</td>\n",
" <td>3110</td>\n",
" <td>9</td>\n",
2022-06-06 10:55:12 +09:00
" </tr>\n",
" <tr>\n",
2023-07-24 09:10:32 +09:00
" <th>2023-03-09</th>\n",
" <td>212310</td>\n",
" <td>3275</td>\n",
" <td>205</td>\n",
" <td>3800</td>\n",
" <td>3800</td>\n",
" <td>3220</td>\n",
" <td>467</td>\n",
2022-06-06 10:55:12 +09:00
" </tr>\n",
" <tr>\n",
2023-07-24 09:10:32 +09:00
" <th>2023-03-08</th>\n",
" <td>212310</td>\n",
" <td>3480</td>\n",
" <td>15</td>\n",
" <td>3460</td>\n",
" <td>3480</td>\n",
" <td>3460</td>\n",
" <td>289</td>\n",
2022-06-06 10:55:12 +09:00
" </tr>\n",
" <tr>\n",
2023-07-24 09:10:32 +09:00
" <th>2023-03-07</th>\n",
" <td>212310</td>\n",
" <td>3495</td>\n",
" <td>235</td>\n",
" <td>3495</td>\n",
" <td>3500</td>\n",
" <td>3315</td>\n",
" <td>125</td>\n",
2022-06-06 10:55:12 +09:00
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>61 rows × 7 columns</p>\n",
"</div>"
],
"text/plain": [
2023-07-24 09:10:32 +09:00
" CODE CLOSE DIFF OPEN HIGH LOW VOLUME\n",
"DATE \n",
"2023-06-02 212310 2375 75 2205 2615 2205 19\n",
"2023-06-01 212310 2300 35 2335 2645 2215 16\n",
"2023-05-31 212310 2335 0 2340 2340 2335 145\n",
"2023-05-30 212310 2335 190 2275 2790 2275 6245\n",
"2023-05-26 212310 2525 30 2450 2780 2420 658\n",
"... ... ... ... ... ... ... ...\n",
"2023-03-13 212310 3190 100 3695 3695 2805 2967\n",
"2023-03-10 212310 3290 15 3675 3675 3110 9\n",
"2023-03-09 212310 3275 205 3800 3800 3220 467\n",
"2023-03-08 212310 3480 15 3460 3480 3460 289\n",
"2023-03-07 212310 3495 235 3495 3500 3315 125\n",
2022-06-06 10:55:12 +09:00
"\n",
"[61 rows x 7 columns]"
]
},
2023-07-24 09:10:32 +09:00
"execution_count": 10,
2022-06-06 10:55:12 +09:00
"metadata": {},
"output_type": "execute_result"
}
],
2022-05-25 03:16:39 +09:00
"source": [
2022-06-06 10:55:12 +09:00
"stock"
]
},
{
"cell_type": "code",
2023-07-24 09:10:32 +09:00
"execution_count": 11,
2022-06-06 10:55:12 +09:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DATE\n",
2023-07-24 09:10:32 +09:00
"2023-06-02 2374.0\n",
"2023-06-01 2398.0\n",
"2023-05-31 2404.0\n",
"2023-05-30 2434.0\n",
"2023-05-26 2447.0\n",
"2023-05-25 2447.0\n",
"Name: CLOSE, dtype: float64"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"close = stock[\"CLOSE\"]\n",
"d5 = stock[\"CLOSE\"].iloc[:10].loc[::-1].rolling(window=5\n",
" ).mean().dropna().loc[::-1]\n",
"d5"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DATE\n",
"2023-06-02 88.487287\n",
"2023-06-01 103.778611\n",
"2023-05-31 97.365292\n",
"2023-05-30 93.834962\n",
"2023-05-26 80.202868\n",
"2023-05-25 80.202868\n",
"Name: CLOSE, dtype: float64"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dstd5 = close.iloc[:10].loc[::-1].rolling(window=5).std().dropna().loc[::-1]\n",
"dstd5"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DATE\n",
"2023-06-01 2398.0\n",
"2023-05-31 2404.0\n",
"Name: CLOSE, dtype: float64"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d5[[1,2]]"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(50.04, 0.2, 50.44, True)"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = 51\n",
"arr = np.array([50]* 24 + [a])\n",
"m = arr.mean()\n",
"std = arr.std(ddof=1)\n",
"m, std , m + 2*std, m+2*std < a"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"10.0"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(a-50)/5"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"59.082092668956086"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"krx.__len__() * ((100-95.4499736104)/100)*0.5"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DATE\n",
"2023-05-22 27\n",
"2023-05-19 403\n",
"2023-05-18 1\n",
"2023-05-17 5\n",
"2023-05-16 3711\n",
" ... \n",
"2023-02-28 1017\n",
"2023-02-27 799\n",
"2023-02-24 12\n",
"2023-02-23 688\n",
"2023-02-22 4\n",
2022-06-06 10:55:12 +09:00
"Name: VOLUME, Length: 61, dtype: int64"
]
},
2023-07-24 09:10:32 +09:00
"execution_count": 12,
2022-06-06 10:55:12 +09:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"volume = stock[\"VOLUME\"]\n",
"volume"
2022-05-25 03:16:39 +09:00
]
},
2023-07-24 09:10:32 +09:00
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'2023-05-22'"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stock.index[0]"
]
},
2022-05-25 03:16:39 +09:00
{
"cell_type": "code",
2022-06-06 10:55:12 +09:00
"execution_count": 62,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DATE\n",
"2022-06-03 True\n",
"2022-06-02 False\n",
"2022-05-31 True\n",
"2022-05-30 True\n",
"2022-05-27 False\n",
" ... \n",
"2022-03-15 False\n",
"2022-03-14 False\n",
"2022-03-11 True\n",
"2022-03-10 True\n",
"2022-03-08 False\n",
"Name: CLOSE, Length: 61, dtype: bool"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"biggerThanYesterday = stock[\"CLOSE\"].shift(-1) < stock[\"CLOSE\"]\n",
"biggerThanYesterday"
]
},
{
"cell_type": "code",
"execution_count": 63,
2022-05-25 03:16:39 +09:00
"metadata": {},
"outputs": [],
"source": [
2022-06-06 10:55:12 +09:00
"ObvWeight = biggerThanYesterday.map(lambda x: 1 if x else -1)\n",
"ObvWeight"
2022-05-25 03:16:39 +09:00
]
},
{
"cell_type": "code",
2022-06-06 10:55:12 +09:00
"execution_count": 66,
2022-05-25 03:16:39 +09:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DATE\n",
2022-06-06 10:55:12 +09:00
"2022-06-03 175508\n",
"2022-06-02 -350113\n",
"2022-05-31 276819\n",
"2022-05-30 191087\n",
"2022-05-27 -392051\n",
" ... \n",
"2022-03-15 -2701677\n",
"2022-03-14 -4436719\n",
"2022-03-11 997048\n",
"2022-03-10 1754702\n",
"2022-03-08 -878964\n",
"Length: 61, dtype: int64"
2022-05-25 03:16:39 +09:00
]
},
2022-06-06 10:55:12 +09:00
"execution_count": 66,
2022-05-25 03:16:39 +09:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
2022-06-06 10:55:12 +09:00
"factor = volume * ObvWeight\n",
"factor"
2022-05-25 03:16:39 +09:00
]
},
{
"cell_type": "code",
2022-06-06 10:55:12 +09:00
"execution_count": 71,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DATE\n",
"2022-06-03 -1804451\n",
"2022-06-02 -1979959\n",
"2022-05-31 -1629846\n",
"2022-05-30 -1906665\n",
"2022-05-27 -2097752\n",
" ... \n",
"2022-03-15 -5265610\n",
"2022-03-14 -2563933\n",
"2022-03-11 1872786\n",
"2022-03-10 875738\n",
"2022-03-08 -878964\n",
"Length: 61, dtype: int64"
]
},
"execution_count": 71,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"obv = factor.iloc[::-1].cumsum().iloc[::-1]\n",
"obv"
]
},
2022-06-19 17:58:08 +09:00
{
"cell_type": "code",
2023-07-24 09:10:32 +09:00
"execution_count": 29,
2022-06-19 17:58:08 +09:00
"metadata": {},
"outputs": [],
"source": [
"close = stock[\"CLOSE\"]\n",
"d5 = stock[\"CLOSE\"].loc[::-1].rolling(window=5\n",
" ).mean().dropna().loc[::-1]\n",
"d10 = stock[\"CLOSE\"].loc[::-1].rolling(window=10\n",
" ).mean().dropna().loc[::-1]\n",
"d20 = stock[\"CLOSE\"].loc[::-1].rolling(window=20\n",
" ).mean().dropna().loc[::-1]\n",
"d30 = stock[\"CLOSE\"].loc[::-1].rolling(window=30\n",
" ).mean().dropna().loc[::-1]\n",
"d60 = stock[\"CLOSE\"].loc[::-1].rolling(window=60\n",
" ).mean().dropna().loc[::-1]"
]
},
2022-06-06 10:55:12 +09:00
{
"cell_type": "code",
2023-07-24 09:10:32 +09:00
"execution_count": 30,
2022-05-25 03:16:39 +09:00
"metadata": {},
"outputs": [],
2023-07-24 09:10:32 +09:00
"source": [
"def isRelativeDiffLessThan(a:pd.Series,b:pd.Series, threshold: float,nday:int) -> bool:\n",
" return (a.iloc[nday] - b.iloc[nday]) / b.iloc[nday] < threshold"
]
2022-05-25 03:16:39 +09:00
},
2022-06-19 17:58:08 +09:00
{
"cell_type": "code",
2023-07-24 09:10:32 +09:00
"execution_count": 15,
2022-06-19 17:58:08 +09:00
"metadata": {},
"outputs": [],
2023-07-24 09:10:32 +09:00
"source": [
"def every(f, xs):\n",
" for x in xs:\n",
" if not f(x):\n",
" return False\n",
" return True"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"evert\n",
"6236.0 6290 -54.0\n"
]
},
{
"data": {
"text/plain": [
"-0.008585055643879173"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
2022-06-19 17:58:08 +09:00
"source": [
"a = [d5, d10, d20, d30, d60]\n",
2023-07-24 09:10:32 +09:00
"if every(lambda i: isRelativeDiffLessThan(i,close,0.05,0), a):\n",
" print(\"evert\")\n",
"print(d5.iloc[0] , close.iloc[0],d5.iloc[0] - close.iloc[0])\n",
"(d5.iloc[0] - close.iloc[0]) / close.iloc[0]"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-0.1876921038685744"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(d60.iloc[0] - close.iloc[0])/close.iloc[0]"
2022-06-19 17:58:08 +09:00
]
},
2022-05-25 03:16:39 +09:00
{
"cell_type": "code",
2022-06-06 10:55:12 +09:00
"execution_count": 73,
2022-05-25 03:16:39 +09:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
2022-06-06 10:55:12 +09:00
"([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19],\n",
" [Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, '')])"
2022-05-25 03:16:39 +09:00
]
},
2022-06-06 10:55:12 +09:00
"execution_count": 73,
2022-05-25 03:16:39 +09:00
"metadata": {},
"output_type": "execute_result"
2022-06-06 10:55:12 +09:00
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
2022-05-25 03:16:39 +09:00
}
],
2022-06-06 10:55:12 +09:00
"source": [
"plt.plot(obv.iloc[:20].iloc[::-1])\n",
"plt.xticks(rotation = 45)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"d5 = stock[\"CLOSE\"].loc[::-1].rolling(window=5\n",
" ).mean().dropna().loc[::-1]\n",
"d20 = stock[\"CLOSE\"].loc[::-1].rolling(window=20\n",
" ).mean().dropna().loc[::-1]\n",
"d60 = stock[\"CLOSE\"].loc[::-1].rolling(window=60\n",
" ).mean().dropna().loc[::-1]"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [],
"source": [
"ewm5 = stock[\"CLOSE\"].loc[::-1].ewm(span=5).mean().loc[::-1]\n",
"ewm10 = stock[\"CLOSE\"].loc[::-1].ewm(span=10).mean().loc[::-1]\n",
"macd = (ewm5 - ewm10)\n",
"signal = macd.loc[::-1].ewm(span=4).mean().loc[::-1]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
2022-05-25 03:16:39 +09:00
"source": []
},
{
"cell_type": "code",
2022-06-06 10:55:12 +09:00
"execution_count": 48,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 51,
2022-05-25 03:16:39 +09:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
2022-06-06 10:55:12 +09:00
"([0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n",
" [Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, ''),\n",
" Text(0, 0, '')])"
2022-05-25 03:16:39 +09:00
]
},
2022-06-06 10:55:12 +09:00
"execution_count": 51,
2022-05-25 03:16:39 +09:00
"metadata": {},
"output_type": "execute_result"
2022-06-06 10:55:12 +09:00
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
2022-05-25 03:16:39 +09:00
}
],
2022-06-06 10:55:12 +09:00
"source": [
"plt.plot(macd.iloc[0:10].iloc[::-1],label=\"macd\")\n",
"plt.legend()\n",
"plt.plot(signal.iloc[0:10].iloc[::-1],label=\"signal\")\n",
"plt.legend()\n",
"plt.xticks(rotation=45)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"from gen import *"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"dataStore = DataStore()\n",
"krx_corps = dataStore.getAllKRXCorp()"
]
2022-05-25 03:16:39 +09:00
},
{
"cell_type": "code",
2022-06-06 10:55:12 +09:00
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"collector = OutputCollector()\n",
"prepareCollector(collector)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 2564/2564 [01:10<00:00, 36.62it/s] \n"
]
}
],
"source": [
"for corp in tqdm.tqdm(krx_corps):\n",
" for nday in range(0, 5):\n",
" collect(dataStore, collector, corp, nday)\n",
" dataStore.clearCache()"
]
},
{
"cell_type": "code",
"execution_count": 26,
2022-05-25 03:16:39 +09:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
2022-06-06 10:55:12 +09:00
"['2022-05-27',\n",
" '2022-06-02',\n",
" '2022-05-31',\n",
" '2022-05-30',\n",
" '2021-04-14',\n",
" '2022-05-04',\n",
" '2022-01-28',\n",
" '2022-05-16',\n",
" '2021-07-05',\n",
" '2022-02-10']"
2022-05-25 03:16:39 +09:00
]
},
2022-06-06 10:55:12 +09:00
"execution_count": 26,
2022-05-25 03:16:39 +09:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": []
}
],
"metadata": {
"interpreter": {
2022-06-06 10:55:12 +09:00
"hash": "315ddbd22344660769d1dae43a6a5e914850a7ce75ac77a9d658327898fcf0d6"
2022-05-25 03:16:39 +09:00
},
"kernelspec": {
2022-06-06 10:55:12 +09:00
"display_name": "Python 3.9.2 ('stock': venv)",
2022-05-25 03:16:39 +09:00
"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",
2022-06-06 10:55:12 +09:00
"version": "3.9.2"
2022-05-25 03:16:39 +09:00
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}