Wossy 2021-11-06 14:20 采纳率: 50%
浏览 107
已结题

提问:'str' object has no attribute 'minute'

为什么会提示这个?一开始运行好像还是好的,一会之后就变成这样了。希望朋友可以帮我看一下

img

import requests
from datetime import datetime,time,timedelta
from dateutil import parser
from time import sleep


class AstockTrading(object):
    def __init__(self,strategy_name):
        self._strategy_name = strategy_name
        self._Open = []
        self._High = []
        self._Low = []
        self._Close = []
        self._Dt = []
        self._tick = None
        self._Volume = []
        self._last_bar_start_minute = None
        self._isNewBar = False
        self._ma20 =None 
        self._current_orders = {}
        self._history_orders = {}
        self._order_number = 0
    def getTick(self):
        page = requests.get("http://hq.sinajs.cn/?format=text&list=sh600000");
        stock_info =page.text
        mt_info = stock_info.split(",")
        
        last = float(mt_info[1])
        trade_datetime = mt_info[30]+' '+mt_info[31]
        
        self._tick = (trade_datetime, last)
        
    def  get_history_data_from_local_mechine(self):
         self._Open = [1,2,3]
         self._High = [2,3,4]
          
    def  bar_generator(self):
        if  self._tick[0].minute %5 == 0 and self._tick[0].minute != self._last_bar_start_minute:
             
                self._last_bar_start_minute =self._tick[0].minute
                self._Open.insert(0,self._tick[1])
                self._High.insert(0,self._tick[1])
                self._Low.insert(0,self._tick[1])
                self._Close.insert(0,self._tick[1])
                self._Dt.insert(0,self._tick[0])
                self._isNewBar = True
                
        else:
           #update current bar
           self._High[0] = max(self._High[0],self._tick[0])
           self._Low[0] =  min(self._Low[0],self._tick[0])
           self._Close[0] = self._tick[0]
           self._Dt[0] = self._tick[0]
           self._isNewBar =False
           self._last_bar_start_minute =self._tick[0].minute
            
    def _buy(self, price, volume):
        self._order_number += 1
        key = "order"+str(self._order_number)
        self._current_orders[key] = {
                "open_datetime": self._Dt[0],
                "open_price": price,
                "volume": volume           
                }
        
    def _sell(self, key, price):
        self._current_orders[key]['close_price'] = price
        self._current_orders[key]['close_datetime'] = self._Dt[0]
        
        self._history_orders[key] = self._current_orders.pop(key)      
    
    
    def strategy(self):
        if self._isNewBar:
            sum_ = 0
            for item in Close[1:21]:
                sum_ = sum_ + item
            self._ma20 = sum_ / 20
            
        
            
        if 0 == len(self.__current_orders):
            if self._Close[0] < 0.95 * ma20:
                volume = int(100000/self._Close[0]/100)*100
                self._buy(self._Close[0]+0.01, volume) 
        else:
            if self._Close[0] > self._ma20 * 1.05:
                key = self._current_orders.keys()[0]
                self._sell(key, self._Close[0]-0.01)
       
ma = AstockTrading("ma")
ma.get_history_data_from_local_mechine()

while time(9,26)< datetime.now().time() < time(11,32) or \
      time(13)< datetime.now().time()<time(15,2):
      ma.getTick()
      ma.bar_generator()
      ma.strategy()
        

  • 写回答

3条回答 默认 最新

  • 广大菜鸟 2021-11-06 14:41
    关注
    # 问题在于这个函数:  trade_datetime = mt_info[30] + ' ' + mt_info[31] ,你都给它拼接字符串了,而且你好像没有对程序做任何的反反爬虫技术
     def getTick(self):
            url = "http://hq.sinajs.cn/?format=text&list=sh600000"
            page = requests.get(url, headers=headers)
            stock_info = page.text
            print(stock_info)
            mt_info = stock_info.split(",")
            last = float(mt_info[1])
            trade_datetime = mt_info[30] + ' ' + mt_info[31]
            self._tick = (trade_datetime, last) 
    

    改成: self._tick = (datetime.strptime(trade_datetime, '%Y-%m-%d %H:%M:%S'), last)
    跑通的程序:

    import requests
    from datetime import datetime, time, timedelta
    from dateutil import parser
    from time import sleep
    
    # 根据自己浏览器配置
    headers = {
    
    }
    
    
    class AstockTrading(object):
        def __init__(self, strategy_name):
            self._strategy_name = strategy_name
            self._Open = []
            self._High = []
            self._Low = []
            self._Close = []
            self._Dt = []
            self._tick = None
            self._Volume = []
            self._last_bar_start_minute = None
            self._isNewBar = False
            self._ma20 = None
            self._current_orders = {}
            self._history_orders = {}
            self._order_number = 0
    
        def getTick(self):
            url = "http://hq.sinajs.cn/?format=text&list=sh600000"
            page = requests.get(url, headers=headers)
            stock_info = page.text
            print(stock_info)
            mt_info = stock_info.split(",")
            last = float(mt_info[1])
            trade_datetime = mt_info[30] + ' ' + mt_info[31]
            self._tick = (datetime.strptime(trade_datetime, '%Y-%m-%d %H:%M:%S'), last)
    
        def get_history_data_from_local_mechine(self):
            self._Open = [1, 2, 3]
            self._High = [2, 3, 4]
    
        def bar_generator(self):
            if self._tick[0].minute % 5 == 0 and self._tick[0].minute != self._last_bar_start_minute:
                self._last_bar_start_minute = self._tick[0].minute
                self._Open.insert(0, self._tick[1])
                self._High.insert(0, self._tick[1])
                self._Low.insert(0, self._tick[1])
                self._Close.insert(0, self._tick[1])
                self._Dt.insert(0, self._tick[0])
                self._isNewBar = True
            else:
                # update current bar
                self._High[0] = max(self._High[0], self._tick[1])
                self._Low[0] = min(self._Low[0], self._tick[1])
                self._Close[0] = self._tick[1]
                self._Dt[0] = self._tick[0]
                self._isNewBar = False
                self._last_bar_start_minute = self._tick[0].minute
    
        def _buy(self, price, volume):
            self._order_number += 1
            key = "order" + str(self._order_number)
            self._current_orders[key] = {
                "open_datetime": self._Dt[0],
                "open_price": price,
                "volume": volume
            }
    
        def _sell(self, key, price):
            self._current_orders[key]['close_price'] = price
            self._current_orders[key]['close_datetime'] = self._Dt[0]
            self._history_orders[key] = self._current_orders.pop(key)
    
        def strategy(self):
            if self._isNewBar:
                sum_ = 0
                for item in self._Close[1:21]:
                    sum_ = sum_ + item
                self._ma20 = sum_ / 20
    
            if 0 == len(self._current_orders):
                if self._Close[0] < 0.95 * self._ma20:
                    volume = int(100000 / self._Close[0] / 100) * 100
                    self._buy(self._Close[0] + 0.01, volume)
            else:
                if self._Close[0] > self._ma20 * 1.05:
                    key = self._current_orders.keys()[0]
                    self._sell(key, self._Close[0] - 0.01)
    
    
    ma = AstockTrading("ma")
    ma.get_history_data_from_local_mechine()
    while time(9, 26) < datetime.now().time() < time(11, 32) or \
            time(13) < datetime.now().time() < time(15, 2):
        ma.getTick()
        ma.bar_generator()
        ma.strategy()
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月14日
  • 已采纳回答 11月6日
  • 创建了问题 11月6日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。