@Override
 public Coupon toDerivative(final ZonedDateTime dateTime) {
   ArgumentChecker.notNull(dateTime, "date");
   final LocalDate dayConversion = dateTime.toLocalDate();
   ArgumentChecker.isTrue(
       !dayConversion.isAfter(getFixingDate().toLocalDate()),
       "Do not have any fixing data but are asking for a derivative at "
           + dateTime
           + " which is after fixing date "
           + getFixingDate());
   ArgumentChecker.isTrue(
       !dayConversion.isAfter(getPaymentDate().toLocalDate()), "date is after payment date");
   final double paymentTime = TimeCalculator.getTimeBetween(dateTime, getPaymentDate());
   final double fixingTime = TimeCalculator.getTimeBetween(dateTime, getFixingDate());
   final double fixingPeriodStartTime =
       TimeCalculator.getTimeBetween(dateTime, getFixingPeriodStartDate());
   final double fixingPeriodEndTime =
       TimeCalculator.getTimeBetween(dateTime, getFixingPeriodEndDate());
   return new CouponIbor(
       getCurrency(),
       paymentTime,
       getPaymentYearFraction(),
       getNotional(),
       fixingTime,
       getIndex(),
       fixingPeriodStartTime,
       fixingPeriodEndTime,
       getFixingPeriodAccrualFactor());
 }
 @Test
 public void testReturnsWithZeroesInSeries() {
   final int n = 20;
   final LocalDate[] times = new LocalDate[n];
   final double[] data = new double[n];
   final double[] returns = new double[n - 3];
   double random;
   for (int i = 0; i < n - 2; i++) {
     times[i] = LocalDate.ofEpochDay(i);
     random = RANDOM.nextDouble();
     data[i] = random;
     if (i > 0) {
       returns[i - 1] = Math.log(random / data[i - 1]);
     }
   }
   times[n - 2] = LocalDate.ofEpochDay(n - 2);
   data[n - 2] = 0;
   times[n - 1] = LocalDate.ofEpochDay(n - 1);
   data[n - 1] = RANDOM.nextDouble();
   final LocalDateDoubleTimeSeries priceTS = ImmutableLocalDateDoubleTimeSeries.of(times, data);
   final LocalDateDoubleTimeSeries returnTS =
       ImmutableLocalDateDoubleTimeSeries.of(Arrays.copyOfRange(times, 1, n - 2), returns);
   final TimeSeriesReturnCalculator strict =
       new ContinuouslyCompoundedTimeSeriesReturnCalculator(CalculationMode.STRICT);
   final LocalDateDoubleTimeSeries[] tsArray = new LocalDateDoubleTimeSeries[] {priceTS};
   try {
     strict.evaluate(tsArray);
     Assert.fail();
   } catch (final TimeSeriesException e) {
     // Expected
   }
   final TimeSeriesReturnCalculator lenient =
       new ContinuouslyCompoundedTimeSeriesReturnCalculator(CalculationMode.LENIENT);
   assertTrue(lenient.evaluate(tsArray).equals(returnTS));
 }
 @Test
 public void testReturnsWithDividendsAtDifferentTimes() {
   final int n = 20;
   final LocalDate[] times = new LocalDate[n];
   final double[] data = new double[n];
   final double[] returns = new double[n - 1];
   double random;
   for (int i = 0; i < n; i++) {
     times[i] = LocalDate.ofEpochDay(i);
     random = RANDOM.nextDouble();
     data[i] = random;
     if (i > 0) {
       returns[i - 1] = Math.log(random / data[i - 1]);
     }
   }
   final LocalDateDoubleTimeSeries dividendTS =
       ImmutableLocalDateDoubleTimeSeries.of(
           new LocalDate[] {LocalDate.ofEpochDay(300)}, new double[] {3});
   final LocalDateDoubleTimeSeries priceTS = ImmutableLocalDateDoubleTimeSeries.of(times, data);
   final LocalDateDoubleTimeSeries returnTS =
       ImmutableLocalDateDoubleTimeSeries.of(Arrays.copyOfRange(times, 1, n), returns);
   assertTrue(
       CALCULATOR
           .evaluate(new LocalDateDoubleTimeSeries[] {priceTS, dividendTS})
           .equals(returnTS));
 }
  /**
   * Calculate the accrued premium at the start of a trade
   *
   * @param premiumLegSchedule
   * @param stepinDate The trade effective date
   * @return accrued premium
   */
  private double calculateAccruedInterest(
      final ISDAPremiumLegSchedule premiumLegSchedule, final LocalDate stepinDate) {

    final int n = premiumLegSchedule.getNumPayments();

    // stepinDate is before first accStart or after last accEnd
    if (!stepinDate.isAfter(premiumLegSchedule.getAccStartDate(0))
        || !stepinDate.isBefore(premiumLegSchedule.getAccEndDate(n - 1))) {
      return 0.0;
    }

    int index = premiumLegSchedule.getAccStartDateIndex(stepinDate);
    if (index >= 0) {
      return 0.0; // on accrual start date
    }

    index = -(index + 1); // binary search notation
    if (index == 0) {
      throw new MathException(
          "Error in calculateAccruedInterest - check logic"); // this should never be hit
    }

    return _accuralDayCount.getDayCountFraction(
        premiumLegSchedule.getAccStartDate(index - 1), stepinDate);
  }
 @Test
 public void test() {
   for (int i = 1; i < 30; i++) {
     final LocalDate date = LocalDate.of(2013, 1, i);
     assertEquals(LocalDate.of(2013, 1, 31), ADJUSTER.adjustInto(date));
   }
 }
 @BeforeMethod
 public void setUp() {
   dates = new LocalDate[] {LocalDate.of(2012, 6, 30), LocalDate.of(2012, 7, 1)};
   values = new double[] {1.1d, 2.2d};
   ts = ImmutableLocalDateDoubleTimeSeries.of(dates, values);
   empty = ImmutableLocalDateDoubleTimeSeries.EMPTY_SERIES;
 }
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    datePicker = (WeekDatePicker) findViewById(R.id.date_picker);

    datePicker.setDateIndicator(LocalDate.now().plusDays(1), true);
    datePicker.setLimits(LocalDate.now().minusWeeks(1), null);
  }
  @Override
  public Coupon toDerivative(
      final ZonedDateTime date,
      final DoubleTimeSeries<ZonedDateTime> priceIndexTimeSeries,
      final String... yieldCurveNames) {
    ArgumentChecker.notNull(date, "date");
    ArgumentChecker.notNull(yieldCurveNames, "yield curve names");
    ArgumentChecker.isTrue(yieldCurveNames.length > 0, "at least one curve required");
    ArgumentChecker.isTrue(!date.isAfter(getPaymentDate()), "date is after payment date");
    final double lastKnownFixingTime =
        TimeCalculator.getTimeBetween(date, getLastKnownFixingDate());
    final LocalDate dayConversion = date.toLocalDate();
    final String discountingCurveName = yieldCurveNames[0];
    final double paymentTime = TimeCalculator.getTimeBetween(date, getPaymentDate());
    final LocalDate dayFixing = getReferenceEndDate()[1].toLocalDate();
    if (dayConversion.isAfter(dayFixing)) {
      final Double fixedEndIndex1 = priceIndexTimeSeries.getValue(getReferenceEndDate()[1]);

      if (fixedEndIndex1 != null) {
        final Double fixedEndIndex0 = priceIndexTimeSeries.getValue(getReferenceEndDate()[0]);
        final Double fixedEndIndex =
            getWeight() * fixedEndIndex0 + (1 - getWeight()) * fixedEndIndex1;
        final Double fixedRate = (fixedEndIndex / getIndexStartValue() - 1.0);
        return new CouponFixed(
            getCurrency(),
            paymentTime,
            discountingCurveName,
            getPaymentYearFraction(),
            getNotional(),
            payOff(fixedRate));
      }
    }
    final double[] referenceEndTime = new double[2];
    referenceEndTime[0] = TimeCalculator.getTimeBetween(date, _referenceEndDate[0]);
    referenceEndTime[1] = TimeCalculator.getTimeBetween(date, _referenceEndDate[1]);
    final ZonedDateTime naturalPaymentDate =
        getPaymentDate().minusMonths(_monthLag - _conventionalMonthLag);
    final double naturalPaymentEndTime = TimeCalculator.getTimeBetween(date, naturalPaymentDate);
    return new CapFloorInflationZeroCouponInterpolation(
        getCurrency(),
        paymentTime,
        getPaymentYearFraction(),
        getNotional(),
        getPriceIndex(),
        lastKnownFixingTime,
        _indexStartValue,
        referenceEndTime,
        naturalPaymentEndTime,
        _maturity,
        _weight,
        _strike,
        _isCap);
  }
  private InterestRateSwapSecurity createFixedVsLibor3mSwap() {

    InterestRateSwapNotional notional = new InterestRateSwapNotional(Currency.USD, 100_000_000);
    PeriodFrequency freq6m = PeriodFrequency.of(Period.ofMonths(6));
    PeriodFrequency freq3m = PeriodFrequency.of(Period.ofMonths(3));
    Set<ExternalId> calendarUSNY =
        Sets.newHashSet(ExternalId.of(ExternalSchemes.ISDA_HOLIDAY, "USNY"));
    List<InterestRateSwapLeg> legs = new ArrayList<>();

    FixedInterestRateSwapLeg payLeg = new FixedInterestRateSwapLeg();
    payLeg.setNotional(notional);
    payLeg.setDayCountConvention(DayCounts.THIRTY_U_360);
    payLeg.setPaymentDateFrequency(freq6m);
    payLeg.setPaymentDateBusinessDayConvention(BusinessDayConventions.MODIFIED_FOLLOWING);
    payLeg.setPaymentDateCalendars(calendarUSNY);
    payLeg.setMaturityDateBusinessDayConvention(BusinessDayConventions.MODIFIED_FOLLOWING);
    payLeg.setAccrualPeriodFrequency(freq6m);
    payLeg.setAccrualPeriodBusinessDayConvention(BusinessDayConventions.MODIFIED_FOLLOWING);
    payLeg.setAccrualPeriodCalendars(calendarUSNY);
    payLeg.setRate(new Rate(0.0150));
    payLeg.setPayReceiveType(PayReceiveType.PAY);
    legs.add(payLeg);

    FloatingInterestRateSwapLeg receiveLeg = new FloatingInterestRateSwapLeg();
    receiveLeg.setNotional(notional);
    receiveLeg.setDayCountConvention(DayCounts.ACT_360);
    receiveLeg.setPaymentDateFrequency(freq3m);
    receiveLeg.setPaymentDateBusinessDayConvention(BusinessDayConventions.MODIFIED_FOLLOWING);
    receiveLeg.setPaymentDateCalendars(calendarUSNY);
    receiveLeg.setMaturityDateBusinessDayConvention(BusinessDayConventions.MODIFIED_FOLLOWING);
    receiveLeg.setAccrualPeriodFrequency(freq3m);
    receiveLeg.setAccrualPeriodBusinessDayConvention(BusinessDayConventions.MODIFIED_FOLLOWING);
    receiveLeg.setAccrualPeriodCalendars(calendarUSNY);
    receiveLeg.setResetPeriodFrequency(freq3m);
    receiveLeg.setResetPeriodBusinessDayConvention(BusinessDayConventions.MODIFIED_FOLLOWING);
    receiveLeg.setResetPeriodCalendars(calendarUSNY);
    receiveLeg.setFixingDateBusinessDayConvention(BusinessDayConventions.PRECEDING);
    receiveLeg.setFixingDateCalendars(calendarUSNY);
    receiveLeg.setFixingDateOffset(-2);
    receiveLeg.setFloatingRateType(FloatingRateType.IBOR);
    receiveLeg.setFloatingReferenceRateId(InterestRateMockSources.getLiborIndexId());
    receiveLeg.setPayReceiveType(PayReceiveType.RECEIVE);

    legs.add(receiveLeg);

    return new InterestRateSwapSecurity(
        ExternalIdBundle.of(ExternalId.of("UUID", GUIDGenerator.generate().toString())),
        "Fixed vs Libor 3m",
        LocalDate.of(2014, 9, 12), // effective date
        LocalDate.of(2021, 9, 12), // maturity date,
        legs);
  }
  /**
   * Expiry date of Brent crude Futures: The business day preceding the 15th day of the contract
   * month. See
   * http://www.cmegroup.com/trading/energy/crude-oil/brent-crude-oil-last-day_contractSpecs_futures.html#prodType=AME
   * Note: Logic to handle holidays in London is not handled currently
   *
   * @param n n'th expiry date after today
   * @param today valuation date
   * @param holidayCalendar holiday calendar
   * @return True expiry date of the option
   */
  @Override
  public LocalDate getExpiryDate(
      final int n, final LocalDate today, final Calendar holidayCalendar) {
    ArgumentChecker.isTrue(n > 0, "n must be greater than zero; have {}", n);
    ArgumentChecker.notNull(today, "today");
    ArgumentChecker.notNull(holidayCalendar, "holiday calendar");

    LocalDate expiryDate = getExpiryMonth(n, today);

    while (!holidayCalendar.isWorkingDay(expiryDate)) {
      expiryDate = expiryDate.minusDays(1);
    }
    return expiryDate;
  }
 // -------------------------------------------------------------------------
 @Override
 protected void doRun() {
   ToolContext toolContext = getToolContext();
   CommandLine commandLine = getCommandLine();
   boolean verbose = commandLine.hasOption("verbose");
   if ((commandLine.hasOption("today") && commandLine.hasOption("yesterday"))
       || (commandLine.hasOption("date") && commandLine.hasOption("today"))
       || (commandLine.hasOption("date") && commandLine.hasOption("yesterday"))) {
     System.err.println("Can only return today OR yesterday OR date!");
     System.exit(2);
   }
   String ccyStr = commandLine.getOptionValue("ccy");
   try {
     Currency ccy = Currency.of(ccyStr);
     LocalDate date = null;
     if (commandLine.hasOption("yesterday")) {
       date = LocalDate.now().minusDays(1);
     } else if (commandLine.hasOption("today")) {
       date = LocalDate.now();
     } else if (commandLine.hasOption("date")) {
       try {
         date =
             (LocalDate)
                 DateTimeFormatter.BASIC_ISO_DATE.parse(commandLine.getOptionValue("date"));
       } catch (Exception e) {
         System.err.println("Could not parse date, should be YYYYMMDD format");
         System.exit(2);
       }
     } else {
       System.err.println("Must specify either today or yesterday option");
       System.exit(2);
     }
     boolean isHoliday = toolContext.getHolidaySource().isHoliday(date, ccy);
     if (isHoliday) {
       if (verbose) {
         System.out.println("Day was a holiday");
       }
       System.exit(0);
     } else {
       if (verbose) {
         System.out.println("Day was not a holiday");
       }
       System.exit(1);
     }
   } catch (IllegalArgumentException iae) {
     System.err.println("Invalid currency code");
     System.exit(2);
   }
 }
 @Test(dataProvider = "calendars")
 public void test_badDateTimeFieldChrono(Chronology chrono) {
   LocalDate refDate = LocalDate.of(1900, 1, 1);
   ChronoLocalDateTime cdt = chrono.date(refDate).atTime(LocalTime.NOON);
   for (Chronology[] clist : data_of_calendars()) {
     Chronology chrono2 = clist[0];
     ChronoLocalDateTime<?> cdt2 = chrono2.date(refDate).atTime(LocalTime.NOON);
     TemporalField adjuster = new FixedDateTimeField(cdt2);
     if (chrono != chrono2) {
       try {
         cdt.with(adjuster, 1);
         Assert.fail(
             "DateTimeField doSet should have thrown a ClassCastException"
                 + cdt.getClass()
                 + ", can not be cast to "
                 + cdt2.getClass());
       } catch (ClassCastException cce) {
         // Expected exception; not an error
       }
     } else {
       // Same chronology,
       ChronoLocalDateTime<?> result = cdt.with(adjuster, 1);
       assertEquals(result, cdt2, "DateTimeField doSet failed to replace date");
     }
   }
 }
 /**
  * If effective date is present at the swap level, that is the value to use. If the effective date
  * is null, then there must be effective dates defined on the legs. In this case return the
  * minimum value between the two legs.
  *
  * @return effective date for the swap
  */
 public LocalDate getEffectiveDate() {
   if (_effectiveDate != null) {
     return _effectiveDate;
   } else {
     LocalDate leg1 = getPayLeg().getEffectiveDate();
     LocalDate leg2 = getReceiveLeg().getEffectiveDate();
     if (leg1 == null || leg2 == null) {
       throw new OpenGammaRuntimeException("Cannot find effective date on swap or both legs");
     }
     if (leg1.isBefore(leg2)) {
       return leg1;
     } else {
       return leg2;
     }
   }
 }
  /**
   * Computes the risky present value of a premium payment
   *
   * <p>This mimics the ISDA c code function <b>FeePaymentPVWithTimeLine<b>
   *
   * @param today
   * @param valueDate
   * @param stepinDate
   * @param accStartDate
   * @param accEndDate
   * @param payAccOnDefault
   * @return PV
   */
  private double[] calculateSinglePeriodRPV01(
      final LocalDate today,
      final LocalDate accStartDate,
      final LocalDate accEndDate,
      final LocalDate paymentDate,
      final int obsOffset,
      final ISDACompliantDateYieldCurve yieldCurve,
      final ISDACompliantDateCreditCurve hazardRateCurve) {

    final double accTime = _accuralDayCount.getDayCountFraction(accStartDate, accEndDate);
    double t = _curveDayCount.getDayCountFraction(today, paymentDate);
    double tObsOffset = _curveDayCount.getDayCountFraction(today, accEndDate.plusDays(obsOffset));

    // TODO Do we need this?
    // Compensate Java shortcoming
    if (Double.compare(t, -0.0) == 0) {
      t = 0;
    }
    if (Double.compare(tObsOffset, -0.0) == 0) {
      tObsOffset = 0;
    }

    final double survival = hazardRateCurve.getSurvivalProbability(tObsOffset);
    final double discount = yieldCurve.getDiscountFactor(t);
    return new double[] {accTime * discount * survival, accTime};
  }
 @Test
 public void testCounterparty() {
   FRASecurity security = ExposureFunctionTestHelper.getFRASecurity();
   Trade trade =
       new SimpleTrade(security, BigDecimal.ONE, COUNTERPARTY, LocalDate.now(), OffsetTime.now());
   assertEquals(COUNTERPARTY_ID, EXPOSURE_FUNCTION.getIds(trade).get(0));
 }
 @Test(dataProvider = "calendars")
 public void test_badWithAdjusterChrono(Chronology chrono) {
   LocalDate refDate = LocalDate.of(1900, 1, 1);
   ChronoLocalDateTime cdt = chrono.date(refDate).atTime(LocalTime.NOON);
   for (Chronology[] clist : data_of_calendars()) {
     Chronology chrono2 = clist[0];
     ChronoLocalDateTime<?> cdt2 = chrono2.date(refDate).atTime(LocalTime.NOON);
     TemporalAdjuster adjuster = new FixedAdjuster(cdt2);
     if (chrono != chrono2) {
       try {
         cdt.with(adjuster);
         Assert.fail(
             "WithAdjuster should have thrown a ClassCastException, "
                 + "required: "
                 + cdt
                 + ", supplied: "
                 + cdt2);
       } catch (ClassCastException cce) {
         // Expected exception; not an error
       }
     } else {
       // Same chronology,
       ChronoLocalDateTime<?> result = cdt.with(adjuster);
       assertEquals(result, cdt2, "WithAdjuster failed to replace date");
     }
   }
 }
 /**
  * If termination date is present at the swap level, that is the value to use. If the termination
  * date is null, then there must be termination dates defined on the legs. In this case return the
  * maximum value between the two legs.
  *
  * @return termination date for the swap
  */
 public LocalDate getUnadjustedMaturityDate() {
   if (_unadjustedMaturityDate != null) {
     return _unadjustedMaturityDate;
   } else {
     LocalDate leg1 = getPayLeg().getUnadjustedMaturityDate();
     LocalDate leg2 = getReceiveLeg().getUnadjustedMaturityDate();
     if (leg1 == null || leg2 == null) {
       throw new OpenGammaRuntimeException("Cannot find termination date on swap or both legs");
     }
     if (leg1.isAfter(leg2)) {
       return leg1;
     } else {
       return leg2;
     }
   }
 }
 @Test(dataProvider = "calendars")
 public void test_badPlusPeriodUnitChrono(Chronology chrono) {
   LocalDate refDate = LocalDate.of(1900, 1, 1);
   ChronoLocalDateTime cdt = chrono.date(refDate).atTime(LocalTime.NOON);
   for (Chronology[] clist : data_of_calendars()) {
     Chronology chrono2 = clist[0];
     ChronoLocalDateTime<?> cdt2 = chrono2.date(refDate).atTime(LocalTime.NOON);
     TemporalUnit adjuster = new FixedPeriodUnit(cdt2);
     if (chrono != chrono2) {
       try {
         cdt.plus(1, adjuster);
         Assert.fail(
             "PeriodUnit.doAdd plus should have thrown a ClassCastException"
                 + cdt
                 + ", can not be cast to "
                 + cdt2);
       } catch (ClassCastException cce) {
         // Expected exception; not an error
       }
     } else {
       // Same chronology,
       ChronoLocalDateTime<?> result = cdt.plus(1, adjuster);
       assertEquals(result, cdt2, "WithAdjuster failed to replace date");
     }
   }
 }
 @Test(expectedExceptions = TimeSeriesException.class)
 public void testWithBadInputs() {
   final LocalDateDoubleTimeSeries ts =
       ImmutableLocalDateDoubleTimeSeries.of(
           new LocalDate[] {LocalDate.ofEpochDay(1)}, new double[] {4});
   CALCULATOR.evaluate(new LocalDateDoubleTimeSeries[] {ts});
 }
 /**
  * {@inheritDoc} If the fixing date is strictly before the conversion date and the fixing rate is
  * not available, an exception is thrown; if the fixing rate is available a fixed coupon is
  * returned. If the fixing date is equal to the conversion date, if the fixing rate is available a
  * fixed coupon is returned, if not a coupon Ibor with spread is returned. If the fixing date is
  * strictly after the conversion date, a coupon Ibor is returned. All the comparisons are between
  * dates without time.
  */
 @Override
 public Coupon toDerivative(
     final ZonedDateTime dateTime, final DoubleTimeSeries<ZonedDateTime> indexFixingTimeSeries) {
   ArgumentChecker.notNull(dateTime, "date");
   final LocalDate dayConversion = dateTime.toLocalDate();
   ArgumentChecker.notNull(indexFixingTimeSeries, "Index fixing time series");
   ArgumentChecker.isTrue(
       !dayConversion.isAfter(getPaymentDate().toLocalDate()), "date is after payment date");
   final double paymentTime = TimeCalculator.getTimeBetween(dateTime, getPaymentDate());
   final LocalDate dayFixing = getFixingDate().toLocalDate();
   if (dayConversion.equals(
       dayFixing)) { // The fixing is on the reference date; if known the fixing is used and if
                     // not, the floating coupon is created.
     final Double fixedRate = indexFixingTimeSeries.getValue(getFixingDate());
     if (fixedRate != null) {
       return new CouponFixed(
           getCurrency(), paymentTime, getPaymentYearFraction(), getNotional(), fixedRate);
     }
   }
   if (dayConversion.isAfter(dayFixing)) { // The fixing is required
     final ZonedDateTime rezonedFixingDate =
         getFixingDate().toLocalDate().atStartOfDay(ZoneOffset.UTC);
     final Double fixedRate =
         indexFixingTimeSeries.getValue(rezonedFixingDate); // TODO: remove time from fixing date.
     if (fixedRate == null) {
       throw new OpenGammaRuntimeException(
           "Could not get fixing value for date " + getFixingDate());
     }
     return new CouponFixed(
         getCurrency(), paymentTime, getPaymentYearFraction(), getNotional(), fixedRate);
   }
   final double fixingTime = TimeCalculator.getTimeBetween(dateTime, getFixingDate());
   final double fixingPeriodStartTime =
       TimeCalculator.getTimeBetween(dateTime, getFixingPeriodStartDate());
   final double fixingPeriodEndTime =
       TimeCalculator.getTimeBetween(dateTime, getFixingPeriodEndDate());
   return new CouponIbor(
       getCurrency(),
       paymentTime,
       getPaymentYearFraction(),
       getNotional(),
       fixingTime,
       getIndex(),
       fixingPeriodStartTime,
       fixingPeriodEndTime,
       getFixingPeriodAccrualFactor());
 }
  @SuppressWarnings("deprecation")
  public void testTrade_withPremium() {
    SimpleTrade trade = new SimpleTrade();
    trade.setUniqueId(UniqueId.of("A", "B"));
    trade.setQuantity(BigDecimal.valueOf(12.34d));
    trade.setSecurityLink(new SimpleSecurityLink(ObjectId.of("E", "F")));
    trade.setCounterparty(new SimpleCounterparty(ExternalId.of("G", "H")));
    trade.setTradeDate(LocalDate.of(2011, 1, 5));
    trade.setTradeTime(OffsetTime.parse("14:30+02:00"));

    // set premium
    trade.setPremium(100.00);
    trade.setPremiumCurrency(Currency.USD);
    trade.setPremiumDate(LocalDate.of(2011, 1, 6));
    trade.setPremiumTime(OffsetTime.parse("15:30+02:00"));
    assertEncodeDecodeCycle(Trade.class, trade);
  }
 /**
  * Gets trading months (not static as depends on current date).
  *
  * @param now the date today, not null
  * @return the valid trading months, not null
  */
 private Month[] getTradingMonths(final LocalDate now) {
   // this may need improvements as the year end approaches
   Set<Month> ret = new TreeSet<>();
   ret.add(now.getMonth()); // this month
   ret.add(now.getMonth().plus(1)); // next month
   ret.add(now.getMonth().plus(2)); // next 2 months
   //  February, April, August, and October in next 23 months
   ret.add(Month.FEBRUARY);
   ret.add(Month.APRIL);
   ret.add(Month.AUGUST);
   ret.add(Month.OCTOBER);
   // June and December falling in next 72 month period
   ret.add(Month.JUNE);
   ret.add(Month.DECEMBER);
   // assuming this gives enough valid dates so dont go round to next 12 month period
   return ret.toArray(new Month[0]);
 }
  public void getHistoricalTimeSeriesByExternalIdWithMetaData() throws Exception {
    HistoricalTimeSeriesInfoSearchRequest request =
        new HistoricalTimeSeriesInfoSearchRequest(IDENTIFIERS);
    request.setValidityDate(LocalDate.now());
    request.setDataSource(BBG_DATA_SOURCE);
    request.setDataProvider(CMPL_DATA_PROVIDER);
    request.setDataField(CLOSE_DATA_FIELD);

    HistoricalTimeSeriesInfoSearchResult searchResult = new HistoricalTimeSeriesInfoSearchResult();
    HistoricalTimeSeriesInfoDocument doc = new HistoricalTimeSeriesInfoDocument();
    doc.setUniqueId(UID);

    when(_mockResolver.resolve(
            IDENTIFIERS,
            LocalDate.now(),
            BBG_DATA_SOURCE,
            CMPL_DATA_PROVIDER,
            CLOSE_DATA_FIELD,
            null))
        .thenReturn(new HistoricalTimeSeriesResolutionResult(doc.getInfo()));

    doc.getInfo().setTimeSeriesObjectId(UID.getObjectId());
    searchResult.getDocuments().add(doc);
    when(_mockMaster.search(request)).thenReturn(searchResult);

    ManageableHistoricalTimeSeries hts = new ManageableHistoricalTimeSeries();
    hts.setUniqueId(UID);
    hts.setTimeSeries(randomTimeSeries());
    when(_mockMaster.getTimeSeries(
            UID.getObjectId(),
            VersionCorrection.LATEST,
            HistoricalTimeSeriesGetFilter.ofRange(null, null)))
        .thenReturn(hts);

    HistoricalTimeSeries test =
        _tsSource.getHistoricalTimeSeries(
            IDENTIFIERS, BBG_DATA_SOURCE, CMPL_DATA_PROVIDER, CLOSE_DATA_FIELD);
    verify(_mockMaster, times(1))
        .getTimeSeries(
            UID.getObjectId(),
            VersionCorrection.LATEST,
            HistoricalTimeSeriesGetFilter.ofRange(null, null));

    assertEquals(UID, test.getUniqueId());
  }
 public static LocalDate[] getSettlementDateSchedule(
     final LocalDate[] dates,
     final Calendar calendar,
     final BusinessDayConvention businessDayConvention,
     final int settlementDays) {
   ArgumentChecker.notEmpty(dates, "dates");
   ArgumentChecker.notNull(calendar, "calendar");
   final int n = dates.length;
   final LocalDate[] result = new LocalDate[n];
   for (int i = 0; i < n; i++) {
     LocalDate date = businessDayConvention.adjustDate(calendar, dates[i].plusDays(1));
     for (int j = 0; j < settlementDays; j++) {
       date = businessDayConvention.adjustDate(calendar, date.plusDays(1));
     }
     result[i] = date;
   }
   return result;
 }
 public void testTrade() {
   SimpleTrade trade = new SimpleTrade();
   trade.setUniqueId(UniqueId.of("A", "B"));
   trade.setQuantity(BigDecimal.valueOf(12.34d));
   trade.setSecurityLink(new SimpleSecurityLink(ExternalId.of("E", "F")));
   trade.setCounterparty(new SimpleCounterparty(ExternalId.of("G", "H")));
   trade.setTradeDate(LocalDate.of(2011, 1, 5));
   trade.setTradeTime(OffsetTime.parse("14:30+02:00"));
   assertEncodeDecodeCycle(Trade.class, trade);
 }
 @Override
 /**
  * Given a LocalDate representing the valuation date and an integer representing the n'th expiry
  * after that date, returns a date in the expiry month Used in
  * BloombergFutureUtils.getExpiryCodeForSoybeanFutures()
  */
 public LocalDate getExpiryMonth(final int n, final LocalDate today) {
   ArgumentChecker.isTrue(n > 0, "n must be greater than zero");
   ArgumentChecker.notNull(today, "today");
   LocalDate expiryDate = today;
   for (int m = n; m > 0; m--) {
     expiryDate = getNextExpiryMonth(expiryDate);
   }
   if (expiryDate.getDayOfMonth() > 15) {
     expiryDate = getNextExpiryMonth(expiryDate);
   }
   // set day to first possible - used in getExpiryDate()
   return LocalDate.of(expiryDate.getYear(), expiryDate.getMonth(), 14);
 }
 private HistoricalTimeSeries getAllowedRecentPoints(
     final HistoricalTimeSeriesInfoDocument timeSeriesInfo) {
   final LocalDate from = oldestTimeSeriesAllowed();
   final HistoricalTimeSeries timeSeries =
       getToolContext()
           .getHistoricalTimeSeriesSource()
           .getHistoricalTimeSeries(
               timeSeriesInfo.getUniqueId().toLatest(), from, true, LocalDate.now(), true);
   return timeSeries;
 }
 @Override
 public List<SlackMessagePosted> fetchHistoryOfChannel(
     String channelId, LocalDate day, int numberOfMessages) {
   Map<String, String> params = new HashMap<>();
   params.put("channel", channelId);
   if (day != null) {
     ZonedDateTime start = ZonedDateTime.of(day.atStartOfDay(), ZoneId.of("UTC"));
     ZonedDateTime end =
         ZonedDateTime.of(
             day.atStartOfDay().plusDays(1).minus(1, ChronoUnit.MILLIS), ZoneId.of("UTC"));
     params.put("oldest", convertDateToSlackTimestamp(start));
     params.put("latest", convertDateToSlackTimestamp(end));
   }
   if (numberOfMessages > -1) {
     params.put("count", String.valueOf(numberOfMessages));
   } else {
     params.put("count", String.valueOf(1000));
   }
   return fetchHistoryOfChannel(params);
 }
  public void testFull() {
    SimpleTrade trade = new SimpleTrade();
    trade.setUniqueId(UniqueId.of("A", "B"));
    trade.setQuantity(BigDecimal.valueOf(12.34d));
    trade.setSecurityLink(new SimpleSecurityLink(ExternalId.of("E", "F")));
    trade.setCounterparty(new SimpleCounterparty(ExternalId.of("G", "H")));
    trade.setTradeDate(LocalDate.of(2011, 1, 5));
    trade.setTradeTime(OffsetTime.parse("14:30+02:00"));

    // set premium
    trade.setPremium(100.00);
    trade.setPremiumCurrency(Currency.USD);
    trade.setPremiumDate(LocalDate.of(2011, 1, 6));
    trade.setPremiumTime(OffsetTime.parse("15:30+02:00"));

    // set attributes
    trade.addAttribute("A", "B");
    trade.addAttribute("C", "D");
    assertEncodeDecodeCycle(Trade.class, trade);
  }
Beispiel #30
0
 /**
  * Get a LocalDate field (converted from a String internally). Throws a QuandlRuntimeException if
  * it cannot find the field
  *
  * @param fieldName the name of the field
  * @return the field value, or null if the field is null
  */
 public LocalDate getLocalDate(final String fieldName) {
   try {
     if (_jsonObject.isNull(fieldName)) {
       return null;
     } else {
       return LocalDate.parse(_jsonObject.getString(fieldName), DATE_FORMATTER);
     }
   } catch (JSONException ex) {
     throw new QuandlRuntimeException("Cannot find field", ex);
   }
 }