This commit is contained in:
dosangyoon
2021-10-03 20:33:37 +09:00
parent ce00541b80
commit 35a5d1694a
2 changed files with 334 additions and 57 deletions

View File

@@ -1,10 +1,10 @@
import win32com.client
#import win32com.client
import time
import os
from datetime import datetime, timedelta
import pandas as pd
from enum import Enum
#import plotly.graph_objects as go
import plotly.graph_objects as go
from stockpredictor.analysis.Common import Common
# enum 주문 상태 세팅용
@@ -736,8 +736,8 @@ class HTS:
STOCK.append({'close': data["Close"][i], 'open': data["Open"][i], 'high': data["High"][i], 'low': data["Low"][i], 'avg5': data["avg5"][i], 'avg20': data["avg20"][i], 'avg60': data["avg60"][i], 'avg120': data["avg120"][i]})
bsLine = {}
bsLine['buy'] = [-1 for i in range(len(lower))]
bsLine['sell'] = [-1 for i in range(len(lower))]
bsLine['buy'] = [-1 for i in range(size)]
bsLine['sell'] = [-1 for i in range(size)]
i = size - 1
status = self.checkStatus(STOCK, i)
@@ -767,13 +767,15 @@ class HTS:
if "DARKCLOUD_" in status: count_0 += 1
if "EVENINGSTAR" in status: count_0 += 1
# real time 에서는 현재 기점에 사고 파는 가격을 표기한다.
if count_0 == 0 and count_1 > 0:
bsLine['buy'][i + 1] = STOCK[i]['close'] - 5
bsLine['sell'][i + 1] = STOCK[i]['close']
bsLine['buy'][i] = STOCK[i]['close'] - 5
bsLine['sell'][i] = STOCK[i]['close']
if count_0 > 0:
bsLine['sell'][i + 1] = STOCK[i]['close'] + 5
bsLine['buy'][i] = 0
bsLine['sell'][i] = STOCK[i]['close'] + 5
return bsLine
return bsLine['buy'][i], bsLine['sell'][i]
def checkTransaction_Simulation(self, data, upper, lower):
@@ -814,6 +816,7 @@ class HTS:
if "DARKCLOUD_" in status: count_0 += 1
if "EVENINGSTAR" in status: count_0 += 1
# 시뮬레이션은 이번에 사고 파는 것으로 판단했기 때문에, 다음 봉에서 사고 판 위치를 표시한다.
if count_0 == 0 and count_1 > 0:
bsLine['buy'][i + 1] = STOCK[i]['close'] - 5
bsLine['sell'][i + 1] = STOCK[i]['close']
@@ -853,11 +856,9 @@ class HTS:
return
def buyRealTime(self, stock_code, given_day):
data, upper, lower = None, None, None
previous_price = 0
buy_count = 260
total_byu_amt = 0
PREVIOUS_PRICE = 0
BUY_COUNT = 200
TOTAL_BUY_AMT = 0
logFp = open(given_day+".log", "w")
@@ -872,7 +873,7 @@ class HTS:
"low": [],
"vol": []}
while datetime.strptime(given_day + " 083000", '%Y%m%d %H%M%S') < datetime.now() < datetime.strptime(given_day + " 151000", '%Y%m%d %H%M%S'):
while datetime.strptime(given_day + " 083000", '%Y%m%d %H%M%S') < datetime.now() < datetime.strptime(given_day + " 151100", '%Y%m%d %H%M%S'):
second = datetime.now().strftime('%Y%m%d %H%M%S')
if second in timecheck and not timecheck[second]:
@@ -886,41 +887,35 @@ class HTS:
# 분석을 통해서 볼린저밴드 상/하단을 계산한다.
data, upper, lower = self.analyze(result)
# 사야 할 시점과 팔아야 할 시점을 체크한다.
bsLine = self.checkTransaction_Realtime(data, upper, lower)
# 사야 할 시점/가격과 팔아야 할 시점/가격을 체크한다.
bs_buy_price, bs_sell_price = self.checkTransaction_Realtime(data, upper, lower)
buy_line = bsLine['buy']
# 주문 및 매도 처리
price = bsLine['buy'][len(buy_line)-1]
# 매수신청과 5원 높여서 매도신청
if price > 0:
if previous_price > 0:
if previous_price > price:
if buy_count < 200:
buy_count = 200
buy_count += 40
if buy_count > 500:
buy_count = 500
elif previous_price < price:
if buy_count > 400:
buy_count = 400
buy_count -= 40
if buy_count < 100:
buy_count = 100
previous_price = price
if bs_buy_price > 0:
if PREVIOUS_PRICE > 0:
if PREVIOUS_PRICE > bs_buy_price:
if BUY_COUNT < 100:
BUY_COUNT = 90
BUY_COUNT += 10
if BUY_COUNT > 250:
BUY_COUNT = 250
elif PREVIOUS_PRICE < bs_buy_price:
if BUY_COUNT > 250:
BUY_COUNT = 260
BUY_COUNT -= 10
if BUY_COUNT < 100:
BUY_COUNT = 100
PREVIOUS_PRICE = bs_buy_price
# 매수 주문
# 현재까지 매입금액이 7백만원 이하일 때만 매수를 한다.
if total_byu_amt < 7000000:
self.requestOrder("2", stock_code, buy_count , price)
if TOTAL_BUY_AMT < 7000000:
self.requestOrder("2", stock_code, BUY_COUNT , bs_buy_price)
## 매도 주문 (아래 잔고를 체크해서 매도를 호출하는 것으로 시도한다.)
#time.sleep(60)
#self.requestOrder("1", stock_code, buy_count , price + 5)
print("BUY", second, price)
logFp.write("%s,%s, %d\n" % ("BUY", second, price))
#self.requestOrder("1", stock_code, BUY_COUNT , price + 5)
print("BUY", second, bs_buy_price)
logFp.write("%s,%s, %d\n" % ("BUY", second, bs_buy_price))
logFp.flush()
# 가져온 만큼 데이터를 누적해서 파일로 작성한다.
@@ -936,18 +931,10 @@ class HTS:
jangoDic = self.requstJango()
if jangoDic and len(jangoDic.keys()) > 0:
for code in jangoDic:
total_byu_amt = jangoDic[code]['매입금액']
TOTAL_BUY_AMT = jangoDic[code]['매입금액']
if jangoDic[code]['매도가능'] > 0:
# 장부가 가격의 마지막 자리를 0으로 만든다. (2090 -> 2090, 2092 -> 2090, 2098 -> 2090)
sell_price = int(jangoDic[code]['장부가'] / 10) * 10
"""
# 만약 오후 1시 이전이라면 한 호가 (5원) 더 올려서 매도한다.
if datetime.strptime(given_day + " 092000", '%Y%m%d %H%M%S') < datetime.now() < datetime.strptime(given_day + " 104000", '%Y%m%d %H%M%S'):
lower_size = len(lower)
if lower != None and lower_size > 3:
if lower[lower_size-3] < lower[lower_size-2] < lower[lower_size-1]:
sell_price += 5
"""
# 장부가의 마지막 자리수를 가져온다.
last_number = int(jangoDic[code]['장부가']) % 10
if last_number in [0, 1, 2]:
@@ -982,9 +969,9 @@ if __name__ == "__main__":
#hts.currentStock(stock_codes)
for given_day in given_days:
#hts.writeStockData(stock_codes, given_day)
#for stock_code in stock_codes:
#hts.simulate(stock_code, given_day)
for stock_code in stock_codes:
hts.simulate(stock_code, given_day)
hts.buyRealTime(stock_codes, given_day)
#hts.buyRealTime(stock_codes[0], given_day)
print ("done...")

View File

@@ -1,77 +1,367 @@
time, check
090403,False
090503,False
090603,False
090703,False
090803,False
090903,False
091003,False
091103,False
091203,False
091303,False
091403,False
091503,False
091603,False
091703,False
091803,False
091903,False
092003,False
092103,False
092203,False
092303,False
092403,False
092503,False
092603,False
092703,False
092803,False
092903,False
093003,False
093103,False
093203,False
093303,False
093403,False
093503,False
093603,False
093703,False
093803,False
093903,False
094003,False
094103,False
094203,False
094303,False
094403,False
094503,False
094603,False
094703,False
094803,False
094903,False
095003,False
095103,False
095203,False
095303,False
095403,False
095503,False
095603,False
095703,False
095803,False
095903,False
100003,False
100103,False
100203,False
100303,False
100403,False
100503,False
100603,False
100703,False
100803,False
100903,False
101003,False
101103,False
101203,False
101303,False
101403,False
101503,False
101603,False
101703,False
101803,False
101903,False
102003,False
102103,False
102203,False
102303,False
102403,False
102503,False
102603,False
102703,False
102803,False
102903,False
103003,False
103103,False
103203,False
103303,False
103403,False
103503,False
103603,False
103703,False
103803,False
103903,False
104003,False
104103,False
104203,False
104303,False
104403,False
104503,False
104603,False
104703,False
104803,False
104903,False
105003,False
105103,False
105203,False
105303,False
105403,False
105503,False
105603,False
105703,False
105803,False
105903,False
110003,False
110103,False
110203,False
110303,False
110403,False
110503,False
110603,False
110703,False
110803,False
110903,False
111003,False
111103,False
111203,False
111303,False
111403,False
111503,False
111603,False
111703,False
111803,False
111903,False
112003,False
112103,False
112203,False
112303,False
112403,False
112503,False
112603,False
112703,False
112803,False
112903,False
113003,False
113103,False
113203,False
113303,False
113403,False
113503,False
113603,False
113703,False
113803,False
113903,False
114003,False
114103,False
114203,False
114303,False
114403,False
114503,False
114603,False
114703,False
114803,False
114903,False
115003,False
115103,False
115203,False
115303,False
115403,False
115503,False
115603,False
115703,False
115803,False
115903,False
120003,False
120103,False
120203,False
120303,False
120403,False
120503,False
120603,False
120703,False
120803,False
120903,False
121003,False
121103,False
121203,False
121303,False
121403,False
121503,False
121603,False
121703,False
121803,False
121903,False
122003,False
122103,False
122203,False
122303,False
122403,False
122503,False
122603,False
122703,False
122803,False
122903,False
123003,False
123103,False
123203,False
123303,False
123403,False
123503,False
123603,False
123703,False
123803,False
123903,False
124003,False
124103,False
124203,False
124303,False
124403,False
124503,False
124603,False
124703,False
124803,False
124903,False
125003,False
125103,False
125203,False
125303,False
125403,False
125503,False
125603,False
125703,False
125803,False
125903,False
130003,False
130103,False
130203,False
130303,False
130403,False
130503,False
130603,False
130703,False
130803,False
130903,False
131003,False
131103,False
131203,False
131303,False
131403,False
131503,False
131603,False
131703,False
131803,False
131903,False
132003,False
132103,False
132203,False
132303,False
132403,False
132503,False
132603,False
132703,False
132803,False
132903,False
133003,False
133103,False
133203,False
133303,False
133403,False
133503,False
133603,False
133703,False
133803,False
133903,False
134003,False
134103,False
134203,False
134303,False
134403,False
134503,False
134603,False
134703,False
134803,False
134903,False
135003,False
135103,False
135203,False
135303,False
135403,False
135503,False
135603,False
135703,False
135803,False
135903,False
140003,False
140103,False
140203,False
140303,False
140403,False
140503,False
140603,False
140703,False
140803,False
140903,False
141003,False
141103,False
141203,False
141303,False
141403,False
141503,False
141603,False
141703,False
141803,False
141903,False
142003,False
142103,False
142203,False
142303,False
142403,False
142503,False
142603,False
142703,False
142803,False
142903,False
143003,False
143103,False
143203,False
143303,False
143403,False
143503,False
143603,False
143703,False
143803,False
143903,False
144003,False
144103,False
144203,False
144303,False
144403,False
144503,False
144603,False
144703,False
144803,False
144903,False
145003,False
145103,False
145203,False
145303,False
145403,False
145503,False
145603,False
145703,False
145803,False
145903,False
150003,False
150103,False
150203,False
150303,False
150403,False
150503,False
150603,False
150703,False
150803,False
150903,False
151403,False
151903,False
151003,False
1 time check
2 090403 090503 False
3 090603 False
4 090703 False
5 090803 False
6 090903 False
7 091003 False
8 091103 False
9 091203 False
10 091303 False
11 091403 False
12 091503 False
13 091603 False
14 091703 False
15 091803 False
16 091903 False
17 092003 False
18 092103 False
19 092203 False
20 092303 False
21 092403 False
22 092503 False
23 092603 False
24 092703 False
25 092803 False
26 092903 False
27 093003 False
28 093103 False
29 093203 False
30 093303 False
31 093403 False
32 093503 False
33 093603 False
34 093703 False
35 093803 False
36 093903 False
37 094003 False
38 094103 False
39 094203 False
40 094303 False
41 094403 False
42 094503 False
43 094603 False
44 094703 False
45 094803 False
46 094903 False
47 095003 False
48 095103 False
49 095203 False
50 095303 False
51 095403 False
52 095503 False
53 095603 False
54 095703 False
55 095803 False
56 095903 False
57 100003 False
58 100103 False
59 100203 False
60 100303 False
61 100403 False
62 100503 False
63 100603 False
64 100703 False
65 100803 False
66 100903 False
67 101003 False
68 101103 False
69 101203 False
70 101303 False
71 101403 False
72 101503 False
73 101603 False
74 101703 False
75 101803 False
76 101903 False
77 102003 False
78 102103 False
79 102203 False
80 102303 False
81 102403 False
82 102503 False
83 102603 False
84 102703 False
85 102803 False
86 102903 False
87 103003 False
88 103103 False
89 103203 False
90 103303 False
91 103403 False
92 103503 False
93 103603 False
94 103703 False
95 103803 False
96 103903 False
97 104003 False
98 104103 False
99 104203 False
100 104303 False
101 104403 False
102 104503 False
103 104603 False
104 104703 False
105 104803 False
106 104903 False
107 105003 False
108 105103 False
109 105203 False
110 105303 False
111 105403 False
112 105503 False
113 105603 False
114 105703 False
115 105803 False
116 105903 False
117 110003 False
118 110103 False
119 110203 False
120 110303 False
121 110403 False
122 110503 False
123 110603 False
124 110703 False
125 110803 False
126 110903 False
127 111003 False
128 111103 False
129 111203 False
130 111303 False
131 111403 False
132 111503 False
133 111603 False
134 111703 False
135 111803 False
136 111903 False
137 112003 False
138 112103 False
139 112203 False
140 112303 False
141 112403 False
142 112503 False
143 112603 False
144 112703 False
145 112803 False
146 112903 False
147 113003 False
148 113103 False
149 113203 False
150 113303 False
151 113403 False
152 113503 False
153 113603 False
154 113703 False
155 113803 False
156 113903 False
157 114003 False
158 114103 False
159 114203 False
160 114303 False
161 114403 False
162 114503 False
163 114603 False
164 114703 False
165 114803 False
166 114903 False
167 115003 False
168 115103 False
169 115203 False
170 115303 False
171 115403 False
172 115503 False
173 115603 False
174 115703 False
175 115803 False
176 115903 False
177 120003 False
178 120103 False
179 120203 False
180 120303 False
181 120403 False
182 120503 False
183 120603 False
184 120703 False
185 120803 False
186 120903 False
187 121003 False
188 121103 False
189 121203 False
190 121303 False
191 121403 False
192 121503 False
193 121603 False
194 121703 False
195 121803 False
196 121903 False
197 122003 False
198 122103 False
199 122203 False
200 122303 False
201 122403 False
202 122503 False
203 122603 False
204 122703 False
205 122803 False
206 122903 False
207 123003 False
208 123103 False
209 123203 False
210 123303 False
211 123403 False
212 123503 False
213 123603 False
214 123703 False
215 123803 False
216 123903 False
217 124003 False
218 124103 False
219 124203 False
220 124303 False
221 124403 False
222 124503 False
223 124603 False
224 124703 False
225 124803 False
226 124903 False
227 125003 False
228 125103 False
229 125203 False
230 125303 False
231 125403 False
232 125503 False
233 125603 False
234 125703 False
235 125803 False
236 125903 False
237 130003 False
238 130103 False
239 130203 False
240 130303 False
241 130403 False
242 130503 False
243 130603 False
244 130703 False
245 130803 False
246 130903 False
247 131003 False
248 131103 False
249 131203 False
250 131303 False
251 131403 False
252 131503 False
253 131603 False
254 131703 False
255 131803 False
256 131903 False
257 132003 False
258 132103 False
259 132203 False
260 132303 False
261 132403 False
262 132503 False
263 132603 False
264 132703 False
265 132803 False
266 132903 False
267 133003 False
268 133103 False
269 133203 False
270 133303 False
271 133403 False
272 133503 False
273 133603 False
274 133703 False
275 133803 False
276 133903 False
277 134003 False
278 134103 False
279 134203 False
280 134303 False
281 134403 False
282 134503 False
283 134603 False
284 134703 False
285 134803 False
286 134903 False
287 135003 False
288 135103 False
289 135203 False
290 135303 False
291 135403 False
292 135503 False
293 135603 False
294 135703 False
295 135803 False
296 135903 False
297 140003 False
298 140103 False
299 140203 False
300 140303 False
301 140403 False
302 140503 False
303 140603 False
304 140703 False
305 140803 False
306 140903 False
307 141003 False
308 141103 False
309 141203 False
310 141303 False
311 141403 False
312 141503 False
313 141603 False
314 141703 False
315 141803 False
316 141903 False
317 142003 False
318 142103 False
319 142203 False
320 142303 False
321 142403 False
322 142503 False
323 142603 False
324 142703 False
325 142803 False
326 142903 False
327 143003 False
328 143103 False
329 143203 False
330 143303 False
331 143403 False
332 143503 False
333 143603 False
334 143703 False
335 143803 False
336 143903 False
337 144003 False
338 144103 False
339 144203 False
340 144303 False
341 144403 False
342 144503 False
343 144603 False
344 144703 False
345 144803 False
346 144903 False
347 145003 False
348 145103 False
349 145203 False
350 145303 False
351 145403 False
352 145503 False
353 145603 False
354 145703 False
355 145803 False
356 145903 False
357 150003 False
358 150103 False
359 150203 False
360 150303 False
361 150403 False
362 150503 False
363 150603 False
364 150703 False
365 150803 False
366 150903 False
367 151403 151003 False
151903 False