add 뭉침
This commit is contained in:
parent
790052c2a2
commit
a20aba2f0c
30
gen.py
30
gen.py
@ -79,7 +79,7 @@ def isMACDCrossSignal(signal: pd.Series, macd: pd.Series, nday: int, order=1) ->
|
|||||||
signal.iloc[nday+order] < macd.iloc[nday+order])
|
signal.iloc[nday+order] < macd.iloc[nday+order])
|
||||||
|
|
||||||
def isRelativeDiffLessThan(a:pd.Series,b:pd.Series, threshold: float,nday:int) -> bool:
|
def isRelativeDiffLessThan(a:pd.Series,b:pd.Series, threshold: float,nday:int) -> bool:
|
||||||
return (a.iloc[nday] - b.iloc[nday]) / b.iloc[nday] < threshold
|
return abs(a.iloc[nday] - b.iloc[nday]) / b.iloc[nday] < threshold
|
||||||
|
|
||||||
def isDiffGreaterThan(a:pd.Series,b:pd.Series, nday:int) -> bool:
|
def isDiffGreaterThan(a:pd.Series,b:pd.Series, nday:int) -> bool:
|
||||||
"""a is bigger than b"""
|
"""a is bigger than b"""
|
||||||
@ -90,22 +90,40 @@ def prepareCollector(collector: OutputCollector) -> None:
|
|||||||
for item in pages.GenLists:
|
for item in pages.GenLists:
|
||||||
collector.addResult(item["name"], item["description"])
|
collector.addResult(item["name"], item["description"])
|
||||||
|
|
||||||
|
def every(f, xs):
|
||||||
|
for x in xs:
|
||||||
|
if not f(x):
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
def collect(data: DataStore, collector: OutputCollector, corp: database.KRXCorp
|
def collect(data: DataStore, collector: OutputCollector, corp: database.KRXCorp
|
||||||
, nday: int) -> None:
|
, nday: int) -> None:
|
||||||
stock = data.getStockPrice(corp.Code,70)
|
stock = data.getStockPrice(corp.Code,120)
|
||||||
if len(stock) < 70:
|
if len(stock) < 120:
|
||||||
|
return
|
||||||
|
if (stock.iloc[nday]['VOLUME'] <= 0):
|
||||||
return
|
return
|
||||||
|
|
||||||
|
close = stock["CLOSE"]
|
||||||
d5 = stock["CLOSE"].loc[::-1].rolling(window=5
|
d5 = stock["CLOSE"].loc[::-1].rolling(window=5
|
||||||
).mean().dropna().loc[::-1]
|
).mean().dropna().loc[::-1]
|
||||||
|
d10 = stock["CLOSE"].loc[::-1].rolling(window=10
|
||||||
|
).mean().dropna().loc[::-1]
|
||||||
d20 = stock["CLOSE"].loc[::-1].rolling(window=20
|
d20 = stock["CLOSE"].loc[::-1].rolling(window=20
|
||||||
).mean().dropna().loc[::-1]
|
).mean().dropna().loc[::-1]
|
||||||
|
d30 = stock["CLOSE"].loc[::-1].rolling(window=30
|
||||||
|
).mean().dropna().loc[::-1]
|
||||||
d60 = stock["CLOSE"].loc[::-1].rolling(window=60
|
d60 = stock["CLOSE"].loc[::-1].rolling(window=60
|
||||||
).mean().dropna().loc[::-1]
|
).mean().dropna().loc[::-1]
|
||||||
|
|
||||||
if (d60.iloc[nday+2] > d60.iloc[nday+1] and d60.iloc[nday+1] < d60.iloc[nday]):
|
a = [d5, d10, d20, d30, d60]
|
||||||
collector.collect("60일선반등",corp, stock.index[nday])
|
if every(lambda i: isRelativeDiffLessThan(i,close,0.05,nday), a):
|
||||||
|
collector.collect("뭉침", corp, stock.index[nday])
|
||||||
|
if every(lambda i: isRelativeDiffLessThan(i,close,0.01,nday), a):
|
||||||
|
collector.collect("뭉침01", corp, stock.index[nday])
|
||||||
|
if every(lambda i: isRelativeDiffLessThan(i,close,0.03,nday), a):
|
||||||
|
collector.collect("뭉침03", corp, stock.index[nday])
|
||||||
|
|
||||||
if (isRelativeDiffLessThan(d5, d20, 0.01, nday) and
|
if (isRelativeDiffLessThan(d5, d20, 0.01, nday) and
|
||||||
isRelativeDiffLessThan(d5, d60, 0.01, nday)):
|
isRelativeDiffLessThan(d5, d60, 0.01, nday)):
|
||||||
collector.collect("cross 2", corp, stock.index[nday])
|
collector.collect("cross 2", corp, stock.index[nday])
|
||||||
|
13
pages.py
13
pages.py
@ -1,7 +1,8 @@
|
|||||||
name = "name"
|
name = "name"
|
||||||
desc = "description"
|
desc = "description"
|
||||||
|
|
||||||
GenLists = [{name:"cross 2", desc:"""\
|
GenLists = [
|
||||||
|
{name:"cross 2", desc:"""\
|
||||||
5일선과 20일선이 서로 만나는 시점 즉 상대 오차가 1% 이하이고
|
5일선과 20일선이 서로 만나는 시점 즉 상대 오차가 1% 이하이고
|
||||||
5일선과 60일선이 서로 만나는 시점을 찾습니다.
|
5일선과 60일선이 서로 만나는 시점을 찾습니다.
|
||||||
"""},
|
"""},
|
||||||
@ -38,8 +39,10 @@ signal과 macd가 서로 교차한 시점을 찾습니다. 즉 signal이 올라
|
|||||||
macd가 아래로 내려가는 시점을 찾습니다. macd 는 5일선과 10일선으로 이루어지고
|
macd가 아래로 내려가는 시점을 찾습니다. macd 는 5일선과 10일선으로 이루어지고
|
||||||
시그널을 구하기 위한 이동 평균은 4일입니다.
|
시그널을 구하기 위한 이동 평균은 4일입니다.
|
||||||
"""},
|
"""},
|
||||||
{
|
{name:"뭉침", desc: """\
|
||||||
name:"60일선반등",desc: """\
|
5 10 20 30 60 만난것""" },
|
||||||
60일선이 반등하는 시점을 찾습니다."""
|
{name:"뭉침01", desc: """\
|
||||||
}
|
5 10 20 30 60 만난것""" },
|
||||||
|
{name:"뭉침03", desc: """\
|
||||||
|
5 10 20 30 60 만난것""" }
|
||||||
]
|
]
|
254
test.ipynb
254
test.ipynb
@ -52,6 +52,26 @@
|
|||||||
"db = sqlite3.connect(\"stock.db\")\n"
|
"db = sqlite3.connect(\"stock.db\")\n"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 12,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"False"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 12,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"db.in_transaction"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 5,
|
"execution_count": 5,
|
||||||
@ -72,16 +92,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 27,
|
"execution_count": 7,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"data = GetStockPriceFrom(db,\"294870\", 61)\n"
|
"data = GetStockPriceFrom(db,\"042670\", 61)\n"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 28,
|
"execution_count": 8,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
@ -90,7 +110,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 29,
|
"execution_count": 9,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
@ -99,7 +119,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 30,
|
"execution_count": 10,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
@ -108,7 +128,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 31,
|
"execution_count": 11,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
@ -153,54 +173,54 @@
|
|||||||
" </thead>\n",
|
" </thead>\n",
|
||||||
" <tbody>\n",
|
" <tbody>\n",
|
||||||
" <tr>\n",
|
" <tr>\n",
|
||||||
" <th>2022-06-03</th>\n",
|
" <th>2022-06-10</th>\n",
|
||||||
" <td>294870</td>\n",
|
" <td>042670</td>\n",
|
||||||
" <td>13700</td>\n",
|
" <td>6490</td>\n",
|
||||||
" <td>100</td>\n",
|
" <td>210</td>\n",
|
||||||
" <td>13700</td>\n",
|
" <td>6670</td>\n",
|
||||||
" <td>13800</td>\n",
|
" <td>6680</td>\n",
|
||||||
" <td>13600</td>\n",
|
" <td>6470</td>\n",
|
||||||
" <td>175508</td>\n",
|
" <td>1817916</td>\n",
|
||||||
" </tr>\n",
|
" </tr>\n",
|
||||||
" <tr>\n",
|
" <tr>\n",
|
||||||
" <th>2022-06-02</th>\n",
|
" <th>2022-06-09</th>\n",
|
||||||
" <td>294870</td>\n",
|
" <td>042670</td>\n",
|
||||||
" <td>13600</td>\n",
|
" <td>6700</td>\n",
|
||||||
" <td>250</td>\n",
|
" <td>110</td>\n",
|
||||||
" <td>13850</td>\n",
|
" <td>6620</td>\n",
|
||||||
" <td>13850</td>\n",
|
" <td>6750</td>\n",
|
||||||
" <td>13550</td>\n",
|
" <td>6440</td>\n",
|
||||||
" <td>350113</td>\n",
|
" <td>2623890</td>\n",
|
||||||
" </tr>\n",
|
" </tr>\n",
|
||||||
" <tr>\n",
|
" <tr>\n",
|
||||||
" <th>2022-05-31</th>\n",
|
" <th>2022-06-08</th>\n",
|
||||||
" <td>294870</td>\n",
|
" <td>042670</td>\n",
|
||||||
" <td>13850</td>\n",
|
" <td>6590</td>\n",
|
||||||
" <td>50</td>\n",
|
" <td>160</td>\n",
|
||||||
" <td>13850</td>\n",
|
" <td>6820</td>\n",
|
||||||
" <td>13950</td>\n",
|
" <td>6860</td>\n",
|
||||||
" <td>13800</td>\n",
|
" <td>6580</td>\n",
|
||||||
" <td>276819</td>\n",
|
" <td>2026670</td>\n",
|
||||||
" </tr>\n",
|
" </tr>\n",
|
||||||
" <tr>\n",
|
" <tr>\n",
|
||||||
" <th>2022-05-30</th>\n",
|
" <th>2022-06-07</th>\n",
|
||||||
" <td>294870</td>\n",
|
" <td>042670</td>\n",
|
||||||
" <td>13800</td>\n",
|
" <td>6750</td>\n",
|
||||||
" <td>100</td>\n",
|
|
||||||
" <td>13850</td>\n",
|
|
||||||
" <td>13950</td>\n",
|
|
||||||
" <td>13750</td>\n",
|
|
||||||
" <td>191087</td>\n",
|
|
||||||
" </tr>\n",
|
|
||||||
" <tr>\n",
|
|
||||||
" <th>2022-05-27</th>\n",
|
|
||||||
" <td>294870</td>\n",
|
|
||||||
" <td>13700</td>\n",
|
|
||||||
" <td>150</td>\n",
|
" <td>150</td>\n",
|
||||||
" <td>14050</td>\n",
|
" <td>6870</td>\n",
|
||||||
" <td>14100</td>\n",
|
" <td>6990</td>\n",
|
||||||
" <td>13600</td>\n",
|
" <td>6720</td>\n",
|
||||||
" <td>392051</td>\n",
|
" <td>3234237</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>2022-06-03</th>\n",
|
||||||
|
" <td>042670</td>\n",
|
||||||
|
" <td>6900</td>\n",
|
||||||
|
" <td>440</td>\n",
|
||||||
|
" <td>6550</td>\n",
|
||||||
|
" <td>6940</td>\n",
|
||||||
|
" <td>6510</td>\n",
|
||||||
|
" <td>9983571</td>\n",
|
||||||
" </tr>\n",
|
" </tr>\n",
|
||||||
" <tr>\n",
|
" <tr>\n",
|
||||||
" <th>...</th>\n",
|
" <th>...</th>\n",
|
||||||
@ -213,54 +233,54 @@
|
|||||||
" <td>...</td>\n",
|
" <td>...</td>\n",
|
||||||
" </tr>\n",
|
" </tr>\n",
|
||||||
" <tr>\n",
|
" <tr>\n",
|
||||||
" <th>2022-03-15</th>\n",
|
" <th>2022-03-21</th>\n",
|
||||||
" <td>294870</td>\n",
|
" <td>042670</td>\n",
|
||||||
" <td>16200</td>\n",
|
" <td>6770</td>\n",
|
||||||
|
" <td>120</td>\n",
|
||||||
|
" <td>6910</td>\n",
|
||||||
|
" <td>7030</td>\n",
|
||||||
|
" <td>6770</td>\n",
|
||||||
|
" <td>1314044</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>2022-03-18</th>\n",
|
||||||
|
" <td>042670</td>\n",
|
||||||
|
" <td>6890</td>\n",
|
||||||
" <td>200</td>\n",
|
" <td>200</td>\n",
|
||||||
" <td>14800</td>\n",
|
" <td>6750</td>\n",
|
||||||
" <td>16450</td>\n",
|
" <td>6890</td>\n",
|
||||||
" <td>14750</td>\n",
|
" <td>6650</td>\n",
|
||||||
" <td>2701677</td>\n",
|
" <td>1207925</td>\n",
|
||||||
" </tr>\n",
|
" </tr>\n",
|
||||||
" <tr>\n",
|
" <tr>\n",
|
||||||
" <th>2022-03-14</th>\n",
|
" <th>2022-03-17</th>\n",
|
||||||
" <td>294870</td>\n",
|
" <td>042670</td>\n",
|
||||||
" <td>16400</td>\n",
|
" <td>6690</td>\n",
|
||||||
" <td>2050</td>\n",
|
" <td>50</td>\n",
|
||||||
" <td>18500</td>\n",
|
" <td>6790</td>\n",
|
||||||
" <td>19250</td>\n",
|
" <td>6790</td>\n",
|
||||||
" <td>16000</td>\n",
|
" <td>6670</td>\n",
|
||||||
" <td>4436719</td>\n",
|
" <td>1003575</td>\n",
|
||||||
" </tr>\n",
|
" </tr>\n",
|
||||||
" <tr>\n",
|
" <tr>\n",
|
||||||
" <th>2022-03-11</th>\n",
|
" <th>2022-03-16</th>\n",
|
||||||
" <td>294870</td>\n",
|
" <td>042670</td>\n",
|
||||||
" <td>18450</td>\n",
|
" <td>6640</td>\n",
|
||||||
" <td>100</td>\n",
|
" <td>60</td>\n",
|
||||||
" <td>18450</td>\n",
|
" <td>6610</td>\n",
|
||||||
" <td>18500</td>\n",
|
" <td>6680</td>\n",
|
||||||
" <td>18000</td>\n",
|
" <td>6570</td>\n",
|
||||||
" <td>997048</td>\n",
|
" <td>642939</td>\n",
|
||||||
" </tr>\n",
|
" </tr>\n",
|
||||||
" <tr>\n",
|
" <tr>\n",
|
||||||
" <th>2022-03-10</th>\n",
|
" <th>2022-03-15</th>\n",
|
||||||
" <td>294870</td>\n",
|
" <td>042670</td>\n",
|
||||||
" <td>18350</td>\n",
|
" <td>6580</td>\n",
|
||||||
" <td>1400</td>\n",
|
" <td>260</td>\n",
|
||||||
" <td>17450</td>\n",
|
" <td>6830</td>\n",
|
||||||
" <td>18350</td>\n",
|
" <td>6840</td>\n",
|
||||||
" <td>17400</td>\n",
|
" <td>6550</td>\n",
|
||||||
" <td>1754702</td>\n",
|
" <td>1776057</td>\n",
|
||||||
" </tr>\n",
|
|
||||||
" <tr>\n",
|
|
||||||
" <th>2022-03-08</th>\n",
|
|
||||||
" <td>294870</td>\n",
|
|
||||||
" <td>16950</td>\n",
|
|
||||||
" <td>450</td>\n",
|
|
||||||
" <td>17100</td>\n",
|
|
||||||
" <td>17500</td>\n",
|
|
||||||
" <td>16800</td>\n",
|
|
||||||
" <td>878964</td>\n",
|
|
||||||
" </tr>\n",
|
" </tr>\n",
|
||||||
" </tbody>\n",
|
" </tbody>\n",
|
||||||
"</table>\n",
|
"</table>\n",
|
||||||
@ -268,24 +288,24 @@
|
|||||||
"</div>"
|
"</div>"
|
||||||
],
|
],
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
" CODE CLOSE DIFF OPEN HIGH LOW VOLUME\n",
|
" CODE CLOSE DIFF OPEN HIGH LOW VOLUME\n",
|
||||||
"DATE \n",
|
"DATE \n",
|
||||||
"2022-06-03 294870 13700 100 13700 13800 13600 175508\n",
|
"2022-06-10 042670 6490 210 6670 6680 6470 1817916\n",
|
||||||
"2022-06-02 294870 13600 250 13850 13850 13550 350113\n",
|
"2022-06-09 042670 6700 110 6620 6750 6440 2623890\n",
|
||||||
"2022-05-31 294870 13850 50 13850 13950 13800 276819\n",
|
"2022-06-08 042670 6590 160 6820 6860 6580 2026670\n",
|
||||||
"2022-05-30 294870 13800 100 13850 13950 13750 191087\n",
|
"2022-06-07 042670 6750 150 6870 6990 6720 3234237\n",
|
||||||
"2022-05-27 294870 13700 150 14050 14100 13600 392051\n",
|
"2022-06-03 042670 6900 440 6550 6940 6510 9983571\n",
|
||||||
"... ... ... ... ... ... ... ...\n",
|
"... ... ... ... ... ... ... ...\n",
|
||||||
"2022-03-15 294870 16200 200 14800 16450 14750 2701677\n",
|
"2022-03-21 042670 6770 120 6910 7030 6770 1314044\n",
|
||||||
"2022-03-14 294870 16400 2050 18500 19250 16000 4436719\n",
|
"2022-03-18 042670 6890 200 6750 6890 6650 1207925\n",
|
||||||
"2022-03-11 294870 18450 100 18450 18500 18000 997048\n",
|
"2022-03-17 042670 6690 50 6790 6790 6670 1003575\n",
|
||||||
"2022-03-10 294870 18350 1400 17450 18350 17400 1754702\n",
|
"2022-03-16 042670 6640 60 6610 6680 6570 642939\n",
|
||||||
"2022-03-08 294870 16950 450 17100 17500 16800 878964\n",
|
"2022-03-15 042670 6580 260 6830 6840 6550 1776057\n",
|
||||||
"\n",
|
"\n",
|
||||||
"[61 rows x 7 columns]"
|
"[61 rows x 7 columns]"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"execution_count": 31,
|
"execution_count": 11,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"output_type": "execute_result"
|
"output_type": "execute_result"
|
||||||
}
|
}
|
||||||
@ -436,6 +456,25 @@
|
|||||||
"obv"
|
"obv"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 13,
|
||||||
|
"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]"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": null,
|
||||||
@ -443,6 +482,17 @@
|
|||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": []
|
"source": []
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"a = [d5, d10, d20, d30, d60]\n",
|
||||||
|
"if every(lambda i: isRelativeDiffLessThan(i,close,0.05,nday), a):\n",
|
||||||
|
" print(\"evert\")"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 73,
|
"execution_count": 73,
|
||||||
|
Loading…
Reference in New Issue
Block a user