Beispiel #1
0
def change_timezones(time_entries, tz):
    for t in time_entries:
        start_date = str_to_datetime(t.start_date)
        end_date = str_to_datetime(t.end_date)

        t.start_date = datetime_str(start_date.astimezone(tz))
        t.end_date = datetime_str(end_date.astimezone(tz))
Beispiel #2
0
def cut_time_entries_out_of_range(time_entries, dr):
    start, end = dr.start(), dr.end()
    for t in time_entries:
        te_start, te_end = (
            str_to_datetime(t.start_date),
            str_to_datetime(t.end_date),
        )
        if te_start < start:
            t.start_date = datetime_str(start)
        if end < te_end:
            t.end_date = datetime_str(end)
Beispiel #3
0
def filter_time_entries(time_entries, dr: DateRange):
    start, end = dr.start(), dr.end()
    result = []
    for t in time_entries:
        te_start, te_end = (
            str_to_datetime(t.start_date),
            str_to_datetime(t.end_date),
        )
        in_range = start <= te_start <= end or start <= te_end <= end
        if in_range:
            result.append(deepcopy(t))
    return result
Beispiel #4
0
    def update_last_entry(
        self,
        owner_id: str,
        start_date: str,
        id_running_entry: str,
        event_context: EventContext,
    ):
        last_entry = self.get_last_entry(owner_id, id_running_entry,
                                         event_context)
        end_date = str_to_datetime(last_entry.end_date)
        _start_date = str_to_datetime(start_date)

        if _start_date < end_date:
            update_data = {'end_date': start_date}
            self.partial_update(last_entry.id, update_data, event_context)
Beispiel #5
0
    def load_trades(self):
        logger.info('[TRADE_MANAGER] loading %s trades.' % len(self.account.get_trades()))
        if self.account and self.account.broker == 'FXCM':
            for trade_id, trade in self.account.get_trades().items():
                if str(trade_id) in self.trades:
                    continue
                self._load_trade(trade_id, trade)

            key_list = list(self.trades.keys())
            for key in key_list:
                if int(key) not in self.account.get_trades():
                    self.pop_trade(key)
        else:
            raise NotImplementedError

        # restore old data from redis
        redis_data = system_redis.get(TRADES_KEY)
        if redis_data:
            redis_data = json.loads(redis_data)

            for k, v in redis_data.items():
                if k in self.trades:
                    self.trades[k]['max'] = Decimal(str(redis_data[k]['max']))
                    self.trades[k]['min'] = Decimal(str(redis_data[k]['min']))
                    self.trades[k]['profitable_seconds'] = redis_data[k]['profitable_seconds']
                    self.trades[k]['last_profitable_start'] = str_to_datetime(redis_data[k]['last_profitable_start'])
                    total_time = datetime.utcnow() - self.trades[k]['open_time']
                    last_profit_period = 0
                    if self.trades[k]['last_profitable_start']:
                        last_profit_period = (datetime.utcnow() - self.trades[k]['last_profitable_start']).seconds
                    total_profit_seconds = self.trades[k]['profitable_seconds'] + last_profit_period
                    self.trades[k]['profitable_time'] = round(total_profit_seconds / float(total_time.seconds), 3)

        self.saved_to_redis()
    def handle_date_filter_args(args: dict) -> dict:
        if "start_date" and "end_date" in args:
            start_date = str_to_datetime(args.pop('start_date'))
            end_date = str_to_datetime(args.pop('end_date'))
        else:
            month = int(args.pop("month", get_current_month()))
            year = int(args.pop("year", get_current_year()))
            start_date, end_date = get_date_range_of_month(year, month)

        offset_in_minutes = int(args.pop('timezone_offset', 300))
        start_date = start_date + timedelta(minutes=offset_in_minutes)
        end_date = end_date + timedelta(minutes=offset_in_minutes)

        return {
            'start_date': datetime_str(start_date),
            'end_date': datetime_str(end_date),
        }
Beispiel #7
0
def get_tick_price(instrument):
    key = instrument.upper() + TICK_PRICE_SUFFIX
    data = price_redis.get(key)
    if data:
        price = json.loads(data)
        if 'ask' in price:
            price['ask'] = Decimal(str(price['ask']))
        if 'bid' in price:
            price['bid'] = Decimal(str(price['bid']))
        if 'time' in price:
            price['time'] = str_to_datetime(price['time'],
                                            format='%Y-%m-%d %H:%M:%S:%f')
        return price
    return None
 def elapsed_time(self) -> timedelta:
     start_datetime = str_to_datetime(self.start_date)
     end_datetime = str_to_datetime(self.end_date)
     return end_datetime - start_datetime