Guest User

Untitled

a guest
Jul 19th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.83 KB | None | 0 0
  1. const ccxt = require('ccxt')
  2. const talib = require('talib')
  3. let coinbasepro = new ccxt.coinbasepro({ 'apiKey': process.env.CBPAPIKEY, 'secret': process.env.CBPSECRET, 'password': process.env.CBPPASSWORD })
  4. let markets = ['BTC/USD', 'LTC/USD', 'ETH/USD', 'BCH/USD', 'LTC/BTC', 'ETH/BTC', 'BCH/BTC']
  5. let reqFinished = true
  6. let marketIndex = 0
  7. let latestsOHLCV = { 'BTC/USD': {}, 'LTC/USD': {}, 'ETH/USD': {}, 'BCH/USD': {}, 'LTC/BTC': {}, 'ETH/BTC': {}, 'BCH/BTC': {} }
  8. let marketIndicators = { 'BTC/USD': [], 'LTC/USD': [], 'ETH/USD': [], 'BCH/USD': [], 'LTC/BTC': [], 'ETH/BTC': [], 'BCH/BTC': [] }
  9. setInterval(() => {
  10. if (reqFinished) {
  11. reqFinished = false
  12. coinbasepro.fetchOHLCV(markets[marketIndex]).then(ohlcv => {
  13. let open = []
  14. let high = []
  15. let low = []
  16. let close = []
  17. let volume = []
  18. ohlcv.forEach((val, valIndex) => {
  19. open.push(val[1])
  20. high.push(val[2])
  21. low.push(val[3])
  22. close.push(val[4])
  23. volume.push(val[5])
  24. })
  25. latestsOHLCV[markets[marketIndex]] = {
  26. 'open': open,
  27. 'high': high,
  28. 'low': low,
  29. 'close': close,
  30. 'volume': volume
  31. }
  32. if (marketIndex === 6) {
  33. marketIndex = 0
  34. } else {
  35. marketIndex = marketIndex + 1
  36. }
  37. reqFinished = true
  38. }).catch(err => {
  39. reqFinished = true
  40. console.log(err)
  41. })
  42. }
  43. }, 1000)
  44. // wait ten seconds to let latestsOHLCV build up
  45. setTimeout(() => {
  46. Object.keys(latestsOHLCV).forEach((marketName, marketNameIndex) => {
  47. talib.functions.forEach((func, funcIndex) => {
  48. if (func.inputs[0].type === 'price' && func.name !== 'IMI') {
  49. let exeObject = {
  50. 'name': func.name,
  51. 'startIdx': 0,
  52. 'endIdx': latestsOHLCV[marketName].close.length - 1
  53. }
  54. Object.keys(func.inputs[0].flags).forEach((flag, flagIndex) => {
  55. exeObject[func.inputs[0].flags[flag]] = latestsOHLCV[marketName][func.inputs[0].flags[flag]]
  56. })
  57. func.optInputs.forEach((optInput, optInputIndex) => {
  58. exeObject[optInput.name] = optInput.defaultValue
  59. })
  60. talib.execute(exeObject, (err, result) => {
  61. if (err) {
  62. console.log(err)
  63. } else {
  64. marketIndicators[marketName].push({ 'taFunction': func.name, 'result': result.result })
  65. }
  66. })
  67. }
  68. })
  69. })
  70. }, 10000)
  71. // check the marketIndicators object after 10 seconds has passed to see the results
Add Comment
Please, Sign In to add comment