feat: 增加策略模块专门处理策略研究
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
package com.lanyuanxiaoyao.leopard.strategy;
|
||||
|
||||
import com.lanyuanxiaoyao.leopard.core.entity.Daily;
|
||||
import com.lanyuanxiaoyao.leopard.core.entity.Daily_;
|
||||
import com.lanyuanxiaoyao.leopard.core.entity.QDaily;
|
||||
import com.lanyuanxiaoyao.leopard.core.repository.DailyRepository;
|
||||
import com.lanyuanxiaoyao.leopard.core.repository.StockRepository;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.transaction.Transactional;
|
||||
import java.time.Duration;
|
||||
import java.time.ZoneId;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.context.event.ApplicationReadyEvent;
|
||||
import org.springframework.context.event.EventListener;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
|
||||
import org.ta4j.core.BaseBar;
|
||||
import org.ta4j.core.BaseBarSeriesBuilder;
|
||||
import org.ta4j.core.indicators.EMAIndicator;
|
||||
import org.ta4j.core.indicators.helpers.ClosePriceIndicator;
|
||||
import org.ta4j.core.num.DoubleNum;
|
||||
|
||||
@Slf4j
|
||||
@SpringBootApplication(scanBasePackages = "com.lanyuanxiaoyao.leopard")
|
||||
@EnableJpaAuditing
|
||||
public class StrategyApplication {
|
||||
@Resource
|
||||
private StockRepository stockRepository;
|
||||
@Resource
|
||||
private DailyRepository dailyRepository;
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(StrategyApplication.class, args);
|
||||
}
|
||||
|
||||
@Transactional(rollbackOn = Throwable.class)
|
||||
@EventListener(ApplicationReadyEvent.class)
|
||||
public void test() {
|
||||
var dailies = dailyRepository.findAll(QDaily.daily.stock.code.eq("000001.SZ"), Sort.by(Daily_.TRADE_DATE));
|
||||
var series = new BaseBarSeriesBuilder()
|
||||
.withNumTypeOf(DoubleNum.class)
|
||||
.build();
|
||||
log.info("{}", dailies.size());
|
||||
for (Daily daily : dailies) {
|
||||
series.addBar(new BaseBar(
|
||||
Duration.ofDays(1),
|
||||
daily.getTradeDate().plusDays(1).atStartOfDay(ZoneId.systemDefault()),
|
||||
DoubleNum.valueOf(daily.getOpen() * daily.getFactor()),
|
||||
DoubleNum.valueOf(daily.getHigh() * daily.getFactor()),
|
||||
DoubleNum.valueOf(daily.getLow() * daily.getFactor()),
|
||||
DoubleNum.valueOf(daily.getClose() * daily.getFactor()),
|
||||
DoubleNum.valueOf(daily.getVolume()),
|
||||
DoubleNum.valueOf(daily.getPriceChangeAmount()),
|
||||
daily.getTurnover().longValue()
|
||||
));
|
||||
}
|
||||
var ema = new EMAIndicator(new ClosePriceIndicator(series), 5);
|
||||
var emaValues = ema.stream().toList();
|
||||
log.info("{}", emaValues.size());
|
||||
|
||||
for (int index = 0; index < dailies.size(); index++) {
|
||||
var daily = dailies.get(index);
|
||||
var emaValue = emaValues.get(index);
|
||||
log.info("{} {} {} {} {}", daily.getTradeDate().toString(), daily.getClose(), daily.getFactor(), daily.getClose() * daily.getFactor(), emaValue.doubleValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
23
leopard-strategy/src/main/resources/logback-spring.xml
Normal file
23
leopard-strategy/src/main/resources/logback-spring.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<configuration>
|
||||
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
|
||||
|
||||
<conversionRule conversionWord="clr" class="org.springframework.boot.logging.logback.ColorConverter"/>
|
||||
<conversionRule conversionWord="wex" class="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
|
||||
<conversionRule conversionWord="wEx" class="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
|
||||
|
||||
<springProperty scope="context" name="LOGGING_PARENT" source="logging.parent"/>
|
||||
<springProperty scope="context" name="APP_NAME" source="spring.application.name"/>
|
||||
|
||||
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %clr(%5p) %clr([${HOSTNAME}]){yellow} %clr([%t]){magenta} %clr(%logger{40}){cyan}: %m%n%wEx</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<logger name="com.zaxxer.hikari" level="ERROR"/>
|
||||
<logger name="org.hibernate.SQL" level="DEBUG"/>
|
||||
|
||||
<root level="INFO">
|
||||
<appender-ref ref="Console"/>
|
||||
</root>
|
||||
</configuration>
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.lanyuanxiaoyao.leopard.strategy;
|
||||
|
||||
import com.lanyuanxiaoyao.leopard.core.repository.StockRepository;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
|
||||
|
||||
@Slf4j
|
||||
@DataJpaTest
|
||||
public class TestMaCalculate {
|
||||
private final StockRepository stockRepository;
|
||||
|
||||
public TestMaCalculate(StockRepository stockRepository) {
|
||||
this.stockRepository = stockRepository;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
var total = stockRepository.count();
|
||||
log.info("Total: {}", total);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user