上述例子中的api获取请换成一个免费的列子
时间: 2024-04-04 11:35:50 浏览: 68
33.写一个jdbc的访问oracle的列子.avi
好的,这里提供一个免费的股票数据API:https://www.alphavantage.co/,需要注册并获取 API Key 才能使用。下面是修改后的示例代码:
```java
import java.io.IOException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.IOUtils;
import org.json.JSONArray;
import org.json.JSONObject;
public class MACDExample {
public static void main(String[] args) throws IOException {
String symbol = "AAPL"; // 股票代码
String apiKey = "demo"; // Alpha Vantage 免费 API Key
int shortPeriod = 12; // 短期周期
int longPeriod = 26; // 长期周期
int signalPeriod = 9; // 信号周期
// 从 Alpha Vantage API 获取股票价格数据
String url = "https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED"
+ "&symbol=" + symbol + "&apikey=" + apiKey;
String json = IOUtils.toString(new URL(url), StandardCharsets.UTF_8);
JSONObject obj = new JSONObject(json);
JSONObject tsd = obj.getJSONObject("Time Series (Daily)");
List<Double> closePriceList = new ArrayList<>();
for (String date : tsd.keySet()) {
JSONObject data = tsd.getJSONObject(date);
double closePrice = data.getDouble("4. close");
closePriceList.add(closePrice);
}
double[] closePrice = closePriceList.stream().mapToDouble(Double::doubleValue).toArray();
// 计算MACD
MACD macd = new MACD(closePrice, shortPeriod, longPeriod, signalPeriod);
double[] diff = macd.getDIFF();
double[] dea = macd.getDEA();
double[] macdLine = macd.getMACD();
// 输出结果
System.out.println("MACD for " + symbol + ":");
for (int i = 0; i < closePrice.length; i++) {
System.out.printf("Diff[%d]: %.2f, DEA[%d]: %.2f, MACD[%d]: %.2f\n", i, diff[i], i, dea[i], i, macdLine[i]);
}
}
}
```
这个示例中,我们将 Alpha Vantage 的 API Key 修改为免费的 Demo Key 即可进行测试。需要注意的是,免费的 Demo Key 有调用频率和限制,请参考 Alpha Vantage 官网的说明。
阅读全文