From aa7d0b5e00a4f44debadb7fd8a4785ddf91d78e3 Mon Sep 17 00:00:00 2001 From: gyz Date: Thu, 8 May 2025 19:28:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E4=B9=B0=E5=8D=96=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EmailTest.py | 20 ++++++++++-- TurtleOnTime.py | 87 +++++++++++++++++++++++++++++++++++-------------- 2 files changed, 81 insertions(+), 26 deletions(-) diff --git a/EmailTest.py b/EmailTest.py index 3323218..576b1eb 100755 --- a/EmailTest.py +++ b/EmailTest.py @@ -105,8 +105,18 @@ def get_latest_email_body(to_email): # 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(): envelope = data[b'ENVELOPE'] raw_email = data[b'BODY[]'] @@ -136,11 +146,17 @@ def get_latest_email_body(to_email): ) # 根据“实际买入价格-买入份额-手续费”格式解析body中的内容 + parse_states = True body.split("-") price = body.split("-")[0] share = body.split("-")[1] 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__": diff --git a/TurtleOnTime.py b/TurtleOnTime.py index 13cbbb7..b8126e8 100644 --- a/TurtleOnTime.py +++ b/TurtleOnTime.py @@ -353,10 +353,19 @@ class TurtleTrading_OnTime(object): send_email(subject, body, self.user_email) send_email_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") - #todo 每隔1分钟检测回信,解析邮件。 - - buy_price, buy_share, fee = parse_return_email(self.user_email, send_email_time) + #每隔1分钟检测回信,解析邮件。 + 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.BuyStates @@ -396,9 +405,19 @@ class TurtleTrading_OnTime(object): send_email(subject, body, self.user_email) 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 @@ -450,10 +469,20 @@ class TurtleTrading_OnTime(object): send_email(subject, body, self.user_email) send_email_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") - # todo 每隔1分钟检测回信,解析邮件。 - - sale_price, sale_share, fee = parse_return_email(self.user_email, send_email_time) + # 每隔1分钟检测回信,解析邮件。 + 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.BuyStates @@ -473,12 +502,12 @@ class TurtleTrading_OnTime(object): Net_return=abs(self.turtle.Capital - available_cash)) self.turtle.tradeslog.append(sale_this_time) - def out_sale_stock(self, price_now): - """止盈卖出 + def out_sale_stock(self, price_now): + """止盈卖出 - Args: - price_now (_type_): 现价 - """ + Args: + price_now (_type_): 现价 + """ # 发送邮件 代码self.turtle.TradeCode, 建议卖出价格price_now,卖出份额self.turtle.IntPositionSize subject = "止盈卖出" @@ -487,9 +516,19 @@ class TurtleTrading_OnTime(object): send_email(subject, body, self.user_email) 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 @@ -542,11 +581,11 @@ class TurtleTrading_OnTime(object): 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): # 发出买入指令 - pass + self.Buy_stock(self.turtle.PriceNow) # 已有仓位,加仓 / 止损 / 退出 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): # 发出买入指令 - pass + self.Buy_stock(self.turtle.PriceNow) # 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): # 发出买入指令 - pass + self.Buy_stock(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): # 发出卖出指令 - pass + self.out_sale_stock(self.turtle.PriceNow) # 满仓 止损 / 退出 elif self.turtle.TrigerTime == 4: @@ -582,12 +621,12 @@ class TurtleTrading_OnTime(object): # ---------------------止损------------------- 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): # 发出卖出指令 - pass + self.out_sale_stock(self.turtle.PriceNow) # ------------------结束阶段-------------------- # 数据库更新当天数据,增加ATR、donchian数据