@Override
 public Rate getRate(Currency from, Currency to) throws Exception {
   if ((from == null) || (to == null)) {
     throw new IllegalArgumentException();
   }
   String path = (from.getCode() + "_" + to.getCode() + "/ticker").toLowerCase();
   TickerResponse tickerResponse = get(BTCE_API_BASE_URL, path, TickerResponse.class, true);
   Ticker ticker = tickerResponse.getTicker();
   return new Rate(ticker.getBuy(), from, to);
 }
Example #2
0
 /**
  * Stops the stopwatch. Future reads will return the fixed duration that had elapsed up to this
  * point.
  *
  * @return this {@code Stopwatch} instance
  * @throws IllegalStateException if the stopwatch is already stopped.
  */
 public Stopwatch stop() {
   long tick = ticker.read();
   checkState(isRunning, "This stopwatch is already stopped.");
   isRunning = false;
   elapsedNanos += tick - startTick;
   return this;
 }
Example #3
0
  @VisibleForTesting
  QuantileDigest(double maxError, double alpha, Ticker ticker, boolean compressAutomatically) {
    checkArgument(maxError >= 0 && maxError <= 1, "maxError must be in range [0, 1]");
    checkArgument(alpha >= 0 && alpha < 1, "alpha must be in range [0, 1)");

    this.maxError = maxError;
    this.alpha = alpha;
    this.ticker = ticker;
    this.compressAutomatically = compressAutomatically;

    landmarkInSeconds = TimeUnit.NANOSECONDS.toSeconds(ticker.read());
  }
Example #4
0
  /*
   * Get the exponentially-decayed approximate counts of values in multiple buckets. The elements in
   * the provided list denote the upper bound each of the buckets and must be sorted in ascending
   * order.
   *
   * The approximate count in each bucket is guaranteed to be within 2 * totalCount * maxError of
   * the real count.
   */
  public List<Bucket> getHistogram(List<Long> bucketUpperBounds) {
    checkArgument(
        Ordering.natural().isOrdered(bucketUpperBounds),
        "buckets must be sorted in increasing order");

    final ImmutableList.Builder<Bucket> builder = ImmutableList.builder();
    final PeekingIterator<Long> iterator = Iterators.peekingIterator(bucketUpperBounds.iterator());

    final AtomicDouble sum = new AtomicDouble();
    final AtomicDouble lastSum = new AtomicDouble();

    // for computing weighed average of values in bucket
    final AtomicDouble bucketWeightedSum = new AtomicDouble();

    final double normalizationFactor = weight(TimeUnit.NANOSECONDS.toSeconds(ticker.read()));

    postOrderTraversal(
        root,
        new Callback() {
          @Override
          public boolean process(Node node) {

            while (iterator.hasNext() && iterator.peek() <= node.getUpperBound()) {
              double bucketCount = sum.get() - lastSum.get();

              Bucket bucket =
                  new Bucket(
                      bucketCount / normalizationFactor, bucketWeightedSum.get() / bucketCount);

              builder.add(bucket);
              lastSum.set(sum.get());
              bucketWeightedSum.set(0);
              iterator.next();
            }

            bucketWeightedSum.addAndGet(node.getMiddle() * node.weightedCount);
            sum.addAndGet(node.weightedCount);
            return iterator.hasNext();
          }
        });

    while (iterator.hasNext()) {
      double bucketCount = sum.get() - lastSum.get();
      Bucket bucket =
          new Bucket(bucketCount / normalizationFactor, bucketWeightedSum.get() / bucketCount);

      builder.add(bucket);

      iterator.next();
    }

    return builder.build();
  }
Example #5
0
  @Override
  public void mouseClicked(MouseEvent mouseEvent) {
    if (isActive) {
      sqtList.onClicked(mouseEvent.getPoint());
      repaint();

      if (sqtList.tilesMoving()) {
        isActive = false;
        puzzleTicker.tick();
      }
    }
  }
Example #6
0
  /** Adds a value to this digest. The value must be {@code >= 0} */
  public void add(long value, long count) {
    checkArgument(count > 0, "count must be > 0");

    long nowInSeconds = TimeUnit.NANOSECONDS.toSeconds(ticker.read());

    int maxExpectedNodeCount = 3 * calculateCompressionFactor();
    if (nowInSeconds - landmarkInSeconds >= RESCALE_THRESHOLD_SECONDS) {
      rescale(nowInSeconds);
      compress(); // need to compress to get rid of nodes that may have decayed to ~ 0
    } else if (nonZeroNodeCount > MAX_SIZE_FACTOR * maxExpectedNodeCount && compressAutomatically) {
      // The size (number of non-zero nodes) of the digest is at most 3 * compression factor
      // If we're over MAX_SIZE_FACTOR of the expected size, compress
      // Note: we don't compress as soon as we go over expectedNodeCount to avoid unnecessarily
      // running a compression for every new added element when we're close to boundary
      compress();
    }

    double weight = weight(TimeUnit.NANOSECONDS.toSeconds(ticker.read())) * count;

    max = Math.max(max, value);
    min = Math.min(min, value);

    insert(longToBits(value), weight);
  }
Example #7
0
  @Override
  public void update(long dt) {
    sqtList.onUpdate(dt);
    repaint();

    if (!sqtList.tilesMoving()) {
      isActive = true;
      puzzleTicker.pause();
    }

    if (sqtList.puzzleCompleted()) {
      stateMachine.state = State.COMPLETED;
      stateMachine.executeState();
      isActive = false;
    }
  }
Example #8
0
  private void rescaleToCommonLandmark(QuantileDigest one, QuantileDigest two) {
    long nowInSeconds = TimeUnit.NANOSECONDS.toSeconds(ticker.read());

    // 1. rescale this and other to common landmark
    long targetLandmark = Math.max(one.landmarkInSeconds, two.landmarkInSeconds);

    if (nowInSeconds - targetLandmark >= RESCALE_THRESHOLD_SECONDS) {
      targetLandmark = nowInSeconds;
    }

    if (targetLandmark != one.landmarkInSeconds) {
      one.rescale(targetLandmark);
    }

    if (targetLandmark != two.landmarkInSeconds) {
      two.rescale(targetLandmark);
    }
  }
 private void handleRemovedTicker(
     Ticker ticker, ServiceDependency serviceDependency, Bundle bundle, boolean satisfied) {
   boolean hasTicked = ticker.cancel();
   if (hasTicked) {
     if (satisfied) {
       this.eventLogger.log(
           KernelLogEvents.APPLICATION_CONTEXT_DEPENDENCY_SATISFIED,
           serviceDependency.getBeanName(),
           bundle.getSymbolicName(),
           bundle.getVersion(),
           serviceDependency.getFilter());
     } else {
       this.eventLogger.log(
           KernelLogEvents.APPLICATION_CONTEXT_DEPENDENCY_TIMED_OUT,
           serviceDependency.getBeanName(),
           bundle.getSymbolicName(),
           bundle.getVersion(),
           serviceDependency.getFilter());
     }
   }
 }
Example #10
0
 /**
  * Create a QuantileDigest with a maximum error guarantee of "maxError" and exponential decay with
  * factor "alpha".
  *
  * @param maxError the max error tolerance
  * @param alpha the exponential decay factor
  */
 public QuantileDigest(double maxError, double alpha) {
   this(maxError, alpha, Ticker.systemTicker(), true);
 }
Example #11
0
 /** Number (decayed) of elements added to this quantile digest */
 public double getCount() {
   return weightedCount / weight(TimeUnit.NANOSECONDS.toSeconds(ticker.read()));
 }
Example #12
0
 private long elapsedNanos() {
   return isRunning ? ticker.read() - startTick + elapsedNanos : elapsedNanos;
 }
Example #13
0
 /**
  * Starts the stopwatch.
  *
  * @return this {@code Stopwatch} instance
  * @throws IllegalStateException if the stopwatch is already running.
  */
 public Stopwatch start() {
   checkState(!isRunning, "This stopwatch is already running.");
   isRunning = true;
   startTick = ticker.read();
   return this;
 }
Example #14
0
 Stopwatch() {
   this.ticker = Ticker.systemTicker();
 }
Example #15
0
  @Override
  public void run(ArrayList<Double> debugData) {
    Ticker lastTicker = exchange.getTicker();
    OrderType intend;

    try {
      intend = genome.addTicker(lastTicker, debugData);
    } catch (IOException e) {
      return;
    }

    NormalOrder order = new NormalOrder();
    Wallet wallet = exchange.getWallet();

    // state machine needed for not immediate executed tickers
    switch (state) {
      case DOBUY:
        switch (intend) {
          case DO_NOTHING:
          case BUY:
            // TODO what if cancelling is not working?

            if (exchange.getOrderResult((NormalOrder) pendingOrder) == Order.State.DONE
                || wallet.getBalance() == 0) {
              state = OrderState.BOUGHT;
              break;
            }

            pendingOrder =
                (exchange.cancelOrder(pendingOrder) == true) ? new NoOrder() : pendingOrder;
            order.setPrice(lastTicker.getPrice());
            order.setVolume(exchange.getWallet().getBalanceBitcoins(lastTicker.getPrice()));
            order.setOrderType(OrderType.BUY);
            order.setState(Order.State.OPEN);
            pendingOrder = exchange.placeBuyOrder(order);
            state = OrderState.DOBUY;
            break;
          case SELL:
            // TODO what if cancelling is not working?
            pendingOrder =
                (exchange.cancelOrder(pendingOrder) == true) ? new NoOrder() : pendingOrder;
            if (exchange.getWallet().getBitCoins() != 0) {
              order = new NormalOrder();
              order.setPrice(lastTicker.getPrice());
              order.setVolume(exchange.getWallet().getBalanceBitcoins(lastTicker.getPrice()));
              order.setOrderType(OrderType.SELL);
              order.setState(Order.State.OPEN);
              pendingOrder = exchange.placeSellOrder(new NormalOrder());
              state = OrderState.DOSELL;
            } else {
              state = OrderState.SOLD;
            }
            break;
        }
        break;
      case BOUGHT:
        switch (intend) {
          case BUY:
            state = OrderState.BOUGHT;
            break;
          case SELL:
            if (exchange.getWallet().getBitCoins() != 0) {
              order = new NormalOrder();
              order.setPrice(lastTicker.getPrice());
              order.setVolume(exchange.getWallet().getBalanceBitcoins(lastTicker.getPrice()));
              order.setOrderType(OrderType.SELL);
              order.setState(Order.State.OPEN);
              pendingOrder = exchange.placeSellOrder(new NormalOrder());
              state = OrderState.DOSELL;
            } else {
              state = OrderState.SOLD;
            }
            break;

          case DO_NOTHING:
            state = OrderState.BOUGHT;
            break;
        }
        break;
      case DOSELL:
        switch (intend) {
          case DO_NOTHING:
          case BUY:
            // TODO what if cancelling is not working?
            pendingOrder =
                (exchange.cancelOrder(pendingOrder) == true) ? new NoOrder() : pendingOrder;
            if (exchange.getWallet().getBalance() != 0) {
              order.setPrice(lastTicker.getPrice());
              order.setVolume(exchange.getWallet().getBalanceBitcoins(lastTicker.getPrice()));
              order.setOrderType(OrderType.BUY);
              order.setState(Order.State.OPEN);
              pendingOrder = exchange.placeBuyOrder(order);
              state = OrderState.DOBUY;
            } else {
              state = OrderState.BOUGHT;
            }
            break;
          case SELL:
            if (exchange.getOrderResult((NormalOrder) pendingOrder) == Order.State.DONE
                || wallet.getBitCoins() == 0) {
              state = OrderState.SOLD;
              break;
            }
            // TODO what if cancelling is not working?
            pendingOrder =
                (exchange.cancelOrder(pendingOrder) == true) ? new NoOrder() : pendingOrder;
            order = new NormalOrder();
            order.setPrice(lastTicker.getPrice());
            order.setVolume(exchange.getWallet().getBalanceBitcoins(lastTicker.getPrice()));
            order.setOrderType(OrderType.SELL);
            order.setState(Order.State.OPEN);
            pendingOrder = exchange.placeSellOrder(new NormalOrder());
            state = OrderState.DOSELL;
            break;
        }
      case SOLD:
        switch (intend) {
          case SELL:
            state = OrderState.SOLD;
            break;
          case BUY:
            if (exchange.getWallet().getBalance() != 0) {
              order = new NormalOrder();
              order.setPrice(lastTicker.getPrice());
              order.setVolume(exchange.getWallet().getBalanceBitcoins(lastTicker.getPrice()));
              order.setOrderType(OrderType.BUY);
              order.setState(Order.State.OPEN);
              pendingOrder = exchange.placeBuyOrder(new NormalOrder());
              state = OrderState.DOBUY;
            } else {
              state = OrderState.BOUGHT;
            }
            break;

          case DO_NOTHING:
            state = OrderState.BOUGHT;
            break;
        }
      case INIT:
        switch (intend) {
          case DO_NOTHING:
            state = OrderState.INIT;
            break;
          case BUY:
            pendingOrder =
                (exchange.cancelOrder(pendingOrder) == true) ? new NoOrder() : pendingOrder;
            order.setPrice(lastTicker.getPrice());
            order.setVolume(exchange.getWallet().getBalanceBitcoins(lastTicker.getPrice()));
            order.setOrderType(OrderType.BUY);
            order.setState(Order.State.OPEN);
            pendingOrder = exchange.placeBuyOrder(order);
            state = OrderState.DOBUY;
            break;
          case SELL:
            if (exchange.getWallet().getBitCoins() != 0) {
              order = new NormalOrder();
              order.setPrice(lastTicker.getPrice());
              order.setVolume(exchange.getWallet().getBalanceBitcoins(lastTicker.getPrice()));
              order.setOrderType(OrderType.SELL);
              order.setState(Order.State.OPEN);
              pendingOrder = exchange.placeSellOrder(new NormalOrder());
              state = OrderState.DOSELL;
            } else {
              state = OrderState.SOLD;
            }
            break;
        }

        break;
      default:
        break;
    }
    // logger.debug(exchange.getWallet().toString());
  }