This commit is contained in:
dosangyoon
2021-10-17 00:36:44 +09:00
parent 8bcb2beeed
commit 7cf8b77580
3 changed files with 33 additions and 11 deletions

View File

@@ -548,6 +548,7 @@ class HTS:
def buyRealTime(self, stock_code, GIVEN_DAY):
orderChecker = OrderChecker()
BASE_COUNT = 100
ORDER_LIST = None
timecheckList = pd.read_csv("timecheck.csv").values.tolist()
timecheck = {GIVEN_DAY + " " + str(second).zfill(6):False for second, check in timecheckList}
@@ -578,31 +579,37 @@ class HTS:
data_size = len(data["Close"])
final_price = data["Close"][data_size-1]
if bs_buy_price > 0 or bs_sell_price > 0:
# 미체결 기록을 가져온다.
ORDER_LIST = self.requestOrderList()
if bs_buy_price > 0:
# 기본 100 주에 가중치를 추가해서 매수한다.
BUY_COUNT = int(BASE_COUNT * bs_weight)
# 매수를 주문한다.
# 매수를 요청한다.
orderNum = self.requestOrder(OrderType.buy, stock_code, BUY_COUNT , bs_buy_price)
# 미체결 기록을 가져온다.
orderList = self.requestOrderList()
# 매수 주문을 기록한다.
orderListToCancel = orderChecker.add(OrderType.buy, orderNum, BUY_COUNT, bs_buy_price, orderList)
# 두 시간 이전 미체결을 취소한다.
orderListToCancel = orderChecker.add(OrderType.buy, orderNum, BUY_COUNT, bs_buy_price, ORDER_LIST)
# 두 시간 이전 미체결을 모두 취소한다.
self.cancelOrderList(orderListToCancel)
# 로그 출력
print("BUY", THIS_TIME, BUY_COUNT, bs_buy_price)
if bs_sell_price > 0:
# 매도 주문을 기록한다.
orderListToCancel = orderChecker.remove(OrderType.sell, ORDER_LIST)
# 매도 미체결을 모두 취소한다.
self.cancelOrderList(orderListToCancel)
# 매도 가격을 가져온다.
selling_count, selling_price = self.getSellingPrice(final_price)
# 분석되 가격으로 매도 요청한다.
if selling_count != 0 and selling_price != 0:
# 매도를 요청한다.
orderNum = self.requestOrder(OrderType.sell, stock_code, selling_count, selling_price)
# 미체결 기록을 가져온다.
orderList = self.requestOrderList()
# 매도 주문을 기록한다.
orderListToCancel = orderChecker.add(OrderType.sell, orderNum, selling_count, selling_price, orderList)
orderListToCancel = orderChecker.add(OrderType.sell, orderNum, selling_count, selling_price, ORDER_LIST)
# 두 시간 이전 미체결을 취소한다.
self.cancelOrderList(orderListToCancel)
# 로그 출력

View File

@@ -31,7 +31,7 @@ class OrderChecker:
before_two_hour = datetime.now() - timedelta(hours=2)
# 두 시간 전 주문을 찾는다.
if len(orderList) > 0:
if orderList is not None and len(orderList) > 0:
# 만약 두시간 전 주문을 찾는다.
orderNum_df = self.order_df.loc[self.order_df["datetime"] <= before_two_hour]
orderNum_df = orderNum_df.loc[orderNum_df["type"] == OrderType.buy.value]
@@ -47,6 +47,21 @@ class OrderChecker:
return orderListToCancel
def remove(self, type, orderList):
orderListToCancel = []
if orderList is not None and len(orderList) > 0:
orderNum_df = self.order_df.loc[self.order_df["type"] == type.value]
orderNumSet = set(list(orderNum_df["orderNum"]))
for item in orderList:
if item.orderNum in orderNumSet:
orderListToCancel.append(item)
# 해당 orderNum 제외하기
self.order_df = self.order_df.loc[self.order_df["orderNum"] != item.orderNum]
self.order_df.to_csv(self.saveFileName)
return orderListToCancel
if __name__ == "__main__":
a = pd.DataFrame(columns=["type", "orderNum", "count", "price", "datetime"])
a = a.astype({"type": str, "orderNum": int, "count": int, "price": int})

View File

@@ -411,7 +411,7 @@ class Analyzer:
fileName = "%s/%d__s(%.2f)__b(%.2f)__p(%.2f)__%s__%d__%s_%s.html" % (fileName, isbuy, stochastic_score, bolingerband_score, positionalEnergy, state, buy_price, item_name.replace(" ", ""), item_code)
po.write_html(fig, file=fileName, auto_open=False)
if positionalEnergy < 0.15:
if positionalEnergy < 0.5:
fileName = self.positionalEnergy_path
fileName = "%s/%d__p(%.2f)__b(%.2f)__s(%.2f)__%s__%d__%s_%s.html" % (fileName, isbuy, positionalEnergy, bolingerband_score, stochastic_score, state, buy_price, item_name.replace(" ", ""), item_code)
po.write_html(fig, file=fileName, auto_open=False)
@@ -518,7 +518,7 @@ class Analyzer:
isbuy = 0
# 스토케스틱이 20이하이어야 하며, 볼린저밴드 0.3 보다 작으며, 위치에너지도 0.2보다 낮다면,
if stochastic_score < 30 and bolingerband_score < 0.3 and positionalEnergy < 0.6:
if stochastic_score < 30 and bolingerband_score < 0.3 and positionalEnergy < 0.5:
isbuy = 1
# 위치에너지가 낮거나 240일선 아래에 있는 상태에서 상태값을 갖는 경우 매수한다.