init
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user