完善买卖功能

This commit is contained in:
gyz 2025-05-08 19:28:36 +08:00
parent 1994e91d72
commit aa7d0b5e00
2 changed files with 81 additions and 26 deletions

View File

@ -105,8 +105,18 @@ def get_latest_email_body(to_email):
# search_criteria = f'FROM "{encoded_email.decode("utf-8")}"' # search_criteria = f'FROM "{encoded_email.decode("utf-8")}"'
# 执行搜索操作 # 执行搜索操作
messages = mail.search(search_criteria) try:
messages = mail.search(search_criteria)
if messages:
print(f"Matching Emails: {messages}")
else:
print("No matching emails found.")
return False, None, None, None
except imaplib.IMAP4.error as e:
print(f"Error searching emails: {e}")
return False, None, None, None
for msgid, data in mail.fetch(messages, ['ENVELOPE', 'BODY[]']).items(): for msgid, data in mail.fetch(messages, ['ENVELOPE', 'BODY[]']).items():
envelope = data[b'ENVELOPE'] envelope = data[b'ENVELOPE']
raw_email = data[b'BODY[]'] raw_email = data[b'BODY[]']
@ -136,11 +146,17 @@ def get_latest_email_body(to_email):
) )
# 根据“实际买入价格-买入份额-手续费”格式解析body中的内容 # 根据“实际买入价格-买入份额-手续费”格式解析body中的内容
parse_states = True
body.split("-") body.split("-")
price = body.split("-")[0] price = body.split("-")[0]
share = body.split("-")[1] share = body.split("-")[1]
fee = body.split("-")[2] fee = body.split("-")[2]
return price, share, fee return parse_states, price, share, fee
def check_email(to_email, send_email_time):
"""检查回信邮件是否已经收到
"""
mail = IMAPClient("imap.126.com")
if __name__ == "__main__": if __name__ == "__main__":

View File

@ -353,10 +353,19 @@ class TurtleTrading_OnTime(object):
send_email(subject, body, self.user_email) send_email(subject, body, self.user_email)
send_email_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") send_email_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
#todo 每隔1分钟检测回信解析邮件。 #每隔1分钟检测回信解析邮件。
buy_price, buy_share, fee = parse_return_email(self.user_email, send_email_time)
parsed_email_flag = False
datetime.time.sleep(60)
while parsed_email_flag:
parse_states, buy_price, buy_share, fee = parse_return_email(self.user_email, send_email_time)
if parse_states == True:
parsed_email_flag = True
break
else:
datetime.time.sleep(60)
# 成功买入 # 成功买入
self.turtle.TrigerTime += 1 self.turtle.TrigerTime += 1
# 记录self.turtle.BuyStates # 记录self.turtle.BuyStates
@ -396,9 +405,19 @@ class TurtleTrading_OnTime(object):
send_email(subject, body, self.user_email) send_email(subject, body, self.user_email)
send_email_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") send_email_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
#todo 每隔1分钟检测回信解析邮件。 #每隔1分钟检测回信解析邮件。
buy_price, buy_share, fee = parse_return_email(self.user_email, send_email_time) parsed_email_flag = False
datetime.time.sleep(60)
while parsed_email_flag:
parse_states, buy_price, buy_share, fee = parse_return_email(self.user_email, send_email_time)
if parse_states == True:
parsed_email_flag = True
break
else:
datetime.time.sleep(60)
# 成功买入 # 成功买入
self.turtle.TrigerTime += 1 self.turtle.TrigerTime += 1
@ -450,10 +469,20 @@ class TurtleTrading_OnTime(object):
send_email(subject, body, self.user_email) send_email(subject, body, self.user_email)
send_email_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") send_email_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# todo 每隔1分钟检测回信解析邮件。 # 每隔1分钟检测回信解析邮件。
parsed_email_flag = False
sale_price, sale_share, fee = parse_return_email(self.user_email, send_email_time) datetime.time.sleep(60)
while parsed_email_flag:
parse_states, sale_price, sale_share, fee = parse_return_email(self.user_email, send_email_time)
if parse_states == True:
parsed_email_flag = True
break
else:
datetime.time.sleep(60)
# 成功卖出 # 成功卖出
self.turtle.TrigerTime = 0 self.turtle.TrigerTime = 0
# 记录self.turtle.BuyStates # 记录self.turtle.BuyStates
@ -473,12 +502,12 @@ class TurtleTrading_OnTime(object):
Net_return=abs(self.turtle.Capital - available_cash)) Net_return=abs(self.turtle.Capital - available_cash))
self.turtle.tradeslog.append(sale_this_time) self.turtle.tradeslog.append(sale_this_time)
def out_sale_stock(self, price_now): def out_sale_stock(self, price_now):
"""止盈卖出 """止盈卖出
Args: Args:
price_now (_type_): 现价 price_now (_type_): 现价
""" """
# 发送邮件 代码self.turtle.TradeCode, 建议卖出价格price_now卖出份额self.turtle.IntPositionSize # 发送邮件 代码self.turtle.TradeCode, 建议卖出价格price_now卖出份额self.turtle.IntPositionSize
subject = "止盈卖出" subject = "止盈卖出"
@ -487,9 +516,19 @@ class TurtleTrading_OnTime(object):
send_email(subject, body, self.user_email) send_email(subject, body, self.user_email)
send_email_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") send_email_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# todo 每隔1分钟检测回信解析邮件。 # 每隔1分钟检测回信解析邮件。
sale_price, sale_share, fee = parse_return_email(self.user_email, send_email_time) parsed_email_flag = False
datetime.time.sleep(60)
while parsed_email_flag:
parse_states, sale_price, sale_share, fee = parse_return_email(self.user_email, send_email_time)
if parse_states == True:
parsed_email_flag = True
break
else:
datetime.time.sleep(60)
# 成功卖出 # 成功卖出
self.turtle.TrigerTime = 0 self.turtle.TrigerTime = 0
@ -542,11 +581,11 @@ class TurtleTrading_OnTime(object):
if self.turtle.system1EnterNormal(self.turtle.PriceNow, self.turtle.Donchian_20_up, self.turtle.BreakOutLog): if self.turtle.system1EnterNormal(self.turtle.PriceNow, self.turtle.Donchian_20_up, self.turtle.BreakOutLog):
# 发出买入指令 # 发出买入指令
self.Buy_stock(self.turtle.PriceNow)
pass
elif self.turtle.system1EnterSafe(self.turtle.PriceNow, self.turtle.Donchian_50_up): elif self.turtle.system1EnterSafe(self.turtle.PriceNow, self.turtle.Donchian_50_up):
# 发出买入指令 # 发出买入指令
pass self.Buy_stock(self.turtle.PriceNow)
# 已有仓位,加仓 / 止损 / 退出 # 已有仓位,加仓 / 止损 / 退出
elif 1<=self.turtle.TrigerTime <= 3: elif 1<=self.turtle.TrigerTime <= 3:
@ -555,26 +594,26 @@ class TurtleTrading_OnTime(object):
# 继续突破 # 继续突破
if self.turtle.system1EnterNormal(self.turtle.PriceNow, self.turtle.Donchian_20_up, self.turtle.BreakOutLog): if self.turtle.system1EnterNormal(self.turtle.PriceNow, self.turtle.Donchian_20_up, self.turtle.BreakOutLog):
# 发出买入指令 # 发出买入指令
pass self.Buy_stock(self.turtle.PriceNow)
# #
elif self.turtle.system1EnterSafe(self.turtle.PriceNow, self.turtle.Donchian_50_up): elif self.turtle.system1EnterSafe(self.turtle.PriceNow, self.turtle.Donchian_50_up):
# 发出买入指令 # 发出买入指令
pass self.Buy_stock(self.turtle.PriceNow)
# 触发加仓价格 # 触发加仓价格
elif self.turtle.add(self.turtle.PriceNow): elif self.turtle.add(self.turtle.PriceNow):
# 发出买入指令 # 发出买入指令
pass self.Buy_stock(self.turtle.PriceNow)
# ---------------------止损------------------- # ---------------------止损-------------------
elif self.turtle.system_1_stop(self.turtle.PriceNow): elif self.turtle.system_1_stop(self.turtle.PriceNow):
# 发出卖出指令 # 发出卖出指令
pass self.stop_sale_stock(self.turtle.PriceNow)
# ---------------------止盈退出--------------------- # ---------------------止盈退出---------------------
elif self.turtle.system_1_Out(self.turtle.PriceNow, self.turtle.Donchian_10_down): elif self.turtle.system_1_Out(self.turtle.PriceNow, self.turtle.Donchian_10_down):
# 发出卖出指令 # 发出卖出指令
pass self.out_sale_stock(self.turtle.PriceNow)
# 满仓 止损 / 退出 # 满仓 止损 / 退出
elif self.turtle.TrigerTime == 4: elif self.turtle.TrigerTime == 4:
@ -582,12 +621,12 @@ class TurtleTrading_OnTime(object):
# ---------------------止损------------------- # ---------------------止损-------------------
if self.turtle.system_1_stop(self.turtle.PriceNow): if self.turtle.system_1_stop(self.turtle.PriceNow):
# 发出卖出指令 # 发出卖出指令
pass self.stop_sale_stock(self.turtle.PriceNow)
# ---------------------止盈退出--------------------- # ---------------------止盈退出---------------------
elif self.turtle.system_1_Out(self.turtle.PriceNow, self.turtle.Donchian_10_down): elif self.turtle.system_1_Out(self.turtle.PriceNow, self.turtle.Donchian_10_down):
# 发出卖出指令 # 发出卖出指令
pass self.out_sale_stock(self.turtle.PriceNow)
# ------------------结束阶段-------------------- # ------------------结束阶段--------------------
# 数据库更新当天数据增加ATR、donchian数据 # 数据库更新当天数据增加ATR、donchian数据