|
@@ -137,8 +137,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 +166,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 +175,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 +196,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 +243,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 +259,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 +270,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 +290,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)
|