1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 | var moment = require('moment');
|
21 | var _ = require('underscore');
|
22 | var util = require('./util.js');
|
23 | var log = require('./log.js');
|
24 | var async = require('async');
|
25 | var Manager = require('./portfolioManager');
|
26 |
|
27 | var config = util.getConfig();
|
28 | var Consultant = require('./methods/' + config.tradingMethod.toLowerCase().split(' ').join('-'));
|
29 |
|
30 | log.info('I\'m gonna make you rich, Bud Fox.');
|
31 | log.info('Let me show you some ' + config.tradingMethod + '.\n\n');
|
32 |
|
33 | if(config.backtest.enabled) {
|
34 | log.info('Preparing backtester to test strategy against historical data.');
|
35 |
|
36 |
|
37 | var consultant = new Consultant();
|
38 |
|
39 |
|
40 | if(config.normal.enabled)
|
41 | config.watch = config.normal;
|
42 |
|
43 | var Logger = require('./logger');
|
44 | var logger = new Logger(_.extend(config.profitCalculator, config.watch));
|
45 | consultant.on('advice', logger.inform);
|
46 | if(config.profitCalculator.enabled)
|
47 | consultant.on('advice', logger.trackProfits);
|
48 |
|
49 | consultant.on('finish', logger.finish);
|
50 |
|
51 | consultant.emit('prepare');
|
52 | return;
|
53 | }
|
54 |
|
55 |
|
56 |
|
57 |
|
58 |
|
59 | if(config.normal && config.normal.enabled) {
|
60 |
|
61 |
|
62 | log.info('Using normal settings to monitor the live market');
|
63 | config.watch = config.normal;
|
64 | config.traders = [];
|
65 |
|
66 | var checker = new Manager(config.normal, true);
|
67 | var valid = checker.validCredentials();
|
68 | if(config.normal.tradingEnabled && valid)
|
69 | config.traders.push( config.normal );
|
70 | else
|
71 | log.info('NOT trading with real money');
|
72 | } else {
|
73 | log.info('Using advanced settings');
|
74 | }
|
75 |
|
76 |
|
77 |
|
78 |
|
79 | var provider = config.watch.exchange.toLowerCase();
|
80 | if(provider === 'btce') {
|
81 |
|
82 |
|
83 | config.watch.market = provider;
|
84 | provider = 'bitcoincharts';
|
85 | }
|
86 | var DataProvider = require('./exchanges/' + provider);
|
87 | var watcher = new DataProvider(config.watch);
|
88 |
|
89 |
|
90 |
|
91 | var consultant = new Consultant(watcher);
|
92 |
|
93 |
|
94 | var Logger = require('./logger');
|
95 | var logger = new Logger(_.extend(config.profitCalculator, config.watch));
|
96 | consultant.on('advice', logger.inform);
|
97 | if(config.profitCalculator.enabled)
|
98 | consultant.on('advice', logger.trackProfits);
|
99 |
|
100 |
|
101 |
|
102 |
|
103 | var managers = _.filter(config.traders, function(t) { return t.enabled });
|
104 | var configureManagers = function(_next) {
|
105 | var next = _.after(managers.length, _next);
|
106 | _.each(managers, function(conf) {
|
107 | conf.exchange = conf.exchange.toLowerCase();
|
108 |
|
109 | var manager = new Manager(conf);
|
110 | consultant.on('advice', manager.trade);
|
111 | manager.on('ready', next);
|
112 | });
|
113 | }
|
114 |
|
115 |
|
116 |
|
117 |
|
118 |
|
119 | var configureMail = function(next) {
|
120 | if(config.mail.enabled && config.mail.email) {
|
121 | var mailer = require('./mailer');
|
122 | mailer.init(function() {
|
123 | consultant.on('advice', mailer.send);
|
124 | next();
|
125 | });
|
126 | } else
|
127 | next();
|
128 | }
|
129 |
|
130 | var start = function() {
|
131 | consultant.emit('prepare');
|
132 | }
|
133 |
|
134 | async.series([configureMail, configureManagers], start); |
\ | No newline at end of file |