diff --git a/TurtleOnTime.py b/TurtleOnTime.py index b9b1b88..88abe86 100644 --- a/TurtleOnTime.py +++ b/TurtleOnTime.py @@ -785,26 +785,70 @@ class TurtleTrading_OnTime(object): def monitor_single_turtle(self, turtle: TurtleTrading, stock_data, etf_data): """监控单个turtle的交易条件""" - # 获取当前价格 - if turtle.TradeCode in stock_data['代码'].values: - price_now = stock_data[stock_data['代码'] == turtle.TradeCode]['最新价'].values[0] - elif turtle.TradeCode in etf_data['代码'].values: - price_now = etf_data[etf_data['代码'] == turtle.TradeCode]['最新价'].values[0] - else: - return # 未找到对应标的 + + now = datetime.now().time() + if turtle.type == "stock": + turtle.PriceNow = float(stock_data.loc[etf_data['代码'] == self.turtle.TradeCode, '最新价'].values[0]) + + elif turtle.type == "etf": + # self.turtle.PriceNow = float(etf_data.loc[etf_data['基金代码'] == self.turtle.TradeCode, '当前-单位净值'].values[0]) + turtle.PriceNow = float(etf_data.loc[etf_data['代码'] == self.turtle.TradeCode, '最新价'].values[0]) - # 检查买入条件 - if self.system1EnterNormal(price_now, turtle.Donchian_20_ups, turtle.BreakOutLog): - self.start_email_thread(turtle, "买入", price_now) - - # 检查加仓条件 - if self.add(price_now): - self.start_email_thread(turtle, "加仓", price_now) - - # 检查止损条件 - if self.system_1_stop(price_now): - self.start_email_thread(turtle, "止损", price_now) - + if now.hour == 9 and now.minute == 30 and self.turtle.PriceNow > self.turtle.prev_heigh: + turtle.is_gap_up = True + + # 判断当前仓位状态并执行相应操作 + if turtle.TrigerTime == 0: + if turtle.system1EnterNormal( + turtle.PriceNow, + turtle.Donchian_20_up, + turtle.BreakOutLog + ): + + self.start_email_thread(turtle, "买入", turtle.PriceNow) + + # 突破 记录self.turtle.breakoutlog + today = datetime.now().strftime("%Y-%m-%d") + breakout_this_time = BreakOutLog(today, + turtle.Donchian_20_up, + turtle.Donchian_20_up - 2 * turtle.N, + 'valid', + None) + turtle.BreakOutLog.append(breakout_this_time) + + elif turtle.system1EnterSafe( + turtle.PriceNow, + turtle.Donchian_50_up + ): + self.start_email_thread(turtle, "买入", turtle.PriceNow) + + elif 1 <= turtle.TrigerTime <= 3: + + # 加仓状态 + if turtle.add(turtle.PriceNow): + self.start_email_thread(turtle, "加仓", turtle.PriceNow) + + # 止损状态 + elif turtle.system_1_stop(turtle.PriceNow): + self.start_email_thread(turtle, "止损", turtle.PriceNow) + + # 止盈 + elif turtle.system_1_Out( + turtle.PriceNow, + turtle.Donchian_10_down + ): + self.start_email_thread(turtle, "止盈", turtle.PriceNow) + + elif turtle.TrigerTime == 4: + # 满仓 止损 止盈 + if turtle.system_1_stop(turtle.PriceNow): + self.start_email_thread(turtle, "止损", turtle.PriceNow) + elif turtle.system_1_Out( + turtle.PriceNow, + turtle.Donchian_10_down + ): + self.start_email_thread(turtle, "止盈", turtle.PriceNow) + def start_email_thread(self, turtle, action, price_now): """启动邮件处理线程""" event = threading.Event()