完善买卖功能
This commit is contained in:
parent
1994e91d72
commit
aa7d0b5e00
20
EmailTest.py
20
EmailTest.py
@ -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__":
|
||||||
|
|
||||||
|
@ -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数据
|
||||||
|
Loading…
x
Reference in New Issue
Block a user