使用pandas数据框索引中的小时和分钟

t9aqgxwy  于 2023-05-27  发布在  其他
关注(0)|答案(1)|浏览(84)

首先,我是一个编程的初学者。我一直在开发一个Python算法交易程序,并一直在使用backtesting.py库进行回测。我需要帮助实现基于时间的退出(调用self.position.close()),例如使用简单的if语句。但是,我在从pandas DataFrame中正确检索数据时遇到了问题。我的数据是在15分钟的时间框架内,我想在15:15退出我的运行交易。我将示例数据存储在名为“symbol”的DataFrame中,并以时间作为索引(例如,2023-04-28 09:15:00+05:30)。你能帮我实现它在下面的代码?

class SmaCross(Strategy):
    # Define the two MA lags as *class variables*
    # for later optimization
    n1 = 10
    n2 = 20
    
    def init(self):
        # Precompute the two moving averages
        self.sma1 = self.I(SMA, self.data.Close, self.n1)
        self.sma2 = self.I(SMA, self.data.Close, self.n2)
        
        #TRYING TO RETRIEVE TIME DATA
        self.current_datetime = self.data.index 
        
        self.hourNow = self.current_datetime.hour
        self.minuteNow = self.current_datetime.minute

    
    def next(self):
        
        if (self.hourNow >= 15 and self.minuteNow >= 15):
            self.position.close()
            
        # If sma1 crosses above sma2, close any existing
        # short trades, and buy the asset
        if crossover(self.sma1, self.sma2):
            self.position.close()
            self.buy()

        # Else, if sma1 crosses below sma2, close any existing
        # long trades, and sell the asset
        elif crossover(self.sma2, self.sma1):
            self.position.close()
            self.sell()

bt = Backtest(symbol, SmaCross, cash=10_000, commission=.002)
stats = bt.run()

上面的代码不起作用,因为self.hourNow, self.hourNow得到了一个值列表。我也试过使用self.current_datetime = self.data.index[-1],但它总是使用最后一次而不是测试时间值。

ktecyv1j

ktecyv1j1#

关于documentation
init()中,整个系列的点都是可用的,而在next()中,self.data的长度和所有声明的指示符在每次next()调用时都被调整,使得array[-1](例如,self.data)的长度和所有声明的指示符都是可用的。self.data.Close[-1]self.sma1[-1])始终包含最近的值,array[-2]始终包含前一个值,依此类推。(普通的Python索引升序排序的1D数组)。
您需要将这些行移动到next()的顶部,因为在那里self.data.index[-1]是最近的时间,正如您所希望的那样。

self.current_datetime = self.data.index[-1]

    self.hourNow = self.current_datetime.hour
    self.minuteNow = self.current_datetime.minute

相关问题