Skip to content

Commit

Permalink
Added method for cross instrument creation.
Browse files Browse the repository at this point in the history
  • Loading branch information
reiss authored and reiss committed Nov 8, 2017
1 parent 267f70a commit 2af1662
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,12 @@

import com.dukascopy.api.ICurrency;
import com.dukascopy.api.Instrument;
import com.jforex.programming.currency.CurrencyFactory;
import com.jforex.programming.math.MathUtil;
import com.jforex.programming.misc.StreamUtil;

import io.reactivex.Maybe;

public final class InstrumentFactory {

private InstrumentFactory() {
Expand Down Expand Up @@ -90,4 +93,21 @@ public static final Set<Instrument> combineWithAnchorCurrency(final ICurrency an
.flatMap(StreamUtil::optionalToStream)
.collect(toSet());
}

public static final Maybe<Instrument> maybeCrossInstrument(final Instrument firstInstrument,
final Instrument secondInstrument) {
checkNotNull(firstInstrument);
checkNotNull(secondInstrument);

return Maybe
.just(CurrencyFactory.fromInstruments(firstInstrument, secondInstrument))
.filter(currencies -> currencies.size() == 3)
.map(InstrumentFactory::combineCurrencies)
.map(instruments -> {
instruments.remove(firstInstrument);
instruments.remove(secondInstrument);
return instruments;
})
.map(instruments -> instruments.iterator().next());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import static com.jforex.programming.instrument.InstrumentFactory.combineCurrencies;
import static com.jforex.programming.instrument.InstrumentFactory.combineWithAnchorCurrency;
import static com.jforex.programming.instrument.InstrumentFactory.maybeCrossInstrument;
import static com.jforex.programming.instrument.InstrumentFactory.maybeFromCurrencies;
import static com.jforex.programming.instrument.InstrumentFactory.maybeFromName;
import static org.hamcrest.Matchers.equalTo;
Expand Down Expand Up @@ -157,4 +158,23 @@ public void testCombineAllWithAnchorCurrencyReturnsCorrectInstruments() {

assertAnchorCurrencySet(partnerCurrencies, instrumentsForAnchorCurrencyTests);
}

@Test
public void testMaybeCrossInstrumentIsEmptyWhenInstrumentsFormNoCrossInstrument() {
maybeCrossInstrument(instrumentEURUSD, instrumentEURUSD)
.test()
.assertNoValues();

maybeCrossInstrument(instrumentEURUSD, instrumentGBPJPY)
.test()
.assertNoValues();
}

@Test
public void testMaybeCrossInstrumentIsCorrect() {
assertThat(maybeCrossInstrument(instrumentEURUSD, instrumentGBPUSD).blockingGet(), equalTo(instrumentEURGBP));
assertThat(maybeCrossInstrument(instrumentEURUSD, instrumentUSDJPY).blockingGet(), equalTo(instrumentEURJPY));
assertThat(maybeCrossInstrument(instrumentUSDJPY, instrumentGBPUSD).blockingGet(), equalTo(instrumentGBPJPY));
assertThat(maybeCrossInstrument(instrumentGBPAUD, instrumentAUDJPY).blockingGet(), equalTo(instrumentGBPJPY));
}
}

0 comments on commit 2af1662

Please sign in to comment.