SystemManager = {
function structureBars(bars) {
let result = {}
let window = -1;
for(let key in bars) {
result[key] = []
let arr = bars[key].concat().reverse()
for (let i = 0; i < arr.length; i++) {
result[key][i] = arr.slice(i)
}
if (window === -1) {
window = result[key].length
} else {
window = Math.min(window, result[key].length)
}
}
return {
symbols: Object.keys(result),
bars: result,
window,
}
}
function run(s, bars) {
const d = structureBars(bars)
console.log(d)
console.clear()
for (let i = d.window - 1; i >= 0; i--) {
const barsPerWindow = _.map(v => v[i], d.bars)
const today = barsPerWindow['MSFT'][0].dateFormatted
const rulesEval = []
const openTrade = evaluateTree(s.entryTree, (value, type) => {
switch (type) {
case 'decision': {
const symbol = value.params.symbol
const barsForRule = barsPerWindow[symbol]
const ctx = RulesManager.createCtx(symbol, barsForRule)
const result = value.fn(ctx, value.params)
rulesEval.push([value.name, result])
return { result }
}
case 'open': {
console.log('open trade:', value)
return
}
default:
return
}
})
console.log(today)
console.info(...rulesEval)
if (openTrade && TradeManager.canOpenTrade()) {
}
console.log('\n')
}
return {}
}
return {
run,
structureBars
}
}