init
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
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
|
||||
@@ -195,57 +196,52 @@ class BuySellChecker:
|
||||
if i > START_TIME_INDEX:
|
||||
# 매수 분석
|
||||
|
||||
if i > 740:
|
||||
# "15:00" 까지만 매수
|
||||
if i > 710:
|
||||
# "14:30" 까지만 매수
|
||||
return buy, weight
|
||||
|
||||
if i > 380 + 30 and data["macd"][i] < -25:
|
||||
if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]):
|
||||
if data["avg3"][i] > min(data["avg6"][i], data["avg9"][i], data["avg12"][i]):
|
||||
buy = data["high"][i]
|
||||
if i < 381 + 30:
|
||||
if i < 381 + 40:
|
||||
weight = 1
|
||||
else:
|
||||
weight = 5
|
||||
return buy, weight
|
||||
|
||||
if i > 380 + 30 and data["macd"][i] < -5 and data["rsi"][i] < 30:
|
||||
if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]):
|
||||
if data["avg3"][i] > min(data["avg6"][i], data["avg9"][i], data["avg12"][i]):
|
||||
buy = int((data["open"][i] + data["close"][i]) / 2)
|
||||
weight = 2
|
||||
return buy, weight
|
||||
|
||||
if i > 380 + 30 and 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]):
|
||||
if data["avg3"][i] > min(data["avg6"][i], data["avg9"][i], data["avg12"][i]):
|
||||
buy = int((data["open"][i] + data["close"][i]) / 2)
|
||||
weight = 2
|
||||
return buy, weight
|
||||
|
||||
# 3분선이 5분선이 돌파가 이전보다 높은 경우 매수
|
||||
if data["slow_k"][i] < 20 and data["avg3"][i - 1] < data["avg5"][i - 1] and data["avg3"][i] > data["avg5"][i]:
|
||||
buy = int((data["open"][i] + data["close"][i]) / 2)
|
||||
weight = 1
|
||||
return buy, weight
|
||||
|
||||
|
||||
# 3분선이 5분선이 돌파가 이전보다 높은 경우 매수
|
||||
if data["slow_k"][i] < 70 and data["avg3"][i - 1] < data["avg5"][i - 1] and data["avg3"][i] > data["avg5"][i]:
|
||||
if data["slow_k"][i] < 70 and data["avg3"][i - 1] < data["avg6"][i - 1] and data["avg3"][i] > data["avg6"][i]:
|
||||
max_avg3 = 0
|
||||
p_avg3 = 999999
|
||||
for c in range(1, 50):
|
||||
if max_avg3 < data["avg5"][i - c]:
|
||||
max_avg3 = data["avg5"][i - c]
|
||||
if data["avg3"][i-c-1] < data["avg5"][i-c-1] and data["avg3"][i-c] > data["avg5"][i-c]:
|
||||
if max_avg3 < data["avg6"][i - c]:
|
||||
max_avg3 = data["avg6"][i - c]
|
||||
if data["avg3"][i-c-2] < data["avg6"][i-c-2] and data["avg3"][i-c-1] <= data["avg6"][i-c-1] and data["avg3"][i-c] > data["avg6"][i-c]:
|
||||
p_avg3 = data["avg3"][i-c]
|
||||
break
|
||||
if data["avg3"][i] > p_avg3 and max_avg3 < data["avg3"][i]:
|
||||
if max(data["avg3"][i-3], data["avg3"][i-2], data["avg3"][i-1]) - min(data["avg3"][i-3], data["avg3"][i-2], data["avg3"][i-1]) > 1:
|
||||
if i == 382 or i == 383:
|
||||
if data["close"][i] != data["high"][i]:
|
||||
return -1, -1
|
||||
#buy = int((data["open"][i] + data["close"][i]) / 2)
|
||||
buy = data["low"][i]
|
||||
weight = 1
|
||||
return buy, weight
|
||||
#if data["avg6"][i-10] > data["avg6"][i]:
|
||||
if i == 382 or i == 383:
|
||||
if data["close"][i] != data["high"][i]:
|
||||
return -1, -1
|
||||
buy = data["low"][i]
|
||||
weight = 1
|
||||
return buy, weight
|
||||
|
||||
"""
|
||||
# 3분선이 10분 이상 7분선 아래에 있다가 7분선 위로 올라옴
|
||||
@@ -451,25 +447,25 @@ class BuySellChecker:
|
||||
# 매도 분석
|
||||
|
||||
# 10분선 위에서 3분선이 5분선을 하향 돌파 하는 경우 매도
|
||||
if data["slow_k"][i - 1] > 60 and data["avg3"][i - 1] >= data["avg5"][i - 1] and data["avg3"][i] < data["avg5"][i]:
|
||||
if max(data["avg3"][i], data["avg5"][i]) < data["avg10"][i]:
|
||||
sell = int((data["high"][i] + data["low"][i]) / 2)
|
||||
if data["slow_k"][i - 1] > 70 and data["avg3"][i - 1] >= data["avg6"][i - 1] and data["avg3"][i] < data["avg6"][i]:
|
||||
if max(data["avg3"][i], data["avg6"][i]) < data["avg9"][i]:
|
||||
sell = int((data["open"][i] + data["close"][i]) / 2)
|
||||
weight = 1
|
||||
return sell, weight
|
||||
"""
|
||||
|
||||
# 3분선이 5분 이상 5분선 위에 있다가 5분선 아래로 내려옴
|
||||
if i >= 381 + 5:
|
||||
vaild = True
|
||||
for c in range(1, 6):
|
||||
if data["avg3"][i - c] < data["avg5"][i - c]:
|
||||
for c in range(1, 11):
|
||||
if data["avg3"][i - c] < data["avg6"][i - c]:
|
||||
vaild = False
|
||||
break
|
||||
if vaild:
|
||||
if data["avg3"][i] < data["avg5"][i]:
|
||||
if data["avg3"][i] < data["avg6"][i]:
|
||||
sell = int(data["avg3"][i] - data["avg3"][i]%5)
|
||||
weight = 1
|
||||
return sell, weight
|
||||
"""
|
||||
|
||||
"""
|
||||
# 3분 선이 40분 전부터 게속 20분선 위에 있다가 아래로 내려오면 매도함
|
||||
if data["avg3"][i] < data["avg20"][i]:
|
||||
@@ -553,44 +549,51 @@ class BuySellChecker:
|
||||
if i >= START_TIME_INDEX:
|
||||
# 매수 분석
|
||||
|
||||
if i > 740:
|
||||
# "15:00" 까지만 매수
|
||||
if i > 710:
|
||||
# "14:30" 까지만 매수
|
||||
return buy, weight
|
||||
|
||||
if i > 380 + 30 and data["macd"][i] < -25:
|
||||
if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]):
|
||||
if data["avg3"][i] > min(data["avg6"][i], data["avg9"][i], data["avg12"][i]):
|
||||
buy = data["high"][i]
|
||||
if i < 381 + 30:
|
||||
if i < 381 + 40:
|
||||
weight = 1
|
||||
else:
|
||||
weight = 5
|
||||
return buy, weight
|
||||
|
||||
if i > 380 + 30 and data["macd"][i] < -5 and data["rsi"][i] < 30:
|
||||
if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]):
|
||||
if data["avg3"][i] > min(data["avg6"][i], data["avg9"][i], data["avg12"][i]):
|
||||
buy = int((data["open"][i] + data["close"][i]) / 2)
|
||||
weight = 2
|
||||
return buy, weight
|
||||
|
||||
if i > 380 + 30 and 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]):
|
||||
if data["avg3"][i] > min(data["avg6"][i], data["avg9"][i], data["avg12"][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]:
|
||||
if (data["avg3"][i - 1] < data["avg9"][i - 1] and data["avg3"][i] > data["avg9"][i] or
|
||||
data["avg3"][i - 2] < data["avg9"][i - 2] and data["avg3"][i - 1] > data["avg9"][i - 1] and data["avg3"][i] > data["avg9"][i]):
|
||||
max_avg3 = 0
|
||||
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]
|
||||
for c in range(2, 50):
|
||||
if max_avg3 < data["avg9"][i - c]:
|
||||
max_avg3 = data["avg9"][i - c]
|
||||
if data["avg3"][i - c - 2] < data["avg9"][i - c - 2] and data["avg3"][i - c - 1] <= data["avg9"][i - c - 1] and data["avg3"][i - c] > data["avg9"][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
|
||||
if data["avg3"][i] > p_avg3+3 and max_avg3 < data["avg3"][i]:
|
||||
# if data["avg6"][i-10] > data["avg6"][i]:
|
||||
if i == 382 or i == 383:
|
||||
if data["close"][i] != data["high"][i]:
|
||||
return -1, -1
|
||||
buy = data["low"][i]
|
||||
weight = 1
|
||||
return buy, weight
|
||||
"""
|
||||
# 3분선이 10분 이상 7분선 아래에 있다가 7분선 위로 올라옴
|
||||
if i >= 381 + 10:
|
||||
@@ -796,26 +799,25 @@ class BuySellChecker:
|
||||
# 매도 분석
|
||||
|
||||
# 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]) > data["avg10"][i]:
|
||||
if data["slow_k"][i] > 80:
|
||||
sell = int((data["high"][i] + data["low"][i]) / 2)
|
||||
weight = 1
|
||||
return sell, weight
|
||||
"""
|
||||
# 3분선이 5분 이상 5분선 위에 있다가 5분선 아래로 내려옴
|
||||
if data["slow_k"][i - 1] > 70 and data["avg3"][i - 1] >= data["avg6"][i - 1] and data["avg3"][i] < data["avg6"][i]:
|
||||
if max(data["avg3"][i], data["avg6"][i]) < data["avg9"][i]:
|
||||
sell = int((data["open"][i] + data["close"][i]) / 2)
|
||||
weight = 1
|
||||
return sell, weight
|
||||
|
||||
# 3분선이 10분 이상 6분선 위에 있다가 5분선 아래로 내려옴
|
||||
if i >= 381 + 5:
|
||||
vaild = True
|
||||
for c in range(1, 6):
|
||||
if data["avg3"][i - c] < data["avg5"][i - c]:
|
||||
for c in range(1, 11):
|
||||
if data["avg3"][i - c] < data["avg6"][i - c]:
|
||||
vaild = False
|
||||
break
|
||||
if vaild:
|
||||
if data["avg3"][i] < data["avg5"][i]:
|
||||
if data["avg3"][i] < data["avg6"][i]:
|
||||
sell = int(data["avg3"][i] - data["avg3"][i]%5)
|
||||
weight = 1
|
||||
return sell, weight
|
||||
"""
|
||||
|
||||
"""
|
||||
# 3분 선이 40분 전부터 게속 20분선 위에 있다가 아래로 내려오면 매도함
|
||||
if data["avg3"][i] < data["avg20"][i]:
|
||||
@@ -892,14 +894,14 @@ class BuySellChecker:
|
||||
close_df = pd.DataFrame(close)
|
||||
avg3_list = close_df.rolling(window=3).mean().fillna(close[0]).values.tolist()
|
||||
avg3 = [item[0] for item in avg3_list]
|
||||
avg5_list = close_df.rolling(window=5).mean().fillna(close[0]).values.tolist()
|
||||
avg5 = [item[0] for item in avg5_list]
|
||||
avg7_list = close_df.rolling(window=7).mean().fillna(close[0]).values.tolist()
|
||||
avg7 = [item[0] for item in avg7_list]
|
||||
avg10_list = close_df.rolling(window=10).mean().fillna(close[0]).values.tolist()
|
||||
avg10 = [item[0] for item in avg10_list]
|
||||
avg20_list = close_df.rolling(window=20).mean().fillna(close[0]).values.tolist()
|
||||
avg20 = [item[0] for item in avg20_list]
|
||||
avg6_list = close_df.rolling(window=6).mean().fillna(close[0]).values.tolist()
|
||||
avg6 = [item[0] for item in avg6_list]
|
||||
avg9_list = close_df.rolling(window=9).mean().fillna(close[0]).values.tolist()
|
||||
avg9 = [item[0] for item in avg9_list]
|
||||
avg12_list = close_df.rolling(window=12).mean().fillna(close[0]).values.tolist()
|
||||
avg12 = [item[0] for item in avg12_list]
|
||||
avg24_list = close_df.rolling(window=24).mean().fillna(close[0]).values.tolist()
|
||||
avg24 = [item[0] for item in avg24_list]
|
||||
avg30_list = close_df.rolling(window=30).mean().fillna(close[0]).values.tolist()
|
||||
avg30 = [item[0] for item in avg30_list]
|
||||
avg60_list = close_df.rolling(window=60).mean().fillna(close[0]).values.tolist()
|
||||
@@ -925,7 +927,7 @@ class BuySellChecker:
|
||||
STOCK = []
|
||||
for i in range(len(open)):
|
||||
STOCK.append({'volume': vol[i], 'close': close[i], 'open': open[i], 'high': high[i], 'low': low[i],
|
||||
'avg3': avg3[i], 'avg5': avg5[i], 'avg7': avg7[i],'avg10': avg10[i],'avg20': avg20[i],'avg30': avg30[i],'avg60': avg60[i]})
|
||||
'avg3': avg3[i], 'avg6': avg6[i], 'avg9': avg9[i], 'avg12': avg12[i],'avg24': avg24[i],'avg30': avg30[i],'avg60': avg60[i]})
|
||||
|
||||
# stochastic 계산
|
||||
stochastic_df = self.stochastic.apply(STOCK, n=30, m=5, t=5)
|
||||
@@ -957,7 +959,7 @@ class BuySellChecker:
|
||||
|
||||
temp = {"date": point_temp,
|
||||
"open": open, "high": high, "low": low, "close": close, "volume": vol, "upper": upper, "lower": lower,
|
||||
"avg3": avg3, "avg7": avg7, "avg5": avg5, "avg10": avg10, "avg20": avg20, "avg30": avg30, "avg60": avg60,
|
||||
"avg3": avg3, "avg6": avg6, "avg9": avg9, "avg12": avg12, "avg24": avg24, "avg30": avg30, "avg60": avg60,
|
||||
"macd": macd, "macds": macds, "macdo": macdo,
|
||||
"fast_k": fast_k, "slow_k": slow_k, "slow_d": slow_d,
|
||||
"rsi": rsi, "rsis": rsis}
|
||||
@@ -1309,8 +1311,8 @@ class BuySellChecker:
|
||||
sell, weight = self.getSellPriceAndWeight_3000(data, last_index)
|
||||
buy, weight = self.getBuyPriceAndWeight_3000(data, last_index)
|
||||
else:
|
||||
sell, weight = self.getBuyPriceAndWeight_3000(data, last_index)
|
||||
buy, weight = self.getBuyPriceAndWeight_3000(data, last_index)
|
||||
sell, weight = self.getSellPriceAndWeight_15000(data, last_index)
|
||||
buy, weight = self.getBuyPriceAndWeight_15000(data, last_index)
|
||||
|
||||
bsLine['buy'] = [buy]
|
||||
bsLine['buy_weight'] = [weight]
|
||||
|
||||
Reference in New Issue
Block a user