ZuseongZIN
프로젝트 설명
================
최근 주식에 대한 관심이 급격히 늘어났다.
투자자들은 흔히 어떠한 전략대로 일관되게 투자했다면 지금 돈을 얼마나 벌었을까? 를 생각한다.
이를 확인해보는 작업을 백테스트라고 한다.
투자자들을 위해 간편하게 주식에 대한 정보, 포트폴리오 비중 추천, 백테스트(성과확인)기능을 제공한다.
기능 설명
==================
1. 주가 정보 불러오기
*input : 종목명 , output : 현재가격, 거래량, 전일대비 수익률(변화율)
fuzzywuzzy 라이브러리를 활용해서 예외처리를 실행
2. 포트폴리오 비중 추천
3. 백테스트 (성과 확인)
File mode changed
//app.js
var express = require('express');
const request = require('request');
const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
const TOKEN = 'OVIxKODBqM8Pn2dpFtFeSLsDbBvApfTu88rh8wFGOzfvgvPjmBH0A4XKii97VxIDO9shYyTix4qGq32vwvL895Rbss5VSVEiU/XG5lOdyTLgECkSQKOdObSetZwcVHbGmzZJ+0Cz5vZrB5KuImOwrwdB04t89/1O/w1cDnyilFU='
const fs = require('fs');
const path = require('path');
const HTTPS = require('https');
const domain = "2017103989.oss2021.tk"
const sslport = 23023;
const bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.json());
app.post('/hook', function (req, res) {
var eventObj = req.body.events[0];
var source = eventObj.source;
var message = eventObj.message;
var pystring;
const spawn = require("child_process").spawn;
const process = spawn("python", ["basic.py", eventObj.message.text]);
const Callback = (data) => {
console.log("Data :", data.toString());
pystring = data.toString();
// request log
console.log('======================', new Date() ,'======================');
console.log('[request]', req.body);
console.log('[request source] ', eventObj.source);
console.log('[request message]', eventObj.message);
request.post(
{
url: TARGET_URL,
headers: {
'Authorization': `Bearer ${TOKEN}`
},
json: {
"replyToken":eventObj.replyToken,
"messages":[
{
"type":"text",
"text":pystring
},
{
"type":"text",
"text":"May I help you?"
}
]
}
},(error, response, body) => {
console.log(body)
});
app.use(express.urlencoded({ extended: false }));
app.use(express.json());
res.sendStatus(200);
app.get('/keyboard', (req, res) => {
var data = {'type': 'text'}
res.json(data);
};
process.stdout.on("data", Callback);
});
app.post('/message', (req, res) => {
var question = req.body.userRequest.utterance;
var goMain = '처음으로';
try {
const option = {
ca: fs.readFileSync('/etc/letsencrypt/live/' + domain +'/fullchain.pem'),
key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/privkey.pem'), 'utf8').toString(),
cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/cert.pem'), 'utf8').toString(),
};
if (question === '테스트') {
var data = {
'version': '2.0',
'template': {
'outputs': [{
'simpleText': {
'text': '테스트'
}
}],
'quickReplies': [{
'label': goMain,
'action': 'message',
'messageText': goMain
}]
}
}
HTTPS.createServer(option, app).listen(sslport, () => {
console.log(`[HTTPS] Server is started on port ${sslport}`);
});
} catch (error) {
console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.');
console.log(error);
}
res.json(data);
});
app.listen(3000, () => console.log('node on 3000'));
\ No newline at end of file
......
import FinanceDataReader as fdr
import pandas as pd
import sys
def basicinform(input):
stocks = pd.read_csv('stockcodename.csv', index_col=0)
symbol = ''
for i in enumerate(stocks.Name):
if i[1] == input:
symbol = (stocks.iloc[i[0]].Symbol)
break
df = fdr.DataReader(symbol)
ror_df = df.Close.pct_change()
volume = df.Volume.iloc[-1]
price = df.Close.iloc[-1]
ror = ror_df[-1]
value = {
"현재가": price,
"거래랑": volume,
"전일 대비 수익률:": ror
}
return value
# print(basicinform('삼성전자'))
args = sys.argv
print(basicinform(args[1]))