init
This commit is contained in:
32
HTS_etf.py
32
HTS_etf.py
@@ -68,6 +68,37 @@ class HTS_etf(HTS):
|
|||||||
return jangoDic[code]['장부가'], jangoDic[code]['평가금액'], jangoDic[code]['평가손익']
|
return jangoDic[code]['장부가'], jangoDic[code]['평가금액'], jangoDic[code]['평가손익']
|
||||||
return 0, 0, 0
|
return 0, 0, 0
|
||||||
|
|
||||||
|
def sellStocks(self, stock_code=None, stock_name=None, bs_sell_price=None):
|
||||||
|
check = False
|
||||||
|
jangoDic = self.requstJango()
|
||||||
|
if jangoDic and len(jangoDic.keys()) > 0:
|
||||||
|
for code in jangoDic:
|
||||||
|
if stock_code is not None:
|
||||||
|
if code == "A" + stock_code:
|
||||||
|
if bs_sell_price is not None:
|
||||||
|
if jangoDic[code]['매도가능'] > 0:
|
||||||
|
if jangoDic[code]['평가손익'] < -1.0 or jangoDic[code]['장부가'] + 5 <= jangoDic[code]['현재가']:
|
||||||
|
# 1.5% 손해 혹은 2% 이상 시 수익 매도
|
||||||
|
self.requestOrder(OrderType.sell, code[1:], jangoDic[code]['매도가능'], bs_sell_price)
|
||||||
|
self.bot.sendMsg("Profit {:.2f}, {} ({})".format(jangoDic[code]['평가손익'], stock_code, stock_name))
|
||||||
|
check = True
|
||||||
|
else:
|
||||||
|
if jangoDic[code]['매도가능'] > 0:
|
||||||
|
if jangoDic[code]['평가손익'] < -1.0 or jangoDic[code]['장부가'] + 5 <= jangoDic[code]['현재가']:
|
||||||
|
# 1.5% 손해 혹은 2% 이상 시 수익 매도
|
||||||
|
self.requestOrder(OrderType.sell, code[1:], jangoDic[code]['매도가능'], jangoDic[code]['현재가'])
|
||||||
|
self.bot.sendMsg("Profit {:.2f}, {} ({})".format(jangoDic[code]['평가손익'], stock_code, stock_name))
|
||||||
|
check = True
|
||||||
|
else:
|
||||||
|
if jangoDic[code]['매도가능'] > 0:
|
||||||
|
if jangoDic[code]['평가손익'] < -1.0 or jangoDic[code]['장부가'] + 5 <= jangoDic[code]['현재가']:
|
||||||
|
# 1.5% 손해 혹은 2% 이상 시 수익 매도
|
||||||
|
self.requestOrder(OrderType.sell, code[1:], jangoDic[code]['매도가능'], jangoDic[code]['현재가'])
|
||||||
|
self.bot.sendMsg("Profit {:.2f}, {} ({})".format(jangoDic[code]['평가손익'], stock_code, stock_name))
|
||||||
|
check = True
|
||||||
|
return check
|
||||||
|
|
||||||
|
"""
|
||||||
def sellStocks(self, stock_code=None, stock_name=None, bs_sell_price=None):
|
def sellStocks(self, stock_code=None, stock_name=None, bs_sell_price=None):
|
||||||
check = False
|
check = False
|
||||||
jangoDic = self.requstJango()
|
jangoDic = self.requstJango()
|
||||||
@@ -97,6 +128,7 @@ class HTS_etf(HTS):
|
|||||||
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):
|
||||||
# final_price와 diff를 받으면, 해당 가격으로 그냥 매도한다는 의미
|
# final_price와 diff를 받으면, 해당 가격으로 그냥 매도한다는 의미
|
||||||
|
|||||||
@@ -179,19 +179,30 @@ class BuySellChecker():
|
|||||||
|
|
||||||
# 방법 3:
|
# 방법 3:
|
||||||
if sum(data['avg480'][i - 5:i]) < data['avg480'][i] and sum(data['avg60'][i - 5:i]) < data['avg60'][i] and sum(data['avg20'][i - 5:i]) < data['avg20'][i] and sum(data['avg5'][i - 5:i]) < data['avg5'][i]:
|
if sum(data['avg480'][i - 5:i]) < data['avg480'][i] and sum(data['avg60'][i - 5:i]) < data['avg60'][i] and sum(data['avg20'][i - 5:i]) < data['avg20'][i] and sum(data['avg5'][i - 5:i]) < data['avg5'][i]:
|
||||||
if data['avg480'][i] < data['avg20'][i] < data['avg5'][i]:
|
if data['avg480'][i] < data['avg20'][i] < data['avg5'][i] and data['avg60'][i] < data['avg20'][i] < data['avg5'][i]:
|
||||||
if data['avg60'][i] < data['avg20'][i] < data['avg5'][i]:
|
buy_type = 'trend_up'
|
||||||
if data['avg5'][i] < data['avg5'][i]:
|
buy_ymd = data['ymd'][i]
|
||||||
buy_type = 'trend_up'
|
if data['slow_k'][si] < 30:
|
||||||
buy_ymd = data['ymd'][i]
|
buy_count = MAX_BUY_PRICE / (1 * data['close'][i])
|
||||||
if data['slow_k'][si] < 30:
|
elif data['slow_k'][si] < 50:
|
||||||
buy_count = MAX_BUY_PRICE / (1 * data['close'][i])
|
buy_count = MAX_BUY_PRICE / (1.5 * data['close'][i])
|
||||||
elif data['slow_k'][si] < 50:
|
else:
|
||||||
buy_count = MAX_BUY_PRICE / (1.5 * data['close'][i])
|
buy_count = MAX_BUY_PRICE / (2 * data['close'][i])
|
||||||
else:
|
|
||||||
buy_count = MAX_BUY_PRICE / (2 * data['close'][i])
|
|
||||||
|
|
||||||
return buy_ymd, buy_price, buy_count, buy_cut, buy_type
|
return buy_ymd, buy_price, buy_count, buy_cut, buy_type
|
||||||
|
|
||||||
|
# 방법 4:
|
||||||
|
if data['avg60'][i] < data['avg20'][i] < data['avg5'][i]:
|
||||||
|
buy_type = 'short_trade'
|
||||||
|
buy_ymd = data['ymd'][i]
|
||||||
|
if data['slow_k'][si] < 30:
|
||||||
|
buy_count = MAX_BUY_PRICE / (1 * data['close'][i])
|
||||||
|
elif data['slow_k'][si] < 50:
|
||||||
|
buy_count = MAX_BUY_PRICE / (1.5 * data['close'][i])
|
||||||
|
else:
|
||||||
|
buy_count = MAX_BUY_PRICE / (2 * data['close'][i])
|
||||||
|
|
||||||
|
return buy_ymd, buy_price, buy_count, buy_cut, buy_type
|
||||||
|
|
||||||
return buy_ymd, buy_price, buy_count, buy_cut, buy_type
|
return buy_ymd, buy_price, buy_count, buy_cut, buy_type
|
||||||
|
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ class HTS:
|
|||||||
objStockOrder.SetInputValue(4, count) # 매수수량 count주
|
objStockOrder.SetInputValue(4, count) # 매수수량 count주
|
||||||
objStockOrder.SetInputValue(5, price) # 주문단가 - price 원
|
objStockOrder.SetInputValue(5, price) # 주문단가 - price 원
|
||||||
objStockOrder.SetInputValue(7, "0") # 주문 조건 구분 코드, 0: 기본 1: IOC 2:FOK
|
objStockOrder.SetInputValue(7, "0") # 주문 조건 구분 코드, 0: 기본 1: IOC 2:FOK
|
||||||
objStockOrder.SetInputValue(8, "01") # 주문호가 구분코드 - 01: 보통
|
objStockOrder.SetInputValue(8, "03") # 주문호가 구분코드 - 01: 보통, 03: 시장가
|
||||||
|
|
||||||
# 매수 주문 요청
|
# 매수 주문 요청
|
||||||
nRet = objStockOrder.BlockRequest()
|
nRet = objStockOrder.BlockRequest()
|
||||||
|
|||||||
Reference in New Issue
Block a user