如何使用 Spring 启动调度程序获取价格差异

How to get price difference using Spring boot scheduler

我正在编写一个交易机器人。我需要在时间间隔内获得价格差异。假设在 00:00:00:0000 GMT 一对的价格是 100.0000,而在 00:00:00:0005 GMT 价格是 101.0000,我想得到这个差值。

我正在使用 Spring 启动调度程序,当我 运行 应用程序时,它总是 returns 价格不高。我希望它不断检查 nutil,直到差价达到价格。

这是每 5 分钟检查一次

@Scheduled(fixedRate = (10*60*1000))
private double getInitialPrice(){
    try {
        initialPrice = Double.parseDouble(String.valueOf(api.pricesMap().get("BTCUSDT")));
    } catch (BinanceApiException e) {
        e.printStackTrace();
    }
    return initialPrice;
}

这是每 5 毫秒检查一次

@Scheduled(fixedRate = (5))
private double getInstancePrice(){
    try {
        instancePrice = Double.parseDouble(String.valueOf(api.pricesMap().get("BTCUSDT")));
    } catch (BinanceApiException e) {
        e.printStackTrace();
    }
    return instancePrice;
}

我现在正在检查,希望 getInstancePrice() 方法将始终检查直到它为真。它未通过测试,因为它总是 returns 价格不高,而手动检查时价格更高。我如何让它不断检查直到它给出时差?

if( getInstancePrice() > getInitialPrice() ){
   //do this
}

我认为您不需要将属性设为静态,因为这意味着它们对所有 class 个实例具有相同的值。

另一点是从使用 @Scheduled 注释的方法返回值。

在您的代码中:

if( getInstancePrice() > getInitialPrice() ){
   //do this
}

你只是在执行 api 调用并更新你的值,如果它们从 API.

获得相同的时间,那将是几乎相同的

你应该做的只是在开始时设置你的 initialPrice,然后将它与从 api:

获得的新值进行比较
private Double initialPrice = null;
private double instancePrice;
...
@Scheduled(fixedRate = (5))
private double getInstancePrice(){
    try {
        instancePrice = Double.parseDouble(String.valueOf(api.pricesMap().get("BTCUSDT")));
        if (initialPrice == null) {
            initialPrice = instancePrice;
        } else if (instancePrice > initialPrice) {
            // do this
        }
    } catch (BinanceApiException e) {
        e.printStackTrace();
    }
    return instancePrice;
}

您需要 initialPrice 成为 Double 的对象才能将其设置为 null 并对其进行初始化。如果您使用的是 Java 8 或更高版本,则应改用 Optional。