This commit is contained in:
dosangyoon
2022-02-19 14:59:47 +09:00
parent 5b2232e30f
commit 8b307ce801
5 changed files with 119 additions and 452 deletions

View File

@@ -568,12 +568,6 @@ class Analyzer:
cursor.execute('SELECT CODE, NAME, PRICE, STOCHASTIC, BOLINGERBAND FROM ' + self.tableName + ' WHERE rowid=?', (rowid,))
result = cursor.fetchone()
outFp = open("inout.cvs", mode='w')
for check_index in range(365):
idx = 365 - check_index - 1
outFp.write("%d,%d,%d,%4.2f\n" % (idx, inde_check[idx][0], inde_check[idx][1], inde_check[idx][0]*100/(inde_check[idx][0]+inde_check[idx][1])))
outFp.close()
cursor.close()
conn.close()

View File

@@ -34,15 +34,13 @@ class AnalyzerSqlite:
common = None
stockFileName = None
fnguideFileName = None
analyzedFileName = None
moving_avg = None
def __init__(self, PROJECT_HOME, stockFileName, fnguideFileName):
def __init__(self, PROJECT_HOME, stockFileName):
self.PROJECT_HOME = PROJECT_HOME
self.stockFileName = stockFileName
self.fnguideFileName = fnguideFileName
self.common = Common()
@@ -50,8 +48,8 @@ class AnalyzerSqlite:
self.bolingerBand = BolingerBand()
self.ichimokuCloud = IchimokuCloud()
self.top500 = self.getTop500(fnguideFileName)
self.fnguide = self.readFnguide(fnguideFileName)
self.top500 = self.getTop500(stockFileName)
self.fnguide = self.readFnguide(stockFileName)
return
@@ -426,6 +424,8 @@ class AnalyzerSqlite:
self.makeDir("1_거래량_상승")
self.makeDir("1_코로나_근접")
self.makeDir("1_저점_매수")
self.makeDir("1_저점_매수관심")
return
@@ -733,6 +733,18 @@ class AnalyzerSqlite:
type = "1_코로나_근접"
self.writeFile(type, CODE, NAME, top, stock, state)
if len(close) > 50:
if avg5[0]<avg20[0]<avg60[0]:
if close[0] <= bolingerband_lower[0]:
type = "8_저점_매수관심"
self.writeFile(type, CODE, NAME, top, stock, state)
if len(close) > 50:
if avg5[0]<avg20[0]<avg60[0]<avg120[0]<avg240[0]:
if close[0] <= bolingerband_lower[0]:
type = "9_저점_매수"
self.writeFile(type, CODE, NAME, top, stock, state)
return
def get_moving_average(self, stock):
@@ -857,8 +869,7 @@ if __name__ == "__main__":
PROJECT_HOME = os.path.join(os.path.dirname(os.path.join(os.path.dirname(os.path.join(os.path.dirname(__file__))))))
stockFileName = PROJECT_HOME + '/resources/stock.db'
fnguideFileName = PROJECT_HOME + '/resources/fnguide.db'
analyzer = AnalyzerSqlite(PROJECT_HOME, stockFileName, fnguideFileName)
analyzer = AnalyzerSqlite(PROJECT_HOME, stockFileName)
#analyzer.analyze()

View File

@@ -211,10 +211,7 @@ class FnGuideCrawler:
return
if __name__ == "__main__":
crawler = FnGuideCrawler()
#crawler.get_fnguide_table('155660')
PROJECT_HOME = os.path.join(os.path.dirname(os.path.join(os.path.dirname(os.path.join(os.path.dirname(os.path.join(os.path.dirname(__file__))))))))
inFnguideFileName = PROJECT_HOME + '/resources/fnguide.db'
inFnguideFileName = PROJECT_HOME + '/resources/stock.db'
crawler = FnGuideCrawler()
crawler.crawl_fnguide(inFnguideFileName)

View File

@@ -1,4 +1,4 @@
import json
import os
import datetime
import requests
import sqlite3
@@ -12,75 +12,6 @@ class MetaCrawler:
def __init__(self):
return
# 참고) http://blog.naver.com/PostView.nhn?blogId=koko8624&logNo=221288761509
def crawl_meterials(self, inFileName):
tableName = 'meta_1'
conn = sqlite3.connect(inFileName)
cursor = conn.cursor()
# 테이블 생성
cursor.execute("CREATE TABLE IF NOT EXISTS " + tableName + " (CODE text, NAME text, ymd text, close REAL, diff REAL, rate REAL)")
# 키 생성
create_key = "CREATE INDEX IF NOT EXISTS " + tableName + "_idx on " + tableName + " (CODE, ymd) "
cursor.execute(create_key)
inputs = []
inputs.append( {'NAME':'WTI', 'CODE':'OIL_CL', 'URL':'http://finance.naver.com/marketindex/worldDailyQuote.nhn?marketindexCd=OIL_CL&fdtc=2'} ) # WTI
inputs.append( {'NAME':'GOLD', 'CODE':'CMDT_GC', 'URL':'http://finance.naver.com/marketindex/worldDailyQuote.nhn?marketindexCd=CMDT_GC&fdtc=2'} ) # 국제 금
inputs.append({'NAME': 'COPPER', 'CODE': 'CMDT_CDY','URL': 'http://finance.naver.com/marketindex/worldDailyQuote.nhn?marketindexCd=CMDT_CDY&fdtc=2'}) # 구리
inputs.append({'NAME': 'NATURALGAS', 'CODE': 'CMDT_NG','URL': 'http://finance.naver.com/marketindex/worldDailyQuote.nhn?marketindexCd=CMDT_NG&fdtc=2'}) # 천연가스
inputs.append({'NAME': 'CORN', 'CODE': 'CMDT_C','URL': 'http://finance.naver.com/marketindex/worldDailyQuote.nhn?marketindexCd=CMDT_C&fdtc=2'}) # 국제 옥수수
inputs.append({'NAME': 'SOYBEAN', 'CODE': 'CMDT_S','URL': 'http://finance.naver.com/marketindex/worldDailyQuote.nhn?marketindexCd=CMDT_S&fdtc=2'}) # 국제 대두
for i in range(len(inputs)):
input = inputs[i]
NAME = input['NAME']
CODE = input['CODE']
cursor.execute('SELECT ymd FROM ' + tableName + ' WHERE CODE=? order by ymd desc', (CODE,))
result = cursor.fetchone()
if result == None:
lastDay = "1900.01.01"
else:
lastDay = result[0]
finish = False
for i in range(1, self.limit_page_count):
#html = pd.read_html(input['URL'] + '&page=%s' % i, header=0)
html = pd.read_html(requests.get(input['URL'] + '&page=%s' % i, headers=self.header).text)
# 마지막 페이지 까지 받기
if len(html[0].날짜.values) <= 1:
break
for j in range(0, len(html[0].values)):
item = html[0].values[j]
if item[0] <= lastDay:
finish = True
break
ymd = item[0] # 날짜
close = item[1] # 종가
diff = item[2] # 전일대비
rate = item[3] # 등락율
cursor.execute('SELECT * FROM ' + tableName + ' WHERE CODE=? and ymd=?', (CODE,ymd,))
result = cursor.fetchone()
if result == None:
cursor.execute("INSERT INTO " + tableName + "(CODE, NAME, ymd, close, diff, rate) VALUES(?, ?, ?, ?, ?, ?)", (CODE, NAME, ymd, close, diff, rate))
#else:
# cursor.execute("UPDATE " + tableName + " SET close=?, diff=?, rate=? WHERE CODE=? and ymd=?", (close, diff, rate, CODE, ymd))
print(CODE, NAME, ymd)
if finish:
break
conn.commit()
cursor.close()
conn.close()
return
# 참고) http://blog.naver.com/PostView.nhn?blogId=koko8624&logNo=221288761509
def crawl_exchange(self, inFileName):
tableName = 'meta_1'
@@ -171,6 +102,10 @@ class MetaCrawler:
# 테이블 생성
cursor.execute("CREATE TABLE IF NOT EXISTS "+tableName+" (ymd text PRIMARY KEY, pri integer, fori integer, ins integer, ins0 integer, ins1 integer, ins2 integer, ins3 integer, ins4 integer, ins5 integer, cor integer)")
# 키 생성
create_key = "CREATE INDEX IF NOT EXISTS "+tableName+"_idx on "+tableName+" (ymd) "
cursor.execute(create_key)
cursor.execute('SELECT ymd FROM ' + tableName + ' order by ymd desc')
result = cursor.fetchone()
if result == None:
@@ -365,3 +300,98 @@ class MetaCrawler:
cursor.close()
conn.close()
return
# 참고) http://blog.naver.com/PostView.nhn?blogId=koko8624&logNo=221288761509
def crawl_meterials(self, inFileName):
tableName = 'meta_5'
conn = sqlite3.connect(inFileName)
cursor = conn.cursor()
# 테이블 생성
cursor.execute("CREATE TABLE IF NOT EXISTS " + tableName + " (CODE text, NAME text, ymd text, close REAL, diff REAL, rate REAL)")
# 키 생성
create_key = "CREATE INDEX IF NOT EXISTS " + tableName + "_idx on " + tableName + " (CODE, NAME, ymd) "
cursor.execute(create_key)
inputs = []
inputs.append( {'NAME':'WTI', 'CODE':'OIL_CL', 'URL':'http://finance.naver.com/marketindex/worldDailyQuote.nhn?marketindexCd=OIL_CL&fdtc=2'} ) # WTI
inputs.append( {'NAME':'GOLD', 'CODE':'CMDT_GC', 'URL':'http://finance.naver.com/marketindex/worldDailyQuote.nhn?marketindexCd=CMDT_GC&fdtc=2'} ) # 국제 금
inputs.append({'NAME': 'COPPER', 'CODE': 'CMDT_CDY','URL': 'http://finance.naver.com/marketindex/worldDailyQuote.nhn?marketindexCd=CMDT_CDY&fdtc=2'}) # 구리
inputs.append({'NAME': 'NATURALGAS', 'CODE': 'CMDT_NG','URL': 'http://finance.naver.com/marketindex/worldDailyQuote.nhn?marketindexCd=CMDT_NG&fdtc=2'}) # 천연가스
inputs.append({'NAME': 'CORN', 'CODE': 'CMDT_C','URL': 'http://finance.naver.com/marketindex/worldDailyQuote.nhn?marketindexCd=CMDT_C&fdtc=2'}) # 국제 옥수수
inputs.append({'NAME': 'SOYBEAN', 'CODE': 'CMDT_S','URL': 'http://finance.naver.com/marketindex/worldDailyQuote.nhn?marketindexCd=CMDT_S&fdtc=2'}) # 국제 대두
for i in range(len(inputs)):
input = inputs[i]
NAME = input['NAME']
CODE = input['CODE']
cursor.execute('SELECT ymd FROM ' + tableName + ' WHERE CODE=? order by ymd desc', (CODE,))
result = cursor.fetchone()
if result == None:
lastDay = "1900.01.01"
else:
lastDay = result[0]
finish = False
for i in range(1, self.limit_page_count):
#html = pd.read_html(input['URL'] + '&page=%s' % i, header=0)
html = pd.read_html(requests.get(input['URL'] + '&page=%s' % i, headers=self.header).text)
# 마지막 페이지 까지 받기
if len(html[0].날짜.values) <= 1:
break
for j in range(0, len(html[0].values)):
item = html[0].values[j]
if item[0] <= lastDay:
finish = True
break
ymd = item[0] # 날짜
close = item[1] # 종가
diff = item[2] # 전일대비
rate = item[3] # 등락율
cursor.execute('SELECT * FROM ' + tableName + ' WHERE CODE=? and ymd=?', (CODE,ymd,))
result = cursor.fetchone()
if result == None:
cursor.execute("INSERT INTO " + tableName + "(CODE, NAME, ymd, close, diff, rate) VALUES(?, ?, ?, ?, ?, ?)", (CODE, NAME, ymd, close, diff, rate))
#else:
# cursor.execute("UPDATE " + tableName + " SET close=?, diff=?, rate=? WHERE CODE=? and ymd=?", (close, diff, rate, CODE, ymd))
print(CODE, NAME, ymd)
if finish:
break
conn.commit()
cursor.close()
conn.close()
return
if __name__ == "__main__":
PROJECT_HOME = os.path.join(os.path.dirname(os.path.join(os.path.dirname(os.path.join(os.path.dirname(os.path.join(os.path.dirname(__file__))))))))
metaCrawler = MetaCrawler()
print("\n[환율 (USD, JPY, EUR, CNY)]")
inFileName = PROJECT_HOME + '/resources/stock.db'
metaCrawler.crawl_exchange(inFileName)
print("\n[투자자별 매매동향(Trading_Trend)]")
inFileName = PROJECT_HOME + '/resources/stock.db'
metaCrawler.crawl_trading_trend(inFileName)
print("\n[증시자금동향 (신용잔고, 펀드자금 잔고)]")
inFileName = PROJECT_HOME + '/resources/stock.db'
metaCrawler.crawl_money_trend(inFileName)
print("\n[국내 시장금리]")
inFileName = PROJECT_HOME + '/resources/stock.db'
metaCrawler.crawl_interest_rates(inFileName)
print("\n[원유 (WTI), 국제금, COPPER, NATURALGAS, CORN, SOYBEAN]")
inFileName = PROJECT_HOME + '/resources/stock.db'
metaCrawler.crawl_meterials(inFileName)

View File

@@ -1,365 +0,0 @@
364,1186,1339,46.97
363,1086,1439,43.01
362,805,1720,31.88
361,1121,1404,44.40
360,674,1851,26.69
359,260,2265,10.30
358,1616,909,64.00
357,341,2184,13.50
356,1179,1346,46.69
355,1499,1026,59.37
354,1801,724,71.33
353,925,1600,36.63
352,532,1993,21.07
351,1248,1277,49.43
350,1092,1433,43.25
349,1292,1233,51.17
348,1253,1272,49.62
347,1070,1455,42.38
346,1966,559,77.86
345,1436,1089,56.87
344,786,1739,31.13
343,1365,1160,54.06
342,1181,1344,46.77
341,1147,1378,45.43
340,1319,1206,52.24
339,904,1621,35.80
338,748,1777,29.62
337,533,1992,21.11
336,1024,1501,40.55
335,458,2067,18.14
334,395,2130,15.64
333,923,1602,36.55
332,548,1977,21.70
331,1020,1505,40.40
330,1736,789,68.75
329,1300,1225,51.49
328,1564,961,61.94
327,999,1526,39.56
326,1642,883,65.03
325,880,1645,34.85
324,1009,1516,39.96
323,810,1715,32.08
322,624,1901,24.71
321,614,1911,24.32
320,634,1891,25.11
319,873,1652,34.57
318,1320,1205,52.28
317,1416,1109,56.08
316,710,1815,28.12
315,830,1695,32.87
314,358,2167,14.18
313,1379,1146,54.61
312,1871,654,74.10
311,1634,891,64.71
310,420,2105,16.63
309,1605,920,63.56
308,1486,1039,58.85
307,914,1611,36.20
306,1647,878,65.23
305,646,1879,25.58
304,1526,999,60.44
303,995,1530,39.41
302,1137,1388,45.03
301,1059,1466,41.94
300,991,1534,39.25
299,1205,1320,47.72
298,734,1791,29.07
297,1388,1137,54.97
296,1026,1499,40.63
295,1394,1131,55.21
294,1021,1504,40.44
293,1152,1373,45.62
292,437,2088,17.31
291,1154,1371,45.70
290,1269,1256,50.26
289,855,1670,33.86
288,1153,1372,45.66
287,1100,1425,43.56
286,858,1667,33.98
285,777,1748,30.77
284,797,1728,31.56
283,855,1670,33.86
282,1343,1182,53.19
281,1351,1174,53.50
280,1314,1211,52.04
279,735,1790,29.11
278,904,1621,35.80
277,1253,1272,49.62
276,935,1590,37.03
275,1048,1477,41.50
274,916,1609,36.28
273,359,2166,14.22
272,892,1633,35.33
271,1320,1205,52.28
270,727,1798,28.79
269,1702,823,67.41
268,1612,913,63.84
267,1182,1343,46.81
266,1470,1055,58.22
265,872,1653,34.53
264,1270,1255,50.30
263,687,1838,27.21
262,435,2090,17.23
261,1260,1265,49.90
260,1375,1150,54.46
259,1297,1228,51.37
258,653,1872,25.86
257,639,1886,25.31
256,1721,804,68.16
255,1295,1230,51.29
254,1213,1312,48.04
253,863,1662,34.18
252,1360,1165,53.86
251,656,1869,25.98
250,682,1843,27.01
249,880,1645,34.85
248,278,2247,11.01
247,1975,550,78.22
246,1364,1161,54.02
245,1142,1383,45.23
244,774,1751,30.65
243,1001,1524,39.64
242,873,1652,34.57
241,902,1623,35.72
240,1323,1202,52.40
239,1390,1135,55.05
238,1062,1463,42.06
237,1162,1363,46.02
236,717,1808,28.40
235,895,1630,35.45
234,794,1731,31.45
233,987,1538,39.09
232,297,2228,11.76
231,1538,987,60.91
230,1138,1387,45.07
229,760,1765,30.10
228,1706,819,67.56
227,1169,1356,46.30
226,1274,1251,50.46
225,617,1908,24.44
224,794,1731,31.45
223,544,1981,21.54
222,1659,866,65.70
221,1587,938,62.85
220,1173,1352,46.46
219,1278,1247,50.61
218,1043,1482,41.31
217,1141,1384,45.19
216,1728,797,68.44
215,906,1619,35.88
214,563,1962,22.30
213,1427,1098,56.51
212,1271,1254,50.34
211,1114,1411,44.12
210,945,1580,37.43
209,1358,1167,53.78
208,1041,1484,41.23
207,1150,1375,45.54
206,1035,1490,40.99
205,1195,1330,47.33
204,901,1624,35.68
203,1307,1218,51.76
202,1222,1303,48.40
201,1323,1202,52.40
200,1222,1303,48.40
199,1185,1340,46.93
198,1174,1351,46.50
197,956,1569,37.86
196,1134,1391,44.91
195,1109,1416,43.92
194,1440,1085,57.03
193,771,1754,30.53
192,1094,1431,43.33
191,1191,1334,47.17
190,1189,1336,47.09
189,947,1578,37.50
188,536,1989,21.23
187,903,1622,35.76
186,814,1711,32.24
185,927,1598,36.71
184,1178,1347,46.65
183,1632,893,64.63
182,1394,1131,55.21
181,1381,1144,54.69
180,1147,1378,45.43
179,591,1934,23.41
178,1344,1181,53.23
177,1191,1334,47.17
176,695,1830,27.52
175,1527,998,60.48
174,1239,1286,49.07
173,621,1904,24.59
172,672,1853,26.61
171,1581,944,62.61
170,1317,1208,52.16
169,1230,1295,48.71
168,1352,1173,53.54
167,1284,1241,50.85
166,1311,1214,51.92
165,1099,1426,43.52
164,1217,1308,48.20
163,1115,1410,44.16
162,867,1658,34.34
161,941,1584,37.27
160,848,1677,33.58
159,1320,1205,52.28
158,1197,1328,47.41
157,1023,1502,40.51
156,1078,1447,42.69
155,1345,1180,53.27
154,1226,1299,48.55
153,1171,1354,46.38
152,835,1690,33.07
151,1146,1379,45.39
150,793,1732,31.41
149,946,1579,37.47
148,1240,1285,49.11
147,1265,1260,50.10
146,920,1605,36.44
145,1200,1325,47.52
144,997,1528,39.49
143,987,1538,39.09
142,1116,1409,44.20
141,1218,1307,48.24
140,868,1657,34.38
139,475,2050,18.81
138,999,1526,39.56
137,1590,935,62.97
136,1458,1067,57.74
135,1001,1524,39.64
134,1221,1304,48.36
133,1020,1505,40.40
132,809,1716,32.04
131,1505,1020,59.60
130,627,1898,24.83
129,1258,1267,49.82
128,1199,1326,47.49
127,601,1924,23.80
126,1261,1264,49.94
125,827,1698,32.75
124,1270,1255,50.30
123,617,1908,24.44
122,1074,1451,42.53
121,893,1632,35.37
120,1766,759,69.94
119,1495,1030,59.21
118,914,1611,36.20
117,805,1720,31.88
116,675,1850,26.73
115,890,1635,35.25
114,1036,1489,41.03
113,514,2011,20.36
112,394,2131,15.60
111,1912,613,75.72
110,389,2136,15.41
109,320,2205,12.67
108,1889,636,74.81
107,1940,585,76.83
106,1088,1437,43.09
105,865,1660,34.26
104,1662,863,65.82
103,1132,1393,44.83
102,1238,1287,49.03
101,1597,928,63.25
100,1036,1489,41.03
99,1307,1218,51.76
98,1046,1479,41.43
97,1043,1482,41.31
96,777,1748,30.77
95,922,1603,36.51
94,1359,1166,53.82
93,663,1862,26.26
92,1542,983,61.07
91,976,1549,38.65
90,707,1818,28.00
89,1207,1318,47.80
88,819,1706,32.44
87,1026,1499,40.63
86,1335,1190,52.87
85,530,1995,20.99
84,1599,926,63.33
83,1408,1117,55.76
82,533,1992,21.11
81,691,1834,27.37
80,343,2182,13.58
79,2095,430,82.97
78,1015,1510,40.20
77,804,1721,31.84
76,1967,558,77.90
75,1895,630,75.05
74,1399,1126,55.41
73,1015,1510,40.20
72,1193,1332,47.25
71,870,1655,34.46
70,731,1794,28.95
69,1094,1431,43.33
68,1401,1124,55.49
67,1583,942,62.69
66,772,1753,30.57
65,802,1723,31.76
64,617,1908,24.44
63,1050,1475,41.58
62,1643,882,65.07
61,588,1937,23.29
60,599,1926,23.72
59,770,1755,30.50
58,1411,1114,55.88
57,997,1528,39.49
56,494,2031,19.56
55,1235,1290,48.91
54,1922,603,76.12
53,1483,1042,58.73
52,967,1558,38.30
51,691,1834,27.37
50,938,1587,37.15
49,1460,1065,57.82
48,1067,1458,42.26
47,1063,1462,42.10
46,1212,1313,48.00
45,794,1731,31.45
44,494,2031,19.56
43,1547,978,61.27
42,278,2247,11.01
41,2035,490,80.59
40,2081,444,82.42
39,1839,686,72.83
38,1541,984,61.03
37,1372,1153,54.34
36,730,1795,28.91
35,1631,894,64.59
34,1186,1339,46.97
33,980,1545,38.81
32,1117,1408,44.24
31,1078,1447,42.69
30,910,1615,36.04
29,1407,1118,55.72
28,553,1972,21.90
27,1243,1282,49.23
26,1035,1490,40.99
25,1106,1419,43.80
24,1290,1235,51.09
23,1135,1390,44.95
22,1184,1341,46.89
21,1553,972,61.50
20,1294,1231,51.25
19,1321,1204,52.32
18,1314,1211,52.04
17,787,1738,31.17
16,1121,1404,44.40
15,1690,835,66.93
14,700,1825,27.72
13,627,1898,24.83
12,1754,771,69.47
11,919,1606,36.40
10,1051,1474,41.62
9,557,1968,22.06
8,594,1931,23.52
7,1281,1244,50.73
6,2005,520,79.41
5,926,1599,36.67
4,476,2049,18.85
3,325,2200,12.87
2,1516,1009,60.04
1,309,2216,12.24
0,2134,391,84.51