@@ -37,50 +37,61 @@ export class MachineDaytradingService {
37
37
} , 'MachineDaytradingService_ml' , null , false , 300000 ) ;
38
38
}
39
39
40
+ findSingleTrade ( stockSymbol , stopTime = null , mainCallback = ( stock , quantity , price ) => { } ) {
41
+ if ( ! stockSymbol ) {
42
+ stockSymbol = this . getRandomStock ( ) ;
43
+ }
44
+ this . backtestService . getDaytradeRecommendation ( stockSymbol , 0 , 0 , { minQuotes : 81 } , 'tiingo' ) . subscribe (
45
+ analysis => {
46
+ if ( analysis . mfiTrade . toLowerCase ( ) === 'bullish' || analysis . vwma . toLowerCase ( ) === 'bullish' ) {
47
+ this . schedulerService . schedule ( ( ) => {
48
+ this . machineLearningService
49
+ . trainPredictNext30 ( stockSymbol ,
50
+ moment ( ) . add ( { days : 1 } ) . format ( 'YYYY-MM-DD' ) ,
51
+ moment ( ) . subtract ( { days : 1 } ) . format ( 'YYYY-MM-DD' ) ,
52
+ 1 ,
53
+ this . globalSettingsService . daytradeAlgo
54
+ )
55
+ . subscribe ( ( data : any [ ] ) => {
56
+ // if (data[0].nextOutput > 0.5 && data[0].correct / data[0].guesses > 0.5) {
57
+ if ( data [ 0 ] . correct / data [ 0 ] . guesses > 0.6 && data [ 0 ] . guesses > 50 ) {
58
+ const cb = ( quantity , price ) => {
59
+ this . selectedStock = stockSymbol ;
60
+ this . quantity = quantity ;
61
+ this . orderSize = _ . floor ( quantity / 3 ) || 1 ;
62
+ console . log ( 'Set trade: ' , stockSymbol , this . quantity , this . orderSize ) ;
63
+ mainCallback ( stockSymbol , quantity , price ) ;
64
+ } ;
65
+
66
+ console . log ( 'Found a trade: ' , stockSymbol ) ;
67
+
68
+ if ( this . allocationTotal !== null && this . allocationPct !== null ) {
69
+ console . log ( 'Adding trade 1: ' , stockSymbol ) ;
70
+ this . addOrder ( 'daytrade' , stockSymbol , this . allocationPct , this . allocationTotal , cb , analysis . data . price ) ;
71
+ } else {
72
+ this . schedulerService . schedule ( ( ) => {
73
+ this . getPortfolioBalance ( ) . subscribe ( balance => {
74
+ console . log ( 'Adding trade 2: ' , stockSymbol ) ;
75
+ this . addOrder ( 'daytrade' , stockSymbol , 1 , balance . availableFunds , cb , analysis . data . price ) ;
76
+ } ) ;
77
+ } , 'MachineDaytradingService_add_order' , stopTime , true ) ;
78
+ }
79
+ } else {
80
+ mainCallback ( null , null , null ) ;
81
+ }
82
+ } , ( ) => {
83
+ mainCallback ( null , null , null ) ;
84
+ } ) ;
85
+ } , 'MachineDaytradingService_ml' , stopTime ) ;
86
+ }
87
+ }
88
+ ) ;
89
+ }
90
+
40
91
findTrade ( ) {
41
92
this . schedulerService . schedule ( ( ) => {
42
93
if ( ! this . selectedStock ) {
43
- const stock = this . getRandomStock ( ) ;
44
- this . backtestService . getDaytradeRecommendation ( stock , 0 , 0 , { minQuotes : 81 } , 'tiingo' ) . subscribe (
45
- analysis => {
46
- if ( analysis . mfiTrade . toLowerCase ( ) === 'bullish' || analysis . vwma . toLowerCase ( ) === 'bullish' ) {
47
- this . schedulerService . schedule ( ( ) => {
48
- this . machineLearningService
49
- . trainPredictNext30 ( stock ,
50
- moment ( ) . add ( { days : 1 } ) . format ( 'YYYY-MM-DD' ) ,
51
- moment ( ) . subtract ( { days : 1 } ) . format ( 'YYYY-MM-DD' ) ,
52
- 1 ,
53
- this . globalSettingsService . daytradeAlgo
54
- )
55
- . subscribe ( ( data : any [ ] ) => {
56
- // if (data[0].nextOutput > 0.5 && data[0].correct / data[0].guesses > 0.5) {
57
- if ( data [ 0 ] . correct / data [ 0 ] . guesses > 0.6 && data [ 0 ] . guesses > 50 ) {
58
- const cb = ( quantity ) => {
59
- this . selectedStock = stock ;
60
- this . quantity = quantity ;
61
- this . orderSize = _ . floor ( quantity / 3 ) || 1 ;
62
- console . log ( 'Set trade: ' , stock , this . quantity , this . orderSize ) ;
63
- } ;
64
-
65
- console . log ( 'Found a trade: ' , stock ) ;
66
-
67
- if ( this . allocationTotal !== null && this . allocationPct !== null ) {
68
- console . log ( 'Adding trade 1: ' , stock ) ;
69
- this . addOrder ( 'daytrade' , stock , this . allocationPct , this . allocationTotal , cb , analysis . data . price ) ;
70
- } else {
71
- this . schedulerService . schedule ( ( ) => {
72
- this . getPortfolioBalance ( ) . subscribe ( balance => {
73
- console . log ( 'Adding trade 2: ' , stock ) ;
74
- this . addOrder ( 'daytrade' , stock , 1 , balance . availableFunds , cb , analysis . data . price ) ;
75
- } ) ;
76
- } , 'MachineDaytradingService_add_order' , this . globalSettingsService . stopTime , true ) ;
77
- }
78
- }
79
- } ) ;
80
- } , 'MachineDaytradingService_ml' , this . globalSettingsService . stopTime ) ;
81
- }
82
- }
83
- ) ;
94
+ this . findSingleTrade ( null , this . globalSettingsService . stopTime ) ;
84
95
}
85
96
} , 'MachineDaytradingService_get_recommendation' , this . globalSettingsService . stopTime ) ;
86
97
}
@@ -90,7 +101,7 @@ export class MachineDaytradingService {
90
101
return _ . floor ( totalCost / stockPrice ) ;
91
102
}
92
103
93
- addOrder ( orderType : string , stock : string , allocationPct : number , total : number , cb : ( arg1 : number , arg2 : number ) => void , lastPrice , reject = err => { } ) {
104
+ addOrder ( orderType : string , stock : string , allocationPct : number , total : number , cb : ( arg1 : number , arg2 : number ) => void , lastPrice , reject = err => { } ) {
94
105
if ( orderType . toLowerCase ( ) === 'sell' ) {
95
106
this . portfolioService . getTdPortfolio ( ) . subscribe ( ( data ) => {
96
107
data . forEach ( ( holding ) => {
0 commit comments