This commit is contained in:
dsyoon
2023-01-10 02:41:36 +09:00
parent 221c9a0075
commit ab0195a84c
5 changed files with 662 additions and 3 deletions

View File

@@ -1,5 +1,4 @@
import pandas as pd
import numpy as np
from stock.analysis.Common import Common
from stock.analysis.Stochastic import Stochastic
from stock.analysis.RSI import RSI
@@ -838,4 +837,202 @@ class BuySellChecker:
bsLine['buy'][i] = int((data["open"][i] + data["close"][i]) / 2)
bsLine['buy_weight'][i] = 1
return bsLine, data
return bsLine, data
def getBuyPriceAndWeight_Envelope_trend(self, data, i):
buy, weight, type = -1, -1, -1
if data['close'][i-1] < data['envelope_lower'][i-1] and data['envelope_lower'][i] < data['close'][i]:
buy = data["close"][i]
weight = 1
type = 1
if data['close'][i] < data['envelope_lower'][i]:
if data['rsis'][i] < data['rsi'][i]:
buy = data["close"][i]
weight = 1
type = 2
if data['close'][i-1] < data['envelope_middle'][i-1] and data['envelope_middle'][i] < data['close'][i]:
if data['slow_k'][i] < 25:
buy = data["close"][i]
weight = 1
type = 3
check1 = False
check2 = False
if data['slow_k'][i] < 40:
if data['close'][i-1] < data['envelope_middle'][i-1] and data['envelope_middle'][i] < data['close'][i]:
idx = -1
for t1 in range(i-1, i-10, -1):
if data['close'][t1] < data['envelope_middle'][t1]:
check1 = True
idx = t1
break
if check1:
for t1 in range(idx-1, i - 10, -1):
if data['envelope_middle'][t1] < data['close'][t1]:
check2 = True
break
if check2:
buy = data["close"][i]
weight = 1
type = 4
if data.index[i].strftime("%Y.%m.%d") == "2021.12.21":
print(1)
check = True
if data['slow_k'][i] < 40:
if data['close'][i - 1] < data['envelope_middle'][i - 1] and data['envelope_middle'][i] < data['close'][i]:
for t1 in range(i-1, i-10, -1):
if data['envelope_middle'][t1] < data['close'][t1]:
check = False
if check:
buy = data["close"][i]
weight = 1
type = 4
return buy, weight, type
def getSellPriceAndWeight_Envelope_trend(self, data, i):
sell, weight, type = -1, -1, -1
if data.index[i].strftime("%Y.%m.%d") == "2022.12.01":
print (1)
# upper lined에서 처리
if data['close'][i-1] < data['envelope_upper'][i - 1] and data['envelope_upper'][i] < data['close'][i]:
if data['slow_d'][i-1] <= data['slow_k'][i - 1] and data['slow_k'][i] <= data['slow_d'][i]:
sell = data["close"][i]
weight = 1
type = 1
if data['envelope_upper'][i-1] < data['close'][i - 1] and data['envelope_upper'][i] < data['close'][i]:
if data['slow_d'][i-1] <= data['slow_k'][i - 1] and data['slow_k'][i] <= data['slow_d'][i]:
sell = data["close"][i]
weight = 1
type = 2
if data['envelope_upper'][i-1] < data['close'][i - 1] and data['envelope_upper'][i] < data['close'][i]:
if data['slow_d'][i-1] +2 <= data['slow_k'][i - 1] and data['slow_d'][i]+1 == data['slow_k'][i]:
sell = data["close"][i]
weight = 1
type = 3
if data['envelope_upper'][i]<data['high'][i] and data['open'][i] < data['close'][i]:
if data['close'][i] - data['open'][i] < data['high'][i] - data['close'][i]:
sell = data["close"][i]
weight = 1
type = 4
return sell, weight, type
def getBuyPriceAndWeight_Envelope(self, data, i):
buy, weight, type = -1, -1, -1
if data['close'][i-1] < data['envelope_lower'][i-1] and data['envelope_lower'][i] < data['close'][i]:
buy = data["close"][i]
weight = 1
type = 1
if data['close'][i] < data['envelope_lower'][i]:
if data['rsis'][i] < data['rsi'][i]:
buy = data["close"][i]
weight = 1
type = 2
return buy, weight, type
def getSellPriceAndWeight_Envelope(self, data, i):
sell, weight, type = -1, -1, -1
if data.index[i].strftime("%Y.%m.%d") == "2022.12.01":
print (1)
# upper lined에서 처리
if data['close'][i-1] < data['envelope_upper'][i - 1] and data['envelope_upper'][i] < data['close'][i]:
if data['slow_d'][i-1] <= data['slow_k'][i - 1] and data['slow_k'][i] <= data['slow_d'][i]:
sell = data["close"][i]
weight = 1
type = 1
if data['envelope_upper'][i-1] < data['close'][i - 1] and data['envelope_upper'][i] < data['close'][i]:
if data['slow_d'][i-1] <= data['slow_k'][i - 1] and data['slow_k'][i] <= data['slow_d'][i]:
sell = data["close"][i]
weight = 1
type = 2
if data['envelope_upper'][i-1] < data['close'][i - 1] and data['envelope_upper'][i] < data['close'][i]:
if data['slow_d'][i-1] +2 <= data['slow_k'][i - 1] and data['slow_d'][i]+1 == data['slow_k'][i]:
sell = data["close"][i]
weight = 1
type = 3
# middle lined에서 처리
middle_up = False
if data['envelope_middle'][i-1] < data['close'][i-1] or data['envelope_middle'][i] < data['open'][i]:
if data['envelope_middle'][i-2] < data['close'][i-2] or data['envelope_middle'][i-1] < data['close'][i-1] or data['envelope_middle'][i] < data['close'][i]:
for t in range(i-1, i-20, -1):
if data['envelope_upper'][t] <= data['close'][t]:
middle_up = False
break
if data['close'][t] < data['envelope_middle'][t]:
middle_up = True
break
if middle_up:
if data['slow_d'][i-1] < data['slow_k'][i-1] and data['slow_k'][i] < data['slow_d'][i]:
sell = data["close"][i]
weight = 1
type = 4
return sell, weight, type
def checkEnvelopeTiming(self, data, stock_code, isRealTime=True):
# 어제 오늘 데이터로 분석
bsLine = {}
size = len(data["close"])
if isRealTime:
# isRealTime=True, 실시간 적용
last_index = size - 1
if stock_code == "252670":
buy, buy_weight, buy_type = self.getBuyPriceAndWeight_Envelope(data, last_index)
sell, sell_weight, sell_type = self.getSellPriceAndWeight_Envelope(data, last_index)
else:
buy, buy_weight, buy_type = self.getBuyPriceAndWeight_Envelope(data, last_index)
sell, sell_weight, sell_type = self.getSellPriceAndWeight_Envelope(data, last_index)
bsLine['buy'] = [buy]
bsLine['buy_weight'] = [buy_weight]
bsLine['sell'] = [sell]
bsLine['sell_weight'] = [sell_weight]
else:
# Type=False, 시뮬레이션 적용
bsLine['buy'] = [-1 for i in range(size)]
bsLine['buy_weight'] = [-1 for i in range(size)]
bsLine['sell'] = [-1 for i in range(size)]
bsLine['sell_weight'] = [-1 for i in range(size)]
for i in range(size):
if stock_code == "252670":
buy, buy_weight, buy_type = self.getBuyPriceAndWeight_Envelope_trend(data, i)
sell, sell_weight, sell_type = self.getSellPriceAndWeight_Envelope_trend(data, i)
else:
buy, buy_weight, buy_type = self.getBuyPriceAndWeight_Envelope(data, i)
sell, sell_weight, sell_type = self.getSellPriceAndWeight_Envelope(data, i)
bsLine['buy'][i] = buy
bsLine['buy_weight'][i] = buy_weight
bsLine['sell'][i] = sell
bsLine['sell_weight'][i] = sell_weight
if i > 0:
if bsLine['sell'][i-1] > -1:
bsLine['sell'][i] = -1
bsLine['sell_weight'][i] = -1
return bsLine, data