zhitou_trade/trade_port_save.py
2025-05-26 09:19:39 +08:00

200 lines
8.2 KiB
Python

import trade_logic
import datetime
from tools import *
scripts_path = os.path.dirname(os.path.realpath(__file__))
root_path = scripts_path[:scripts_path.find(project_name)+len(project_name)]
class auto_trade:
def __init__(self, users, op,order_id):
self.op = op
self.users = users
self.order_id = order_id
self.log = Logger(f'{root_path}/logs','trade_port')
def trade_main(self,user):
user_main = trade_logic.Trade(user, self.op,self.order_id)
user_main.trade_by_op()
def trades(self):
for user in self.users:
try:
self.trade_main(user)
except Exception as e:
self.log.error(sys.exc_info())
ip_address = get_host_ip()
send_email('auto trade error',(ip_address+' '+user))
if "UnboundLocalError: local variable 'user' referenced before assignment" in str(sys.exc_info):
pass
else:
self.log.error('交易錯誤')
continue
print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f'))
def get_userlist(order_id):
today = str(datetime.date.today())
Intranat_ip = get_host_ip()
userlist = download_data_from_db(f'select Distinct Account_name from trade_instruction where ID_Order = "{order_id}" and Intranet_IP ="{Intranat_ip}"','user_center')['Account_name'].tolist()
return userlist
def trade_instruction_monitor(last_order: int = 0):
'''
交易监控
Returns
-------
None.
'''
if last_order == 0:
last_order_id = str(
int(download_data_from_db(f'select max(ID_Order) from trade_instruction', 'user_center').values.tolist()[0][0]))
elif last_order == 1:
last_order_id = '-1'
while True:
order_id = str(
int(download_data_from_db(f'select max(ID_Order) from trade_instruction','user_center').values.tolist()[0][0]))
if order_id == last_order_id:
time.sleep(10)
pass
elif int(order_id) - int(last_order_id) > 1:
order_id = str(int(last_order_id)+1)
ip = get_host_ip()
message = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ' '+ str(ip) +' ' + order_id + ' begin trade'
# send_email('自动交易提醒', message)
time.sleep(10)
op = str(download_data_from_db(f'select Trade_Type from trade_instruction where ID_Order="{order_id}"', 'user_center').values.tolist()[0][0])
userlist = get_userlist(order_id)
trade_main = auto_trade(userlist,op,order_id)
trade_main.trades()
last_order_id = order_id
elif int(order_id) - int(last_order_id) == 1:
ip = get_host_ip()
message = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ' ' + str(
ip) + ' ' + order_id + ' begin trade'
# send_email('自动交易提醒', message)
time.sleep(10)
op = str(download_data_from_db(f'select Trade_Type from trade_instruction where ID_Order="{order_id}"',
'user_center').values.tolist()[0][0])
userlist = get_userlist(order_id)
trade_main = auto_trade(userlist, op,order_id)
trade_main.trades()
last_order_id = order_id
else:
pass
def all_check():
instruction = pd.read_sql(
fr'select Account_Number Account_name,Ticker,Buy_Or_Sell Operate,Shares Number_transactions from trade_retail.trade_instruction_stock_retail where Trade_Date like "{today}%%"',
engine_tencent)
instruction['Number_transactions'] = instruction['Number_transactions'].apply(abs)
# instruction = instruction[~instruction['Account_name'].isin(userlist)]
# data1 = instruction.drop_duplicates()
# instruction['trade_money'] = instruction['Price'] * instruction['Number_transactions']
instruction_new = instruction.groupby(['Ticker', 'Operate', 'Account_name']).sum()
# instruction_new['Average_price'] = instruction_new['trade_money'] / instruction_new['Number_transactions']
instruction_new.reset_index(inplace=True)
trade_user_list = get_save_list()
instruction_new = instruction_new[instruction_new['Account_name'].isin(trade_user_list)]
data = pd.read_sql(
fr'select * from auto_update_web_strategy.daily_transaction_record_check where As_Of_Date = "{today}"',
engine)
# data['trade_money'] = data['Average_price'] * data['Number_transactions']
new_data1 = data.groupby(['Ticker', 'Operate', 'Account_name']).sum()
# new_data1['Average_price'] = new_data1['trade_money'] / new_data1['Number_transactions']
new_data1.reset_index(inplace=True)
new_data1['As_Of_Date'] = datetime.date.today()
# del new_data1['trade_money']
new_data1['Operate'] = new_data1['Operate'].apply(lambda x: 1 if x == '' else -1)
c = pd.merge(instruction_new, new_data1, how='left', on=['Account_name', 'Ticker', 'Operate'])
# c['operate_different'] = c['Operate_x'] - c['Operate_y']
c['number_different'] = c['Number_transactions_x'] - c['Number_transactions_y']
# del c['Average_price']
new = c.rename(columns={
'Number_transactions_x': 'Number_transactions',
'Number_transactions_y': 'Trade_Number_transactions'})
all_dataframe = new[
['As_Of_Date', 'Account_name', 'Ticker', 'Operate', 'Number_transactions',
'Trade_Number_transactions', 'number_different']]
# all_dataframe = pd.concat(all_dataframe_chack)
print('8888888', all_dataframe)
error = all_dataframe.loc[(all_dataframe['number_different'] != 0)]
print('error',error)
ip = trade_logic.get_host_ip()
if len(error) == 0:
send_email(subject='智投交易check',message=ip + ' 没有错误')
else:
file = 'C:\\Users\\Administrator\\Desktop\\check.html'
error.to_html(file)
f = open(file, 'rb')
mail_body = f.read()
f.close()
send_email(subject='智投交易check',message=ip, file_path=file)
def get_save_list():
trading_users = pd.read_sql(
fr'select * from user_center.trading_users where update_time = (select max(update_time) from user_center.trading_users) and Broker ="华泰证券" or Broker = "长城证券" or Broker = "国泰君安"',
engine)
# print(trading_users)
user_list = trading_users['Account_Name'].tolist()
trade_list = pd.read_sql(fr'select * from user_center.trade_instruction where As_Of_Date like "{today}%%"', engine)
trade_list_new = trade_list[~trade_list['Account_Name'].isin(user_list)]
trade_user_list = list(set(trade_list_new['Account_Name']))
return trade_user_list
if __name__ == '__main__':
today = datetime.date.today()
engine_tencent = create_engine(
'mysql+pymysql://ainvest_luming:lm18242094506@bj-cdb-3gfxha84.sql.tencentcdb.com:59970/')
engine = create_engine(
'mysql+pymysql://cn_ainvest_db:cn_ainvest_sd3a1@rm-2zewagytttzk6f24xno.mysql.rds.aliyuncs.com:3306/')
# userlist = get_save_list()
#东吴证券用户
# userlist = ['18207551053','13241235368']
# userlist = [ '13333447911','17836359888']
# userlist = [ '17836359888']
# userlist = [ '15259202109','15355324922']1863619181
# userlist = [ '18810394120','15299080760']
# userlist = ['13880392643','13157750940']
#
# userlist = ['13708491492','138187729
userlist = [ '13017155718', '13066780066', '13157750940', '13161021130', '13397720155', '13401005719', '13401019175', '13466839727', '13719786764', '13729600058', '13799978997', '13812913261', '13880392643', '13906885715', '13976670583', '15128806638', '15632751289', '15652609813', '17801018786', '18817026786', '18913869900']
print(userlist)
for user in userlist:
SCRIPT_PATH = os.path.dirname(os.path.realpath(__file__))
os.chdir(SCRIPT_PATH)
# user_main = auto_trade(user, 'save_trades_check',0)
user_main = auto_trade(user, 'save_all', 0)
# user_main = auto_trade(user, 'save_balance_position', 0)
# user_main = auto_trade(user, 'reset_mac_ip', 0)
# user_main = auto_trade(user, 'save_deliver_order', 0)
user_main.trade_main(user)
# all_check()