박하늘

multivalue update

1 var express = require('express'); 1 var express = require('express');
2 const request = require('request'); 2 const request = require('request');
3 const TARGET_URL = 'https://api.line.me/v2/bot/message/reply' 3 const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
4 -const TOKEN = 'sGB5EZq14+Lu4sc6Gt6NJ1Sx/rDtE1BsTyfZeNX42XVVjcgX1kk6/Uj1H40IQ1X3y8MzJLvKGifhioNCJLWQkWH2i95EtNDQyGn7Iqu6MnQRE7pg/z7klGgswS9974s0EKX90FcCfAIndNSYAG+d5gdB04t89/1O/w1cDnyilFU=' 4 +const TOKEN = 'OVIxKODBqM8Pn2dpFtFeSLsDbBvApfTu88rh8wFGOzfvgvPjmBH0A4XKii97VxIDO9shYyTix4qGq32vwvL895Rbss5VSVEiU/XG5lOdyTLgECkSQKOdObSetZwcVHbGmzZJ+0Cz5vZrB5KuImOwrwdB04t89/1O/w1cDnyilFU='
5 const fs = require('fs'); 5 const fs = require('fs');
6 const path = require('path'); 6 const path = require('path');
7 const HTTPS = require('https'); 7 const HTTPS = require('https');
8 -const domain = "2016100990.oss2021.tk" 8 +const domain = "2017103989.oss2021.tk"
9 const sslport = 23023; 9 const sslport = 23023;
10 -
11 const bodyParser = require('body-parser'); 10 const bodyParser = require('body-parser');
12 var app = express(); 11 var app = express();
13 12
13 +var stockarr = [];
14 14
15 - 15 +app.use('/simages', express.static(__dirname + '/src'));
16 -var holder1 = '';
17 -var holder2 = '';
18 -
19 -
20 -
21 app.use(bodyParser.json()); 16 app.use(bodyParser.json());
22 app.post('/hook', function (req, res) { 17 app.post('/hook', function (req, res) {
23 -
24 var eventObj = req.body.events[0]; 18 var eventObj = req.body.events[0];
25 var source = eventObj.source; 19 var source = eventObj.source;
26 var message = eventObj.message; 20 var message = eventObj.message;
...@@ -33,15 +27,14 @@ app.post('/hook', function (req, res) { ...@@ -33,15 +27,14 @@ app.post('/hook', function (req, res) {
33 { 27 {
34 if(eventObj.postback.data == 'action=datetemp&selectId=1') 28 if(eventObj.postback.data == 'action=datetemp&selectId=1')
35 { 29 {
36 - console.log("optimizer 실행") 30 +
37 - app.use('/simages', express.static(__dirname + '/src')); 31 + optimizer(eventObj.replyToken, eventObj.postback.params.date)
38 - optimizer(eventObj.replyToken, holder1, holder2, eventObj.postback.params.date) 32 + stockarr.splice(0, stockarr.length);
39 - app.use('/simages', express.static(__dirname + '/src'));
40 } 33 }
41 } 34 }
42 else 35 else
43 { 36 {
44 - if(eventObj.message.text == '도움말' || '주가 도움말' || '비중 추천 도움말' || '백테스트 도움말') 37 + if(eventObj.message.text == '도움말' || eventObj.message.text == '주가 도움말' || eventObj.message.text == '비중 추천 도움말' || eventObj.message.text == '백테스트 도움말')
45 { 38 {
46 printhelp(eventObj.replyToken, eventObj.message.text) 39 printhelp(eventObj.replyToken, eventObj.message.text)
47 } 40 }
...@@ -53,7 +46,6 @@ app.post('/hook', function (req, res) { ...@@ -53,7 +46,6 @@ app.post('/hook', function (req, res) {
53 { 46 {
54 basicinform(eventObj.replyToken, eventObj.message.text) 47 basicinform(eventObj.replyToken, eventObj.message.text)
55 } 48 }
56 -
57 } 49 }
58 50
59 res.sendStatus(200); 51 res.sendStatus(200);
...@@ -80,28 +72,49 @@ function printhelp(replyToken, message){ ...@@ -80,28 +72,49 @@ function printhelp(replyToken, message){
80 "type": "action", 72 "type": "action",
81 "action": { 73 "action": {
82 "type": "message", 74 "type": "message",
83 - "label": '주가', 75 + "label": '주가 도움말',
84 - "text": '주가 기능 도움말' 76 + "text": '주가 도움말'
85 } 77 }
86 }, 78 },
87 { 79 {
88 "type": "action", 80 "type": "action",
89 "action": { 81 "action": {
90 "type": "message", 82 "type": "message",
91 - "label": '비중 추천', 83 + "label": '비중 추천 도움말',
92 - "text": '비중 추천 기능 도움말' 84 + "text": '비중 추천 도움말'
93 } 85 }
94 }, 86 },
95 { 87 {
96 "type": "action", 88 "type": "action",
97 "action": { 89 "action": {
98 "type": "message", 90 "type": "message",
99 - "label": '백테스트', 91 + "label": '백테스트 도움말',
100 - "text": '백테스트 기능 도움말' 92 + "text": '백테스트 도움말'
93 + }
94 + }
95 + ]
101 } 96 }
102 } 97 }
103 ] 98 ]
104 } 99 }
100 + },(error, response, body) => {
101 + console.log(body)
102 + });
103 + }
104 + else if(message == '주가 도움말')
105 + {
106 + request.post(
107 + {
108 + url: TARGET_URL,
109 + headers: {
110 + 'Authorization': `Bearer ${TOKEN}`
111 + },
112 + json: {
113 + "replyToken":replyToken,
114 + "messages":[
115 + {
116 + "type":"text",
117 + "text":"사용자 : 주가 도움말\n챗봇: 종목명을 알려주세요.\n사용자: 종목명 입력 (ex 삼성전자)\n챗봇 : 현재가 거래량 전일대비 수익률"
105 } 118 }
106 ] 119 ]
107 } 120 }
...@@ -109,7 +122,7 @@ function printhelp(replyToken, message){ ...@@ -109,7 +122,7 @@ function printhelp(replyToken, message){
109 console.log(body) 122 console.log(body)
110 }); 123 });
111 } 124 }
112 - else if(message == '주가 기능 도움말') 125 + else if(message == '비중 추천 도움말')
113 { 126 {
114 request.post( 127 request.post(
115 { 128 {
...@@ -122,7 +135,7 @@ function printhelp(replyToken, message){ ...@@ -122,7 +135,7 @@ function printhelp(replyToken, message){
122 "messages":[ 135 "messages":[
123 { 136 {
124 "type":"text", 137 "type":"text",
125 - "text":"사용자 : 주가\n챗봇: 종목명을 알려주세요.\n사용자: 종목명 입력 (ex 삼성전자)\n챗봇 : 현재가 거래량 전일대비 수익률" 138 + "text":"사용자 : 비중 추천 도움말\n챗봇 : 포트폴리오에 넣을 종목을 선택해주세요(2 종목 이상)\n사용자 : 종목명 입력 (ex 삼성전자, LG전자 ...)\n챗봇: 전략을 선택해주세요. (gmv, ms , rp)\n사용자: gmv, ms, rp 중 입력\n챗봇 : 케이스에 맞게 함수 실행 후 비중 출력"
126 } 139 }
127 ] 140 ]
128 } 141 }
...@@ -130,7 +143,7 @@ function printhelp(replyToken, message){ ...@@ -130,7 +143,7 @@ function printhelp(replyToken, message){
130 console.log(body) 143 console.log(body)
131 }); 144 });
132 } 145 }
133 - else if(message == '비중 추천 기능 도움말') 146 + else if(message == '백테스트 도움말')
134 { 147 {
135 request.post( 148 request.post(
136 { 149 {
...@@ -143,7 +156,7 @@ function printhelp(replyToken, message){ ...@@ -143,7 +156,7 @@ function printhelp(replyToken, message){
143 "messages":[ 156 "messages":[
144 { 157 {
145 "type":"text", 158 "type":"text",
146 - "text":"사용자 : 비중 추천\n챗봇 : 포트폴리오에 넣을 종목을 선택해주세요(2 종목 이상)\n사용자 : 종목명 입력 (ex 삼성전자, LG전자 ...)\n챗봇: 전략을 선택해주세요. (gmv, ms , rp)\n사용자: gmv, ms, rp 중 입력\n챗봇 : 케이스에 맞게 함수 실행 후 비중 출력" 159 + "text":"사용자 : 백테스트 도움말\n챗봇: 포트폴리오에 넣을 종목을 선택해주세요(2 종목 이상)\n사용자: 종목명 입력\n챗봇: 시작할 날짜를 입력해주세요\n사용자: 입력\n챗봇: 전략을 선택해주세요 (gmv, ms , rp)\n사용자: gmv,ms,rp 중 입력\n챗봇: 함수 실행 후 그래프 출력"
147 } 160 }
148 ] 161 ]
149 } 162 }
...@@ -151,7 +164,7 @@ function printhelp(replyToken, message){ ...@@ -151,7 +164,7 @@ function printhelp(replyToken, message){
151 console.log(body) 164 console.log(body)
152 }); 165 });
153 } 166 }
154 - else if(message == '백테스트 기능 도움말') 167 + else if(message == '주가 도움말')
155 { 168 {
156 request.post( 169 request.post(
157 { 170 {
...@@ -164,7 +177,7 @@ function printhelp(replyToken, message){ ...@@ -164,7 +177,7 @@ function printhelp(replyToken, message){
164 "messages":[ 177 "messages":[
165 { 178 {
166 "type":"text", 179 "type":"text",
167 - "text":"사용자 : 백테스트\n챗봇: 포트폴리오에 넣을 종목을 선택해주세요(2 종목 이상)\n사용자: 종목명 입력\n챗봇: 시작할 날짜를 입력해주세요\n사용자: 입력\n챗봇: 전략을 선택해주세요 (gmv, ms , rp)\n사용자: gmv,ms,rp 중 입력\n챗봇: 함수 실행 후 그래프 출력" 180 + "text":"사용자 : 주가 도움말\n챗봇: 종목명을 알려주세요.\n사용자: 종목명 입력 (ex 삼성전자)\n챗봇 : 현재가 거래량 전일대비 수익률"
168 } 181 }
169 ] 182 ]
170 } 183 }
...@@ -196,6 +209,11 @@ function basicinform(replyToken, message) { ...@@ -196,6 +209,11 @@ function basicinform(replyToken, message) {
196 { 209 {
197 "type":"text", 210 "type":"text",
198 "text":pystring 211 "text":pystring
212 + },
213 + {
214 + "type":"image",
215 + "originalContentUrl": "https://2017103989.oss2021.tk:23023/simages/test.png",
216 + "previewImageUrl": "https://2017103989.oss2021.tk:23023/simages/test.png"
199 } 217 }
200 ] 218 ]
201 } 219 }
...@@ -258,14 +276,20 @@ function basicinform(replyToken, message) { ...@@ -258,14 +276,20 @@ function basicinform(replyToken, message) {
258 process.stdout.on("data", Callback); 276 process.stdout.on("data", Callback);
259 } 277 }
260 278
261 -function optimizer(replyToken, stock1, stock2, sdate) { 279 +function optimizer(replyToken, sdate) {
262 sdate = sdate.toString(); 280 sdate = sdate.toString();
263 - console.log(typeof(stock1), typeof(stock2), typeof(sdate)) 281 + var pystring = ''
264 - console.log(stock1, stock2, sdate) 282 + var i;
283 + for(i = 0; i < stockarr.length; i++)
284 + {
285 + pystring += stockarr[i];
286 + pystring += ','
287 + }
288 + pystring += sdate;
289 + console.log(pystring);
265 const spawn = require("child_process").spawn; 290 const spawn = require("child_process").spawn;
266 - const process = spawn("python", ["optimizer.py", stock1, stock2, sdate]); 291 + const process = spawn("python", ["optimizer.py", pystring]);
267 const Callback = (data) => { 292 const Callback = (data) => {
268 - console.log(stock1, stock2, sdate)
269 request.post( 293 request.post(
270 { 294 {
271 url: TARGET_URL, 295 url: TARGET_URL,
...@@ -277,7 +301,7 @@ function optimizer(replyToken, stock1, stock2, sdate) { ...@@ -277,7 +301,7 @@ function optimizer(replyToken, stock1, stock2, sdate) {
277 "messages":[ 301 "messages":[
278 { 302 {
279 "type":"text", 303 "type":"text",
280 - "text":'조회하신 ' + holder1 +', ' + holder2 + '의 백테스트 결과입니다.' 304 + "text":'조회하신 주식의 백테스트 결과입니다.'
281 }, 305 },
282 { 306 {
283 "type":"image", 307 "type":"image",
...@@ -295,8 +319,11 @@ function optimizer(replyToken, stock1, stock2, sdate) { ...@@ -295,8 +319,11 @@ function optimizer(replyToken, stock1, stock2, sdate) {
295 319
296 function date(replyToken, message) { 320 function date(replyToken, message) {
297 var holder = message.split(' ') 321 var holder = message.split(' ')
298 - holder1 = holder[0] 322 + var i;
299 - holder2 = holder[1] 323 + for(i = 0; i < holder.length; i++)
324 + {
325 + stockarr[i] = holder[i];
326 + }
300 var today = new Date(); 327 var today = new Date();
301 var year = today.getFullYear(); 328 var year = today.getFullYear();
302 var month = today.getMonth() + 1; 329 var month = today.getMonth() + 1;
...@@ -310,8 +337,6 @@ function date(replyToken, message) { ...@@ -310,8 +337,6 @@ function date(replyToken, message) {
310 date = '0'+ date 337 date = '0'+ date
311 } 338 }
312 var stoday = year + '-' + month + '-' + date; 339 var stoday = year + '-' + month + '-' + date;
313 -
314 -
315 const messageObject = { 340 const messageObject = {
316 "type": "template", 341 "type": "template",
317 "altText": "this is a buttons template", 342 "altText": "this is a buttons template",
...@@ -373,14 +398,11 @@ function date(replyToken, message) { ...@@ -373,14 +398,11 @@ function date(replyToken, message) {
373 messageObject 398 messageObject
374 ] 399 ]
375 400
376 -
377 } 401 }
378 },(error, response, body) => { 402 },(error, response, body) => {
379 console.log(body) 403 console.log(body)
380 }); 404 });
381 405
382 -
383 -
384 } 406 }
385 407
386 try { 408 try {
...@@ -391,10 +413,9 @@ try { ...@@ -391,10 +413,9 @@ try {
391 }; 413 };
392 414
393 HTTPS.createServer(option, app).listen(sslport, () => { 415 HTTPS.createServer(option, app).listen(sslport, () => {
394 - console.log(`[HTTPS] Server is started on port hihi ${sslport}`); 416 + console.log(`[HTTPS] Server is started on port ${sslport}`);
395 }); 417 });
396 } catch (error) { 418 } catch (error) {
397 console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.'); 419 console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.');
398 console.log(error); 420 console.log(error);
399 } 421 }
400 -
......
...@@ -583,10 +583,19 @@ class back_test: ...@@ -583,10 +583,19 @@ class back_test:
583 # print(back_test().backtest_data(['삼성전자','LG전자'],[0.9,0.1],'2010-01-01', '2021-01-01',10000000,3, 'monthly', 'gmv')['pfo_return'][0]['acc_return_ratio']) 583 # print(back_test().backtest_data(['삼성전자','LG전자'],[0.9,0.1],'2010-01-01', '2021-01-01',10000000,3, 'monthly', 'gmv')['pfo_return'][0]['acc_return_ratio'])
584 # print(back_test().backtest_data(['삼성전자','LG전자'],[0.9,0.1],'2018-01-01', '2021-01-01',10000000,6, 'monthly', 'gmv')) 584 # print(back_test().backtest_data(['삼성전자','LG전자'],[0.9,0.1],'2018-01-01', '2021-01-01',10000000,6, 'monthly', 'gmv'))
585 585
586 +args = sys.argv[1].split(",")
586 587
587 -print(sys.argv[0]) 588 +assets = []
588 -data = back_test().backtest_data([sys.argv[1],sys.argv[2]],[0.5,0.5],sys.argv[3], '2021-01-02',10000000,6, 'monthly', 'gmv') 589 +gravity = []
589 -# data = back_test().backtest_data(['삼성전자','LG전자'],[0.5,0.5],'2020-01-01', '2021-01-02',10000000,6, 'monthly', 'gmv') 590 +for i in range(len(args)-1):
591 + assets.append(args[i])
592 + gravity.append(0)
593 +
594 +data = back_test().backtest_data(assets,gravity,args[-1], '2021-01-02',10000000,6, 'monthly', 'gmv')
595 +
596 +
597 +#data = back_test().backtest_data(['삼성전자','LG전자','호텔신라'],[0.1,0.1,0.8],'2020-01-01', '2021-01-02',10000000,6, 'monthly', 'gmv')
598 +# data = back_test().backtest_data(['삼성전자','LG전자'],[0.1,0.1],'2020-01-01', '2021-01-02',10000000,6, 'monthly', 'gmv')
590 x = data['pfo_return'][0]['Date'] 599 x = data['pfo_return'][0]['Date']
591 y = data['pfo_return'][0]['acc_return ratio'] 600 y = data['pfo_return'][0]['acc_return ratio']
592 y2 = data['bench'][0]['KOSPI_acc_return'] 601 y2 = data['bench'][0]['KOSPI_acc_return']
...@@ -610,6 +619,6 @@ plt.ylabel('Return') ...@@ -610,6 +619,6 @@ plt.ylabel('Return')
610 plt.title('result') 619 plt.title('result')
611 plt.legend() 620 plt.legend()
612 plt.show() 621 plt.show()
613 -plt.savefig("./src/test.png", dpi = 400) 622 +plt.savefig("./src/test.png", dpi = 100)
614 print("end") 623 print("end")
615 624
......