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