Exemplo n.º 1
0
    def isWithinPreMarketHours(current_time=None):
        """TODO: Describe the method here """
        now = datetime.now(getTimeZoneInfo()) if (current_time
                                                  == None) else current_time
        date_only = now.date()

        if not MarketBusinessHours.isOpen(current_date=date_only):
            return False

        o_premkt = datetime(date_only.year,
                            date_only.month,
                            date_only.day,
                            7,
                            00,
                            00,
                            tzinfo=getTimeZoneInfo())
        c_premkt = datetime(date_only.year,
                            date_only.month,
                            date_only.day,
                            9,
                            30,
                            00,
                            tzinfo=getTimeZoneInfo())

        answer = o_premkt <= current_time <= c_premkt
        return answer
Exemplo n.º 2
0
  def testBuyPairSellBull(self):
    bull_data = TradeDataHolder.objects.get(buy_order_client_id=self.bullish["bull_buy_order_client_id"])    
    bear_data = TradeDataHolder.objects.get(buy_order_client_id=self.bearish["bear_buy_order_client_id"])
    self.assertEqual(bear_data.isValid(),True) 
    self.assertEqual(bull_data.isValid(),True)     
    
    sale_order = dict()
    sale_order['sell_order_client_id']= bull_data.getSellClientOrderID()
    sale_order['buy_order_client_id']= bull_data.getBuyClientOrderID()
    sale_order['sell_date'] = datetime.datetime.now(getTimeZoneInfo())
    sale_order['sell_price'] = 126.95
    bull_data = TradeDataHolder.recordDispositionTransaction(robot=None,order=sale_order)
    self.assertEqual(bull_data.isValidAfterSale(),True) 
    self.assertEqual(bull_data.isRealized(), True) 
    self.assertEqual(bull_data.isUnRealized(), False) 
    self.assertEqual(bear_data.isRealized(), False) 
    self.assertEqual(bear_data.isUnRealized(), True) 

    sale_order = dict()
    sale_order['sell_order_client_id']= bear_data.getSellClientOrderID()
    sale_order['buy_order_client_id']= bear_data.getBuyClientOrderID()
    sale_order['sell_date'] = datetime.datetime.now(getTimeZoneInfo())
    sale_order['sell_price'] = 6.95

    bear_data = TradeDataHolder.recordDispositionTransaction(robot=None,order=sale_order)
    self.assertEqual(bear_data.isValidAfterSale(),True) 
    self.assertEqual(bear_data.isRealized(), True) 
    self.assertEqual(bear_data.isUnRealized(), False) 
Exemplo n.º 3
0
  def testHolidayDate(self):
    #
    #  October 12, 2020 is a Holiday !!!
    # 
    candidate = datetime(year=2020, month=10, day=12,hour=12,minute=0,second=0,tzinfo=getTimeZoneInfo())
    self.assertEqual(MarketBusinessHours.isOpen(current_date=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinAfterMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinExtendedPreMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinPreMarketHours(current_time=candidate),False)
    #
    #  January 1 2020 is a Holiday !!!
    # 
    candidate = datetime(year=2020, month=1, day=1,hour=12,minute=0,second=0,tzinfo=getTimeZoneInfo())
    self.assertEqual(MarketBusinessHours.isOpen(current_date=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinAfterMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinExtendedPreMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinPreMarketHours(current_time=candidate),False)

    #
    #  January 1, 2019 is a Holiday !!!
    # 
    candidate = datetime(year=2019, month=1, day=1,hour=12,minute=0,second=0,tzinfo=getTimeZoneInfo())
    self.assertEqual(MarketBusinessHours.isOpen(current_date=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinAfterMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinExtendedPreMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinPreMarketHours(current_time=candidate),False)
Exemplo n.º 4
0
    def getMostRecentEntry(pair):
        end_date = datetime.now(getTimeZoneInfo()).isoformat()
        start_date = datetime.now(getTimeZoneInfo()) + timedelta(days=-30)

        pairs_query = BullBearETFData.objects.filter(
            bull_symbol=pair['bull_symbol'],
            bear_symbol=pair['bear_symbol'],
            etf_symbol=pair['etf_symbol'])
        time_bound = pairs_query.filter(timestamp__lte=end_date,
                                        timestamp__gte=start_date)
        most_recent = time_bound.aggregate(Max('timestamp'))['timestamp__max']
        return most_recent
Exemplo n.º 5
0
 def getTodayMiddayBlackoutStart(self, hour_of_day, current_time):
     """TODO: Describe the method here """
     ct = current_time
     if hour_of_day == '10:00am':
         return datetime(year=ct.year,
                         month=ct.month,
                         day=ct.day,
                         hour=10,
                         minute=0,
                         tzinfo=getTimeZoneInfo())
     elif hour_of_day == '11:00am':
         return datetime(year=ct.year,
                         month=ct.month,
                         day=ct.day,
                         hour=11,
                         minute=0,
                         tzinfo=getTimeZoneInfo())
     elif hour_of_day == '12:00pm':
         return datetime(year=ct.year,
                         month=ct.month,
                         day=ct.day,
                         hour=12,
                         minute=0,
                         tzinfo=getTimeZoneInfo())
     elif hour_of_day == '13:00pm':
         return datetime(year=ct.year,
                         month=ct.month,
                         day=ct.day,
                         hour=13,
                         minute=0,
                         tzinfo=getTimeZoneInfo())
     elif hour_of_day == '14:00pm':
         return datetime(year=ct.year,
                         month=ct.month,
                         day=ct.day,
                         hour=14,
                         minute=0,
                         tzinfo=getTimeZoneInfo())
     elif hour_of_day == '15:00pm':
         return datetime(year=ct.year,
                         month=ct.month,
                         day=ct.day,
                         hour=15,
                         minute=0,
                         tzinfo=getTimeZoneInfo())
     elif hour_of_day == '0':
         return datetime(year=ct.year,
                         month=ct.month,
                         day=ct.day,
                         hour=10,
                         minute=0,
                         tzinfo=getTimeZoneInfo())
     return datetime(year=ct.year,
                     month=ct.month,
                     day=ct.day,
                     hour=10,
                     minute=0,
                     tzinfo=getTimeZoneInfo())
Exemplo n.º 6
0
 def testMarketClock(self):
   name ='testMarketClock'
   today = datetime.datetime.now(getTimeZoneInfo())
   week_day = True if today.isoweekday() in range(1, 6) else False
   hour = True if today.hour in range (9,16) else False
   alpaca = MarketClock()
   self.assertEqual(alpaca.isOpen(),week_day and hour)
Exemplo n.º 7
0
 def getDaysAverage(symbol,days=7):
   data_q = EquityTradingData.objects.filter(symbol=symbol)    
   end_date = datetime.now(tz=getTimeZoneInfo())
   date_diff = timedelta(days=-days)
   start_date = end_date + date_diff  
   d_a_7 = data_q.filter(trade_datetime__lte=end_date, trade_datetime__gte=start_date).aggregate(average=Avg('price'))
   return 0 if d_a_7['average'] == None else d_a_7['average']
Exemplo n.º 8
0
    def createRobotExecution(exec_start_date,
                             exec_end_date,
                             robot,
                             config_params='',
                             result_data='',
                             execution_pace='fast',
                             execution_name=None,
                             visual_mode=False,
                             dispose_all_on_close=False):

        now = datetime.now(getTimeZoneInfo())
        start_date = now if (exec_start_date == None) else exec_start_date
        end_date = now if (exec_end_date == None) else exec_end_date
        exec_name = execution_name if (
            execution_name != None) else now.strftime(
                "{0}_%Y%m%d-%H-%M-%S.%f".format(robot.name))

        ex = ETFPairRobotExecution.objects.create(
            creation_date=now,
            exec_start_date=start_date,
            exec_end_date=end_date,
            robot=robot,
            config_params=config_params,
            result_data=result_data,
            execution_name=exec_name,
            execution_pace=execution_pace,
            visual_mode=visual_mode,
            dispose_all_on_close=dispose_all_on_close,
            execution_status='not started')
        return ex
Exemplo n.º 9
0
    def isWithinBlackoutWindow(self, current_time):
        """TODO: Describe the method here """
        ct = current_time

        minutes_offset_after_open = int(self.offset_after_open)
        blackout_opening_left_side = datetime(year=ct.year,
                                              month=ct.month,
                                              day=ct.day,
                                              hour=9,
                                              minute=30,
                                              second=0,
                                              tzinfo=getTimeZoneInfo())
        blackout_opening_right_side = blackout_opening_left_side + timedelta(
            minutes=minutes_offset_after_open)

        blackout_midday_left_side = self.getTodayMiddayBlackoutStart(
            hour_of_day=self.blackout_midday_from, current_time=current_time)
        blackout_midday_right_side = blackout_midday_left_side + timedelta(
            minutes=int(self.blackout_midday_time_interval))

        minutes_offset_before_close = int(self.offset_before_close)
        blackout_end_of_day_left_side = datetime(
            year=ct.year,
            month=ct.month,
            day=ct.day,
            hour=16,
            minute=00,
            second=0,
            tzinfo=getTimeZoneInfo()) + timedelta(
                minutes=-minutes_offset_before_close)
        blackout_end_of_day_right_side = datetime(year=ct.year,
                                                  month=ct.month,
                                                  day=ct.day,
                                                  hour=16,
                                                  minute=0,
                                                  second=0,
                                                  tzinfo=getTimeZoneInfo())

        answer = (blackout_opening_left_side < current_time < blackout_opening_right_side) \
              or (blackout_midday_left_side < current_time < blackout_midday_right_side) \
              or (blackout_end_of_day_left_side < current_time < blackout_end_of_day_right_side)

        return answer
Exemplo n.º 10
0
 def recordDispositionExecution(executor, exec_time, exec_params, income,
                                order_client_id):
     now = datetime.now(getTimeZoneInfo())
     action = 'sell'
     ETFPairRobotExecutionData.objects.create(
         execution=executor,
         trade_time=now,
         exec_time=exec_time,
         exec_action=action,
         cost_or_income=income,
         order_client_id=order_client_id)
Exemplo n.º 11
0
 def recordAcquisitionExecution(executor, exec_time, exec_params, cost,
                                order_client_id):
     now = datetime.now(getTimeZoneInfo())
     action = 'buy'
     entry = ETFPairRobotExecutionData.objects.create(
         execution=executor,
         trade_time=now,
         exec_time=exec_time,
         exec_action=action,
         cost_or_income=cost,
         order_client_id=order_client_id)
Exemplo n.º 12
0
  def testWeekEndBusinessDate(self):
    #
    #  October 03 is Saturday
    # 
    candidate = datetime(year=2020, month=10, day=3,hour=12,minute=0,second=0,tzinfo=getTimeZoneInfo())
    self.assertEqual(MarketBusinessHours.isOpen(current_date=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinAfterMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinExtendedPreMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinPreMarketHours(current_time=candidate),False)

    #
    #  October 04 is Sunday
    # 
    candidate = datetime(year=2020, month=10, day=4,hour=12,minute=0,second=0,tzinfo=getTimeZoneInfo())
    self.assertEqual(MarketBusinessHours.isOpen(current_date=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinAfterMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinExtendedPreMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinPreMarketHours(current_time=candidate),False)
Exemplo n.º 13
0
 def getUptimeOfRobot(robot_id):
     """ TODO: Describe the method here"""
     starts = StartupStatus.objects.filter(
         object_identifier=robot_id).filter(
             action='start').orderby('log_time')
     stops = StartupStatus.objects.filter(
         object_identifier=robot_id).filter(
             action='stop').orderby('log_time')
     start = None if (len(starts) == 0) else starts[0]
     stop = None if (len(stops) == 0) else stops[0]
     current_time = datetime.now(getTimeZoneInfo())
     return 0 if (stop > start) else round(
         (current_time - start).total_seconds() / 60, 2)
Exemplo n.º 14
0
  def testTradingDayWithOffsetAfterOpenTest(self):
    tm = RobotActivityWindow.objects.create(trade_before_open=False,trade_after_close=False,trade_during_extended_opening_hours=False,
      offset_after_open='30',offset_before_close='0',blackout_midday_from='10:00am',blackout_midday_time_interval='0')
    win1=tm.pk
    a1 = RobotActivityWindow.objects.get(id=win1)
    bt = datetime(year=2020, month=10, day=6,hour=9,minute=30,second=1,tzinfo=getTimeZoneInfo())

    self.assertEqual(a1.canTradeNow(current_time = bt),False) #9:30Opening
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-5,minutes=-30)),False) #4:00am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-3)),False) #6:30am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-2,minutes=-15)),False) #7:15am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=-2)),False) #9:28
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=2)),False) #9:31
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=5,minutes=2)),True) #14:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=7)),False) #16:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=8,minutes=2)),False) #17:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=10,minutes=2)),False) #19:32
Exemplo n.º 15
0
class BuySeveralPairsTestCase(TestCase):
  testname= 'Buy Several Pairs Test Case'
  bull_json1 ='{"symbol":"TQQQ","price":126,"qty":10,"bull_buy_order_client_id":"a_buy_TQQQ","date":"2020-08-03 04:00:00-04:00"}'
  bear_json1 ='{"symbol":"SQQQ","price":5.5,"qty":170,"bear_buy_order_client_id":"a_buy_SQQQ","date":"2020-08-03 04:00:00-04:00"}'
  bull_json2 ='{"symbol":"TQQQ","price":126.5,"qty":9,"bull_buy_order_client_id":"b_buy_TQQQ","date":"2020-08-03 04:00:00-04:00"}'
  bear_json2 ='{"symbol":"SQQQ","price":5.4,"qty":171,"bear_buy_order_client_id":"b_buy_SQQQ","date":"2020-08-03 04:00:00-04:00"}'
  bull_json3 ='{"symbol":"TQQQ","price":127,"qty":9,"bull_buy_order_client_id":"c_buy_TQQQ","date":"2020-08-03 04:00:00-04:00"}'
  bear_json3 ='{"symbol":"SQQQ","price":5.3,"qty":172,"bear_buy_order_client_id":"c_buy_SQQQ","date":"2020-08-03 04:00:00-04:00"}'
  bull1 = json.loads(bull_json1)
  bear1 = json.loads(bear_json1)
  bull2 = json.loads(bull_json2)
  bear2 = json.loads(bear_json2)
  bull3 = json.loads(bull_json3)
  bear3 = json.loads(bear_json3)
  buy_date = datetime.datetime.now(getTimeZoneInfo())

  @classmethod 
  def setUpTestData(self):
    if shouldUsePrint():
      print("Setting up {0}".format(self.testname))
    TradeDataHolder.recordAcquisitionTransaction(robot=None,bullish=self.bull1,bearish=self.bear1)
    TradeDataHolder.recordAcquisitionTransaction(robot=None,bullish=self.bull2,bearish=self.bear2)
    TradeDataHolder.recordAcquisitionTransaction(robot=None,bullish=self.bull3,bearish=self.bear3)

  #@unittest.skip("Taking a break now")
  def testSeveralBuysDataPair(self):
    bull_data1 = TradeDataHolder.objects.get(buy_order_client_id=self.bull1["bull_buy_order_client_id"])    
    bear_data1 = TradeDataHolder.objects.get(buy_order_client_id=self.bear1["bear_buy_order_client_id"])
    bull_data2 = TradeDataHolder.objects.get(buy_order_client_id=self.bull2["bull_buy_order_client_id"])    
    bear_data2 = TradeDataHolder.objects.get(buy_order_client_id=self.bear2["bear_buy_order_client_id"])
    bull_data3 = TradeDataHolder.objects.get(buy_order_client_id=self.bull3["bull_buy_order_client_id"])    
    bear_data3 = TradeDataHolder.objects.get(buy_order_client_id=self.bear3["bear_buy_order_client_id"])
    self.assertEqual(bear_data1.isValid(),True) 
    self.assertEqual(bull_data1.isValid(),True)     
    self.assertEqual(bear_data2.isValid(),True) 
    self.assertEqual(bull_data2.isValid(),True)     
    self.assertEqual(bear_data3.isValid(),True) 
    self.assertEqual(bull_data3.isValid(),True)     
Exemplo n.º 16
0
    def setUpTestData(self):
        displayOutput(str="Setting up {0}".format(self.testname))
        alpacaBrokerage = BrokerageInformation.objects.create(
            brokerage_type='Alpaca',
            name='Alpaca Brokerage',
            website='https://alpaca.markets/')

        alpacaPortfolio = Portfolio.objects.create(
            name='Alpaca Portfolio',
            initial_cash_funds=100000,
            current_cash_funds=100000,
            brokerage_id=alpacaBrokerage.id,
            max_robot_fraction=.10,
            cash_position_update_policy='immediate',
            description='Alpaca Portfolio description')

        nasdaq = RobotEquitySymbols.objects.create(name='Nasdaq',
                                                   symbol=self.etf,
                                                   bullishSymbol=self.bullish,
                                                   bearishSymbol=self.bearish)
        now = datetime.datetime.now(getTimeZoneInfo())

        strategy = EquityStrategy.objects.create(
            name='My Best Equity Strategy So Far',
            description='This is just a test',
            creation_date=now,
            modify_date=now,
            strategy_class='Bullish Bearish Pair',
            strategy_category='Babadjou',
            visibility=False,
            minimum_entries_before_trading=2,
            trade_only_after_fully_loaded=False,
            manual_asset_composition_policy=True,
            automatic_generation_client_order_id=True)
        self.entry_id = strategy.pk

        acquisition = AcquisitionPolicy.objects.create(
            strategy=strategy,
            acquisition_time_proximity=False,
            min_time_between_purchases=60,
            and_or_1='AND',
            acquisition_volume_proximity=False,
            min_volume_between_purchases='15M',
            volume_fraction_to_average=3,
            and_or_2='AND',
            acquisition_price_proximity=True,
            acquisition_price_factor='Bull',
            bear_acquisition_volatility_factor='.01',
            number_or_percentage='Stock Price by Number',
            proximity_calculation_automatic=True,
            bull_acquisition_volatility_factor='.10',
            simultaneous_bull_bear_acquisitions=True)
        self.acq_entry = acquisition.pk

        disposition = DispositionPolicy.objects.create(
            strategy=strategy,
            in_transition_profit_policy=True,
            in_transition_profit_target_ratio='.15',
            completion_profit_policy=True,
            completion_complete_target_ratio='.40',
            in_transition_asset_composition='2Bull x 1Bear',
            in_transition_entry_strategy='bestbull_and_worstbear')
        self.disposition_id = disposition.pk

        robot = ETFAndReversePairRobot.objects.create(
            name=self.base_name,
            description=self.description,
            portfolio=alpacaPortfolio,
            strategy=strategy,
            symbols=nasdaq,
            enabled=True,
            owner=None,
            visibility=True,
            version='1.0.0',
            max_hold_time='14',
            minimum_hold_time='1',
            hold_time_includes_holiday=True,
            sell_remaining_before_buy=False,
            liquidate_on_next_opportunity=False,
            internal_name=self.internal_name,
            max_roundtrips=self.max_roundtrips,
            cost_basis_per_roundtrip=self.cost_basis_per_roundtrip,
            profit_target_per_roundtrip=self.profit_basis_per_roundtrip)
        self.robot_id = robot.pk

        sentiment = EquityAndMarketSentiment.objects.create(
            pair_robot=robot,
            influences_acquisition=True,
            circuit_breaker=False,
            sentiment_feed='Automatic')

        self.sentiment_id = sentiment.pk
        self.budget_management = RobotBudgetManagement.objects.create(
            pair_robot=robot,
            max_budget_per_purchase_number=self.cost_basis_per_roundtrip,
            use_percentage_or_fixed_value='Number')

        activities = RobotActivityWindow.objects.create(
            pair_robot=robot,
            trade_before_open=True,
            trade_after_close=False,
            trade_during_extended_opening_hours=False,
            offset_after_open='0',
            offset_before_close='0',
            blackout_midday_from='10:00am',
            blackout_midday_time_interval='0')
Exemplo n.º 17
0
 def setUpTestData(self):
   displayOutput("Setting up Test: {}".format(self.test_name))
   today = datetime.now(getTimeZoneInfo())
Exemplo n.º 18
0
class RobotActivityClassTestCase(TestCase):
  today = datetime.now(getTimeZoneInfo())
  #This section is intentionally blank
  test_name = 'RobotActivityClassBasicTestCase'

  @classmethod 
  def setUpTestData(self):
    #Parameters to validate: regular market, market closed, pre-market, post-market, extended pre market, trade all markets combined,
    # Midday Black out. With pre-market, with post market, with extended, combined all
    displayOutput(str=" Setting up Tests for {}".format(self.test_name)) 
  #
  # Typical trading day !!!
  #
  def testActivity1TypicalTradingDayTest(self):
    tm = RobotActivityWindow.objects.create(trade_before_open=False,trade_after_close=False,trade_during_extended_opening_hours=False,
      offset_after_open='0',offset_before_close='0',blackout_midday_from='10:00am',blackout_midday_time_interval='0')
    win1=tm.pk
    a1 = RobotActivityWindow.objects.get(id=win1)
    bt = datetime(year=2020, month=10, day=1,hour=9,minute=30,second=1,tzinfo=getTimeZoneInfo())

    self.assertEqual(a1.canTradeNow(current_time = bt),True) #Opening
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-5,minutes=-30)),False) #3:00am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-3)),False) #6:30am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-2,minutes=-15)),False) #7:15am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=-2)),False) #9:28
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=2)),True) #9:31
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=5,minutes=2)),True) #14:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=7)),False) #16:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=8,minutes=2)),False) #17:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=9,minutes=2)),False) #19:32

  #
  # Trading day with pre-Market Enabled !!!
  #
  def testActivity1TradingDayWithPremarketTest(self):
    tm = RobotActivityWindow.objects.create(trade_before_open=True,trade_after_close=False,trade_during_extended_opening_hours=False,
      offset_after_open='0',offset_before_close='0',blackout_midday_from='10:00am',blackout_midday_time_interval='0')
    win1=tm.pk
    a1 = RobotActivityWindow.objects.get(id=win1)
    bt = datetime(year=2020, month=10, day=2,hour=9,minute=30,second=1,tzinfo=getTimeZoneInfo())

    self.assertEqual(a1.canTradeNow(current_time = bt),True) #Opening
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-5,minutes=-30)),False) #3:00am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-3)),False) #6:30am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-2,minutes=-15)),True) #7:15am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=-2)),True) #9:28
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=2)),True) #9:31
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=5,minutes=2)),True) #14:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=7)),False) #16:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=8,minutes=2)),False) #17:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=9,minutes=2)),False) #19:32

  
  #
  # Trading day with After Market Closed Enabled !!!
  #
  def testTradingDayAfterMarketClosedTest(self):
    tm = RobotActivityWindow.objects.create(trade_before_open=False,trade_after_close=True,trade_during_extended_opening_hours=False,
      offset_after_open='0',offset_before_close='0',blackout_midday_from='10:00am',blackout_midday_time_interval='0')
    win1=tm.pk
    a1 = RobotActivityWindow.objects.get(id=win1)
    bt = datetime(year=2020, month=10, day=2,hour=9,minute=30,second=1,tzinfo=getTimeZoneInfo())

    self.assertEqual(a1.canTradeNow(current_time = bt),True) #Opening
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-5,minutes=-30)),False) #3:00am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-3)),False) #6:30am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-2,minutes=-15)),False) #7:15am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=-2)),False) #9:28
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=2)),True) #9:31
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=5,minutes=2)),True) #14:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=7)),True) #16:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=8,minutes=2)),True) #17:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=10,minutes=2)),False) #19:32

  #
  # Trading day with After Market Closed Enabled !!!
  # 4:00 - 7:00am
  #
  def testTradingDayExtendedPreMarketOpen(self):
    tm = RobotActivityWindow.objects.create(trade_before_open=False,trade_after_close=False,trade_during_extended_opening_hours=True,
      offset_after_open='0',offset_before_close='0',blackout_midday_from='10:00am',blackout_midday_time_interval='0')
    win1=tm.pk
    a1 = RobotActivityWindow.objects.get(id=win1)
    bt = datetime(year=2020, month=10, day=6,hour=9,minute=30,second=1,tzinfo=getTimeZoneInfo())

    self.assertEqual(a1.canTradeNow(current_time = bt),True) #Opening
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-5,minutes=-30)),True) #4:00am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-3)),True) #6:30am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-2,minutes=-15)),False) #7:15am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=-2)),False) #9:28
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=2)),True) #9:31
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=5,minutes=2)),True) #14:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=7)),False) #16:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=8,minutes=2)),False) #17:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=10,minutes=2)),False) #19:32

  #
  # I only want to trade 30 minutes after open of the Market
  # 9:30 - 10:00am is blocked
  #
  def testTradingDayWithOffsetAfterOpenTest(self):
    tm = RobotActivityWindow.objects.create(trade_before_open=False,trade_after_close=False,trade_during_extended_opening_hours=False,
      offset_after_open='30',offset_before_close='0',blackout_midday_from='10:00am',blackout_midday_time_interval='0')
    win1=tm.pk
    a1 = RobotActivityWindow.objects.get(id=win1)
    bt = datetime(year=2020, month=10, day=6,hour=9,minute=30,second=1,tzinfo=getTimeZoneInfo())

    self.assertEqual(a1.canTradeNow(current_time = bt),False) #9:30Opening
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-5,minutes=-30)),False) #4:00am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-3)),False) #6:30am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-2,minutes=-15)),False) #7:15am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=-2)),False) #9:28
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=2)),False) #9:31
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=5,minutes=2)),True) #14:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=7)),False) #16:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=8,minutes=2)),False) #17:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=10,minutes=2)),False) #19:32

  #
  # I don't want to trade between 3:30 - 4:00pm of the Market
  # 
  # 
  def testTradingDayWithOffsetBeforeClose(self):
    tm = RobotActivityWindow.objects.create(trade_before_open=False,trade_after_close=False,trade_during_extended_opening_hours=False,
      offset_after_open='0',offset_before_close='30',blackout_midday_from='10:00am',blackout_midday_time_interval='0')
    win1=tm.pk
    a1 = RobotActivityWindow.objects.get(id=win1)
    bt = datetime(year=2020, month=10, day=6,hour=9,minute=30,second=1,tzinfo=getTimeZoneInfo())

    self.assertEqual(a1.canTradeNow(current_time = bt),True) #9:30Opening
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-5,minutes=-30)),False) #4:00am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-3)),False) #6:30am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-2,minutes=-15)),False) #7:15am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=-2)),False) #9:28
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=2)),True) #9:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=5,minutes=2)),True) #14:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=6)),False) #15:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=7)),False) #16:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=8,minutes=2)),False) #17:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=10,minutes=2)),False) #19:32

  #
  # I don't want to trade between 10am - 10:30am of the Market
  # 
  def testTradingWithMiddayBlackoutTest(self):
    tm = RobotActivityWindow.objects.create(trade_before_open=False,trade_after_close=False,trade_during_extended_opening_hours=False,
      offset_after_open='0',offset_before_close='0',blackout_midday_from='10:00am',blackout_midday_time_interval='30')
    win1=tm.pk
    a1 = RobotActivityWindow.objects.get(id=win1)
    bt = datetime(year=2020, month=10, day=7,hour=9,minute=30,second=1,tzinfo=getTimeZoneInfo())

    self.assertEqual(a1.canTradeNow(current_time = bt),True) #9:30Opening
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-5,minutes=-30)),False) #4:00am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-3)),False) #6:30am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-2,minutes=-15)),False) #7:15am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=-2)),False) #9:28
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=2)),True) #9:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=35)),False) #10:35
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=5,minutes=2)),True) #14:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=6)),True) #15:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=7)),False) #16:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=8,minutes=2)),False) #17:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=10,minutes=2)),False) #19:32


  #
  # Various Combinations 1
  # 
  def testTradingWithVariousCombinations1Test(self):
    tm = RobotActivityWindow.objects.create(trade_before_open=True,trade_after_close=True,trade_during_extended_opening_hours=False,
      offset_after_open='45',offset_before_close='15',blackout_midday_from='11:00am',blackout_midday_time_interval='45')
    win1=tm.pk
    a1 = RobotActivityWindow.objects.get(id=win1)
    bt = datetime(year=2020, month=10, day=7,hour=9,minute=30,second=1,tzinfo=getTimeZoneInfo())

    self.assertEqual(a1.canTradeNow(current_time = bt),False) #9:30Opening
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-5,minutes=-30)),False) #4:00am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-3)),False) #6:30am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-2,minutes=-15)),True) #7:15am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=-2)),True) #9:28
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=2)),False) #9:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=35)),False) #10:05
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=5,minutes=2)),True) #14:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=6)),True) #15:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=7)),True) #16:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=8,minutes=2)),True) #17:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=10,minutes=2)),False) #19:32


  #
  # Various Combinations 2
  # 
  def testTradingWithVariousCombinations2Test(self):
    tm = RobotActivityWindow.objects.create(trade_before_open=False,trade_after_close=True,trade_during_extended_opening_hours=True,
      offset_after_open='30',offset_before_close='15',blackout_midday_from='11:00am',blackout_midday_time_interval='45')
    win1=tm.pk
    a1 = RobotActivityWindow.objects.get(id=win1)
    bt = datetime(year=2020, month=10, day=7,hour=9,minute=30,second=1,tzinfo=getTimeZoneInfo())

    self.assertEqual(a1.canTradeNow(current_time = bt),False) #9:30Opening
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-5,minutes=-30)),True) #4:00am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-3)),True) #6:30am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-2,minutes=-15)),False) #7:15am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=-2)),False) #9:28
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=2)),False) #9:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=35)),True) #10:05
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=5,minutes=2)),True) #14:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=6,minutes=18)),False) #15:48
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=7)),True) #16:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=8,minutes=2)),True) #17:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=10,minutes=2)),False) #19:32

  #
  # Various Combinations 3
  # 
  def testTradingWithVariousCombinations3Test(self):
    tm = RobotActivityWindow.objects.create(trade_before_open=True,trade_after_close=True,trade_during_extended_opening_hours=True,
      offset_after_open='0',offset_before_close='0',blackout_midday_from='11:00am',blackout_midday_time_interval='0')
    win1=tm.pk
    a1 = RobotActivityWindow.objects.get(id=win1)
    bt = datetime(year=2020, month=10, day=7,hour=9,minute=30,second=1,tzinfo=getTimeZoneInfo())

    self.assertEqual(a1.canTradeNow(current_time = bt),True) #9:30Opening
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-5,minutes=-30)),True) #4:00am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-3)),True) #6:30am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=-2,minutes=-15)),True) #7:15am
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=-2)),True) #9:28
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=2)),True) #9:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(minutes=35)),True) #10:35
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=5,minutes=2)),True) #14:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=6)),True) #15:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=7)),True) #16:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=8,minutes=2)),True) #17:32
    self.assertEqual(a1.canTradeNow(current_time = bt + timedelta(hours=10,minutes=2)),False) #19:32
Exemplo n.º 19
0
  def testOnValidBusinessDateMorning(self):
    #
    #  3.00 AM
    # 
    candidate = datetime(year=2020, month=10, day=2,hour=3,minute=0,second=1,tzinfo=getTimeZoneInfo())
    self.assertEqual(MarketBusinessHours.isOpen(current_date=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinAfterMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinExtendedPreMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinPreMarketHours(current_time=candidate),False)

    #
    #  4.00 PM
    # 
    candidate = datetime(year=2020, month=10, day=2,hour=4,minute=0,second=1,tzinfo=getTimeZoneInfo())
    self.assertEqual(MarketBusinessHours.isOpen(current_date=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinAfterMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinExtendedPreMarketHours(current_time=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinPreMarketHours(current_time=candidate),False)

    #
    #  5.01 PM
    # 
    candidate = datetime(year=2020, month=10, day=2,hour=5,minute=0,second=1,tzinfo=getTimeZoneInfo())
    self.assertEqual(MarketBusinessHours.isOpen(current_date=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinAfterMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinExtendedPreMarketHours(current_time=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinPreMarketHours(current_time=candidate),False)

    #
    #  6.01 PM
    # 
    candidate = datetime(year=2020, month=10, day=2,hour=6,minute=0,second=1,tzinfo=getTimeZoneInfo())
    self.assertEqual(MarketBusinessHours.isOpen(current_date=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinAfterMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinExtendedPreMarketHours(current_time=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinPreMarketHours(current_time=candidate),False)

    #
    #  7.01 AM
    # 
    candidate = datetime(year=2020, month=10, day=2,hour=7,minute=1,second=0,tzinfo=getTimeZoneInfo())
    self.assertEqual(MarketBusinessHours.isOpen(current_date=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinAfterMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinExtendedPreMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinPreMarketHours(current_time=candidate),True)

    #
    #  8.29 AM
    # 
    candidate = datetime(year=2020, month=10, day=2,hour=8,minute=29,second=1,tzinfo=getTimeZoneInfo())
    self.assertEqual(MarketBusinessHours.isOpen(current_date=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinAfterMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinExtendedPreMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinPreMarketHours(current_time=candidate),True)

    #
    #  9.31 AM
    # 
    candidate = datetime(year=2020, month=10, day=2,hour=9,minute=31,second=1,tzinfo=getTimeZoneInfo())
    self.assertEqual(MarketBusinessHours.isOpen(current_date=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinMarketHours(current_time=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinAfterMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinExtendedPreMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinPreMarketHours(current_time=candidate),False)

    #
    #  10.31 AM
    # 
    candidate = datetime(year=2020, month=10, day=2,hour=10,minute=31,second=1,tzinfo=getTimeZoneInfo())
    self.assertEqual(MarketBusinessHours.isOpen(current_date=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinMarketHours(current_time=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinAfterMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinExtendedPreMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinPreMarketHours(current_time=candidate),False)

    #
    #  11.35 AM
    # 
    candidate = datetime(year=2020, month=10, day=2,hour=11,minute=35,second=1,tzinfo=getTimeZoneInfo())
    self.assertEqual(MarketBusinessHours.isOpen(current_date=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinMarketHours(current_time=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinAfterMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinExtendedPreMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinPreMarketHours(current_time=candidate),False)
Exemplo n.º 20
0
  def testValidBusinessDateAfternoon(self):
    #
    #  12.00 PM
    # 
    candidate = datetime(year=2020, month=10, day=2,hour=12,minute=0,second=0,tzinfo=getTimeZoneInfo())
    self.assertEqual(MarketBusinessHours.isOpen(current_date=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinMarketHours(current_time=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinAfterMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinExtendedPreMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinPreMarketHours(current_time=candidate),False)

    #
    #  13.00 PM
    # 
    candidate = datetime(year=2020, month=10, day=2,hour=13,minute=0,second=0,tzinfo=getTimeZoneInfo())
    self.assertEqual(MarketBusinessHours.isOpen(current_date=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinMarketHours(current_time=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinAfterMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinExtendedPreMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinPreMarketHours(current_time=candidate),False)

    #
    #  14.20 PM
    # 
    candidate = datetime(year=2020, month=10, day=2,hour=14,minute=20,second=0,tzinfo=getTimeZoneInfo())
    self.assertEqual(MarketBusinessHours.isOpen(current_date=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinMarketHours(current_time=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinAfterMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinExtendedPreMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinPreMarketHours(current_time=candidate),False)

    #
    #  15.39 PM
    # 
    candidate = datetime(year=2020, month=10, day=2,hour=15,minute=39,second=0,tzinfo=getTimeZoneInfo())
    self.assertEqual(MarketBusinessHours.isOpen(current_date=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinMarketHours(current_time=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinAfterMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinExtendedPreMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinPreMarketHours(current_time=candidate),False)

    #
    #  16.42 PM
    # 
    candidate = datetime(year=2020, month=10, day=2,hour=16,minute=42,second=10,tzinfo=getTimeZoneInfo())
    self.assertEqual(MarketBusinessHours.isOpen(current_date=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinAfterMarketHours(current_time=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinExtendedPreMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinPreMarketHours(current_time=candidate),False)

    #
    #  17.39 PM
    # 
    candidate = datetime(year=2020, month=10, day=2,hour=17,minute=39,second=0,tzinfo=getTimeZoneInfo())
    self.assertEqual(MarketBusinessHours.isOpen(current_date=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinAfterMarketHours(current_time=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinExtendedPreMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinPreMarketHours(current_time=candidate),False)

    #
    #  18.39 PM
    # 
    candidate = datetime(year=2020, month=10, day=2,hour=18,minute=39,second=0,tzinfo=getTimeZoneInfo())
    self.assertEqual(MarketBusinessHours.isOpen(current_date=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinAfterMarketHours(current_time=candidate),True)
    self.assertEqual(MarketBusinessHours.isWithinExtendedPreMarketHours(current_time=candidate),False)
    self.assertEqual(MarketBusinessHours.isWithinPreMarketHours(current_time=candidate),False)
Exemplo n.º 21
0
class InvalidScenariosTestCase(TestCase):
  testname="InvalidScenariosTestCase"

  buy_date = datetime.datetime.now(getTimeZoneInfo())

  bull_json_empty_symbol ='{"symbol":"","price":126,"qty":10,"bull_buy_order_client_id":"a_buy_TQQQ"}'
  bear_json_empty_symbol ='{"symbol":"","price":5.5,"qty":170,"bear_buy_order_client_id":"a_buy_SQQQ"}'
  bull_empty = json.loads(bull_json_empty_symbol)
  bear_empty = json.loads(bear_json_empty_symbol)

  bull_json_bad_price ='{"symbol":"TQQQ","price":0,"qty":10,"bull_buy_order_client_id":"a_buy_TQQQ"}'
  bear_json_bad_price ='{"symbol":"SQQQ","price":0,"qty":170,"bear_buy_order_client_id":"a_buy_SQQQ"}'
  bull_b_p = json.loads(bull_json_bad_price)
  bear_b_p = json.loads(bull_json_bad_price)

  bull_json_negative_price ='{"symbol":"TQQQ","price":-1,"qty":10,"bull_buy_order_client_id":"a_buy_TQQQ"}'
  bear_json_negative_price ='{"symbol":"SQQQ","price":-5,"qty":170,"bear_buy_order_client_id":"a_buy_SQQQ"}'
  bull_n_p = json.loads(bull_json_negative_price)
  bear_n_p = json.loads(bear_json_negative_price)

  bull_json_invalid_quantity ='{"symbol":"TQQQ","price":120,"qty":0,"bull_buy_order_client_id":"a_buy_TQQQ"}'
  bear_json_invalid_quantity ='{"symbol":"SQQQ","price":6,"qty":0,"bear_buy_order_client_id":"a_buy_SQQQ"}'
  bull_i_q = json.loads(bull_json_invalid_quantity)
  bear_i_q = json.loads(bull_json_invalid_quantity)

  bull_json_invalid_cID ='{"symbol":"TQQQ","price":120,"qty":10,"bull_buy_order_client_id":"b_"}'
  bear_json_invalid_cID ='{"symbol":"SQQQ","price":6,"qty":170,"bear_buy_order_client_id":"bb_"}'
  bull_i_cID = json.loads(bull_json_invalid_cID)
  bear_i_cID = json.loads(bear_json_invalid_cID)

  @classmethod 
  def setUpTestData(self):
    if shouldUsePrint():
      print("Setting up {0}".format(self.testname))

  #@unittest.skip("Taking a break now")
  def testEmptySymbol(self):
    try:
      TradeDataHolder.recordAcquisitionTransaction(robot=None,bullish=self.bull_empty,bearish=self.bear_empty)
    except InvalidTradeDataHolderException:
      self.assertEqual(True,True)
    else:
      self.assertEqual(False,True)
  
  #@unittest.skip("Taking a break now")
  def testBadPrice(self):
    try:
      TradeDataHolder.recordAcquisitionTransaction(robot=None,bullish=self.bull_b_p,bearish=self.bear_b_p)
    except InvalidTradeDataHolderException:
      self.assertEqual(True,True)
    else:
      self.assertEqual(False,True)

  #@unittest.skip("Taking a break now")
  def testNegativePrice(self):
    try:
      TradeDataHolder.recordAcquisitionTransaction(robot=None,bullish=self.bull_n_p,bearish=self.bear_n_p)
    except InvalidTradeDataHolderException:
      self.assertEqual(True,True)
    else:
      self.assertEqual(False,True)

  #@unittest.skip("Taking a break now")
  def testInvalidQuantity(self):
    try:
      TradeDataHolder.recordAcquisitionTransaction(robot=None,bullish=self.bull_i_q,bearish=self.bear_i_q)
    except InvalidTradeDataHolderException:
      self.assertEqual(True,True)
    else:
      self.assertEqual(False,True)

  #@unittest.skip("Taking a break now")
  def testInvalidClientID(self):
    try:
      TradeDataHolder.recordAcquisitionTransaction(robot=None,bullish=self.bull_i_cID,bearish=self.bear_i_cID)
    except InvalidTradeDataHolderException:
      self.assertEqual(True,True)
    else:
      self.assertEqual(False,True)
Exemplo n.º 22
0
 def testTimezoneAwareDatesTest(self):
     now = datetime.datetime.now(getTimeZoneInfo())
Exemplo n.º 23
0
 def getPrice(symbol): 
   now=datetime.now(getTimeZoneInfo()) 
   data_q = EquityTradingData.objects.filter(symbol=symbol)
   daily_most_recent = data_q.filter(trade_datetime__date=date(now.year,now.month,now.day)).order_by('-trade_datetime')
   return daily_most_recent[0].price
Exemplo n.º 24
0
 def getDailyAverage(symbol): 
   now=datetime.now(getTimeZoneInfo()) 
   data_q = EquityTradingData.objects.filter(symbol=symbol)    
   daily_average = data_q.filter(trade_datetime__date=date(now.year,now.month,now.day)).aggregate(average=Avg('price'))
   return 0 if daily_average['average'] == None else daily_average['average']
Exemplo n.º 25
0
 def getDailyLow(symbol):
   now=datetime.now(getTimeZoneInfo()) 
   data_q = EquityTradingData.objects.filter(symbol=symbol)
   daily_low = data_q.filter(trade_datetime__date=date(now.year,now.month,now.day)).aggregate(lowest=Min('price'))
   return 0 if daily_low['lowest'] == None else daily_low['lowest']