前20多空机构持仓仅显示最近3个月

This commit is contained in:
dongzp 2026-07-21 19:19:36 +08:00
parent 8ea48632ee
commit 843f0d73be
4 changed files with 39 additions and 16 deletions

View File

@ -43,7 +43,7 @@
<el-dialog <el-dialog
v-model="positionOpen" v-model="positionOpen"
title="机构持仓" title="机构持仓"
width="70%" width="80%"
top="5vh" top="5vh"
class="panel-dialog position-dialog" class="panel-dialog position-dialog"
destroy-on-close destroy-on-close

View File

@ -1,10 +1,14 @@
import type { PositionRow, PositionsData, ProfitRow, TopTwentySum } from '../../types' import type { PositionRow, PositionsData, ProfitRow, TopTwentySum } from '../../types'
import { getRecentMonthsRange } from '../../utils/tradingDate'
import type { import type {
JqkaDealPositionData, JqkaDealPositionData,
JqkaPositionItem, JqkaPositionItem,
JqkaPositionProfitData, JqkaPositionProfitData,
} from './types' } from './types'
/** 前 20 多空总持仓图表仅保留最近 3 个月 */
const TOP_TWENTY_SUM_MONTHS = 3
const TOP_N = 20 const TOP_N = 20
function withPercent(list: PositionRow[], totalHint?: number): PositionRow[] { function withPercent(list: PositionRow[], totalHint?: number): PositionRow[] {
@ -78,13 +82,14 @@ export function mapJqkaDealPosition(data: JqkaDealPositionData): PositionsData {
}), }),
) )
const topTwentySum: TopTwentySum[] = (data.topTwentyPositionSum ?? []).map( const { startDate } = getRecentMonthsRange(TOP_TWENTY_SUM_MONTHS)
(s) => ({ const topTwentySum: TopTwentySum[] = (data.topTwentyPositionSum ?? [])
.filter((s) => s.tradeDate >= startDate)
.map((s) => ({
tradeDate: s.tradeDate, tradeDate: s.tradeDate,
longSum: s.f009nSum, longSum: s.f009nSum,
shortSum: s.f015nSum, shortSum: s.f015nSum,
}), }))
)
const updatedAt = const updatedAt =
list[0]?.tradeDate || sumLatest?.tradeDate || new Date().toISOString().slice(0, 10) list[0]?.tradeDate || sumLatest?.tradeDate || new Date().toISOString().slice(0, 10)

View File

@ -18,18 +18,23 @@ import {
import type { EChartsOption } from 'echarts' import type { EChartsOption } from 'echarts'
import VChart from 'vue-echarts' import VChart from 'vue-echarts'
import type { TopTwentySum } from '../../types' import type { TopTwentySum } from '../../types'
import { getRecentMonthsRange } from '../../utils/tradingDate'
use([CanvasRenderer, BarChart, GridComponent, TooltipComponent, LegendComponent]) use([CanvasRenderer, BarChart, GridComponent, TooltipComponent, LegendComponent])
/** 仅展示最近 3 个月 */
const DISPLAY_MONTHS = 3
const props = defineProps<{ const props = defineProps<{
list: TopTwentySum[] list: TopTwentySum[]
}>() }>()
const option = computed((): EChartsOption => { const option = computed((): EChartsOption => {
// 接口通常新→旧,图表按时间从左到右 const { startDate } = getRecentMonthsRange(DISPLAY_MONTHS)
const sorted = [...props.list].sort((a, b) => // 接口通常新→旧,图表按时间从左到右;仅保留最近 3 个月
a.tradeDate.localeCompare(b.tradeDate), const sorted = [...props.list]
) .filter((x) => x.tradeDate >= startDate)
.sort((a, b) => a.tradeDate.localeCompare(b.tradeDate))
const dates = sorted.map((x) => x.tradeDate) const dates = sorted.map((x) => x.tradeDate)
const longData = sorted.map((x) => x.longSum) const longData = sorted.map((x) => x.longSum)
const shortData = sorted.map((x) => x.shortSum) const shortData = sorted.map((x) => x.shortSum)

View File

@ -51,6 +51,25 @@ export function extractVariety(contract: string): string {
return m ? m[1] : contract return m ? m[1] : contract
} }
/**
* 最近 N 个月日期区间(含起止日)。
*/
export function getRecentMonthsRange(
months: number,
from: Date = new Date(),
): {
startDate: string
endDate: string
} {
const end = new Date(from.getFullYear(), from.getMonth(), from.getDate())
const start = new Date(end)
start.setMonth(start.getMonth() - months)
return {
startDate: formatDateYmd(start),
endDate: formatDateYmd(end),
}
}
/** /**
* 最近一个月日期区间(含起止日),用于机构盈利等按区间查询的接口。 * 最近一个月日期区间(含起止日),用于机构盈利等按区间查询的接口。
*/ */
@ -58,11 +77,5 @@ export function getRecentMonthRange(from: Date = new Date()): {
startDate: string startDate: string
endDate: string endDate: string
} { } {
const end = new Date(from.getFullYear(), from.getMonth(), from.getDate()) return getRecentMonthsRange(1, from)
const start = new Date(end)
start.setMonth(start.getMonth() - 1)
return {
startDate: formatDateYmd(start),
endDate: formatDateYmd(end),
}
} }