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

@@ -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)