Skip to content

Commit

Permalink
Merge pull request #27 from zackurben/feature/add-stoch-indicators
Browse files Browse the repository at this point in the history
Feature/add stoch indicators
  • Loading branch information
zackurben committed Nov 4, 2017
2 parents 6b3367e + 65d2673 commit 3f9f960
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 7 deletions.
6 changes: 6 additions & 0 deletions lib/technical.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,13 @@ module.exports = config => {
t3: SMA_LIKE('T3'),
macd: MACDEXT_LIKE('MACD'),
macdext: MACDEXT_LIKE('MACDEXT'),
stoch: (symbol, interval, fastkperiod, slowkperiod, slowdperiod, slowkmatype, slowdmatype) =>
util.fn('STOCH')({ symbol, interval, fastkperiod, slowkperiod, slowdperiod, slowkmatype, slowdmatype }),
stochf: (symbol, interval, fastkperiod, fastdperiod, fastdmatype) =>
util.fn('STOCHF')({ symbol, interval, fastkperiod, fastdperiod, fastdmatype }),
rsi: SMA_LIKE('RSI'),
stochrsi: (symbol, interval, time_period, series_type, fastkperiod, fastdperiod, fastdmatype) =>
util.fn('STOCHRSI')({ symbol, interval, time_period, series_type, fastkperiod, fastdperiod, fastdmatype }),
mom: SMA_LIKE('MOM'),
cmo: SMA_LIKE('CMO'),
roc: SMA_LIKE('ROC'),
Expand Down
12 changes: 11 additions & 1 deletion lib/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,25 @@ const keys = {
'3. Last Refreshed': 'updated',
'Last Refreshed': 'updated',
'4. Interval': 'interval',
'5: Time Period': 'period',
'5.1: Fast Limit': 'fastlimit',
'5.1: Fast Period': 'fastperiod',
'5.1: FastK Period': 'fastkperiod',
'6.1: FastK Period': 'fastkperiod',
'5.2: Slow Limit': 'slowlimit',
'5.2: Slow Period': 'slowperiod',
'5.2: SlowK Period': 'slowkperiod',
'5.2: FastD Period': 'fastdperiod',
'6.2: FastD Period': 'fastdperiod',
'5.3: Signal Period': 'signalperiod',
'5.3: SlowK MA Type': 'slowkmatype',
'5.3: FastD MA Type': 'fastdmatype',
'6.3: FastD MA Type': 'fastdmatype',
'5.4: Fast MA Type': 'fastmatype',
'5.4: SlowD Period': 'slowdperiod',
'5.5: Slow MA Type': 'slowmatype',
'5.5: SlowD MA Type': 'slowdmatype',
'5.6: Signal MA Type': 'signalmatype',
'5: Time Period': 'period',
'6: Volume Factor (vFactor)': 'volume',
'6: Series Type': 'series',
'7: Series Type': 'series',
Expand Down
66 changes: 60 additions & 6 deletions test/technical.js
Original file line number Diff line number Diff line change
Expand Up @@ -161,8 +161,6 @@ test(`t3 data works`, () => {
});
});

// @NOTE: The data is missing a "Time Period" and the "Series Type" is wrong.
// Waiting on an email response from my inquiry 10/19/2017.
test(`macd data works`, () => {
expect.assertions(11);
return delay(TIME)
Expand All @@ -176,14 +174,12 @@ test(`macd data works`, () => {
expect(data['Meta Data']['5.1: Fast Period']).toEqual(12);
expect(data['Meta Data']['5.2: Slow Period']).toEqual(26);
expect(data['Meta Data']['5.3: Signal Period']).toEqual(9);
expect(data['Meta Data']['6: Series Type']).toBeDefined();
expect(data['Meta Data']['6: Series Type']).toEqual('close');
expect(data['Meta Data']['7: Time Zone']).toBeDefined();
expect(data['Technical Analysis: MACD']).toBeDefined();
});
});

// @NOTE: The data is missing a "Time Period" and the "Series Type" is wrong.
// Waiting on an email response from my inquiry 10/19/2017.
test(`macdext data works`, () => {
expect.assertions(14);
return delay(TIME)
Expand All @@ -200,12 +196,50 @@ test(`macdext data works`, () => {
expect(data['Meta Data']['5.4: Fast MA Type']).toEqual(0);
expect(data['Meta Data']['5.5: Slow MA Type']).toEqual(0);
expect(data['Meta Data']['5.6: Signal MA Type']).toEqual(0);
expect(data['Meta Data']['6: Series Type']).toBeDefined();
expect(data['Meta Data']['6: Series Type']).toEqual('close');
expect(data['Meta Data']['7: Time Zone']).toBeDefined();
expect(data['Technical Analysis: MACDEXT']).toBeDefined();
});
});

test(`stoch data works`, () => {
expect.assertions(12);
return delay(TIME)
.then(() => alpha.technical.stoch(`msft`, `daily`))
.then(data => {
expect(data['Meta Data']).toBeDefined();
expect(data['Meta Data']['1: Symbol']).toEqual('msft');
expect(data['Meta Data']['2: Indicator']).toEqual('Stochastic (STOCH)');
expect(data['Meta Data']['3: Last Refreshed']).toBeDefined();
expect(data['Meta Data']['4: Interval']).toEqual('daily');
expect(data['Meta Data']['5.1: FastK Period']).toEqual(5);
expect(data['Meta Data']['5.2: SlowK Period']).toEqual(3);
expect(data['Meta Data']['5.3: SlowK MA Type']).toEqual(0);
expect(data['Meta Data']['5.4: SlowD Period']).toEqual(3);
expect(data['Meta Data']['5.5: SlowD MA Type']).toEqual(0);
expect(data['Meta Data']['6: Time Zone']).toBeDefined();
expect(data['Technical Analysis: STOCH']).toBeDefined();
});
});

test(`stochf data works`, () => {
expect.assertions(10);
return delay(TIME)
.then(() => alpha.technical.stochf(`msft`, `daily`))
.then(data => {
expect(data['Meta Data']).toBeDefined();
expect(data['Meta Data']['1: Symbol']).toEqual('msft');
expect(data['Meta Data']['2: Indicator']).toEqual('Stochastic Fast (STOCHF)');
expect(data['Meta Data']['3: Last Refreshed']).toBeDefined();
expect(data['Meta Data']['4: Interval']).toEqual('daily');
expect(data['Meta Data']['5.1: FastK Period']).toEqual(5);
expect(data['Meta Data']['5.2: FastD Period']).toEqual(3);
expect(data['Meta Data']['5.3: FastD MA Type']).toEqual(0);
expect(data['Meta Data']['6: Time Zone']).toBeDefined();
expect(data['Technical Analysis: STOCHF']).toBeDefined();
});
});

test(`rsi data works`, () => {
expect.assertions(9);
return delay(TIME)
Expand All @@ -223,6 +257,26 @@ test(`rsi data works`, () => {
});
});

test(`stochrsi data works`, () => {
expect.assertions(12);
return delay(TIME)
.then(() => alpha.technical.stochrsi(`msft`, `daily`, 60, `close`))
.then(data => {
expect(data['Meta Data']).toBeDefined();
expect(data['Meta Data']['1: Symbol']).toEqual('msft');
expect(data['Meta Data']['2: Indicator']).toEqual('Stochastic Relative Strength Index (STOCHRSI)');
expect(data['Meta Data']['3: Last Refreshed']).toBeDefined();
expect(data['Meta Data']['4: Interval']).toEqual('daily');
expect(data['Meta Data']['5: Time Period']).toEqual(60);
expect(data['Meta Data']['6.1: FastK Period']).toEqual(5);
expect(data['Meta Data']['6.2: FastD Period']).toEqual(3);
expect(data['Meta Data']['6.3: FastD MA Type']).toEqual(0);
expect(data['Meta Data']['7: Series Type']).toEqual('close');
expect(data['Meta Data']['8: Time Zone']).toBeDefined();
expect(data['Technical Analysis: STOCHRSI']).toBeDefined();
});
});

test(`mom data works`, () => {
expect.assertions(9);
return delay(TIME)
Expand Down

0 comments on commit 3f9f960

Please sign in to comment.