박하늘

multivalue update

var express = require('express');
const request = require('request');
const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
const TOKEN = 'sGB5EZq14+Lu4sc6Gt6NJ1Sx/rDtE1BsTyfZeNX42XVVjcgX1kk6/Uj1H40IQ1X3y8MzJLvKGifhioNCJLWQkWH2i95EtNDQyGn7Iqu6MnQRE7pg/z7klGgswS9974s0EKX90FcCfAIndNSYAG+d5gdB04t89/1O/w1cDnyilFU='
const TOKEN = 'OVIxKODBqM8Pn2dpFtFeSLsDbBvApfTu88rh8wFGOzfvgvPjmBH0A4XKii97VxIDO9shYyTix4qGq32vwvL895Rbss5VSVEiU/XG5lOdyTLgECkSQKOdObSetZwcVHbGmzZJ+0Cz5vZrB5KuImOwrwdB04t89/1O/w1cDnyilFU='
const fs = require('fs');
const path = require('path');
const HTTPS = require('https');
const domain = "2016100990.oss2021.tk"
const domain = "2017103989.oss2021.tk"
const sslport = 23023;
const bodyParser = require('body-parser');
var app = express();
var stockarr = [];
var holder1 = '';
var holder2 = '';
app.use('/simages', express.static(__dirname + '/src'));
app.use(bodyParser.json());
app.post('/hook', function (req, res) {
var eventObj = req.body.events[0];
var source = eventObj.source;
var message = eventObj.message;
......@@ -33,15 +27,14 @@ app.post('/hook', function (req, res) {
{
if(eventObj.postback.data == 'action=datetemp&selectId=1')
{
console.log("optimizer 실행")
app.use('/simages', express.static(__dirname + '/src'));
optimizer(eventObj.replyToken, holder1, holder2, eventObj.postback.params.date)
app.use('/simages', express.static(__dirname + '/src'));
optimizer(eventObj.replyToken, eventObj.postback.params.date)
stockarr.splice(0, stockarr.length);
}
}
else
{
if(eventObj.message.text == '도움말' || '주가 도움말' || '비중 추천 도움말' || '백테스트 도움말')
if(eventObj.message.text == '도움말' || eventObj.message.text == '주가 도움말' || eventObj.message.text == '비중 추천 도움말' || eventObj.message.text == '백테스트 도움말')
{
printhelp(eventObj.replyToken, eventObj.message.text)
}
......@@ -53,7 +46,6 @@ app.post('/hook', function (req, res) {
{
basicinform(eventObj.replyToken, eventObj.message.text)
}
}
res.sendStatus(200);
......@@ -80,28 +72,49 @@ function printhelp(replyToken, message){
"type": "action",
"action": {
"type": "message",
"label": '주가',
"text": '주가 기능 도움말'
"label": '주가 도움말',
"text": '주가 도움말'
}
},
{
"type": "action",
"action": {
"type": "message",
"label": '비중 추천',
"text": '비중 추천 기능 도움말'
"label": '비중 추천 도움말',
"text": '비중 추천 도움말'
}
},
{
"type": "action",
"action": {
"type": "message",
"label": '백테스트',
"text": '백테스트 기능 도움말'
"label": '백테스트 도움말',
"text": '백테스트 도움말'
}
}
]
}
}
]
}
},(error, response, body) => {
console.log(body)
});
}
else if(message == '주가 도움말')
{
request.post(
{
url: TARGET_URL,
headers: {
'Authorization': `Bearer ${TOKEN}`
},
json: {
"replyToken":replyToken,
"messages":[
{
"type":"text",
"text":"사용자 : 주가 도움말\n챗봇: 종목명을 알려주세요.\n사용자: 종목명 입력 (ex 삼성전자)\n챗봇 : 현재가 거래량 전일대비 수익률"
}
]
}
......@@ -109,7 +122,7 @@ function printhelp(replyToken, message){
console.log(body)
});
}
else if(message == '주가 기능 도움말')
else if(message == '비중 추천 도움말')
{
request.post(
{
......@@ -122,7 +135,7 @@ function printhelp(replyToken, message){
"messages":[
{
"type":"text",
"text":"사용자 : 주가\n챗봇: 종목명을 알려주세요.\n사용자: 종목명 입력 (ex 삼성전자)\n챗봇 : 현재가 거래량 전일대비 수익률"
"text":"사용자 : 비중 추천 도움말\n챗봇 : 포트폴리오에 넣을 종목을 선택해주세요(2 종목 이상)\n사용자 : 종목명 입력 (ex 삼성전자, LG전자 ...)\n챗봇: 전략을 선택해주세요. (gmv, ms , rp)\n사용자: gmv, ms, rp 중 입력\n챗봇 : 케이스에 맞게 함수 실행 후 비중 출력"
}
]
}
......@@ -130,7 +143,7 @@ function printhelp(replyToken, message){
console.log(body)
});
}
else if(message == '비중 추천 기능 도움말')
else if(message == '백테스트 도움말')
{
request.post(
{
......@@ -143,7 +156,7 @@ function printhelp(replyToken, message){
"messages":[
{
"type":"text",
"text":"사용자 : 비중 추천\n챗봇 : 포트폴리오에 넣을 종목을 선택해주세요(2 종목 이상)\n사용자 : 종목명 입력 (ex 삼성전자, LG전자 ...)\n챗봇: 전략을 선택해주세요. (gmv, ms , rp)\n사용자: gmv, ms, rp 중 입력\n챗봇 : 케이스에 맞게 함수 실행 후 비중 출력"
"text":"사용자 : 백테스트 도움말\n챗봇: 포트폴리오에 넣을 종목을 선택해주세요(2 종목 이상)\n사용자: 종목명 입력\n챗봇: 시작할 날짜를 입력해주세요\n사용자: 입력\n챗봇: 전략을 선택해주세요 (gmv, ms , rp)\n사용자: gmv,ms,rp 중 입력\n챗봇: 함수 실행 후 그래프 출력"
}
]
}
......@@ -151,7 +164,7 @@ function printhelp(replyToken, message){
console.log(body)
});
}
else if(message == '백테스트 기능 도움말')
else if(message == '주가 도움말')
{
request.post(
{
......@@ -164,7 +177,7 @@ function printhelp(replyToken, message){
"messages":[
{
"type":"text",
"text":"사용자 : 백테스트\n챗봇: 포트폴리오에 넣을 종목을 선택해주세요(2 종목 이상)\n사용자: 종목명 입력\n챗봇: 시작할 날짜를 입력해주세요\n사용자: 입력\n챗봇: 전략을 선택해주세요 (gmv, ms , rp)\n사용자: gmv,ms,rp 중 입력\n챗봇: 함수 실행 후 그래프 출력"
"text":"사용자 : 주가 도움말\n챗봇: 종목명을 알려주세요.\n사용자: 종목명 입력 (ex 삼성전자)\n챗봇 : 현재가 거래량 전일대비 수익률"
}
]
}
......@@ -196,6 +209,11 @@ function basicinform(replyToken, message) {
{
"type":"text",
"text":pystring
},
{
"type":"image",
"originalContentUrl": "https://2017103989.oss2021.tk:23023/simages/test.png",
"previewImageUrl": "https://2017103989.oss2021.tk:23023/simages/test.png"
}
]
}
......@@ -258,14 +276,20 @@ function basicinform(replyToken, message) {
process.stdout.on("data", Callback);
}
function optimizer(replyToken, stock1, stock2, sdate) {
function optimizer(replyToken, sdate) {
sdate = sdate.toString();
console.log(typeof(stock1), typeof(stock2), typeof(sdate))
console.log(stock1, stock2, sdate)
var pystring = ''
var i;
for(i = 0; i < stockarr.length; i++)
{
pystring += stockarr[i];
pystring += ','
}
pystring += sdate;
console.log(pystring);
const spawn = require("child_process").spawn;
const process = spawn("python", ["optimizer.py", stock1, stock2, sdate]);
const process = spawn("python", ["optimizer.py", pystring]);
const Callback = (data) => {
console.log(stock1, stock2, sdate)
request.post(
{
url: TARGET_URL,
......@@ -277,7 +301,7 @@ function optimizer(replyToken, stock1, stock2, sdate) {
"messages":[
{
"type":"text",
"text":'조회하신 ' + holder1 +', ' + holder2 + '의 백테스트 결과입니다.'
"text":'조회하신 주식의 백테스트 결과입니다.'
},
{
"type":"image",
......@@ -295,8 +319,11 @@ function optimizer(replyToken, stock1, stock2, sdate) {
function date(replyToken, message) {
var holder = message.split(' ')
holder1 = holder[0]
holder2 = holder[1]
var i;
for(i = 0; i < holder.length; i++)
{
stockarr[i] = holder[i];
}
var today = new Date();
var year = today.getFullYear();
var month = today.getMonth() + 1;
......@@ -310,8 +337,6 @@ function date(replyToken, message) {
date = '0'+ date
}
var stoday = year + '-' + month + '-' + date;
const messageObject = {
"type": "template",
"altText": "this is a buttons template",
......@@ -373,14 +398,11 @@ function date(replyToken, message) {
messageObject
]
}
},(error, response, body) => {
console.log(body)
});
}
try {
......@@ -391,10 +413,9 @@ try {
};
HTTPS.createServer(option, app).listen(sslport, () => {
console.log(`[HTTPS] Server is started on port hihi ${sslport}`);
console.log(`[HTTPS] Server is started on port ${sslport}`);
});
} catch (error) {
console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.');
console.log(error);
}
......
......@@ -583,10 +583,19 @@ class back_test:
# 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'])
# print(back_test().backtest_data(['삼성전자','LG전자'],[0.9,0.1],'2018-01-01', '2021-01-01',10000000,6, 'monthly', 'gmv'))
args = sys.argv[1].split(",")
print(sys.argv[0])
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')
# data = back_test().backtest_data(['삼성전자','LG전자'],[0.5,0.5],'2020-01-01', '2021-01-02',10000000,6, 'monthly', 'gmv')
assets = []
gravity = []
for i in range(len(args)-1):
assets.append(args[i])
gravity.append(0)
data = back_test().backtest_data(assets,gravity,args[-1], '2021-01-02',10000000,6, 'monthly', 'gmv')
#data = back_test().backtest_data(['삼성전자','LG전자','호텔신라'],[0.1,0.1,0.8],'2020-01-01', '2021-01-02',10000000,6, 'monthly', 'gmv')
# data = back_test().backtest_data(['삼성전자','LG전자'],[0.1,0.1],'2020-01-01', '2021-01-02',10000000,6, 'monthly', 'gmv')
x = data['pfo_return'][0]['Date']
y = data['pfo_return'][0]['acc_return ratio']
y2 = data['bench'][0]['KOSPI_acc_return']
......@@ -610,6 +619,6 @@ plt.ylabel('Return')
plt.title('result')
plt.legend()
plt.show()
plt.savefig("./src/test.png", dpi = 400)
plt.savefig("./src/test.png", dpi = 100)
print("end")
......