박하늘

backtest 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 PUSH_TARGET_URL = 'https://api.line.me/v2/bot/message/push'
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();
......@@ -13,6 +14,7 @@ var app = express();
var stockarr = [];
var pastreply = "";
var tatic ="";
var backtest = 0;
app.use('/simages', express.static(__dirname + '/src'));
app.use(bodyParser.json());
app.post('/hook', function (req, res) {
......@@ -26,34 +28,32 @@ app.post('/hook', function (req, res) {
console.log('[request message]', eventObj.message);
if(eventObj.type == 'postback')
{
if(eventObj.postback.data == 'action=datetemp&selectId=1' && pastreply == "비중 추천"){
console.log(stockarr);
if(eventObj.postback.data == 'action=datetemp&selectId=1' && backtest == 0)
{
weight_recommend(eventObj.replyToken, eventObj.postback.params.date)
stockarr.splice(0, stockarr.length);
tatic = ""
pastreply = ""
}
else
else if(eventObj.postback.data == 'action=datetemp&selectId=1' && backtest == 1)
{
optimizer(eventObj.replyToken, eventObj.postback.params.date)
optimizer(eventObj.source.userId, eventObj.postback.params.date)
stockarr.splice(0, stockarr.length);
tatic = ""
pastreply = ""
backtest = 0;
}
}
else
{ console.log(eventObj.message.text)
console.log(pastreply)
{
if(eventObj.message.text == '도움말' || eventObj.message.text == '주가 도움말' || eventObj.message.text == '비중 추천 도움말' || eventObj.message.text == '백테스트 도움말')
{
printhelp(eventObj.replyToken, eventObj.message.text)
}
else if(eventObj.message.text == '백테스트')
{
date(eventObj.replyToken, eventObj.message.text)
}
else if (eventObj.message.text == '주가')
{
basicinform_pre(eventObj.replyToken, eventObj.message.text)
pastreply = '주가'
console.log(pastreply);
}
else if ( pastreply == '주가' && eventObj.message.text.indexOf(' ') == -1){
basicinform(eventObj.replyToken, eventObj.message.text)
......@@ -62,9 +62,13 @@ app.post('/hook', function (req, res) {
weight_1(eventObj.replyToken, eventObj.message.text)
pastreply = '비중 추천'
}
else if (pastreply = '비중 추천' && eventObj.message.text.indexOf(' ') != -1){
else if (eventObj.message.text == '백테스트'){
weight_1(eventObj.replyToken, eventObj.message.text)
pastreply = '비중 추천'
backtest = 1
}
else if (pastreply == '비중 추천' && eventObj.message.text.indexOf(' ') != -1){
var holder = eventObj.message.text.split(' ')
console.log("holder",holder)
var i;
for(i = 0; i < holder.length; i++)
{
......@@ -74,7 +78,7 @@ app.post('/hook', function (req, res) {
pastreply = "전략"
}
else if (pastreply = "전략" && (eventObj.message.text == 'gmv' || eventObj.message.text == 'ms') || eventObj.message.text == 'rp'){
else if (pastreply == "전략" && (eventObj.message.text == 'gmv' || eventObj.message.text == 'ms') || eventObj.message.text == 'rp'){
tatic = eventObj.message.text
pastreply = "비중 추천"
date(eventObj.replyToken, eventObj.message.text)
......@@ -257,7 +261,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사용자 : 종목명 입력 (ex 삼성전자, LG전자 ...)\n챗봇: 전략을 선택해주세요. (gmv, ms , rp)\n사용자: gmv, ms, rp 중 입력\n챗봇 : 케이스에 맞게 함수 실행 후 비중 출력"
}
]
}
......@@ -278,7 +282,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챗봇: 포트폴리오에 넣을 종목을 선택해주세요(2 종목 이상)\n사용자: 종목명 입력\n챗봇: 시작할 날짜를 입력해주세요\n사용자: 입력\n챗봇: 전략을 선택해주세요 (gmv, ms , rp)\n사용자: gmv,ms,rp 중 입력\n챗봇: 함수 실행 후 그래프 출력"
}
]
}
......@@ -299,7 +303,7 @@ function printhelp(replyToken, message){
"messages":[
{
"type":"text",
"text":"사용자 : 주가 도움말\n챗봇: 종목명을 알려주세요.\n사용자: 종목명 입력 (ex 삼성전자)\n챗봇 : 현재가 거래량 전일대비 수익률"
"text":"사용자 : 주가\n챗봇: 종목명을 알려주세요.\n사용자: 종목명 입력 (ex 삼성전자)\n챗봇 : 현재가 거래량 전일대비 수익률"
}
]
}
......@@ -394,7 +398,7 @@ function basicinform(replyToken, message) {
}
function optimizer(replyToken, sdate) {
function optimizer(userid, sdate) {
sdate = sdate.toString();
var pystring = ''
var i;
......@@ -406,16 +410,16 @@ function optimizer(replyToken, sdate) {
pystring += sdate;
console.log(pystring);
const spawn = require("child_process").spawn;
const process = spawn("python", ["optimizer.py", pystring]);
const process = spawn("python", ["optimizer.py", pystring, 'backtest', tatic]);
const Callback = (data) => {
request.post(
{
url: TARGET_URL,
url: PUSH_TARGET_URL,
headers: {
'Authorization': `Bearer ${TOKEN}`
},
json: {
"replyToken":replyToken,
"to": userid,
"messages":[
{
"type":"text",
......
......@@ -606,36 +606,37 @@ else:
for i in range(len(args)-1):
assets.append(args[i])
gravity.append(0)
data = back_test().backtest_data(assets,gravity,args[-1], '2021-06-01',10000000,6, 'monthly', sys.argv[3])
data = back_test().backtest_data(assets,gravity,args[-1], '2021-06-01',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']
y3 = data['bench'][0]['S&P500_acc_return']
x_ticks = []
for i,j in enumerate(x):
#data = back_test().backtest_data(['삼성전자','LG전자','카카오','호텔신라'],[0,0,0,0],'2020-01-01', '2021-01-02',10000000,6, 'monthly', 'ms')
# 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']
y3 = data['bench'][0]['S&P500_acc_return']
x_ticks = []
for i,j in enumerate(x):
if (i % 6) == 0:
x_ticks.append(j)
else:
x_ticks.append('')
x_ticks[-1]= x[-1]
plt.figure(figsize=(10,5))
ax=plt.gca()
ax.xaxis.set_major_locator(ticker.MultipleLocator(12))
plt.plot(x,y,label = 'gmv result')
plt.plot(x,y2 ,label = 'kospi result')
plt.plot(x,y3, label = 's&p500 result')
plt.xticks(x_ticks,rotation=60)
plt.xlabel('Date')
plt.ylabel('Return')
plt.title('result')
plt.legend()
plt.show()
plt.savefig("./src/test.png", dpi = 100)
print("end")
x_ticks[-1]= x[-1]
plt.figure(figsize=(10,5))
ax=plt.gca()
ax.xaxis.set_major_locator(ticker.MultipleLocator(12))
plt.plot(x,y,label = 'gmv result')
plt.plot(x,y2 ,label = 'kospi result')
plt.plot(x,y3, label = 's&p500 result')
plt.xticks(x_ticks,rotation=60)
plt.xlabel('Date')
plt.ylabel('Return')
plt.title('result')
plt.legend()
plt.show()
plt.savefig("./src/test.png", dpi = 100)
print("end")
......