2019-04-22 21:54:54 +02:00
import 'colors'
import cron from 'node-schedule'
import { loadByPath } from './providers/cryptocompare'
//import fetch from 'node-fetch'
//import cc from 'cryptocompare'
import fs from 'fs-extra'
//global.fetch = fetch
import config from './config.js'
2021-08-30 19:28:39 +02:00
const timeFrames = '1 5 15 30 1H 2H 4H 1D 2D 1W 1M' . split ( ' ' )
const timeFramesMin = '1 1H 1D' . split ( ' ' )
const timeFrameAggregates = { '' : 1 , 'H' : 1 , 'D' : 1 , 'W' : 7 , 'M' : 30 }
2019-04-22 21:54:54 +02:00
const timeFrameMinutes = { '' : 1 , 'H' : 60 , 'D' : 60 * 24 , 'W' : 60 * 24 * 7 , 'M' : 60 * 24 * 30 }
const json2csv = list => list . map ( p => [ p . time , p . close , p . high , p . low , p . open , p . volumefrom , p . volumeto ] . join ( ) ) . join ( '\n' )
const csv2json = csv => csv . split ( '\n' )
. map ( line => {
let v = line . split ( ',' )
return { time : v [ 0 ] , close : v [ 1 ] , high : v [ 2 ] , low : v [ 3 ] , open : v [ 4 ] , volumeFrom : v [ 5 ] , volumeTo : v [ 6 ] }
} )
const log = ( ... args ) => obj => ( console . log ( ... args , obj ) , obj )
2021-08-30 19:28:39 +02:00
const ccfs2colors = ccfs => {
let [ exchange , fsym , tsym , period , start , end = '' ] = ccfs . split ( '/' )
, str = exchange . grey + '/'
str += fsym . cyan + '/'
str += tsym . blue + '/'
str += period ? period . magenta + '/' : ''
str += start ? start . yellow + '/' : ''
str += end ? end . yellow + '/' : ''
return str
}
2019-04-22 21:54:54 +02:00
function ccfs2file ( ccfs )
{
2021-08-30 19:28:39 +02:00
let start , end , ccPath = ccfs . split ( '/' )
return loadByPath ( ccfs )
// return fs.readFile( `${config.dataDir}/${ccfs}-1279324800-1555545600.csv`, 'utf8' ).then( csv2json )
. then ( data => ( ccPath [ 4 ] = data [ 0 ] . time , ccPath [ 5 ] = data [ data . length - 1 ] . time , data ) )
2019-04-22 21:54:54 +02:00
. then ( json2csv )
. then ( csv => {
2021-08-30 19:28:39 +02:00
ccPath [ 4 ] = ` ${ ccPath [ 4 ] } - ${ ccPath [ 5 ] } `
ccPath = ccPath . slice ( 0 , 5 )
let file = ` ${ config . dataDir } / ${ ccPath . join ( '/' ) } .csv `
fs . outputFile ( file , csv )
2019-04-22 21:54:54 +02:00
return file
} )
}
/ *
ccfs2file ( 'CCCAGG/BTC/USD/1' )
ccfs2file ( 'CCCAGG/BTC/USD/15' )
ccfs2file ( 'CCCAGG/BTC/USD/1H' )
ccfs2file ( 'CCCAGG/BTC/USD/4H' )
ccfs2file ( 'CCCAGG/BTC/USD/1D' )
ccfs2file ( 'CCCAGG/BTC/USD/1W' )
ccfs2file ( 'CCCAGG/BTC/USD/1M' )
* /
//cc.rateLimit().then( console.log )
export default function main ( ccfs )
{
var job = cron . scheduleJob ( '*/1 * * * *' , ( ) => console . log ( 'The answer to life, the universe, and everything! at' , new Date ) )
}
2021-08-30 19:28:39 +02:00
// esm cryptoSaver:backfill CCCAGG/BTC/USD[[[/1D]/24567788976543]/4578998765]
2019-04-22 21:54:54 +02:00
export function backfill ( { 0 : ccfs } )
{
let ccPath = ccfs . split ( '/' )
, [ exchange , fsym , tsym , period , start , end = '' ] = ccPath
if ( ccPath . length == 3 ) // all timeFrames
{
2021-08-30 19:28:39 +02:00
console . log ( ` ${ ccfs2colors ( ccfs ) } >Backfilling of all time frames of ${ fsym . cyan } / ${ tsym . blue } on ${ exchange . grey } exchange... ` )
timeFrames
2019-04-22 21:54:54 +02:00
. map ( tf => ccfs + '/' + tf )
. map ( ccfs => backfill ( [ ccfs ] ) )
}
if ( ccPath . length == 4 ) // one timeFrame, recursive until error
{
2021-08-30 19:28:39 +02:00
console . log ( ` ${ ccfs2colors ( ccfs ) } >Backfilling the ${ period . magenta } time frame of ${ fsym . cyan } / ${ tsym . blue } on ${ exchange . grey } exchange... ` )
2019-04-22 21:54:54 +02:00
ccfs2file ( ccfs )
. then ( log ( 'File saved:' ) )
2021-08-30 19:28:39 +02:00
. then ( file => log ( ccfs + '/' + file . match ( /\/*?(\d*)-/ ) [ 1 ] ) ( ) || backfill ( [ ccfs + '/' + file . match ( /\/*?(\d*)-/ ) [ 1 ] ] ) )
2019-04-22 21:54:54 +02:00
}
2021-08-30 19:28:39 +02:00
if ( ccPath . length == 5 ) // from date to maximum history
{
console . log ( ` ${ ccfs2colors ( ccfs ) } >Backfilling from ${ start . yellow } to max history available of the ${ period . magenta } time frame of ${ fsym . cyan } / ${ tsym . blue } on ${ exchange . grey } exchange... ` )
ccfs2file ( ccfs )
. then ( log ( 'File saved:' ) )
. then ( file => {
ccPath [ 4 ] = file . match ( /\/*?(\d*)-/ ) [ 1 ]
let next = ccPath . join ( '/' )
log ( 'Next ccfs:' ) ( next )
return backfill ( [ next ] )
} )
}
if ( ccPath . length == 6 ) // from date to date
2019-04-22 21:54:54 +02:00
{
2021-08-30 19:28:39 +02:00
console . log ( ` ${ ccfs2colors ( ccfs ) } >Backfilling from ${ start . yellow } to ${ end . yellow } of the ${ period . magenta } time frame of ${ fsym . cyan } / ${ tsym . blue } on ${ exchange . grey } exchange... ` )
ccfs2file ( ccfs )
. then ( log ( 'File saved:' ) )
2019-04-22 21:54:54 +02:00
}
2021-08-30 19:28:39 +02:00
2019-04-22 21:54:54 +02:00
}
export function validate ( { 0 : ccfs , aze } )
{
console . log ( ccfs , aze )
}
2021-08-30 19:28:39 +02:00
export function compile ( { 0 : ccfs } )
{
console . log ( ` Compile ` , ccfs )
}