Subversion Repositories Integrator Subversion

Rev

Blame | Last modification | View Log | Download | RSS feed

package br.com.kronus.binance.futures;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;

import br.com.kronus.binance.futures.model.CandleKLinha;
import br.com.kronus.core.Candle;

public final class ConversorCandle {

    private ConversorCandle() {}

    // =========================================================
    //   CandleKLinha  ->  Candle (modelo Kronus)
    // =========================================================
    public static Candle candleKLinhaParaCandle(CandleKLinha k, String ativo, String periodo, ZoneId zona) {
        if (k == null) return null;

        // Usa o método já existente no KLinha:
        ZonedDateTime abertura = k.getHorarioAberturaZoned(zona);

        Candle c = new Candle();
        c.setNomeAtivo(ativo);
        c.setPeriodo(periodo);

        // DATA / HORA no padrão da classe Candle
        Date dataHora = Date.from(abertura.toInstant());
        c.setDataHora(dataHora);
        c.setDataHoraTime(abertura.toLocalDateTime());

        // OHLCV
        c.setAbertura(k.getAbertura());
        c.setMaxima(k.getMaxima());
        c.setMinima(k.getMinima());
        c.setFechamento(k.getFechamento());
        c.setVolume(k.getVolume());

        return c;
    }

    // =========================================================
    //   Candle  ->  CandleKLinha (modelo Binance Futures)
    //   AGORA APENAS COM SETTERS  (SEM CONSTRUTOR)
    // =========================================================
    public static CandleKLinha candleParaCandleKLinha(Candle c, ZoneId zona) {
        if (c == null) return null;

        // Recupera horário do Candle do Kronus
        LocalDateTime ldt;

        if (c.getDataHora() != null) {
            ldt = c.getDataHora().toInstant().atZone(zona).toLocalDateTime();
        } else if (c.getDataHoraTime() != null) {
            ldt = c.getDataHoraTime();
        } else {
            throw new IllegalArgumentException("Candle sem dataHora nem dataHoraTime definido.");
        }

        ZonedDateTime abertura = ldt.atZone(zona);

        long openTime  = abertura.toInstant().toEpochMilli();
        long closeTime = abertura.plusMinutes(1).toInstant().toEpochMilli();

        BigDecimal vol = c.getVolume() != null ? c.getVolume() : BigDecimal.ZERO;

        CandleKLinha k = new CandleKLinha();

        // ===== AJUSTAR AQUI OS SETTERS CONFORME SUA CLASSE KLinha =====
        // nomes mais comuns:
        k.setHorarioAbertura(openTime);        // ou k.setOpenTime(...)
        k.setHorarioFechamento(closeTime);     // ou k.setCloseTime(...)

        k.setAbertura(c.getAbertura());
        k.setMaxima(c.getMaxima());
        k.setMinima(c.getMinima());
        k.setFechamento(c.getFechamento());

        // Volume é opcional
        k.setVolume(vol);
        // ===============================================================

        return k;
    }
}