This commit is contained in:
dosangyoon
2022-08-11 03:06:30 +09:00
parent e117b108fc
commit 42df0fc3fa
5 changed files with 98 additions and 51 deletions

View File

@@ -41,10 +41,6 @@ class HTS_122630 (HTS):
else:
sell_price = (int(final_price) - int(final_price) % 5) + diff
if code == "A"+stock_code:
if log_time.strftime('%H%M') < "1430":
orderNum = self.requestOrder(OrderType.sell, stock_code, jangoDic[code]['매도가능'], sell_price)
print("ORDER_SELL", stock_code, log_time.strftime('%Y%m%d %H%M%S'), jangoDic[code]['매도가능'], sell_price)
else:
orderNum = self.requestOrder(OrderType.sell, stock_code, jangoDic[code]['매도가능'], sell_price)
print("ORDER_SELL", stock_code, log_time.strftime('%Y%m%d %H%M%S'), jangoDic[code]['매도가능'], sell_price)
return
@@ -115,7 +111,7 @@ class HTS_122630 (HTS):
self.cancelOrderList(orderListToCancel)
# 매도 한다.
self.getSellingPrice(THIS_TIME, self.stock_code, final_price)
self.getSellingPrice(THIS_TIME, self.stock_code, final_price, diff=0)
# 로그 출력
@@ -152,7 +148,7 @@ class HTS_122630 (HTS):
result = self.getRealTime(self.stock_code, today, LAST_DATA)
final_price = result["close"][len(result["close"]) - 1]
self.getSellingPrice(THIS_TIME, self.stock_code, final_price)
self.getSellingPrice(THIS_TIME, self.stock_code, final_price=0)
final_sell_check = True
@@ -179,7 +175,7 @@ if __name__ == "__main__":
# KODEX 인버스 * 2
stock_code = "122630"
stock_name = "KODEX 레버리지"
buy_count = 130
buy_count = 120
hts = HTS_122630(RESOURCE_PATH, stock_code, buy_count)
today_str = today.strftime('%Y%m%d')

View File

@@ -42,10 +42,6 @@ class HTS_252670 (HTS):
else:
sell_price = (int(final_price) - int(final_price) % 5) + diff
if code == "A"+stock_code:
if log_time.strftime('%H%M') < "1430":
orderNum = self.requestOrder(OrderType.sell, stock_code, jangoDic[code]['매도가능'], sell_price)
print("ORDER_SELL", stock_code, log_time.strftime('%Y%m%d %H%M%S'), jangoDic[code]['매도가능'], sell_price)
else:
orderNum = self.requestOrder(OrderType.sell, stock_code, jangoDic[code]['매도가능'], sell_price)
print("ORDER_SELL", stock_code, log_time.strftime('%Y%m%d %H%M%S'), jangoDic[code]['매도가능'], sell_price)
return
@@ -101,7 +97,7 @@ class HTS_252670 (HTS):
ORDER_LIST = self.requestOrderList()
# 매수 주문을 기록한다.
orderListToCancel = self.orderChecker.add(self.stock_code, OrderType.buy, orderNum, BUY_COUNT, bs_buy_price, ORDER_LIST)
# 시간 이전 미체결을 모두 취소한다.
# 1 시간 이전 미체결을 모두 취소한다.
self.cancelOrderList(orderListToCancel)
# 로그 출력
print("BUY", THIS_TIME.strftime('%Y%m%d %H%M%S'), BUY_COUNT, bs_buy_price, len(orderListToCancel), len(ORDER_LIST))
@@ -116,7 +112,7 @@ class HTS_252670 (HTS):
self.cancelOrderList(orderListToCancel)
# 매도한다.
self.getSellingPrice(THIS_TIME, self.stock_code, final_price)
self.getSellingPrice(THIS_TIME, self.stock_code, final_price, diff=0)
# 로그 출력
"""
@@ -151,7 +147,7 @@ class HTS_252670 (HTS):
result = self.getRealTime(self.stock_code, today, LAST_DATA)
final_price = result["close"][len(result["close"]) - 1]
self.getSellingPrice(THIS_TIME, self.stock_code, final_price)
self.getSellingPrice(THIS_TIME, self.stock_code, final_price, diff=0)
final_sell_check = True
@@ -179,7 +175,7 @@ if __name__ == "__main__":
# KODEX 인버스 * 2
stock_code = "252670"
stock_name = "KODEX 200선물인버스2X"
buy_count = 1000
buy_count = 600
hts = HTS_252670(RESOURCE_PATH, stock_code, buy_count)
today_str = today.strftime('%Y%m%d')

View File

@@ -175,8 +175,8 @@ if __name__ == "__main__":
# to check bying
stock_codes = {
"122630": ['20220809'],
"252670": ['20220809'],
"122630": ['20220801', '20220802', '20220803', '20220804', '20220805'],
"252670": ['20220801', '20220802', '20220803', '20220804', '20220805'],
}
method = "rule" # "rule", "ml", "answer"

View File

@@ -192,19 +192,48 @@ class BuySellChecker:
START_TIME_INDEX = c
break
if i >= START_TIME_INDEX:
if i > START_TIME_INDEX:
# 매수 분석
if i > 740:
# "15:00" 까지만 매수
return buy, weight
# 20분과 30분 아래에서, 3분선이 5분선 위로 올라오면 매수,
# 20분과 30분 위에서, 3분선이 5분선 아래로 내려오면 매도,
if data["avg3"][i - 1] <= data["avg5"][i - 1] and data["avg3"][i] > data["avg5"][i]:
if max(data["avg3"][i], data["avg5"][i]) < min(data["avg20"][i], data["avg30"][i]):
if min(data["avg3"][i], data["avg5"][i]) > data["avg60"][i]:
buy = int((data["high"][i] + data["low"][i]) / 2)
if data["macd"][i] < -25:
if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]):
buy = data["high"][i]
if i < 381 + 30:
weight = 1
else:
weight = 5
return buy, weight
if data["macd"][i] < -5 and data["rsi"][i] < 30:
if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]):
buy = int((data["open"][i] + data["close"][i]) / 2)
weight = 2
return buy, weight
if data["slow_k"][i] < 10 and data["rsi"][i] < 30:
if data["slow_k"][i - 1] < min(data["slow_k"][i - 2], data["slow_k"][i]):
if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]):
buy = int((data["open"][i] + data["close"][i]) / 2)
weight = 2
return buy, weight
# 3분선이 5분선이 돌파가 이전보다 높은 경우 매수
if data["avg3"][i - 1] < data["avg5"][i - 1] and data["avg3"][i] > data["avg5"][i]:
p_avg3 = 999999
for c in range(1, 50):
if data["avg3"][i-c-1] < data["avg5"][i-c-1] and data["avg3"][i-c] > data["avg5"][i-c]:
p_avg3 = data["avg3"][i-c]
break
if data["avg3"][i] > p_avg3:
if i == 382 or i == 383:
if data["close"][i] != data["high"][i]:
return -1, -1
if data["slow_k"][i] < 30 or i < 381 + 10:
buy = int((data["open"][i] + data["close"][i]) / 2)
weight = 1
return buy, weight
@@ -411,10 +440,10 @@ class BuySellChecker:
if i >= START_TIME_INDEX:
# 매도 분석
# 20분과 30분 아래에서, 3분선이 5분선 위로 올라오면 매수,
# 20분과 30분 위에서, 3분선이 5분선 아래로 내려오면 매도,
# 10분선 위에서 3분선이 5분선을 하향 돌파 하는 경우 매도
if data["avg3"][i - 1] >= data["avg5"][i - 1] and data["avg3"][i] < data["avg5"][i]:
if min(data["avg3"][i], data["avg5"][i]) > max(data["avg20"][i], data["avg30"][i]):
if min(data["avg3"][i], data["avg5"][i]) > data["avg10"][i]:
if data["slow_k"][i] > 80:
sell = int((data["high"][i] + data["low"][i]) / 2)
weight = 1
return sell, weight
@@ -519,12 +548,38 @@ class BuySellChecker:
# "15:00" 까지만 매수
return buy, weight
# 20분과 30분 아래에서, 3분선이 5분선 위로 올라오면 매수,
# 20분과 30분 위에서, 3분선이 5분선 아래로 내려오면 매도,
if data["avg3"][i - 1] <= data["avg5"][i - 1] and data["avg3"][i] > data["avg5"][i]:
if max(data["avg3"][i], data["avg5"][i]) < min(data["avg20"][i], data["avg30"][i]):
if min(data["avg3"][i], data["avg5"][i]) > data["avg60"][i]:
buy = int((data["high"][i] + data["low"][i]) / 2)
if data["macd"][i] < -25:
if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]):
buy = data["high"][i]
if i < 381 + 30:
weight = 1
else:
weight = 5
return buy, weight
if data["macd"][i] < -5 and data["rsi"][i] < 30:
if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]):
buy = int((data["open"][i] + data["close"][i]) / 2)
weight = 2
return buy, weight
if data["slow_k"][i] < 10 and data["rsi"][i] < 30:
if data["slow_k"][i - 1] < min(data["slow_k"][i - 2], data["slow_k"][i]):
if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]):
buy = int((data["open"][i] + data["close"][i]) / 2)
weight = 2
return buy, weight
# 3분선이 5분선이 돌파가 이전보다 높은 경우 매수
if data["avg3"][i - 1] < data["avg5"][i - 1] and data["avg3"][i] > data["avg5"][i]:
p_avg3 = 999999
for c in range(1, 50):
if data["avg3"][i-c-1] < data["avg5"][i-c-1] and data["avg3"][i-c] > data["avg5"][i-c]:
p_avg3 = data["avg3"][i-c]
break
if data["avg3"][i] > p_avg3:
if data["slow_k"][i] < 30 or i < 381 + 10:
buy = int((data["open"][i] + data["close"][i]) / 2)
weight = 1
return buy, weight
"""
@@ -731,10 +786,10 @@ class BuySellChecker:
if i >= START_TIME_INDEX:
# 매도 분석
# 20분과 30분 아래에서, 3분선이 5분선 위로 올라오면 매수,
# 20분과 30분 위에서, 3분선이 5분선 아래로 내려오면 매도,
# 10분선 위에서 3분선이 5분선을 하향 돌파 하는 경우 매도
if data["avg3"][i - 1] >= data["avg5"][i - 1] and data["avg3"][i] < data["avg5"][i]:
if min(data["avg3"][i], data["avg5"][i]) > max(data["avg20"][i], data["avg30"][i]):
if min(data["avg3"][i], data["avg5"][i]) > data["avg10"][i]:
if data["slow_k"][i] > 80:
sell = int((data["high"][i] + data["low"][i]) / 2)
weight = 1
return sell, weight

View File

@@ -36,16 +36,16 @@ class OrderChecker:
# 1) 종목 코드를 찾는다.
stock_df = order_df.loc[order_df["stock_code"] == stock_code]
# 2) 2 시간 전 계산
before_two_hour = datetime.now() - timedelta(hours=2)
# 2) 5분 전 계산
before_two_hour = datetime.now() - timedelta(minutes=5)
# 3) 만약 2 시간 전 주문을 찾는다.
# 3) 만약 5분 전 주문을 찾는다.
stock_twohour_df = stock_df.loc[stock_df["datetime"] <= before_two_hour]
# 4) 2 시간 전 주문 중에서 매수 데이터만 찾는다.
# 4) 5분 전 주문 중에서 매수 데이터만 찾는다.
orderNum_df = stock_twohour_df.loc[stock_twohour_df["type"] == OrderType.buy.value]
# 5) 2시간 전 매수 항목을 별도로 추출한다.
# 5) 5분 전 매수 항목을 별도로 추출한다.
orderNumSet = set(list(orderNum_df["orderNum"]))
for item in orderList:
if item.orderNum in orderNumSet: