init
This commit is contained in:
54
HTS_etf.py
54
HTS_etf.py
@@ -38,14 +38,11 @@ class HTS_etf(HTS):
|
|||||||
ichimokuCloud = None
|
ichimokuCloud = None
|
||||||
|
|
||||||
|
|
||||||
def __init__(self, RESOURCE_PATH, stock_code, stock_name, SELL_GAP):
|
def __init__(self, RESOURCE_PATH):
|
||||||
super().__init__(RESOURCE_PATH)
|
super().__init__(RESOURCE_PATH)
|
||||||
|
|
||||||
self.RESOURCE_PATH = RESOURCE_PATH
|
self.RESOURCE_PATH = RESOURCE_PATH
|
||||||
|
|
||||||
self.SELL_GAP = SELL_GAP
|
|
||||||
self.stock_code = stock_code
|
|
||||||
self.stock_name = stock_name
|
|
||||||
self.orderChecker = OrderChecker(self.RESOURCE_PATH, self.stock_code)
|
self.orderChecker = OrderChecker(self.RESOURCE_PATH, self.stock_code)
|
||||||
self.bot = TelegramBot()
|
self.bot = TelegramBot()
|
||||||
self.stockStatus = StockStatus(RESOURCE_PATH)
|
self.stockStatus = StockStatus(RESOURCE_PATH)
|
||||||
@@ -78,34 +75,31 @@ class HTS_etf(HTS):
|
|||||||
if code == "A" + stock_code:
|
if code == "A" + stock_code:
|
||||||
if bs_sell_price is not None:
|
if bs_sell_price is not None:
|
||||||
if jangoDic[code]['매도가능'] > 0:
|
if jangoDic[code]['매도가능'] > 0:
|
||||||
if jangoDic[code]['평가손익'] < -0.6 or 1.0 < jangoDic[code]['평가손익'] or self.SELL_GAP < jangoDic[code]['평가금액']-jangoDic[code]['매입금액']:
|
#if jangoDic[code]['평가손익'] < -0.6 or 1.0 < jangoDic[code]['평가손익']:
|
||||||
# 1.5% 손해 혹은 2% 이상 시 수익 매도
|
if sell_count == 0:
|
||||||
if sell_count == 0:
|
self.requestOrder(OrderType.sell, code[1:], jangoDic[code]['매도가능'], bs_sell_price)
|
||||||
self.requestOrder(OrderType.sell, code[1:], jangoDic[code]['매도가능'], bs_sell_price)
|
else:
|
||||||
else:
|
self.requestOrder(OrderType.sell, code[1:], sell_count, bs_sell_price)
|
||||||
self.requestOrder(OrderType.sell, code[1:], sell_count, bs_sell_price)
|
self.bot.sendMsg("Profit {:.2f}, {} ({})".format(jangoDic[code]['평가손익'], stock_code, stock_name))
|
||||||
self.bot.sendMsg("Profit {:.2f}, {} ({})".format(jangoDic[code]['평가손익'], stock_code, stock_name))
|
check = True
|
||||||
check = True
|
|
||||||
else:
|
else:
|
||||||
if jangoDic[code]['매도가능'] > 0:
|
if jangoDic[code]['매도가능'] > 0:
|
||||||
if jangoDic[code]['평가손익'] < -0.6 or 1.0 < jangoDic[code]['평가손익'] or self.SELL_GAP < jangoDic[code]['평가금액']-jangoDic[code]['매입금액']:
|
#if jangoDic[code]['평가손익'] < -0.6 or 1.0 < jangoDic[code]['평가손익']:
|
||||||
# 1.5% 손해 혹은 2% 이상 시 수익 매도
|
if sell_count == 0:
|
||||||
if sell_count == 0:
|
self.requestOrder(OrderType.sell, code[1:], jangoDic[code]['매도가능'], jangoDic[code]['현재가'])
|
||||||
self.requestOrder(OrderType.sell, code[1:], jangoDic[code]['매도가능'], jangoDic[code]['현재가'])
|
else:
|
||||||
else:
|
self.requestOrder(OrderType.sell, code[1:], sell_count, jangoDic[code]['현재가'])
|
||||||
self.requestOrder(OrderType.sell, code[1:], sell_count, jangoDic[code]['현재가'])
|
self.bot.sendMsg("Profit {:.2f}, {} ({})".format(jangoDic[code]['평가손익'], stock_code, stock_name))
|
||||||
self.bot.sendMsg("Profit {:.2f}, {} ({})".format(jangoDic[code]['평가손익'], stock_code, stock_name))
|
check = True
|
||||||
check = True
|
|
||||||
else:
|
else:
|
||||||
if jangoDic[code]['매도가능'] > 0:
|
if jangoDic[code]['매도가능'] > 0:
|
||||||
if jangoDic[code]['평가손익'] < -0.6 or 1.0 < jangoDic[code]['평가손익'] or self.SELL_GAP < jangoDic[code]['평가금액']-jangoDic[code]['매입금액']:
|
#if jangoDic[code]['평가손익'] < -0.6 or 1.0 < jangoDic[code]['평가손익']:
|
||||||
# 1.5% 손해 혹은 2% 이상 시 수익 매도
|
if sell_count == 0:
|
||||||
if sell_count == 0:
|
self.requestOrder(OrderType.sell, code[1:], jangoDic[code]['매도가능'], jangoDic[code]['현재가'])
|
||||||
self.requestOrder(OrderType.sell, code[1:], jangoDic[code]['매도가능'], jangoDic[code]['현재가'])
|
else:
|
||||||
else:
|
self.requestOrder(OrderType.sell, code[1:], sell_count, jangoDic[code]['현재가'])
|
||||||
self.requestOrder(OrderType.sell, code[1:], sell_count, jangoDic[code]['현재가'])
|
self.bot.sendMsg("Profit {:.2f}, {} ({})".format(jangoDic[code]['평가손익'], stock_code, stock_name))
|
||||||
self.bot.sendMsg("Profit {:.2f}, {} ({})".format(jangoDic[code]['평가손익'], stock_code, stock_name))
|
check = True
|
||||||
check = True
|
|
||||||
return check
|
return check
|
||||||
|
|
||||||
def getSellingPrice(self, log_time, stock_code, final_price, without_loss=False):
|
def getSellingPrice(self, log_time, stock_code, final_price, without_loss=False):
|
||||||
@@ -391,10 +385,10 @@ class HTS_etf(HTS):
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
def getDisparityLimit(self, ticker, RESOURCE_PATH):
|
def getDisparityLimit(self, ticker, RESOURCE_PATH):
|
||||||
conn = sqlite3.connect(os.path.join(RESOURCE_PATH, 'coins.db'))
|
conn = sqlite3.connect(os.path.join(RESOURCE_PATH, 'hts.db'))
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
|
|
||||||
cursor.execute('SELECT disparity_avg5, disparity_avg20, disparity_avg60, disparity_avg120, disparity_avg240, disparity_avg480, disparity_avg1500 FROM minutely WHERE (CODE=? or CODE=?) order by ymd, hms', (ticker['stock_code'], ticker['stock_code'].replace('KRW-', ''),))
|
cursor.execute('SELECT disparity_avg5, disparity_avg20, disparity_avg60, disparity_avg120, disparity_avg240, disparity_avg480, disparity_avg1500 FROM hts WHERE CODE=? order by ymd, hms', (ticker['stock_code'],))
|
||||||
|
|
||||||
disparity = {
|
disparity = {
|
||||||
'avg': {},
|
'avg': {},
|
||||||
|
|||||||
@@ -26,36 +26,36 @@ if __name__ == "__main__":
|
|||||||
os.mkdir(os.path.join(RESOURCE_PATH, "log"))
|
os.mkdir(os.path.join(RESOURCE_PATH, "log"))
|
||||||
|
|
||||||
print("START...")
|
print("START...")
|
||||||
while datetime.strptime(today + " 060000", '%Y%m%d %H%M%S') < datetime.now() < datetime.strptime(today + " 153100", '%Y%m%d %H%M%S'):
|
#while datetime.strptime(today + " 060000", '%Y%m%d %H%M%S') < datetime.now() < datetime.strptime(today + " 153100", '%Y%m%d %H%M%S'):
|
||||||
if datetime.strptime(today + " 090000", '%Y%m%d %H%M%S') < datetime.now() < datetime.strptime(today + " 151500", '%Y%m%d %H%M%S'):
|
#if datetime.strptime(today + " 090000", '%Y%m%d %H%M%S') < datetime.now() < datetime.strptime(today + " 151500", '%Y%m%d %H%M%S'):
|
||||||
THIS_TIME = datetime.now()
|
THIS_TIME = datetime.now()
|
||||||
for stock in stocks:
|
for stock in stocks:
|
||||||
with open("config.json", "r", encoding="utf-8") as f:
|
with open("config.json", "r", encoding="utf-8") as f:
|
||||||
config = json.load(f)
|
config = json.load(f)
|
||||||
MAX_BUY_PRICE = config['MAX_BUY_PRICE']
|
MAX_BUY_PRICE = config['MAX_BUY_PRICE']
|
||||||
BUY_LIST_1 = config['BUY_LIST_1']
|
BUY_LIST_1 = config['BUY_LIST_1']
|
||||||
BUY_LIST_1["disparity"] = hts.getDisparityLimit(stock, RESOURCE_PATH)
|
BUY_LIST_1["disparity"] = hts.getDisparityLimit(stock, RESOURCE_PATH)
|
||||||
if datetime.strptime(today + " 090000", '%Y%m%d %H%M%S') < datetime.now() < datetime.strptime(today + " 090100", '%Y%m%d %H%M%S'):
|
if datetime.strptime(today + " 090000", '%Y%m%d %H%M%S') < datetime.now() < datetime.strptime(today + " 090100", '%Y%m%d %H%M%S'):
|
||||||
hts.bot.sendMsg("START... {} ({}) SLOW_K: {}".format(stock['stock_code'], stock['stock_name'], MAX_BUY_PRICE))
|
hts.bot.sendMsg("START... {} ({}) SLOW_K: {}".format(stock['stock_code'], stock['stock_name'], MAX_BUY_PRICE))
|
||||||
|
|
||||||
LAST_DATA = hts.getLastData(stock['stock_code'], today)
|
LAST_DATA = hts.getLastData(stock['stock_code'], today)
|
||||||
result_m1 = hts.getRealTime(stock['stock_code'], today, LAST_DATA)
|
result_m1 = hts.getRealTime(stock['stock_code'], today, LAST_DATA)
|
||||||
result_tic_m1 = hts.makeTickData1(result_m1, mins=1)
|
result_tic_m1 = hts.makeTickData1(result_m1, mins=1)
|
||||||
data = hts.analyze(result_tic_m1)
|
data = hts.analyze(result_tic_m1)
|
||||||
result_tic_m30 = hts.makeTickData2(result_tic_m1, mins=30)
|
result_tic_m30 = hts.makeTickData2(result_tic_m1, mins=30)
|
||||||
data_signal = hts.analyze(result_tic_m30)
|
data_signal = hts.analyze(result_tic_m30)
|
||||||
# data.drop(data.index[:len(data) - analyzed_day], inplace=True)
|
# data.drop(data.index[:len(data) - analyzed_day], inplace=True)
|
||||||
|
|
||||||
hts.buyRealTime(stock, data, data_signal, MAX_BUY_PRICE, BUY_LIST_1)
|
hts.buyRealTime(stock, data, data_signal, MAX_BUY_PRICE, BUY_LIST_1)
|
||||||
|
|
||||||
if (int(THIS_TIME.strftime("%M")) % 50 == 0 or int(THIS_TIME.strftime("%M")) % 20 == 0):
|
if (int(THIS_TIME.strftime("%M")) % 50 == 0 or int(THIS_TIME.strftime("%M")) % 20 == 0):
|
||||||
vm = psutil.virtual_memory()
|
vm = psutil.virtual_memory()
|
||||||
vm_item = dict()
|
vm_item = dict()
|
||||||
vm_item['free'] = vm.available // (1024 * 1024)
|
vm_item['free'] = vm.available // (1024 * 1024)
|
||||||
vm_item['idle'] = vm.available / vm.total * 100
|
vm_item['idle'] = vm.available / vm.total * 100
|
||||||
hts.bot.sendMsg("Alive... mem: {:.1f}".format(vm_item['idle']))
|
hts.bot.sendMsg("Alive... mem: {:.1f}".format(vm_item['idle']))
|
||||||
|
|
||||||
time.sleep(60)
|
time.sleep(60)
|
||||||
|
|
||||||
|
|
||||||
db_filename = os.path.join(RESOURCE_PATH, "hts.db")
|
db_filename = os.path.join(RESOURCE_PATH, "hts.db")
|
||||||
|
|||||||
@@ -574,7 +574,7 @@ class HTS:
|
|||||||
|
|
||||||
def getDBData(self, stock_code, day, result):
|
def getDBData(self, stock_code, day, result):
|
||||||
|
|
||||||
self.cursor.execute('SELECT ymd, hms, open, high, low, close, volume, label FROM hts WHERE CODE=? and ymd=? order by ymd, hms', (stock_code, day, ))
|
self.cursor.execute('SELECT ymd, hms, open, high, low, close, volume FROM hts WHERE CODE=? and ymd=? order by ymd, hms', (stock_code, day, ))
|
||||||
db_result = self.cursor.fetchall()
|
db_result = self.cursor.fetchall()
|
||||||
for rows in db_result:
|
for rows in db_result:
|
||||||
ymd = rows[0] # hts.날짜
|
ymd = rows[0] # hts.날짜
|
||||||
@@ -584,7 +584,6 @@ class HTS:
|
|||||||
low = rows[4] # hts.저가
|
low = rows[4] # hts.저가
|
||||||
close = rows[5] # hts.종가
|
close = rows[5] # hts.종가
|
||||||
volume = rows[6] # hts.거래량
|
volume = rows[6] # hts.거래량
|
||||||
label = 0 if rows[7] is None else rows[7] # hts.매매구분
|
|
||||||
|
|
||||||
temp = datetime.strptime(str(ymd) + " " + str(hms).zfill(4) + "00", '%Y%m%d %H%M%S')
|
temp = datetime.strptime(str(ymd) + " " + str(hms).zfill(4) + "00", '%Y%m%d %H%M%S')
|
||||||
|
|
||||||
@@ -594,7 +593,6 @@ class HTS:
|
|||||||
result["high"].append(int(high))
|
result["high"].append(int(high))
|
||||||
result["low"].append(int(low))
|
result["low"].append(int(low))
|
||||||
result["volume"].append(int(volume))
|
result["volume"].append(int(volume))
|
||||||
result["label"].append(int(label))
|
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user