From 223e5afce89a92c960f4f9f58be89d494d246eb7 Mon Sep 17 00:00:00 2001 From: hmatthew Date: Wed, 2 May 2018 00:19:27 -0700 Subject: [PATCH 1/4] clean-up minor cleaning --- .DS_Store | Bin 6148 -> 6148 bytes .gitignore | 4 ++ package-lock.json | 5 -- src/functions/divergenceStrategy.js | 104 +++++++++++++--------------- 4 files changed, 53 insertions(+), 60 deletions(-) diff --git a/.DS_Store b/.DS_Store index d39b4ada5a377c7fe000c3f19cd7e7d953568579..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 100644 GIT binary patch delta 67 zcmZoMXfc=|&Zs)EP;8=}A_oHyFfuR*Y}^>eKJh@*W_At%4o20D8^1G8<`+@q1WGX^ TfYeMj;Zfe4AhLvcVgm~RE=&+7 delta 116 zcmZoMXfc=|&e%3FQEZ}~q9`K+0|O8XFfbG`l%%B;Cnx3S=S)mgpKKt)BF4s$$&kxX zz>tqD$+$5wi5(=pnVW-$gRyO6;& secondColumn.rsiValue) { + return true; + } + return false; +} + +function getValues(column, i) { + return { + firstPriceSpikeValue: column[2].priceValue, + secondPriceSpikeValue: column[i].priceValue, + firstRsiSpikeValue: column[2].rsiValue, + secondRsiSpikeValue: column[i].rsiValue + }; +} + +function resolveSlope(column, i, bullOrBear, resolve, pair, timeFrame, period) { + const {firstPriceSpikeValue, secondPriceSpikeValue, firstRsiSpikeValue, secondRsiSpikeValue} = getValues(column, i); + for (let x = 2; x <= i; x++) { + const priceSlope = slope(i, firstPriceSpikeValue, secondPriceSpikeValue, bullOrBear); + const rsiSlope = slope(i, firstRsiSpikeValue, secondRsiSpikeValue, bullOrBear); + if (priceSlope && rsiSlope && x === i) { + const divergence = true; + const period = i; + resolve({divergence, period, bullOrBear, pair, timeFrame, column}); + } else { + break; + } + } +} + /** * Divergence Strategy * For each of the items in the column array we look for divergence @@ -11,63 +55,13 @@ const slope = require('./slope'); * @return {object} divergence report */ module.exports = function divergenceStrategy(column, pair, timeFrame, period) { - return new Promise(function(resolve, reject) { + return new Promise(function(resolve) { column.forEach((i) => { - if ( - i <= 16 && - column[2].priceSpike == 'up' && - column[i].priceSpike == 'up' && - column[2].rsiSpike == 'up' && - column[i].rsiSpike == 'up' && - column[i].priceValue < column[2].priceValue && - column[i].rsiValue > column[2].rsiValue - ) { - const firstPriceSpikeValue = column[2].priceValue; - const secondPriceSpikeValue = column[i].priceValue; - const firstRsiSpikeValue = column[2].rsiValue; - const secondRsiSpikeValue = column[i].rsiValue; - let x; - for (x = 2; x <= i; x++) { - const priceSlope = slope(i, firstPriceSpikeValue, secondPriceSpikeValue, 'bearish'); - const rsiSlope = slope(i, firstRsiSpikeValue, secondRsiSpikeValue, 'bearish'); - if (priceSlope && rsiSlope && x == i) { - const divergence = true; - const period = i; - const direction = 'bearish'; - const data = column; - resolve({divergence, period, direction, pair, timeFrame, data}); - } else { - break; - } - } + if (checkIfUpOrDown(column, i, UP, 16, BULL, pair, timeFrame, period)) { + resolveSlope(i, column, resolve); } - if ( - i <= 15 && - column[2].priceSpike == 'down' && - column[i].priceSpike == 'down' && - column[2].rsiSpike == 'down' && - column[i].rsiSpike == 'down' && - column[i].priceValue > column[2].priceValue && - column[i].rsiValue < column[2].rsiValue - ) { - const firstPriceSpikeValue = column[2].priceValue; - const secondPriceSpikeValue = column[i].priceValue; - const firstRsiSpikeValue = column[2].rsiValue; - const secondRsiSpikeValue = column[i].rsiValue; - let x; - for (x = 2; x <= i; x++) { - const priceSlope = slope(i, firstPriceSpikeValue, secondPriceSpikeValue, 'bullish'); - const rsiSlope = slope(i, firstRsiSpikeValue, secondRsiSpikeValue, 'bullish'); - if (priceSlope && rsiSlope && x == i) { - const divergence = true; - const period = i; - const direction = 'bullish'; - const data = column; - resolve({divergence, period, direction, pair, timeFrame, data}); - } else { - break; - } - } + if (checkIfUpOrDown(column, i, DOWN, 15, BEAR, pair, timeFrame, period)) { + resolveSlope(i, column, resolve); } }); }); From 9384bc9e224eeab14f0593605f76b2020f0ef7bf Mon Sep 17 00:00:00 2001 From: hmatthew Date: Wed, 2 May 2018 00:49:06 -0700 Subject: [PATCH 2/4] clean-up removing exports.module and just using es6 export --- src/functions/calculateRSI.js | 2 +- src/functions/createColumns.js | 2 +- src/functions/divergenceStrategy.js | 2 +- src/functions/isJson.js | 16 ++++++++-------- src/functions/slope.js | 2 +- src/functions/spike.js | 2 +- src/services/bitfinex.js | 2 +- src/services/scanner.js | 2 +- src/tasks/dbSet.js | 2 +- 9 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/functions/calculateRSI.js b/src/functions/calculateRSI.js index c486fcb..93899e2 100644 --- a/src/functions/calculateRSI.js +++ b/src/functions/calculateRSI.js @@ -7,7 +7,7 @@ const RSI = require('@solazu/technicalindicators').RSI; * @param {object} priceArray The proce data * @return {object} the RSI Array and close Arrays */ -module.exports = function calculateRSI(priceArray) { +export function calculateRSI(priceArray) { return new Promise(function(resolve, reject) { let values = []; priceArray.forEach((entry) => { diff --git a/src/functions/createColumns.js b/src/functions/createColumns.js index 46055ef..5ff00e5 100644 --- a/src/functions/createColumns.js +++ b/src/functions/createColumns.js @@ -11,7 +11,7 @@ const spike = require('./spike'); * @param {object} pair The pair * @return {boolean} has a divergence been found true/false */ -module.exports = function createColumns(price, rsi, timeFrame, pair) { +export function createColumns(price, rsi, timeFrame, pair) { return new Promise(function(resolve, reject) { let columns = []; price.forEach((entry, i) => { diff --git a/src/functions/divergenceStrategy.js b/src/functions/divergenceStrategy.js index db5d093..fa51689 100644 --- a/src/functions/divergenceStrategy.js +++ b/src/functions/divergenceStrategy.js @@ -54,7 +54,7 @@ function resolveSlope(column, i, bullOrBear, resolve, pair, timeFrame, period) { * @param {object} period The period between spikes * @return {object} divergence report */ -module.exports = function divergenceStrategy(column, pair, timeFrame, period) { +export function divergenceStrategy(column, pair, timeFrame, period) { return new Promise(function(resolve) { column.forEach((i) => { if (checkIfUpOrDown(column, i, UP, 16, BULL, pair, timeFrame, period)) { diff --git a/src/functions/isJson.js b/src/functions/isJson.js index 1e95469..05ef586 100644 --- a/src/functions/isJson.js +++ b/src/functions/isJson.js @@ -1,10 +1,10 @@ 'use strict'; -module.exports = function isJson(json) { - const text = JSON.stringify(json); - try { - JSON.parse(text); - return true; - } catch (error) { - return false; - }; +export function isJson(json) { + const text = JSON.stringify(json); + try { + JSON.parse(text); + return true; + } catch (error) { + return false; + }; }; diff --git a/src/functions/slope.js b/src/functions/slope.js index 48829f0..16f8dd5 100644 --- a/src/functions/slope.js +++ b/src/functions/slope.js @@ -9,7 +9,7 @@ * @param {string} direction The proce data * @return {boolean} true or false */ -module.exports = function slope(period, firstValue, secondValue, direction) { +exports function slope(period, firstValue, secondValue, direction) { const slopeValue = ((firstValue - secondValue) / Math.abs(period - 2)) * period; if (direction == 'bullish') { return (secondValue <= slopeValue); diff --git a/src/functions/spike.js b/src/functions/spike.js index 92925b7..7815c1b 100644 --- a/src/functions/spike.js +++ b/src/functions/spike.js @@ -11,7 +11,7 @@ * @return {string} the string indicating direction */ - module.exports = function spike(left, target, right) { +export function spike(left, target, right) { if (target > left && target > right) { return 'up'; } else if (target < left && target < right) { diff --git a/src/services/bitfinex.js b/src/services/bitfinex.js index af8aa1d..8b51ff7 100644 --- a/src/services/bitfinex.js +++ b/src/services/bitfinex.js @@ -4,7 +4,7 @@ const dbSet = require('../tasks/dbSet'); /** * A service that deal with bitfinex service */ -module.exports = class BitFinexService { +export class BitFinexService { /** * Create BitFinexService * @param {Object[]} timeFrames the time frame needed diff --git a/src/services/scanner.js b/src/services/scanner.js index ea4bc94..eddf7bd 100644 --- a/src/services/scanner.js +++ b/src/services/scanner.js @@ -5,7 +5,7 @@ const dbSet = require('../tasks/dbSet'); /** * A service that scans for divergences */ -module.exports = class ScannerService { +export class ScannerService { /** * @param {bitfinexData[]} bitfinexData * @return {Void} empty promise diff --git a/src/tasks/dbSet.js b/src/tasks/dbSet.js index dd0b7b9..fc44f82 100644 --- a/src/tasks/dbSet.js +++ b/src/tasks/dbSet.js @@ -9,7 +9,7 @@ const isJson = require('../functions/isJson'); * @param {string} key The proce value * @param {object} value The proce value */ -module.exports = function dbSet(key, value) { +export function dbSet(key, value) { if (isJson(value)) { const data = JSON.stringify(value); db.put(key, data, function(err) { From b55f51240fbdeb8c820ce91be2e41fe633a1851d Mon Sep 17 00:00:00 2001 From: hmatthew Date: Wed, 2 May 2018 00:56:12 -0700 Subject: [PATCH 3/4] clean-up more cleaning --- src/functions/divergenceStrategy.js | 56 +++++++++++++++++++++++------ 1 file changed, 45 insertions(+), 11 deletions(-) diff --git a/src/functions/divergenceStrategy.js b/src/functions/divergenceStrategy.js index fa51689..b16ab1c 100644 --- a/src/functions/divergenceStrategy.js +++ b/src/functions/divergenceStrategy.js @@ -1,35 +1,69 @@ 'use strict'; const slope = require('./slope'); + const UP = 'up'; const DOWN = 'down'; const BEAR = 'bearish'; const BULL = 'bullish'; - +/** + * + * @param {number} i + * @param {{}} column + * @param {string} upDown + * @param {16|18} ? magicNumber + * @returns {boolean} + */ function checkIfUpOrDown(i, column, upDown, magicNumber) { const secondColumn = column[2]; + const rsiSpike = 'rsiSpike'; + const rsiValue = 'rsiValue'; + const priceSpike = 'priceSpike'; + const priceValue = 'priceValue'; + if (i <= magicNumber && - secondColumn['priceSpike'] === upDown && - column[i].priceSpike === upDown && - secondColumn['rsiSpike'] === upDown && - column[i].rsiSpike === upDown && - column[i].priceValue < secondColumn.priceValue && - column[i].rsiValue > secondColumn.rsiValue) { + secondColumn[priceSpike] === upDown && + column[i][priceSpike] === upDown && + secondColumn[rsiSpike] === upDown && + column[i][rsiSpike] === upDown && + column[i][priceValue] < secondColumn[priceValue] && + column[i][rsiValue] > secondColumn[rsiValue]) { return true; } return false; } +/** + * + * @param {{}} column + * @param {number} i + * @returns {{}} + */ function getValues(column, i) { + const firstPriceSpikeValue = column[2].priceValue; + const secondPriceSpikeValue = column[i].priceValue; + const firstRsiSpikeValue = column[2].rsiValue; + const secondRsiSpikeValue = column[i].rsiValue; + return { - firstPriceSpikeValue: column[2].priceValue, - secondPriceSpikeValue: column[i].priceValue, - firstRsiSpikeValue: column[2].rsiValue, - secondRsiSpikeValue: column[i].rsiValue + firstPriceSpikeValue, + secondPriceSpikeValue, + firstRsiSpikeValue, + secondRsiSpikeValue }; } +/** + * + * @param {{}} column + * @param {number} i + * @param {string} bullOrBear + * @param {Promise} resolve + * @param {number} pair + * @param {number} timeFrame + * @param {number} period + */ function resolveSlope(column, i, bullOrBear, resolve, pair, timeFrame, period) { const {firstPriceSpikeValue, secondPriceSpikeValue, firstRsiSpikeValue, secondRsiSpikeValue} = getValues(column, i); for (let x = 2; x <= i; x++) { From cbf18dc746b7b467fab0d687894d3b1feacd77c3 Mon Sep 17 00:00:00 2001 From: hmatthew Date: Wed, 2 May 2018 00:57:59 -0700 Subject: [PATCH 4/4] clean-up more cleaning --- src/functions/divergenceStrategy.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/functions/divergenceStrategy.js b/src/functions/divergenceStrategy.js index b16ab1c..807c49c 100644 --- a/src/functions/divergenceStrategy.js +++ b/src/functions/divergenceStrategy.js @@ -63,6 +63,8 @@ function getValues(column, i) { * @param {number} pair * @param {number} timeFrame * @param {number} period + * + * would be best to de-construct all these params */ function resolveSlope(column, i, bullOrBear, resolve, pair, timeFrame, period) { const {firstPriceSpikeValue, secondPriceSpikeValue, firstRsiSpikeValue, secondRsiSpikeValue} = getValues(column, i);