|
@@ -11,7 +11,6 @@ from jqdatasdk import *
|
|
import pymysql
|
|
import pymysql
|
|
import multiprocessing as mp
|
|
import multiprocessing as mp
|
|
import math
|
|
import math
|
|
-import psutil
|
|
|
|
|
|
|
|
auth('18616891214', 'Ea?*7f68nD.dafcW34d!')
|
|
auth('18616891214', 'Ea?*7f68nD.dafcW34d!')
|
|
db_pool = pymysql.connect(host='localhost',
|
|
db_pool = pymysql.connect(host='localhost',
|
|
@@ -20,7 +19,7 @@ db_pool = pymysql.connect(host='localhost',
|
|
password='r6kEwqWU9!v3',
|
|
password='r6kEwqWU9!v3',
|
|
database='hlfx_pool')
|
|
database='hlfx_pool')
|
|
cursor_pool = db_pool.cursor()
|
|
cursor_pool = db_pool.cursor()
|
|
-engine_stock = create_engine('mysql+pymysql://root:r6kEwqWU9!v3@localhost:3307/qmt_stocks_front?charset=utf8')
|
|
|
|
|
|
+engine_stock = create_engine('mysql+pymysql://root:r6kEwqWU9!v3@localhost:3307/qmt_stocks_whole?charset=utf8')
|
|
|
|
|
|
|
|
|
|
def real_price(datas):
|
|
def real_price(datas):
|
|
@@ -37,11 +36,11 @@ def ma(stock, num, data):
|
|
try:
|
|
try:
|
|
i = (num - 1) * -1
|
|
i = (num - 1) * -1
|
|
df = pd.read_sql_query(
|
|
df = pd.read_sql_query(
|
|
- 'select close from `%s_1d`' % stock, engine_stock)
|
|
|
|
|
|
+ 'select close_front from `%s_1d`' % stock, engine_stock)
|
|
except:
|
|
except:
|
|
return 9999999
|
|
return 9999999
|
|
else:
|
|
else:
|
|
- ma_num = (sum(df['close'][i:]) + data[stock]['lastPrice'])/num
|
|
|
|
|
|
+ ma_num = (sum(df['close_front'][i:]) + data[stock]['lastPrice'])/num
|
|
return ma_num
|
|
return ma_num
|
|
|
|
|
|
|
|
|
|
@@ -50,11 +49,11 @@ def ma_1(stock, num):
|
|
i = (num) * -1
|
|
i = (num) * -1
|
|
try:
|
|
try:
|
|
df = pd.read_sql_query(
|
|
df = pd.read_sql_query(
|
|
- 'select close from `%s_1d`' % stock, engine_stock)
|
|
|
|
|
|
+ 'select close_front from `%s_1d`' % stock, engine_stock)
|
|
except BaseException:
|
|
except BaseException:
|
|
return 9999999
|
|
return 9999999
|
|
else:
|
|
else:
|
|
- ma_num_1 = df['close'][i:].mean()
|
|
|
|
|
|
+ ma_num_1 = df['close_front'][i:].mean()
|
|
return ma_num_1
|
|
return ma_num_1
|
|
|
|
|
|
|
|
|
|
@@ -63,28 +62,25 @@ def his_vol(stock, num):
|
|
num = num * -1
|
|
num = num * -1
|
|
try:
|
|
try:
|
|
df = pd.read_sql_query(
|
|
df = pd.read_sql_query(
|
|
- 'select volume from `%s_1d`' % stock, engine_stock)
|
|
|
|
|
|
+ 'select volume_front from `%s_1d`' % stock, engine_stock)
|
|
except BaseException:
|
|
except BaseException:
|
|
return 9999999
|
|
return 9999999
|
|
else:
|
|
else:
|
|
- return df['volume'].iloc[num]
|
|
|
|
|
|
+ return df['volume_front'].iloc[num]
|
|
|
|
|
|
|
|
|
|
def ma_judge(data, stock_list, results):
|
|
def ma_judge(data, stock_list, results):
|
|
- print('这个ma_judge的PID为:', os.getpid(), len(stock_list))
|
|
|
|
- for stock in stock_list:
|
|
|
|
- if stock in data:
|
|
|
|
- i = stock.replace('XSHG', 'SH').replace('XSHE', 'SZ')
|
|
|
|
- current_price, open_price = data[i]['lastPrice'], data[i]['open']
|
|
|
|
- MA5, MA10, MA20 = ma(i, 5, data), ma(i, 10, data), ma(i, 20, data)
|
|
|
|
- MA5_1 = ma_1(i, 5)
|
|
|
|
- # print(i, current_price, open_price, MA5, MA10, MA20, MA5_1)
|
|
|
|
- if (current_price > open_price) & (current_price > MA5) & (MA5 > MA5_1) & (current_price < MA5 * 1.03) & (
|
|
|
|
- MA20 < MA10):
|
|
|
|
- if his_vol(i, -1) > his_vol(i, -2):
|
|
|
|
- results.append(i.replace('SH', 'XSHG').replace('SZ', 'XSHE'))
|
|
|
|
- else:
|
|
|
|
- continue
|
|
|
|
|
|
+ print('这个ma_judge的PID为:', os.getpid())
|
|
|
|
+ for stock in data:
|
|
|
|
+ i = stock.replace('XSHG', 'SH').replace('XSHE', 'SZ')
|
|
|
|
+ current_price, open_price = data[i]['lastPrice'], data[i]['open_front']
|
|
|
|
+ MA5, MA10, MA20 = ma(i, 5, data), ma(i, 10, data), ma(i, 20, data)
|
|
|
|
+ MA5_1 = ma_1(i, 5)
|
|
|
|
+ # print(i, current_price, open_price, MA5, MA10, MA20, MA5_1)
|
|
|
|
+ if (current_price > open_price) & (current_price > MA5) & (MA5 > MA5_1) & (current_price < MA5 * 1.03) & (
|
|
|
|
+ MA20 < MA10):
|
|
|
|
+ if his_vol(i, -1) > his_vol(i, -2):
|
|
|
|
+ results.append(i.replace('SH', 'XSHG').replace('SZ', 'XSHE'))
|
|
print('RRRRRRR,', results)
|
|
print('RRRRRRR,', results)
|
|
|
|
|
|
|
|
|
|
@@ -110,7 +106,7 @@ def sell_trader(data, positions_dict):
|
|
print(order_id, stock, volume)
|
|
print(order_id, stock, volume)
|
|
|
|
|
|
|
|
|
|
-def buy_trader(data):
|
|
|
|
|
|
+def buy_trader(data, positions):
|
|
print('买入函数:', dt.now())
|
|
print('买入函数:', dt.now())
|
|
results = mp.Manager().list()
|
|
results = mp.Manager().list()
|
|
mp_list = []
|
|
mp_list = []
|
|
@@ -138,17 +134,16 @@ def buy_trader(data):
|
|
print('append')
|
|
print('append')
|
|
'''
|
|
'''
|
|
|
|
|
|
- step = math.ceil((len(stock_pool) / mp.cpu_count())*2)
|
|
|
|
|
|
+ step = math.ceil(len(stock_pool) / mp.cpu_count())
|
|
print('step:', step)
|
|
print('step:', step)
|
|
print('cpu_count =', mp.cpu_count())
|
|
print('cpu_count =', mp.cpu_count())
|
|
- for i in range(0, len(stock_pool), step):
|
|
|
|
|
|
+ for i in range(0, len(stock_pool), math.ceil(len(stock_pool) / mp.cpu_count())):
|
|
p = mp.Process(target=ma_judge, args=(data, stock_pool[i:i + step], results))
|
|
p = mp.Process(target=ma_judge, args=(data, stock_pool[i:i + step], results))
|
|
mp_list.append(p)
|
|
mp_list.append(p)
|
|
p.start()
|
|
p.start()
|
|
for j in mp_list:
|
|
for j in mp_list:
|
|
j.join()
|
|
j.join()
|
|
results = list(set(results))
|
|
results = list(set(results))
|
|
- engine_hlfx_pool.dispose()
|
|
|
|
print('results!!!!', len(results))
|
|
print('results!!!!', len(results))
|
|
|
|
|
|
# 选择板块
|
|
# 选择板块
|
|
@@ -188,10 +183,12 @@ def buy_trader(data):
|
|
for stock in data:
|
|
for stock in data:
|
|
asset = xt_trader.query_stock_asset(acc)
|
|
asset = xt_trader.query_stock_asset(acc)
|
|
cash = asset.cash
|
|
cash = asset.cash
|
|
- if stock in new_keep_stock:
|
|
|
|
- current_price = data[stock]['lastPrice']
|
|
|
|
- if cash > 2000:
|
|
|
|
|
|
+ print(cash)
|
|
|
|
+ if cash > 2000 and len(positions) < 12:
|
|
|
|
+ if stock in new_keep_stock:
|
|
|
|
+ current_price = data[stock]['lastPrice']
|
|
volume = int((cash / 3 / current_price) // 100 * 100)
|
|
volume = int((cash / 3 / current_price) // 100 * 100)
|
|
|
|
+ print('volume:', volume)
|
|
print('买入信号!!!!!!', stock, volume, current_price)
|
|
print('买入信号!!!!!!', stock, volume, current_price)
|
|
order_id = xt_trader.order_stock(acc, stock, xtconstant.STOCK_BUY, volume, xtconstant.LATEST_PRICE, current_price, 'strategy1', 'order_test')
|
|
order_id = xt_trader.order_stock(acc, stock, xtconstant.STOCK_BUY, volume, xtconstant.LATEST_PRICE, current_price, 'strategy1', 'order_test')
|
|
print(order_id)
|
|
print(order_id)
|
|
@@ -210,7 +207,7 @@ def trader(data):
|
|
sell_trader(data, positions_dict)
|
|
sell_trader(data, positions_dict)
|
|
|
|
|
|
# 买入条件
|
|
# 买入条件
|
|
- buy_trader(data)
|
|
|
|
|
|
+ buy_trader(data, positions)
|
|
|
|
|
|
|
|
|
|
class MyXtQuantTraderCallback(XtQuantTraderCallback):
|
|
class MyXtQuantTraderCallback(XtQuantTraderCallback):
|
|
@@ -280,8 +277,6 @@ class MyXtQuantTraderCallback(XtQuantTraderCallback):
|
|
|
|
|
|
if __name__ == '__main__':
|
|
if __name__ == '__main__':
|
|
auth('18616891214', 'Ea?*7f68nD.dafcW34d!')
|
|
auth('18616891214', 'Ea?*7f68nD.dafcW34d!')
|
|
- pus = psutil.Process()
|
|
|
|
- pus.cpu_affinity([4, 5, 6, 7])
|
|
|
|
|
|
|
|
mp.freeze_support()
|
|
mp.freeze_support()
|
|
print("start")
|
|
print("start")
|