You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现Dukascopy历史数据自动下载并导出CSV求助

从Dukascopy下载历史数据并导出为CSV(Java实现)

你可以通过Dukascopy官方的JForex SDK来实现数据下载,以下是具体步骤和代码示例:

一、依赖配置

首先在Maven项目中添加JForex API的依赖,需要指定Dukascopy的仓库地址:

<repositories>
    <repository>
        <id>dukascopy</id>
        <url>https://www.dukascopy.com/client/jforex/lib/public</url>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>com.dukascopy.api</groupId>
        <artifactId>JForex-API</artifactId>
        <version>2.9.24.1</version>
    </dependency>
</dependencies>

二、完整实现代码

这个示例会登录Dukascopy模拟账户,指定品种、时间周期和时间范围,获取历史K线数据后导出为CSV:

import com.dukascopy.api.*;
import com.dukascopy.api.system.ClientFactory;
import com.dukascopy.api.system.IClient;
import com.dukascopy.api.system.ISystemListener;

import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
import java.util.List;

public class DukascopyDataExporter {
    public static void main(String[] args) throws Exception {
        // 初始化客户端
        IClient client = ClientFactory.getDefaultInstance();
        client.setSystemListener(new ISystemListener() {
            @Override
            public void onStart(long processId) {}

            @Override
            public void onStop(long processId) {}

            @Override
            public void onConnect() {}

            @Override
            public void onDisconnect() {}

            @Override
            public void onError(Throwable throwable) {
                throwable.printStackTrace();
            }
        });

        // 登录模拟账户(替换为你的Dukascopy模拟账号和密码,官网可免费注册)
        boolean loginSuccess = client.connect("demo.dukascopy.com", 10443, "你的模拟账号", "你的模拟密码");
        if (!loginSuccess) {
            System.err.println("模拟账户登录失败,请检查账号密码");
            return;
        }

        // 等待客户端完成初始化
        while (!client.isConnected() || !client.getSubscribedInstruments().isEmpty()) {
            Thread.sleep(1000);
        }

        // 配置数据参数
        Instrument targetInstrument = Instrument.EURUSD; // 目标交易品种
        Period targetPeriod = Period.H1; // 时间周期,可选M1、M5、D1等
        Date startTime = new Date(System.currentTimeMillis() - 7 * 24 * 60 * 60 * 1000); // 起始时间:7天前
        Date endTime = new Date(); // 结束时间:当前

        // 获取历史K线数据
        IHistory historyService = client.getHistory();
        List<IBar> barList = historyService.getBars(targetInstrument, targetPeriod, OfferSide.BID, startTime, endTime);

        // 导出为CSV文件
        writeToCsv(barList, targetInstrument, targetPeriod);

        // 断开客户端连接
        client.disconnect();
    }

    private static void writeToCsv(List<IBar> bars, Instrument instrument, Period period) throws IOException {
        String csvFileName = String.format("%s_%s_history.csv", instrument.name(), period.name());
        try (FileWriter csvWriter = new FileWriter(csvFileName)) {
            // 写入CSV表头
            csvWriter.write("时间戳,开盘价,最高价,最低价,收盘价,成交量\n");
            // 遍历写入每一条K线数据
            for (IBar bar : bars) {
                csvWriter.write(String.format("%d,%.5f,%.5f,%.5f,%.5f,%d\n",
                        bar.getTime().getTime(),
                        bar.getOpen(),
                        bar.getHigh(),
                        bar.getLow(),
                        bar.getClose(),
                        bar.getVolume()));
            }
        }
        System.out.println("数据已导出至:" + csvFileName);
    }
}

三、注意事项

  • 必须使用Dukascopy的模拟或真实账户登录,免费模拟账户可在官网注册
  • 数据请求有频率限制,避免短时间内批量请求大量数据导致被限制
  • 部分交易品种可能不支持某些时间周期,需根据实际情况调整Instrument和Period参数

内容的提问来源于stack exchange,提问作者user13735688

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 04:23:18