Ver código fonte

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	QMT/real_time.py
daniel-ali 2 anos atrás
pai
commit
4fbcfa1927
1 arquivos alterados com 27 adições e 32 exclusões
  1. 27 32
      QMT/real_time.py

+ 27 - 32
QMT/real_time.py

@@ -11,7 +11,6 @@ from jqdatasdk import *
 import pymysql
 import multiprocessing as mp
 import math
-import psutil
 
 auth('18616891214', 'Ea?*7f68nD.dafcW34d!')
 db_pool = pymysql.connect(host='localhost',
@@ -20,7 +19,7 @@ db_pool = pymysql.connect(host='localhost',
                           password='r6kEwqWU9!v3',
                           database='hlfx_pool')
 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):
@@ -37,11 +36,11 @@ def ma(stock, num, data):
     try:
         i = (num - 1) * -1
         df = pd.read_sql_query(
-            'select close from `%s_1d`' % stock, engine_stock)
+            'select close_front from `%s_1d`' % stock, engine_stock)
     except:
         return 9999999
     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
 
 
@@ -50,11 +49,11 @@ def ma_1(stock, num):
     i = (num) * -1
     try:
         df = pd.read_sql_query(
-            'select close from `%s_1d`' % stock, engine_stock)
+            'select close_front from `%s_1d`' % stock, engine_stock)
     except BaseException:
         return 9999999
     else:
-        ma_num_1 = df['close'][i:].mean()
+        ma_num_1 = df['close_front'][i:].mean()
         return ma_num_1
 
 
@@ -63,28 +62,25 @@ def his_vol(stock, num):
     num = num * -1
     try:
         df = pd.read_sql_query(
-            'select volume from `%s_1d`' % stock, engine_stock)
+            'select volume_front from `%s_1d`' % stock, engine_stock)
     except BaseException:
         return 9999999
     else:
-        return df['volume'].iloc[num]
+        return df['volume_front'].iloc[num]
 
 
 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)
 
 
@@ -110,7 +106,7 @@ def sell_trader(data, positions_dict):
                 print(order_id, stock, volume)
 
 
-def buy_trader(data):
+def buy_trader(data, positions):
     print('买入函数:', dt.now())
     results = mp.Manager().list()
     mp_list = []
@@ -138,17 +134,16 @@ def buy_trader(data):
                     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('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))
         mp_list.append(p)
         p.start()
     for j in mp_list:
         j.join()
     results = list(set(results))
-    engine_hlfx_pool.dispose()
     print('results!!!!', len(results))
 
     # 选择板块
@@ -188,10 +183,12 @@ def buy_trader(data):
         for stock in data:
             asset = xt_trader.query_stock_asset(acc)
             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)
+                    print('volume:', volume)
                     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')
                     print(order_id)
@@ -210,7 +207,7 @@ def trader(data):
         sell_trader(data, positions_dict)
 
     # 买入条件
-    buy_trader(data)
+    buy_trader(data, positions)
 
 
 class MyXtQuantTraderCallback(XtQuantTraderCallback):
@@ -280,8 +277,6 @@ class MyXtQuantTraderCallback(XtQuantTraderCallback):
 
 if __name__ == '__main__':
     auth('18616891214', 'Ea?*7f68nD.dafcW34d!')
-    pus = psutil.Process()
-    pus.cpu_affinity([4, 5, 6, 7])
 
     mp.freeze_support()
     print("start")