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
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)
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)
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
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())
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)
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']
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
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
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)
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)
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)
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)
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
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)
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')
def setUpTestData(self): displayOutput("Setting up Test: {}".format(self.test_name)) today = datetime.now(getTimeZoneInfo())
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
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)
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)
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)
def testTimezoneAwareDatesTest(self): now = datetime.datetime.now(getTimeZoneInfo())
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
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']
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']