This commit is contained in:
dosangyoon
2021-09-30 23:19:56 +09:00
parent 5dbfb3e68e
commit 90aa601a18
2 changed files with 250 additions and 26 deletions

View File

@@ -379,4 +379,4 @@
20210930,1518,2170,2170,2160,2165,193081
20210930,1519,2165,2165,2160,2165,170659
20210930,1520,2160,2170,2160,2165,933170
20210930,1530,2175,2175,2175,2175,2485278
20210930,1530,2175,2175,2175,2175,2485278
1 날짜 시간 시가 고가 저가 종가 거래량
379 20210930 1518 2170 2170 2160 2165 193081
380 20210930 1519 2165 2165 2160 2165 170659
381 20210930 1520 2160 2170 2160 2165 933170
382 20210930 1530 2175 2175 2175 2175 2485278

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
# enum 주문 상태 세팅용
@@ -545,7 +545,10 @@ class HTS:
return data, upper_temp, lower_temp
def draw(self, given_day, data, upper, lower, buy_line, sell_line):
def draw(self, given_day, data, upper, lower, bsLine):
buy_line = bsLine['buy']
sell_line = bsLine['sell']
# 그래프 설정을 위한 변수를 생성한다.
data['Open'] = pd.to_numeric(data['Open'])
data['High'] = pd.to_numeric(data['High'])
@@ -588,11 +591,229 @@ class HTS:
candle_stick = go.Candlestick(x=data['Date'], open=data['Open'], high=data['High'], low=data['Low'], close=data['Close'], increasing_line_color='red', decreasing_line_color='blue')
# 그래프를 그린다.
fig = go.Figure(data=[candle_stick, bolinger_upper, bolinger_lower, buy_check, sell_check, ma2, ma5, ma10, ma15, ma20])
fig = go.Figure(data=[candle_stick, bolinger_upper, bolinger_lower, buy_check, sell_check, ma2, ma10, ma15, ma20])
fig.update_layout(title=given_day + "_2x")
fig.show()
return
def checkTransaction(self, data, upper, lower):
low = data["Low"]
high = data["High"]
close = data["Close"]
open = data["Open"]
ma2 = data["ma2"]
ma10 = data["ma10"]
ma15 = data["ma15"]
ma20 = data["ma20"]
bsLine = {}
bsLine['buy'] = [-1 for i in range(len(lower))]
bsLine['sell'] = [-1 for i in range(len(lower))]
# buy 체크
for i in range(3, len(lower)):
#1
if close[i] < ma2[i] < lower[i]:
if low[i-2] == open[i-2] < close[i-2] < high[i-2]:
if low[i-1] == close[i-1] < open[i-1] < high[i-1]:
if low[i] == close[i] < open[i] < high[i]:
bsLine['buy'][i+1] = close[i] + 5
bsLine['sell'][i + 1] = close[i] + 15
continue
#2
if lower[i-2] > lower[i-1] and lower[i-1] < lower[i]:
if lower[i-2] > low[i-2]:
if open[i-2] < close[i-2] and open[i-1] < close[i-1] and open[i] < close[i]:
bsLine['buy'][i + 1] = open[i]
bsLine['sell'][i + 1] = open[i] + 10
continue
if lower[i-2] > lower[i-1] > lower[i]:
# 3
if high[i-2] == open[i-2] > close[i-2] > low[i-2] and close[i-2] < ma2[i-2]:
if high[i-1] > open[i-1] > close[i-1] == low[i-1] and close[i-1] < ma2[i-1]:
if ma2[i-1] == ma2[i] and low[i] == open[i] < close[i] < high[i]:
bsLine['buy'][i + 1] = close[i]
bsLine['sell'][i + 1] = close[i] + 10
continue
#4
if upper[i] < upper[i-2] < upper[i-1]:
if ma10[i-2] > ma10[i-1] > ma2[i-2] > ma2[i-1] == ma2[i]:
if high[i-2] == open[i-2] > close[i-2] == low[i-2]:
if high[i-1] == open[i-1] > close[i-1] == low[i-1]:
if high[i] > close[i] > open[i] == low[i]:
bsLine['buy'][i + 1] = close[i]
bsLine['sell'][i + 1] = close[i] + 5
continue
#5
if upper[i-2] > upper[i-1] and upper[i-1] < upper[i]:
if lower[i - 2] > lower[i - 1] and lower[i - 1] < lower[i]:
if open[i-1] < ma2[i-1] and open[i-1]==low[i-1] < close[i-1]==high[i-1]:
if open[i]==low[i] < close[i] == high[i]:
if close[i] > ma2[i] and close[i] > ma10[i] and close[i] > ma15[i] and close[i] > ma20[i]:
bsLine['buy'][i+1] = close[i] + 5
bsLine['sell'][i + 1] = close[i] + 25
continue
#6
if lower[i] < lower[i-2] < lower[i-1]:
if lower[i-2] < low[i-2] < close[i-2] < open[i-2] == high[i-2]:
if low[i-1] < lower[i-1] < close[i-1]==open[i-1] < high[i-1]:
if low[i] < lower[i] < close[i] == open[i] < high[i]:
bsLine['buy'][i + 1] = close[i]
bsLine['sell'][i + 1] = close[i] + 5
continue
#7
if low[i-2] < open[i-2] == close[i-2] == high[i-2]:
if low[i - 1] < open[i - 1] == close[i - 1] == high[i - 1]:
if low[i] < open[i] < close[i] == high[i]:
if ma2[i] < close[i] and ma10[i] < close[i] and ma15[i] < close[i] and ma20[i] < close[i]:
if lower[i-2] < lower[i-1] < lower[i]:
if upper[i-2] > upper[i-1] > upper[i]:
bsLine['buy'][i + 1] = close[i]
bsLine['sell'][i + 1] = close[i] + 10
continue
#8
if low[i-2] < close[i-2] < open[i-2] == high[i-2]:
if low[i-1] < open[i-1] < close[i-1] == high[i-1]:
if low[i] < open[i] < close[i] == high[i]:
if lower[i-1] < lower[i] < lower[i-2]:
if upper[i] < upper[i-2] < upper[i-1]:
bsLine['buy'][i + 1] = open[i]
bsLine['sell'][i + 1] = open[i] + 5
continue
#9
if low[i-2] == open[i-2] < close[i-2] < high[i-2]:
if low[i-1] == close[i-1] < open[i-1] < high[i-1]:
if low[i] < open[i] == close[i] < high[i] and close[i-1] < close[i]:
if low[i-2] == low[i-1] and open[i-2] == close[i-1] and close[i-2] == open[i-1] and high[i-2] == high[i-1]:
bsLine['buy'][i + 1] = open[i]
bsLine['sell'][i + 1] = open[i] + 15
continue
#10
if low[i-2] == close[i-2] < open[i-2] == high[i-2]:
if low[i-1] == open[i-1] < close[i-1] == high[i-1]:
if low[i] == close[i] < open[i] == high[i]:
if high[i-2] == high[i-1] == high[i]:
if low[i-2] == low[i] < low[i-1]:
bsLine['buy'][i + 1] = open[i-1]
bsLine['sell'][i + 1] = open[i-1] + 5
continue
# 11
if low[i-2] < close[i-2] == open[i-2] < high[i-2]:
if low[i-1] < close[i - 1] < open[i - 1] == high[i - 1]:
if low[i] < close[i] == open[i] < high[i]:
if low[i-2] == low[i] and high[i-2] == high[i] and low[i-1] < low[i-2] and high[i-1] < high[i-2]:
if ma2[i - 2] > ma2[i - 1] > ma2[i]:
bsLine['buy'][i + 1] = close[i]
bsLine['sell'][i + 1] = close[i] + 15
continue
# 12
if low[i - 2] < close[i - 2] < open[i - 2] < high[i - 2]:
if low[i - 1] == open[i - 1] < close[i - 1] < high[i - 1]:
if low[i] == open[i] < close[i] == high[i]:
if lower[i-2] > lower[i-1] and ma2[i-2] > ma2[i-1] and ma2[i-1] < ma2[i]:
bsLine['buy'][i + 1] = close[i-1]
bsLine['sell'][i + 1] = close[i-1] + 5
continue
# 13
if low[i-2] == open[i-2] < close[i-2] < high[i-2]:
if low[i-1] == close[i-1] < open[i-1] == high[i-1]:
if low[i] == open[i] < close[i] < high[i]:
if low[i-2] == low[i] > low[i-1]:
bsLine['buy'][i + 1] = close[i]
bsLine['sell'][i + 1] = close[i] + 5
continue
# 14
if low[i-2] < open[i-2] == close[i-2] < high[i-2]:
if low[i-1] < open[i-1] == close[i-1] < high[i-1]:
if low[i] < open[i] == close[i] < high[i]:
if low[i-2] < ma2[i-2] < high[i-2] and low[i-1] < ma2[i-1] < high[i-1] and low[i] < ma2[i] < high[i]:
if high[i - 2] < ma10[i - 2] and high[i - 1] < ma10[i - 1] and high[i] < ma10[i]:
bsLine['buy'][i + 1] = close[i]
bsLine['sell'][i + 1] = close[i] + 5
continue
# 15
if low[i - 2] < close[i - 2] < open[i - 2] == high[i - 2]:
if low[i-2] < lower[i-2] and high[i-2] < upper[i-2]:
if low[i - 1] == open[i - 1] < close[i - 1] <= high[i - 1]:
if low[i - 1] > lower[i - 1] and high[i - 1] < upper[i - 1]:
if low[i] <= open[i] < close[i] == high[i]:
if low[i] > lower[i] and high[i] > upper[i]:
bsLine['buy'][i + 1] = close[i] - 5
bsLine['sell'][i + 1] = close[i] + 5
continue
# 16
if low[i - 3] < close[i - 3] < open[i - 3] == high[i - 3]:
if low[i-3] > lower[i-3] and high[i-3] < upper[i-3]:
if low[i - 2] < close[i - 2] < open[i - 2] == high[i - 2]:
if low[i - 2] < lower[i - 2] and high[i - 2] < upper[i - 2]:
if low[i - 1] <= open[i - 1] < close[i - 1] == high[i - 1]:
if low[i - 1] < lower[i - 1] and high[i - 1] > upper[i - 1]:
if low[i] < open[i] == close[i] < high[i]:
if low[i] < lower[i]:
bsLine['buy'][i + 1] = close[i] - 5
bsLine['sell'][i + 1] = close[i] + 5
continue
# 16
if low[i - 2] == close[i - 2] == open[i - 2] < high[i - 2]:
if low[i - 2] < lower[i - 2]:
if low[i - 1] == close[i - 1] == open[i - 1] < high[i - 1]:
if low[i] == open[i] < close[i] == high[i]:
bsLine['buy'][i + 1] = close[i]
bsLine['sell'][i + 1] = close[i] + 20
continue
# 17
if low[i - 3] == open[i - 3] == close[i - 3] < high[i - 3]:
if high[i - 3] > upper[i - 3]:
if low[i - 2] < open[i - 2] == close[i - 2] < high[i - 2]:
if high[i - 2] > upper[i - 2] and low[i - 2] < lower[i - 2]:
if low[i - 1] < open[i - 1] == close[i - 1] < high[i - 1]:
if low[i - 1] < lower[i - 1]:
if low[i] == open[i] < close[i] <= high[i]:
bsLine['buy'][i + 1] = close[i] + 5
bsLine['sell'][i + 1] = close[i] + 20
continue
# 18
if open[i - 3] > close[i - 3]:
if low[i - 3] < lower[i - 3] and low[i - 3] < ma2[i - 3]:
if low[i - 2] == close[i - 2] < open[i - 2] <= high[i - 2]:
if low[i - 2] < lower[i - 2] and low[i - 2] < ma2[i - 2]:
if low[i - 1] < open[i - 1] == close[i - 1] <= high[i - 1]:
if close[i - 2] < close[i - 1]:
if low[i] < open[i] == close[i] <= high[i]:
if close[i - 1] < close[i]:
bsLine['buy'][i + 1] = close[i]+5
bsLine['sell'][i + 1] = close[i] + 20
continue
# 19
if low[i-3] < open[i - 3] < close[i - 3] == high[i-3] < ma20[i-3]:
if low[i - 2] < close[i - 2] == open[i - 2] <= high[i - 2] < ma20[i-2]:
if low[i - 1] < open[i - 1] <= close[i - 1] == high[i - 1] < ma20[i-1]:
if low[i] <= open[i] < close[i] == high[i]:
if open[i-3] <= open[i-2] <= open[i-1] or close[i-2] <= close[i-1] <= close[i]:
bsLine['buy'][i + 1] = close[i]+5
bsLine['sell'][i + 1] = close[i] + 15
continue
return bsLine
"""
def checkTransaction(self, data, upper, lower):
low = data["Low"]
high = data["High"]
@@ -623,7 +844,6 @@ class HTS:
buy_line[i+1] = low[i] + 5
check = False
if low[i-2] < lower[i-2] and low[i-1] < lower[i-1] and low[i] < open[i] == close[i] < high[i] and open[i] - low[i] == high [i] - open[i]:
if not (open[i-2] < close[i-2] and open[i-1] < close[i-1]) and not (open[i-2] == close[i-2] or open[i-1] == close[i-1]):
buy_line[i+1] = high[i]
@@ -644,6 +864,7 @@ class HTS:
break
return buy_line, sell_line
"""
def simulate(self, stock_code, given_day):
#timecheckList = pd.read_csv("timecheck.csv").values.tolist()
@@ -664,10 +885,10 @@ class HTS:
data, upper, lower = self.analyze(result)
# 사야 할 시점과 팔아야 할 시점을 체크한다.
buy_line, sell_line = self.checkTransaction(data, upper, lower)
bsLine = self.checkTransaction(data, upper, lower)
# 그래프를 그린다.
self.draw(given_day, data, upper, lower, buy_line, sell_line)
self.draw(given_day, data, upper, lower, bsLine)
# 가져온 만큼 데이터를 누적해서 파일로 작성한다.
self.write(given_day, result)
@@ -678,7 +899,7 @@ class HTS:
data, upper, lower = None, None, None
previous_price = 0
buy_count = 700
buy_count = 260
total_byu_amt = 0
logFp = open(given_day+".log", "w")
@@ -709,26 +930,28 @@ class HTS:
data, upper, lower = self.analyze(result)
# 사야 할 시점과 팔아야 할 시점을 체크한다.
buy_line, sell_line = self.checkTransaction(data, upper, lower)
bsLine = self.checkTransaction(data, upper, lower)
buy_line = bsLine['buy']
# 주문 및 매도 처리
price = buy_line[len(buy_line)-1]
price = bsLine['buy'][len(buy_line)-1]
# 매수신청과 5원 높여서 매도신청
if price > 0:
if previous_price > 0:
if previous_price > price:
if buy_count < 600:
buy_count = 600
buy_count += 100
if buy_count > 1000:
buy_count = 1000
elif previous_price < price:
if buy_count > 800:
buy_count = 800
buy_count -= 100
if buy_count < 500:
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
# 매수 주문
@@ -810,12 +1033,13 @@ if __name__ == "__main__":
#hts.all_stocks()
#hts.getChartData(stock_code)
#hts.currentStock(stock_code)
hts.printStockData(stock_code, given_day)
#hts.printStockData(stock_code, given_day)
#given_days = ['20210909','20210910','20210913','20210914','20210915','20210916','20210917','20210923','20210924','20210927','20210928','20210929']
#given_days = ['20210929']
#for given_day in given_days:
# hts.simulate(stock_code, given_day)
given_days = ['20210909','20210910','20210913','20210914','20210915','20210916','20210917','20210923','20210924','20210927','20210928','20210929','20210930']
given_days = ['20210909','20210913','20210914','20210915','20210916']
given_days = ['20210913']
for given_day in given_days:
hts.simulate(stock_code, given_day)
#hts.buyRealTime(stock_code, given_day)