更新待办任务
This commit is contained in:
parent
92f4d2d02d
commit
195341b70c
206
TurtleOnTime.py
206
TurtleOnTime.py
@ -11,6 +11,14 @@ import mysql_database
|
|||||||
from EmailTest import send_email, parse_return_email
|
from EmailTest import send_email, parse_return_email
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
'''
|
||||||
|
todo
|
||||||
|
|
||||||
|
1 运行过程框架调整,支持多个turtle同时监测
|
||||||
|
2 增加运行状态写入yaml文件,读取文件恢复状态
|
||||||
|
'''
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class BuyState:
|
class BuyState:
|
||||||
trigger_time: float # 触发次数
|
trigger_time: float # 触发次数
|
||||||
@ -620,110 +628,88 @@ 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 run_short_trading_loop(self):
|
def run_short_trading_loop(self, stock_data, etf_data):
|
||||||
while True:
|
|
||||||
# 获取当前时间
|
|
||||||
now = datetime.now().time()
|
|
||||||
|
|
||||||
# 判断当前时间是否在交易时段内(9:30-11:30 或 13:00-15:00)
|
now = datetime.now().time()
|
||||||
is_trading_time = (
|
# 根据类型获取当前价格
|
||||||
(now.hour == 9 and now.minute >= 30) or
|
if self.turtle.type == "stock":
|
||||||
(now.hour == 10 and 0 <= now.minute <= 59) or
|
self.turtle.PriceNow = float(stock_data.loc[etf_data['代码'] == self.turtle.TradeCode, '最新价'].values[0])
|
||||||
(now.hour == 11 and now.minute <= 30) or
|
|
||||||
(now.hour == 13 and 0 <= now.minute <= 59) or
|
|
||||||
(now.hour == 14 and 0 <= now.minute <= 59) or
|
|
||||||
(now.hour == 15 and now.minute <= 0)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
elif self.turtle.type == "etf":
|
||||||
|
# self.turtle.PriceNow = float(etf_data.loc[etf_data['基金代码'] == self.turtle.TradeCode, '当前-单位净值'].values[0])
|
||||||
|
self.turtle.PriceNow = float(etf_data.loc[etf_data['代码'] == self.turtle.TradeCode, '最新价'].values[0])
|
||||||
|
|
||||||
|
# # 9点30 判断是否跳空高开
|
||||||
|
if now.hour == 9 and now.minute == 30 and self.turtle.PriceNow > self.turtle.prev_heigh:
|
||||||
|
self.turtle.is_gap_up = True
|
||||||
|
|
||||||
|
|
||||||
|
# 判断当前仓位状态并执行相应操作
|
||||||
|
if self.turtle.TrigerTime == 0:
|
||||||
|
# 空仓状态
|
||||||
|
if self.turtle.system1EnterNormal(
|
||||||
|
self.turtle.PriceNow,
|
||||||
|
self.turtle.Donchian_20_up,
|
||||||
|
self.turtle.BreakOutLog
|
||||||
|
):
|
||||||
|
self.Buy_stock(self.turtle.PriceNow)
|
||||||
|
|
||||||
# if not is_trading_time:
|
# 突破 记录self.turtle.breakoutlog
|
||||||
# # 非交易时间,等待 1 分钟后继续循环
|
today = datetime.now().strftime("%Y-%m-%d")
|
||||||
# time.sleep(60)
|
breakout_this_time = BreakOutLog(today,
|
||||||
# continue
|
self.turtle.Donchian_20_up,
|
||||||
|
self.turtle.Donchian_20_up - 2 * self.turtle.N,
|
||||||
|
'valid',
|
||||||
|
None)
|
||||||
|
self.turtle.BreakOutLog.append(breakout_this_time)
|
||||||
|
|
||||||
# 获取股票和ETF数据
|
elif self.turtle.system1EnterSafe(
|
||||||
stock_data, etf_data = self.get_stocks_data()
|
self.turtle.PriceNow,
|
||||||
|
self.turtle.Donchian_50_up
|
||||||
|
):
|
||||||
|
self.Buy_stock(self.turtle.PriceNow)
|
||||||
|
|
||||||
# 根据类型获取当前价格
|
elif 1 <= self.turtle.TrigerTime <= 3:
|
||||||
if self.turtle.type == "stock":
|
# # 突破状态
|
||||||
self.turtle.PriceNow = float(stock_data.loc[etf_data['代码'] == self.turtle.TradeCode, '最新价'].values[0])
|
# if self.turtle.system1EnterNormal(
|
||||||
|
# self.turtle.PriceNow,
|
||||||
elif self.turtle.type == "etf":
|
# self.turtle.Donchian_20_up,
|
||||||
# self.turtle.PriceNow = float(etf_data.loc[etf_data['基金代码'] == self.turtle.TradeCode, '当前-单位净值'].values[0])
|
# self.turtle.BreakOutLog
|
||||||
self.turtle.PriceNow = float(etf_data.loc[etf_data['代码'] == self.turtle.TradeCode, '最新价'].values[0])
|
# ):
|
||||||
|
# self.Buy_stock(self.turtle.PriceNow)
|
||||||
# # 9点30 判断是否跳空高开
|
# elif self.turtle.system1EnterSafe(
|
||||||
if now.hour == 9 and now.minute == 30 and self.turtle.PriceNow > self.turtle.prev_heigh:
|
# self.turtle.PriceNow,
|
||||||
self.turtle.is_gap_up = True
|
# self.turtle.Donchian_50_up
|
||||||
|
# ):
|
||||||
|
# self.Buy_stock(self.turtle.PriceNow)
|
||||||
|
|
||||||
|
# 加仓状态
|
||||||
|
if self.turtle.add(self.turtle.PriceNow):
|
||||||
|
self.add_stock(self.turtle.PriceNow)
|
||||||
|
|
||||||
|
# 止损状态
|
||||||
# 判断当前仓位状态并执行相应操作
|
elif self.turtle.system_1_stop(self.turtle.PriceNow):
|
||||||
if self.turtle.TrigerTime == 0:
|
self.stop_sale_stock(self.turtle.PriceNow)
|
||||||
# 空仓状态
|
|
||||||
if self.turtle.system1EnterNormal(
|
# 止盈
|
||||||
self.turtle.PriceNow,
|
elif self.turtle.system_1_Out(
|
||||||
self.turtle.Donchian_20_up,
|
self.turtle.PriceNow,
|
||||||
self.turtle.BreakOutLog
|
self.turtle.Donchian_10_down
|
||||||
):
|
):
|
||||||
self.Buy_stock(self.turtle.PriceNow)
|
self.out_sale_stock(self.turtle.PriceNow)
|
||||||
|
|
||||||
# 突破 记录self.turtle.breakoutlog
|
|
||||||
today = datetime.now().strftime("%Y-%m-%d")
|
|
||||||
breakout_this_time = BreakOutLog(today,
|
|
||||||
self.turtle.Donchian_20_up,
|
|
||||||
self.turtle.Donchian_20_up - 2 * self.turtle.N,
|
|
||||||
'valid',
|
|
||||||
None)
|
|
||||||
self.turtle.BreakOutLog.append(breakout_this_time)
|
|
||||||
|
|
||||||
elif self.turtle.system1EnterSafe(
|
elif self.turtle.TrigerTime == 4:
|
||||||
self.turtle.PriceNow,
|
# 满仓 止损 止盈
|
||||||
self.turtle.Donchian_50_up
|
if self.turtle.system_1_stop(self.turtle.PriceNow):
|
||||||
):
|
self.stop_sale_stock(self.turtle.PriceNow)
|
||||||
self.Buy_stock(self.turtle.PriceNow)
|
elif self.turtle.system_1_Out(
|
||||||
|
self.turtle.PriceNow,
|
||||||
|
self.turtle.Donchian_10_down
|
||||||
|
):
|
||||||
|
self.out_sale_stock(self.turtle.PriceNow)
|
||||||
|
|
||||||
elif 1 <= self.turtle.TrigerTime <= 3:
|
# 等待 1 分钟后下一次循环
|
||||||
# # 突破状态
|
time.sleep(60)
|
||||||
# if self.turtle.system1EnterNormal(
|
|
||||||
# self.turtle.PriceNow,
|
|
||||||
# self.turtle.Donchian_20_up,
|
|
||||||
# self.turtle.BreakOutLog
|
|
||||||
# ):
|
|
||||||
# self.Buy_stock(self.turtle.PriceNow)
|
|
||||||
# elif self.turtle.system1EnterSafe(
|
|
||||||
# self.turtle.PriceNow,
|
|
||||||
# self.turtle.Donchian_50_up
|
|
||||||
# ):
|
|
||||||
# self.Buy_stock(self.turtle.PriceNow)
|
|
||||||
|
|
||||||
# 加仓状态
|
|
||||||
if self.turtle.add(self.turtle.PriceNow):
|
|
||||||
self.add_stock(self.turtle.PriceNow)
|
|
||||||
|
|
||||||
# 止损状态
|
|
||||||
elif self.turtle.system_1_stop(self.turtle.PriceNow):
|
|
||||||
self.stop_sale_stock(self.turtle.PriceNow)
|
|
||||||
|
|
||||||
# 止盈
|
|
||||||
elif self.turtle.system_1_Out(
|
|
||||||
self.turtle.PriceNow,
|
|
||||||
self.turtle.Donchian_10_down
|
|
||||||
):
|
|
||||||
self.out_sale_stock(self.turtle.PriceNow)
|
|
||||||
|
|
||||||
elif self.turtle.TrigerTime == 4:
|
|
||||||
# 满仓 止损 止盈
|
|
||||||
if self.turtle.system_1_stop(self.turtle.PriceNow):
|
|
||||||
self.stop_sale_stock(self.turtle.PriceNow)
|
|
||||||
elif self.turtle.system_1_Out(
|
|
||||||
self.turtle.PriceNow,
|
|
||||||
self.turtle.Donchian_10_down
|
|
||||||
):
|
|
||||||
self.out_sale_stock(self.turtle.PriceNow)
|
|
||||||
|
|
||||||
# 等待 1 分钟后下一次循环
|
|
||||||
time.sleep(60)
|
|
||||||
|
|
||||||
def Start_short_system(self):
|
def Start_short_system(self):
|
||||||
"""启动short系统
|
"""启动short系统
|
||||||
@ -745,7 +731,34 @@ class TurtleTrading_OnTime(object):
|
|||||||
self.turtle.CalPositionSize()
|
self.turtle.CalPositionSize()
|
||||||
|
|
||||||
# 每分钟获取一次数据,判断是否触发条件 9:30-11:30 13:00-15:00
|
# 每分钟获取一次数据,判断是否触发条件 9:30-11:30 13:00-15:00
|
||||||
self.run_short_trading_loop()
|
while True:
|
||||||
|
# 获取当前时间
|
||||||
|
now = datetime.now().time()
|
||||||
|
|
||||||
|
# 判断当前时间是否在交易时段内(9:30-11:30 或 13:00-15:00)
|
||||||
|
is_trading_time = (
|
||||||
|
(now.hour == 9 and now.minute >= 30) or
|
||||||
|
(now.hour == 10 and 0 <= now.minute <= 59) or
|
||||||
|
(now.hour == 11 and now.minute <= 30) or
|
||||||
|
(now.hour == 13 and 0 <= now.minute <= 59) or
|
||||||
|
(now.hour == 14 and 0 <= now.minute <= 59) or
|
||||||
|
(now.hour == 15 and now.minute <= 0)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if not is_trading_time:
|
||||||
|
# 非交易时间,等待 1 分钟后继续循环
|
||||||
|
time.sleep(60)
|
||||||
|
continue
|
||||||
|
|
||||||
|
is_stop_time = (now.hour > 15 and now.minute > 0) #收盘时间
|
||||||
|
if is_stop_time:
|
||||||
|
break
|
||||||
|
|
||||||
|
# 获取股票和ETF数据
|
||||||
|
stock_data, etf_data = self.get_stocks_data()
|
||||||
|
self.run_short_trading_loop(stock_data, etf_data)
|
||||||
# ------------------结束阶段--------------------
|
# ------------------结束阶段--------------------
|
||||||
# 数据库更新当天数据,增加ATR、donchian数据
|
# 数据库更新当天数据,增加ATR、donchian数据
|
||||||
# 直接做个新表
|
# 直接做个新表
|
||||||
@ -754,6 +767,7 @@ class TurtleTrading_OnTime(object):
|
|||||||
time.sleep(16.5*600)
|
time.sleep(16.5*600)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
||||||
user_email = "guoyize2209@163.com"
|
user_email = "guoyize2209@163.com"
|
||||||
t = TurtleTrading('513870', "etf", 0.0025, 100000, 200000)
|
t = TurtleTrading('513870', "etf", 0.0025, 100000, 200000)
|
||||||
# t.get_ready(100)
|
# t.get_ready(100)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user