diff --git a/BE/src/stock/detail/dto/stock-detail-chart-data.dto.ts b/BE/src/stock/detail/dto/stock-detail-chart-data.dto.ts index de68279f..af2a256f 100644 --- a/BE/src/stock/detail/dto/stock-detail-chart-data.dto.ts +++ b/BE/src/stock/detail/dto/stock-detail-chart-data.dto.ts @@ -21,4 +21,10 @@ export class InquirePriceChartDataDto { @ApiProperty({ description: '전일 대비 부호' }) prdy_vrss_sign: string; + + @ApiProperty({ description: '이동 평균선 데이터(5일)' }) + mov_avg_5: string; + + @ApiProperty({ description: '이동 평균선 데이터(20일)' }) + mov_avg_20: string; } diff --git a/BE/src/stock/detail/stock-detail.service.ts b/BE/src/stock/detail/stock-detail.service.ts index be2b8a34..b2460839 100644 --- a/BE/src/stock/detail/stock-detail.service.ts +++ b/BE/src/stock/detail/stock-detail.service.ts @@ -83,11 +83,24 @@ export class StockDetailService { date2: string, periodDivCode: string, ) { + let newDate1 = date1; + let newDate2 = date2; + + if (date1 === '') { + const today = new Date(); + const prevDay = new Date(); + if (periodDivCode === 'D') prevDay.setDate(today.getDate() - 90); + if (periodDivCode === 'M') prevDay.setDate(today.getDate() - 1200); + if (periodDivCode === 'Y') prevDay.setDate(today.getDate() - 20000); + newDate2 = new Date().toISOString().slice(0, 10).replace(/-/g, ''); + newDate1 = prevDay.toISOString().slice(0, 10).replace(/-/g, ''); + } + const queryParams = { fid_cond_mrkt_div_code: 'J', fid_input_iscd: stockCode, - fid_input_date_1: date1, - fid_input_date_2: date2, + fid_input_date_1: newDate1, + fid_input_date_2: newDate2, fid_period_div_code: periodDivCode, fid_org_adj_prc: '0', }; @@ -99,7 +112,7 @@ export class StockDetailService { queryParams, ); - return this.formatStockInquirePriceData(response).slice().reverse(); + return this.formatStockInquirePriceData(response).slice(-30); } getBookmarkActive(userId: number, stockCode: string) { @@ -119,7 +132,13 @@ export class StockDetailService { private formatStockInquirePriceData(response: InquirePriceChartApiResponse) { const { output2 } = response; - return output2.map((info) => { + output2.sort((a, b) => { + if (a.stck_bsop_date > b.stck_bsop_date) return 1; + if (a.stck_bsop_date < b.stck_bsop_date) return -1; + return 0; + }); + + return output2.map((info, index) => { const stockData = new InquirePriceChartDataDto(); const { stck_bsop_date, @@ -139,6 +158,20 @@ export class StockDetailService { stockData.acml_vol = acml_vol; stockData.prdy_vrss_sign = prdy_vrss_sign; + if (index >= 4) { + const movAvg5 = output2 + .slice(index - 4, index + 1) + .reduce((acc, cur) => acc + Number(cur.stck_clpr), 0); + stockData.mov_avg_5 = (movAvg5 / 5).toFixed(2); + } + + if (index >= 19) { + const movAvg20 = output2 + .slice(index - 19, index + 1) + .reduce((acc, cur) => acc + Number(cur.stck_clpr), 0); + stockData.mov_avg_20 = (movAvg20 / 20).toFixed(2); + } + return stockData; }); }