package com.xcong.excoin.quartz.job;
|
|
import com.xcong.excoin.modules.coin.entity.OrderCoinsDealEntity;
|
import com.xcong.excoin.modules.coin.service.OrderCoinService;
|
import com.xcong.excoin.processor.CoinProcessorFactory;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.util.Calendar;
|
import java.util.Random;
|
|
/**
|
* 生成各时间段的K线信息
|
*
|
*/
|
@Component
|
@Slf4j
|
public class KLineGeneratorJob {
|
@Resource
|
private CoinProcessorFactory processorFactory;
|
|
@Resource
|
private OrderCoinService orderCoinService;
|
|
|
|
//@Scheduled(cron = "0/40 * * * * *")
|
public void test(){
|
Random random = new Random();
|
Integer type = OrderCoinsDealEntity.ORDERTYPE_BUY;
|
Integer tradeType = OrderCoinsDealEntity.TRADETYPE_FIXEDPRICE;
|
double random1 = Math.random();
|
BigDecimal price = new BigDecimal(random1).setScale(4, RoundingMode.HALF_UP).multiply(new BigDecimal("2"));
|
if(price.compareTo(BigDecimal.ZERO)==0){
|
price = BigDecimal.ONE;
|
}
|
System.out.println(price);
|
orderCoinService.initOrders("ROC",type,tradeType,price,new BigDecimal(2),null);
|
orderCoinService.initOrders("ROC",OrderCoinsDealEntity.ORDERTYPE_SELL,tradeType,price,new BigDecimal(2),null);
|
}
|
|
|
/**
|
* 每分钟定时器,处理分钟K线
|
*/
|
@Scheduled(cron = "0 * * * * *")
|
public void handle5minKLine(){
|
|
Calendar calendar = Calendar.getInstance();
|
//log.debug("分钟K线:{}",calendar.getTime());
|
//将秒、微秒字段置为0
|
calendar.set(Calendar.SECOND,0);
|
calendar.set(Calendar.MILLISECOND,0);
|
long time = calendar.getTimeInMillis();
|
int minute = calendar.get(Calendar.MINUTE);
|
int hour = calendar.get(Calendar.HOUR_OF_DAY);
|
processorFactory.getProcessorMap().forEach((symbol,processor)->{
|
if(!processor.isStopKline()) {
|
//log.debug("生成{}分钟k线:{}",symbol);
|
//生成1分钟K线
|
processor.autoGenerate();
|
processor.generateKLine(1, Calendar.MINUTE, time);
|
//更新24H成交量
|
processor.update24HVolume(time);
|
if(minute%5 == 0) {
|
// 五分钟的当前K线
|
processor.generateKLine(5, Calendar.MINUTE, time);
|
}
|
if(minute%10 == 0){
|
processor.generateKLine(10, Calendar.MINUTE,time);
|
}
|
if(minute%15 == 0){
|
processor.generateKLine(15, Calendar.MINUTE,time);
|
}
|
if(minute%30 == 0){
|
processor.generateKLine(30, Calendar.MINUTE,time);
|
}
|
if(hour == 0 && minute == 0){
|
processor.resetThumb();
|
}
|
}
|
});
|
}
|
|
/**
|
* 每小时运行
|
*/
|
@Scheduled(cron = "0 0 * * * *")
|
public void handleHourKLine(){
|
processorFactory.getProcessorMap().forEach((symbol,processor)-> {
|
if(!processor.isStopKline()) {
|
Calendar calendar = Calendar.getInstance();
|
log.info("小时K线:{}",calendar.getTime());
|
//将秒、微秒字段置为0
|
calendar.set(Calendar.MINUTE, 0);
|
calendar.set(Calendar.SECOND, 0);
|
calendar.set(Calendar.MILLISECOND, 0);
|
long time = calendar.getTimeInMillis();
|
|
processor.generateKLine(1, Calendar.HOUR_OF_DAY, time);
|
// 四小时K线
|
int hour = calendar.get(Calendar.HOUR_OF_DAY);
|
if(hour%4==0){
|
processor.generateKLine(4, Calendar.HOUR_OF_DAY, time);
|
}
|
}
|
});
|
}
|
|
/**
|
* 每日0点处理器,处理日K线
|
*/
|
@Scheduled(cron = "0 0 0 * * *")
|
public void handleDayKLine(){
|
processorFactory.getProcessorMap().forEach((symbol,processor)->{
|
if(!processor.isStopKline()) {
|
Calendar calendar = Calendar.getInstance();
|
log.info("日K线:{}",calendar.getTime());
|
//将秒、微秒字段置为0
|
calendar.set(Calendar.HOUR_OF_DAY,0);
|
calendar.set(Calendar.MINUTE,0);
|
calendar.set(Calendar.SECOND,0);
|
calendar.set(Calendar.MILLISECOND,0);
|
long time = calendar.getTimeInMillis();
|
int week = calendar.get(Calendar.DAY_OF_WEEK);
|
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
|
if(week == 1){
|
processor.generateKLine(1, Calendar.DAY_OF_WEEK, time);
|
}
|
if(dayOfMonth == 1){
|
processor.generateKLine(1, Calendar.DAY_OF_MONTH, time);
|
}
|
processor.generateKLine(1, Calendar.DAY_OF_YEAR,time);
|
}
|
});
|
}
|
|
}
|