추세검색 설정 추가
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
import { sortTrendSearchByStrength } from './trendSearchMetrics';
|
||||
import { resolveVirtualTargetNames } from './virtualTargetNames';
|
||||
import type { TrendSearchResultDto } from './backendApi';
|
||||
import type { TrendSearchAppSettings } from './trendSearchAppSettings';
|
||||
import { addVirtualTarget } from './virtualTargetMutations';
|
||||
import { loadVirtualTargets } from './virtualTradingStorage';
|
||||
import { isVirtualTargetAddAllowed } from './virtualTargetLimits';
|
||||
import { getVirtualTargetMaxCount } from '../hooks/useAppSettings';
|
||||
|
||||
/** 추세검색 결과 상위 순위 → 가상매매 투자대상 자동추가 */
|
||||
export async function autoAddTrendSearchTargets(
|
||||
results: TrendSearchResultDto[],
|
||||
settings: Pick<TrendSearchAppSettings, 'autoAddTargetsEnabled' | 'autoAddTopRank' | 'autoAddMinScore'>,
|
||||
timeframe: string,
|
||||
): Promise<void> {
|
||||
if (!settings.autoAddTargetsEnabled || results.length === 0) return;
|
||||
|
||||
const sorted = sortTrendSearchByStrength(results);
|
||||
const topN = Math.max(1, Math.min(50, settings.autoAddTopRank));
|
||||
const minScore = Math.max(0, Math.min(100, settings.autoAddMinScore));
|
||||
const candidates = sorted
|
||||
.slice(0, topN)
|
||||
.filter(r => r.matchRate >= minScore);
|
||||
|
||||
let targets = loadVirtualTargets();
|
||||
const maxCount = getVirtualTargetMaxCount();
|
||||
|
||||
for (const row of candidates) {
|
||||
if (!isVirtualTargetAddAllowed(targets.length, maxCount)) break;
|
||||
if (targets.some(t => t.market === row.market)) continue;
|
||||
|
||||
const { koreanName, englishName } = resolveVirtualTargetNames(row.market, row.koreanName);
|
||||
targets = await addVirtualTarget(
|
||||
row.market,
|
||||
{ koreanName, englishName, candleType: timeframe },
|
||||
{ showLimitAlert: false },
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user