def test_real_time_clock_schedule_relative(self): start = self.realtime_clock.now() print start print DateUtils.unixtimemillis_to_datetime(start) self.realtime_clock.schedule_relative(datetime.timedelta(seconds=1), self.realtime_action) self.assertEquals([], self.endtime) time.sleep(1.1) self.assertEquals(1, len(self.endtime)) self.assertAlmostEqual(1000, self.endtime[0] - start, -2)
def test_timestamp_conversion(self): dt = datetime.datetime(year=2000, month=1, day=1, hour=7, minute=30, second=30) ts = DateUtils.datetime_to_unixtimemillis(dt) self.assertEqual(946683030000, ts) dt2 = DateUtils.unixtimemillis_to_datetime(ts) self.assertEquals(dt, dt2) dt3 = datetime.datetime.fromtimestamp(0) ts2 = DateUtils.datetime_to_unixtimemillis(dt3) dt4 = DateUtils.unixtimemillis_to_datetime(ts2) self.assertEquals(0, ts2) self.assertEquals(dt3, dt4)
def on_bar(self, bar): reval_date = DateUtils.unixtimemillis_to_datetime(bar.timestamp) futures_expiry_dict = VIXFuture.future_expirydays_calculator(reval_date, self.instruments) active_futures = {k: v for k, v in futures_expiry_dict.iteritems() if v > self.exp_date_lb and v < self.exp_date_ub} active_futures_sorted = OrderedDict(sorted(active_futures.items(), key=lambda y: y[1])) if bar.inst_id in active_futures_sorted: logger.debug("id is in active futures" % bar.inst_id) roll = VIXFuture.daily_roll(bar.adj_close, self.vix_index.now("value"), active_futures_sorted[bar.inst_id]) logger.debug("roll = %s" % roll) if not self.portfolio.has_position(self.stg_id, bar.inst_id): threshold = self.get_stg_config_value("short_entry_threshold", 0.02) if roll > threshold: logger.debug("Roll > threshold %s" % threshold) logger.debug("Now send a short order") self.market_order(inst_id=bar.inst_id, action=OrdAction.SELL, qty=self.qty) else: threshold = self.get_stg_config_value("short_exit_threshold", -0.01) if roll < threshold: logger.debug("Roll < threshold %s" % threshold) logger.debug("Now exit") self.market_order(inst_id=bar.inst_id, action=OrdAction.BUY, qty=self.qty)
def test_real_time_clock_now(self): s1 = gevent.core.time() s2 = datetime.datetime.fromtimestamp(s1) print s1, s2 s3 = self.realtime_clock.now() s4 = DateUtils.unixtimemillis_to_datetime(s3) print s3, s4 self.assertAlmostEqual(s1 * 1000, s3, -2)
def test_real_time_clock_schedule_absolute(self): start = self.realtime_clock.now() dt = DateUtils.unixtimemillis_to_datetime(start) abs_time = dt + datetime.timedelta(seconds=1) self.realtime_clock.schedule_absolute(abs_time, self.realtime_action) self.assertEquals([], self.endtime) time.sleep(1.1) self.assertEquals(1, len(self.endtime)) self.assertAlmostEqual(1000, self.endtime[0] - start, -2)
def on_bar(self, bar): reval_date = DateUtils.unixtimemillis_to_datetime(bar.timestamp) futures_expiry_dict = VIXFuture.future_expirydays_calculator( reval_date, self.instruments) active_futures = { k: v for k, v in futures_expiry_dict.iteritems() if v > self.exp_date_lb and v < self.exp_date_ub } active_futures_sorted = OrderedDict( sorted(active_futures.items(), key=lambda y: y[1])) if bar.inst_id in active_futures_sorted: logger.debug("id is in active futures" % bar.inst_id) roll = VIXFuture.daily_roll(bar.adj_close, self.vix_index.now("value"), active_futures_sorted[bar.inst_id]) logger.debug("roll = %s" % roll) if not self.portfolio.has_position(self.stg_id, bar.inst_id): threshold = self.get_stg_config_value("short_entry_threshold", 0.02) if roll > threshold: logger.debug("Roll > threshold %s" % threshold) logger.debug("Now send a short order") self.market_order(inst_id=bar.inst_id, action=OrdAction.SELL, qty=self.qty) else: threshold = self.get_stg_config_value("short_exit_threshold", -0.01) if roll < threshold: logger.debug("Roll < threshold %s" % threshold) logger.debug("Now exit") self.market_order(inst_id=bar.inst_id, action=OrdAction.BUY, qty=self.qty)
dt = DateUtils.unixtimemillis_to_datetime(start) abs_time = dt + datetime.timedelta(seconds=1) self.realtime_clock.schedule_absolute(abs_time, self.realtime_action) self.assertEquals([], self.endtime) time.sleep(1.1) self.assertEquals(1, len(self.endtime)) self.assertAlmostEqual(1000, self.endtime[0] - start, -2) def test_real_time_clock_schedule_relative(self): start = self.realtime_clock.now() print start print DateUtils.unixtimemillis_to_datetime(start) self.realtime_clock.schedule_relative(datetime.timedelta(seconds=1), self.realtime_action) self.assertEquals([], self.endtime) time.sleep(1.1) self.assertEquals(1, len(self.endtime)) self.assertAlmostEqual(1000, self.endtime[0] - start, -2) def test_real_time_clock_now(self): s1 = gevent.core.time() s2 = datetime.datetime.fromtimestamp(s1) print s1, s2 s3 = self.realtime_clock.now() s4 = DateUtils.unixtimemillis_to_datetime(s3) print s3, s4 self.assertAlmostEqual(s1 * 1000, s3, -2) print DateUtils.unixtimemillis_to_datetime(946683030000) print DateUtils.unixtimemillis_to_datetime(946711830000)
abs_time = dt + datetime.timedelta(seconds=1) self.realtime_clock.schedule_absolute(abs_time, self.realtime_action) self.assertEquals([], self.endtime) time.sleep(1.1) self.assertEquals(1, len(self.endtime)) self.assertAlmostEqual(1000, self.endtime[0] - start, -2) def test_real_time_clock_schedule_relative(self): start = self.realtime_clock.now() print start print DateUtils.unixtimemillis_to_datetime(start) self.realtime_clock.schedule_relative(datetime.timedelta(seconds=1), self.realtime_action) self.assertEquals([], self.endtime) time.sleep(1.1) self.assertEquals(1, len(self.endtime)) self.assertAlmostEqual(1000, self.endtime[0] - start, -2) def test_real_time_clock_now(self): s1 = gevent.core.time() s2 = datetime.datetime.fromtimestamp(s1) print s1, s2 s3 = self.realtime_clock.now() s4 = DateUtils.unixtimemillis_to_datetime(s3) print s3, s4 self.assertAlmostEqual(s1 * 1000, s3, -2) print DateUtils.unixtimemillis_to_datetime(946683030000) print DateUtils.unixtimemillis_to_datetime(946711830000)
def schedule_absolute(self, datetime, action, state=None): if isinstance(datetime, (long, int)): datetime = DateUtils.unixtimemillis_to_datetime(datetime) self.scheduler.schedule_absolute(datetime, action, state)
def update_time(self, timestamp): self.__current_timestamp_mills = timestamp self.scheduler.advance_to(DateUtils.unixtimemillis_to_datetime(timestamp))
def action(*arg): print DateUtils.unixtimemillis_to_datetime(realtime_clock.now())