如何使用 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。
我正在编写一个交易机器人。我需要在时间间隔内获得价格差异。假设在 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。