refactor: 移除年线数据
需要用的时候现算就是了,避免维护更多的原始数据
This commit is contained in:
@@ -1,18 +1,17 @@
|
||||
package com.lanyuanxiaoyao.leopard.strategy;
|
||||
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.lanyuanxiaoyao.leopard.core.entity.QDaily;
|
||||
import com.lanyuanxiaoyao.leopard.core.repository.DailyRepository;
|
||||
import com.lanyuanxiaoyao.leopard.core.service.AssessmentService;
|
||||
import com.lanyuanxiaoyao.leopard.core.service.TuShareService;
|
||||
import com.lanyuanxiaoyao.leopard.core.service.selector.PyramidStockSelector;
|
||||
import com.lanyuanxiaoyao.leopard.core.service.selector.StockSelector;
|
||||
import jakarta.annotation.Resource;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
@@ -30,6 +29,10 @@ public class StrategyApplication {
|
||||
private PyramidStockSelector pyramidStockSelector;
|
||||
@Resource
|
||||
private AssessmentService assessmentService;
|
||||
@Resource
|
||||
private TuShareService tuShareService;
|
||||
@Resource
|
||||
private DailyRepository dailyRepository;
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(StrategyApplication.class, args);
|
||||
@@ -269,62 +272,11 @@ public class StrategyApplication {
|
||||
@Transactional(readOnly = true)
|
||||
@EventListener(ApplicationReadyEvent.class)
|
||||
public void test() {
|
||||
/*var dailies = dailyRepository.findAll(
|
||||
QDaily.daily.tradeDate.year().eq(2025),
|
||||
Sort.by(Daily_.TRADE_DATE)
|
||||
);
|
||||
var data = dailies.stream()
|
||||
.collect(Collectors.groupingBy(Daily::getStock))
|
||||
.entrySet()
|
||||
.parallelStream()
|
||||
.map(entry -> {
|
||||
var stock = entry.getKey();
|
||||
var dailyList = entry.getValue()
|
||||
.stream()
|
||||
.sorted(Comparator.comparing(Daily::getTradeDate))
|
||||
.toList();
|
||||
var statistics = new DescriptiveStatistics();
|
||||
dailyList.stream().map(Daily::getHfqClose).forEach(statistics::addValue);
|
||||
var barSeries = new BaseBarSeriesBuilder().build();
|
||||
dailyList.forEach(daily -> barSeries.addBar(new BaseBar(
|
||||
Duration.ofDays(1),
|
||||
daily.getTradeDate().atStartOfDay().atZone(ZoneId.systemDefault()),
|
||||
daily.getHfqOpen(),
|
||||
daily.getHfqHigh(),
|
||||
daily.getHfqLow(),
|
||||
daily.getHfqClose(),
|
||||
daily.getVolume()
|
||||
)));
|
||||
return Map.<String, String>of(
|
||||
"code", stock.getCode(),
|
||||
"name", stock.getName(),
|
||||
"std", NumberUtil.roundStr(statistics.getStandardDeviation(), 2),
|
||||
"increase", NumberUtil.roundStr((dailyList.getLast().getHfqClose() - dailyList.getFirst().getHfqClose()) * 100.0 / dailyList.getFirst().getHfqClose(), 2)
|
||||
);
|
||||
})
|
||||
.sorted((t1, t2) -> Double.compare(Double.parseDouble(t2.get("increase")), Double.parseDouble(t1.get("increase"))))
|
||||
.toList();
|
||||
render(Map.of("items", data));*/
|
||||
|
||||
var lines = new ArrayList<String>();
|
||||
for (int year = 2024; year < 2025; year++) {
|
||||
var candidates = pyramidStockSelector.select(new PyramidStockSelector.Request(year));
|
||||
for (StockSelector.Candidate candidate : candidates) {
|
||||
log.info("{} {}", candidate.stock().getName(), candidate.score());
|
||||
}
|
||||
var stocks = candidates.stream()
|
||||
.map(StockSelector.Candidate::stock)
|
||||
.collect(Collectors.toSet());
|
||||
var results = assessmentService.assess(stocks, year);
|
||||
int up = results.stream()
|
||||
.filter(result -> result.change() > 0)
|
||||
.mapToInt(result -> 1)
|
||||
.sum();
|
||||
lines.add(NumberUtil.roundStr(up * 100.0 / results.size(), 2));
|
||||
results.forEach(result -> log.info("{} {} {} {} {}", result.stock().getCode(), result.stock().getName(), result.change(), result.std(), result.industryTop()));
|
||||
}
|
||||
for (int index = 0, year = 2010; index < lines.size(); index++, year++) {
|
||||
log.info("胜率: {} {}", year, lines.get(index));
|
||||
var dailies = dailyRepository.findAll(QDaily.daily.factor.isNull(), QDaily.daily.tradeDate.asc());
|
||||
for (var daily : dailies) {
|
||||
log.info("{} {} {}", daily.getStock().getCode(), daily.getStock().getName(), daily.getTradeDate());
|
||||
// var response = tuShareService.factorList(daily.getTradeDate(), daily.getStock().getCode());
|
||||
// var factor = response.data().items().getFirst().get(2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user