Python 与Numpy交易

Python 与Numpy交易,python,arrays,numpy,simulation,algorithmic-trading,Python,Arrays,Numpy,Simulation,Algorithmic Trading,为了学习,我正在用Python编写一个算法交易程序。使用Numpy,我试图最大化核心模拟逻辑的速度: t=0 size = Ticks.shape[0] #Ticks is a numpy array while t<size: if self.toLong(t): self._Trader.Long(Ticks[t,3]) t+=1 while t<size:

为了学习,我正在用Python编写一个算法交易程序。使用Numpy,我试图最大化核心模拟逻辑的速度:

    t=0
    size = Ticks.shape[0] #Ticks is a numpy array
    while t<size:

        if self.toLong(t): 
            self._Trader.Long(Ticks[t,3])
            t+=1
            while t<size:
                if self.toexitLong(t): 
                    self._Trader.exitLong(Ticks[t,3])
                    break
                t+=1

        elif self.toShort(t): 
            self._Trader.Short(Ticks[t,3])
            t+=1
            while t<size:
                if self.toexitShort(t): 
                    self._Trader.exitShort(Ticks[t,3])
                    break
                t+=1

        t+=1
t=0
size=Ticks.shape[0]#Ticks是一个numpy数组
而t
  • 重写代码,这样您就有了一个带有简单模式标志的clear for循环,并且if-else为模式切换
  • 用于jit编译整个函数,该函数应提供1-3个数量级的加速

  • 不是速度优化,但它看起来可以用<<代码> > <代码>循环和<代码>模式变量来更清楚地表示你是否处于一个长、短或不长的中间。在5个位置递增循环计数器非常容易出错。您真的需要将
    t
    1递增1,并在每一步检查是否进入或退出长或短的循环计数器,还是直接计算下一个要执行操作的时间步?您似乎没有访问“
    勾号”
    数组来决定是否进入或退出操作。@user2357112谢谢。我最初编写这个循环时使用了几个模式变量,但我意识到不在每次迭代中检查模式可以节省几毫秒。尽管可能不清楚,但enter/exit方法正在使用传递的索引对数组执行操作。例如,当最后5个收盘价的平均值>x时,进入/退出信号可能触发,因此有必要在每个
    t
    检查触发器。我想我可以计算每一行的每一个进入/退出信号,然后“模拟”之后。