|
@@ -114,8 +114,11 @@ def get_hlfx(data):
|
|
for x in range(2, len(df_day.index)):
|
|
for x in range(2, len(df_day.index)):
|
|
m = x - 1
|
|
m = x - 1
|
|
# 底
|
|
# 底
|
|
- if ((df_day.loc[x, 'high'] > df_day.loc[x - 1, 'high']) and (
|
|
|
|
- df_day.loc[x - 2, 'high'] > df_day.loc[x - 1, 'high'])):
|
|
|
|
|
|
+ # 符合底分型形态,且第2、3根k线是阳线
|
|
|
|
+ if ((df_day.loc[x, 'high'] > df_day.loc[x - 1, 'high']) and
|
|
|
|
+ (df_day.loc[x - 2, 'high'] > df_day.loc[x - 1, 'high'])) and \
|
|
|
|
+ df_day.loc[x, 'close'] > df_day.loc[x, 'open'] and \
|
|
|
|
+ df_day.loc[x - 1, 'close'] > df_day.loc[x - 1, 'open']:
|
|
|
|
|
|
df_day.loc[x, 'HL'] = 'L*'
|
|
df_day.loc[x, 'HL'] = 'L*'
|
|
while m:
|
|
while m:
|
|
@@ -137,8 +140,10 @@ def get_hlfx(data):
|
|
Trading_signals = 1
|
|
Trading_signals = 1
|
|
|
|
|
|
# 获得MACD,判断MACD判断背驰
|
|
# 获得MACD,判断MACD判断背驰
|
|
- x_macd_dif, x_macd_dea, x_macd_macd = data_temp.loc[x, 'dif'], data_temp.loc[x, 'dea'], data_temp.loc[x, 'macd']
|
|
|
|
- m_macd_dif, m_macd_dea, m_macd_macd = data_temp.loc[m, 'dif'], data_temp.loc[m, 'dea'], data_temp.loc[m, 'macd']
|
|
|
|
|
|
+ x_macd_dif, x_macd_dea, x_macd_macd = data_temp.loc[x, 'dif'], data_temp.loc[x, 'dea'], \
|
|
|
|
+ data_temp.loc[x, 'macd']
|
|
|
|
+ m_macd_dif, m_macd_dea, m_macd_macd = data_temp.loc[m, 'dif'], data_temp.loc[m, 'dea'], \
|
|
|
|
+ data_temp.loc[m, 'macd']
|
|
|
|
|
|
# MACD底背驰
|
|
# MACD底背驰
|
|
if m_macd_dif < x_macd_dif:
|
|
if m_macd_dif < x_macd_dif:
|
|
@@ -164,7 +169,7 @@ def get_hlfx(data):
|
|
if x == len(df_day.index) - 1:
|
|
if x == len(df_day.index) - 1:
|
|
Trading_signals = 2
|
|
Trading_signals = 2
|
|
|
|
|
|
- elif (df_day.loc[m, 'HL'] == 'H'):
|
|
|
|
|
|
+ elif df_day.loc[m, 'HL'] == 'H':
|
|
if df_day.loc[x - 1, 'high'] > df_day.loc[m - 1, 'high']:
|
|
if df_day.loc[x - 1, 'high'] > df_day.loc[m - 1, 'high']:
|
|
# 前一个为顶,且中间存在不包含 or 更高的顶
|
|
# 前一个为顶,且中间存在不包含 or 更高的顶
|
|
df_day.loc[x, 'HL'] = 'H'
|
|
df_day.loc[x, 'HL'] = 'H'
|
|
@@ -173,8 +178,10 @@ def get_hlfx(data):
|
|
Trading_signals = 2
|
|
Trading_signals = 2
|
|
|
|
|
|
# 获得MACD,判断MACD判断背驰
|
|
# 获得MACD,判断MACD判断背驰
|
|
- x_macd_dif, x_macd_dea, x_macd_macd = data_temp.loc[x, 'dif'], data_temp.loc[x, 'dea'], data_temp.loc[x, 'macd']
|
|
|
|
- m_macd_dif, m_macd_dea, m_macd_macd = data_temp.loc[m, 'dif'], data_temp.loc[m, 'dea'], data_temp.loc[m, 'macd']
|
|
|
|
|
|
+ x_macd_dif, x_macd_dea, x_macd_macd = data_temp.loc[x, 'dif'], data_temp.loc[x, 'dea'], \
|
|
|
|
+ data_temp.loc[x, 'macd']
|
|
|
|
+ m_macd_dif, m_macd_dea, m_macd_macd = data_temp.loc[m, 'dif'], data_temp.loc[m, 'dea'], \
|
|
|
|
+ data_temp.loc[m, 'macd']
|
|
|
|
|
|
# MACD顶背驰
|
|
# MACD顶背驰
|
|
if x_macd_dif < m_macd_dif:
|
|
if x_macd_dif < m_macd_dif:
|
|
@@ -192,7 +199,7 @@ def get_hlfx(data):
|
|
return df_temp, Trading_signals
|
|
return df_temp, Trading_signals
|
|
|
|
|
|
|
|
|
|
-def tech_anal(stocks, hlfx_pool,err_list):
|
|
|
|
|
|
+def tech_anal(stocks, hlfx_pool, hlfx_pool_daily, err_list):
|
|
print(f'{dt.now()}开始循环计算! MyPid is {os.getpid()},池子长度为{len(stocks)}')
|
|
print(f'{dt.now()}开始循环计算! MyPid is {os.getpid()},池子长度为{len(stocks)}')
|
|
|
|
|
|
engine_tech = create_engine('mysql+pymysql://root:r6kEwqWU9!v3@localhost:3307/qmt_stocks_tech?charset=utf8')
|
|
engine_tech = create_engine('mysql+pymysql://root:r6kEwqWU9!v3@localhost:3307/qmt_stocks_tech?charset=utf8')
|
|
@@ -239,7 +246,7 @@ def tech_anal(stocks, hlfx_pool,err_list):
|
|
hlfx_pool.remove(stock)
|
|
hlfx_pool.remove(stock)
|
|
elif stock not in hlfx_pool and T_signals == 1:
|
|
elif stock not in hlfx_pool and T_signals == 1:
|
|
hlfx_pool.append(stock)
|
|
hlfx_pool.append(stock)
|
|
-
|
|
|
|
|
|
+ hlfx_pool_daily.append(stock)
|
|
|
|
|
|
print(f'Pid:{os.getpid()}已经完工了,应处理{len(stocks)},共计算{m}支个股')
|
|
print(f'Pid:{os.getpid()}已经完工了,应处理{len(stocks)},共计算{m}支个股')
|
|
|
|
|
|
@@ -255,6 +262,7 @@ if __name__ == '__main__':
|
|
fre = '1d'
|
|
fre = '1d'
|
|
engine_hlfx_pool = create_engine('mysql+pymysql://root:r6kEwqWU9!v3@localhost:3307/hlfx_pool?charset=utf8')
|
|
engine_hlfx_pool = create_engine('mysql+pymysql://root:r6kEwqWU9!v3@localhost:3307/hlfx_pool?charset=utf8')
|
|
hlfx_pool = mp.Manager().list()
|
|
hlfx_pool = mp.Manager().list()
|
|
|
|
+ hlfx_pool_daily = mp.Manager().list()
|
|
hlfx_pool.extend(pd.read_sql_query(
|
|
hlfx_pool.extend(pd.read_sql_query(
|
|
'select value from `%s`' % fre, engine_hlfx_pool).iloc[-1, 0].split(","))
|
|
'select value from `%s`' % fre, engine_hlfx_pool).iloc[-1, 0].split(","))
|
|
|
|
|
|
@@ -265,15 +273,19 @@ if __name__ == '__main__':
|
|
# tech_anal(stocks, hlfx_pool)
|
|
# tech_anal(stocks, hlfx_pool)
|
|
for i in range(0, len(stocks), step):
|
|
for i in range(0, len(stocks), step):
|
|
print(x)
|
|
print(x)
|
|
- pool.apply_async(func=tech_anal, args=(stocks[i:i + step], hlfx_pool, err_list,), error_callback=err_call_back)
|
|
|
|
|
|
+ pool.apply_async(func=tech_anal, args=(stocks[i:i + step], hlfx_pool, hlfx_pool_daily, err_list,),
|
|
|
|
+ error_callback=err_call_back)
|
|
x += 1
|
|
x += 1
|
|
time.sleep(5)
|
|
time.sleep(5)
|
|
pool.close()
|
|
pool.close()
|
|
pool.join()
|
|
pool.join()
|
|
|
|
|
|
- print(len(hlfx_pool), hlfx_pool)
|
|
|
|
|
|
+ print(f'当日信号:{len(hlfx_pool_daily)},持续检测为:{len(hlfx_pool)}')
|
|
print(len(err_list), err_list)
|
|
print(len(err_list), err_list)
|
|
|
|
|
|
|
|
+ results_list = ','.join(set(hlfx_pool))
|
|
|
|
+ results_list_daily = ','.join(set(hlfx_pool_daily))
|
|
|
|
+
|
|
# 存档入库
|
|
# 存档入库
|
|
db_pool = pymysql.connect(host='localhost',
|
|
db_pool = pymysql.connect(host='localhost',
|
|
user='root',
|
|
user='root',
|
|
@@ -281,12 +293,21 @@ if __name__ == '__main__':
|
|
password='r6kEwqWU9!v3',
|
|
password='r6kEwqWU9!v3',
|
|
database='hlfx_pool')
|
|
database='hlfx_pool')
|
|
cursor_pool = db_pool.cursor()
|
|
cursor_pool = db_pool.cursor()
|
|
- results_list = ','.join(set(hlfx_pool))
|
|
|
|
-
|
|
|
|
sql = "INSERT INTO %s (date,value) VALUES('%s','%s')" % (fre, dt.now().strftime('%Y-%m-%d %H:%M:%S'), results_list)
|
|
sql = "INSERT INTO %s (date,value) VALUES('%s','%s')" % (fre, dt.now().strftime('%Y-%m-%d %H:%M:%S'), results_list)
|
|
cursor_pool.execute(sql)
|
|
cursor_pool.execute(sql)
|
|
db_pool.commit()
|
|
db_pool.commit()
|
|
- edtime = dt.now()
|
|
|
|
|
|
|
|
|
|
+ # 存档入库daily_1d
|
|
|
|
+ db_pool2 = pymysql.connect(host='localhost',
|
|
|
|
+ user='root',
|
|
|
|
+ port=3307,
|
|
|
|
+ password='r6kEwqWU9!v3',
|
|
|
|
+ database='hlfx_pool')
|
|
|
|
+ cursor_pool2 = db_pool.cursor()
|
|
|
|
+ sql2 = "INSERT INTO daily_%s (date,value) VALUES('%s','%s')" % (fre, dt.now().strftime('%Y-%m-%d %H:%M:%S'),
|
|
|
|
+ results_list_daily)
|
|
|
|
+ cursor_pool2.execute(sql2)
|
|
|
|
+ db_pool2.commit()
|
|
|
|
+ edtime = dt.now()
|
|
|
|
|
|
print(edtime - sttime)
|
|
print(edtime - sttime)
|