Ejemplo n.º 1
0
 def onBars(self, bars):
     if bars.getBar(self.__lead):
         if cross.cross_above(self.__adjClose, self.__slowSMA) == 1 and self.__pos is None:
             shares = self.__calculatePosSize()
             if shares:
                 self.__pos = self.enterLong(self.__lag, shares)
         elif cross.cross_below(self.__adjClose, self.__fastSMA) == 1 and self.__pos is not None:
             self.__pos.exitMarket()
Ejemplo n.º 2
0
 def onBars(self, bars):
     if bars.getBar(self.__lead):
         if cross.cross_above(self.__adjClose,
                              self.__slowSMA) == 1 and self.__pos is None:
             shares = self.__calculatePosSize()
             if shares:
                 self.__pos = self.enterLong(self.__lag, shares)
         elif cross.cross_below(
                 self.__adjClose,
                 self.__fastSMA) == 1 and self.__pos is not None:
             self.__pos.exitMarket()
Ejemplo n.º 3
0
    def testCrossBelowMany(self):
        count = 100
        values1 = [0 for i in range(count)]
        values2 = [-1 if i % 2 == 0 else 1 for i in range(count)]

        # Check first value
        self.assertEqual(cross.cross_below(values1, values2, 0, 0), 0)

        # Check every 2 values.
        period = 2
        for i in range(1, count):
            if i % 2 == 0:
                self.assertEqual(
                    cross.cross_below(values1, values2, i - period + 1, i + 1),
                    0)
            else:
                self.assertEqual(
                    cross.cross_below(values1, values2, i - period + 1, i + 1),
                    1)

        # Check every 4 values.
        period = 4
        for i in range(3, count):
            if i % 2 == 0:
                self.assertEqual(
                    cross.cross_below(values1, values2, i - period + 1, i + 1),
                    1)
            else:
                self.assertEqual(
                    cross.cross_below(values1, values2, i - period + 1, i + 1),
                    2)

        # Check for all values.
        self.assertEqual(cross.cross_below(values1, values2, 0, count),
                         count / 2)
Ejemplo n.º 4
0
    def testCrossBelowMany(self):
        count = 100
        values1 = [0 for i in range(count)]
        values2 = [-1 if i % 2 == 0 else 1 for i in range(count)]

        # Check first value
        self.assertEqual(cross.cross_below(values1, values2, 0, 0), 0)

        # Check every 2 values.
        period = 2
        for i in range(1, count):
            if i % 2 == 0:
                self.assertEqual(cross.cross_below(values1, values2, i - period + 1, i + 1), 0)
            else:
                self.assertEqual(cross.cross_below(values1, values2, i - period + 1, i + 1), 1)

        # Check every 4 values.
        period = 4
        for i in range(3, count):
            if i % 2 == 0:
                self.assertEqual(cross.cross_below(values1, values2, i - period + 1, i + 1), 1)
            else:
                self.assertEqual(cross.cross_below(values1, values2, i - period + 1, i + 1), 2)

        # Check for all values.
        self.assertEqual(cross.cross_below(values1, values2, 0, count), count / 2)
Ejemplo n.º 5
0
 def onBars(self, bars):
     # If a position was not opened, check if we should enter a long position.
     
     if self.__ma2[-1]is None:
         return 
         
     if self.__position is not None:
         if not self.__position.exitActive() and cross.cross_below(self.__ma1, self.__ma2) > 0:
             self.__position.exitMarket()
             #self.info("sell %s" % (bars.getDateTime()))
     
     if self.__position is None:
         if self.buyCon1() and self.buyCon2():
             shares = int(self.getBroker().getCash() * 0.2 / bars[self.__instrument].getPrice())
             self.__position = self.enterLong(self.__instrument, shares)
             print bars[self.__instrument].getDateTime(), bars[self.__instrument].getPrice()
Ejemplo n.º 6
0
    def onBars(self, bars):
        # If a position was not opened, check if we should enter a long position.

        if self.__ma2[-1]is None:
            return

        if self.__position is not None:
            if not self.__position.exitActive() and cross.cross_below(self.__ma1, self.__ma2) > 0:
                self.__position.exitMarket()
                #self.info("sell %s" % (bars.getDateTime()))

        if self.__position is None:
            if self.buyCon1() and self.buyCon2():
                shares = int(self.getBroker().getCash() * 0.2 / bars[self.__instrument].getPrice())
                self.__position = self.enterLong(self.__instrument, shares)
                print bars[self.__instrument].getDateTime(), bars[self.__instrument].getPrice()
Ejemplo n.º 7
0
    def onBars(self, bars):
        bar = bars.getBar("orcl")
        self.printDebug("%s: O=%s H=%s L=%s C=%s" %
                        (bar.getDateTime(), bar.getOpen(), bar.getHigh(),
                         bar.getLow(), bar.getClose()))

        if cross.cross_above(self.__fastSMADS, self.__slowSMADS) == 1:
            if self.__shortPos:
                self.exitShortPosition(bars, self.__shortPos)
            assert (self.__longPos is None)
            self.__longPos = self.enterLongPosition(bars)
        elif cross.cross_below(self.__fastSMADS, self.__slowSMADS) == 1:
            if self.__longPos:
                self.exitLongPosition(bars, self.__longPos)
            assert (self.__shortPos is None)
            self.__shortPos = self.enterShortPosition(bars)
Ejemplo n.º 8
0
    def testCrossBelowOnce(self):
        values1 = self.__buildSeqDS([2, 2, 2, 2, 2, 2, 2])
        values2 = self.__buildSeqDS([1, 1, 1, 10, 1, 1, 1])

        # Check every 2 values.
        self.assertEqual(cross.cross_below(values1, values2, 0, 2), 0)
        self.assertEqual(cross.cross_below(values1, values2, 1, 3), 0)
        self.assertEqual(cross.cross_below(values1, values2, 2, 4), 1)
        self.assertEqual(cross.cross_below(values1, values2, 3, 5), 0)
        self.assertEqual(cross.cross_below(values1, values2, 4, 6), 0)
        self.assertEqual(cross.cross_below(values1, values2, 5, 7), 0)

        # Check every 3 values.
        self.assertEqual(cross.cross_below(values1, values2, 0, 3), 0)
        self.assertEqual(cross.cross_below(values1, values2, 1, 4), 1)
        self.assertEqual(cross.cross_below(values1, values2, 2, 5), 1)
        self.assertEqual(cross.cross_below(values1, values2, 3, 6), 0)
        self.assertEqual(cross.cross_below(values1, values2, 4, 7), 0)

        # Check for all values.
        self.assertEqual(cross.cross_below(values1, values2, 0, 7), 1)
        self.assertEqual(cross.cross_below(values1, values2, 0, -1), 1)
Ejemplo n.º 9
0
 def sellCon1(self):
     if cross.cross_below(self.__ma1, self.__ma2) > 0:
         return True
Ejemplo n.º 10
0
 def sellCon1(self):
     if cross.cross_below(self.__ma1, self.__ma2) > 0:
         return True
Ejemplo n.º 11
0
 def exitLongSignal(self) :
     if cross.cross_below(self.__mass, self.__masl) > 0 and not self.__longPos.exitActive():
         return True
Ejemplo n.º 12
0
 def enterShortSignal(self) :
     if cross.cross_below(self.__mals, self.__mall) > 0:
         return True
Ejemplo n.º 13
0
    def onBars(self, bars):
        # If a position was not opened, check if we should enter a long position.
        
        bar = bars[self.__instrument]
        
        # filter datetime    
        ###################################################################################        
        filterCon = len(self.__close) < max(self.__bollingerlength, self.__malength, self.__closelength)
        self.__filterCon.append(filterCon)
        
        if filterCon:
            return
     
        # record position      
        ####################################################################################
        if self.__longPos is not None and self.__shortPos is None:
            self.__p.append(1) 
        elif self.__longPos is None and self.__shortPos is not None:
            self.__p.append(-1)
        else:
            self.__p.append(0)   
  
        # calculate ccMA     
        ####################################################################################           
        ccMACon1 = self.__longPos is not None or self.__shortPos is not None
        ccMACon2 = self.__malength > self.__ccMAlength
        
        if ccMACon1 and ccMACon2: 
            self.__malength = self.__malength - 1
        elif not ccMACon1:
            self.__malength = 50

        self.__ccMA = np.mean(self.__close[-self.__malength:])
#        print self.__malength, self.__ccMA
        self.__MA.append(self.__ccMA)
        self.__ccMACon1.append(ccMACon1)
        self.__ccMACon2.append(ccMACon2)
        
        #open and close condition   
        ######################################################################################   
        self.__enterLong1 = (cross.cross_above(self.__high, self.__UpperBand) > 0)
        self.__enterLong2 = (bar.getClose() >= max(self.__close[-self.__closelength:]))
        self.__enter = ((self.__UpperBand[-1] - self.__LowerBand[-1]) / bar.getClose() > float(self.__space) / 1000)
#        print (self.__UpperBand[-1] - self.__LowerBand[-1]) / bar.getClose()
        self.__enterShort1 = cross.cross_below(self.__low, self.__LowerBand) > 0 
        self.__enterShort2 = bar.getClose() <= min(self.__close[-self.__closelength:])
        self.__exitLong1 = (bar.getClose() < self.__ccMA)
        self.__exitLong2 = (self.__ccMA < self.__UpperBand[-1])
        self.__exitShort1 = (bar.getClose() > self.__ccMA)
        self.__exitShort2 = (self.__ccMA > self.__LowerBand[-1])
        
        self.__enterCon.append(self.__enter)
        self.__enterLongCon1.append(self.__enterLong1)
        self.__enterLongCon2.append(self.__enterLong2)
        self.__enterShortCon1.append(self.__enterShort1)
        self.__enterShortCon2.append(self.__enterShort2)
        self.__exitLongCon1.append(self.__exitLong1)
        self.__exitLongCon2.append(self.__exitLong2)
        self.__exitShortCon1.append(self.__exitShort1)
        self.__exitShortCon2.append(self.__exitShort2)
  
        #open and close  
        #######################################################################################        
        if self.__longPos is not None:         
             if self.exitLongSignal():
                 self.__longPos.exitMarket()
#             if self.__shortPos is not None:
#                 print 11
#                 self.info("intend long close")
#                 print (self.__UpperBand[-1] - self.__LowerBand[-1]) / bar.getClose()
                 
        elif self.__shortPos is not None:
             if self.exitShortSignal():
                  self.__shortPos.exitMarket()
#                  self.info("intend short close")
#                  print (self.__UpperBand[-1] - self.__LowerBand[-1]) / bar.getClose()
                  
        else:
             if self.enterLongSignal():
                 shares = int(self.getBroker().getCash() * 0.2 / bars[self.__instrument].getPrice())
                 self.__longPos = self.enterLong(self.__instrument, shares)
#                 self.info("intend long open")
#                 print (self.__UpperBand[-1] - self.__LowerBand[-1]) / bar.getClose()
              
             elif self.enterShortSignal():
                 shares = int(self.getBroker().getCash() * 0.2 / bars[self.__instrument].getPrice())
                 self.__shortPos = self.enterShort(self.__instrument, shares)
Ejemplo n.º 14
0
    def testCrossBelowOnce(self):
        values1 = self.__buildSeqDS([2, 2, 2,  2, 2, 2, 2])
        values2 = self.__buildSeqDS([1, 1, 1, 10, 1, 1, 1])

        # Check every 2 values.
        self.assertEqual(cross.cross_below(values1, values2, 0, 2), 0)
        self.assertEqual(cross.cross_below(values1, values2, 1, 3), 0)
        self.assertEqual(cross.cross_below(values1, values2, 2, 4), 1)
        self.assertEqual(cross.cross_below(values1, values2, 3, 5), 0)
        self.assertEqual(cross.cross_below(values1, values2, 4, 6), 0)
        self.assertEqual(cross.cross_below(values1, values2, 5, 7), 0)

        # Check every 3 values.
        self.assertEqual(cross.cross_below(values1, values2, 0, 3), 0)
        self.assertEqual(cross.cross_below(values1, values2, 1, 4), 1)
        self.assertEqual(cross.cross_below(values1, values2, 2, 5), 1)
        self.assertEqual(cross.cross_below(values1, values2, 3, 6), 0)
        self.assertEqual(cross.cross_below(values1, values2, 4, 7), 0)

        # Check for all values.
        self.assertEqual(cross.cross_below(values1, values2, 0, 7), 1)
        self.assertEqual(cross.cross_below(values1, values2, 0, -1), 1)