package br.com.sl.domain.dto;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import br.com.ec.core.util.VerificadorUtil;
import br.com.kronus.core.PadraoGatilho;
import br.com.kronus.core.PadraoGatilho.TipoPadrao;
import br.com.kronus.strategy.ResultadoEstrategiaGatilho3;
import br.com.sl.domain.dto.robo.SinalTradeGatilho3;
import br.com.sl.domain.model.Ativo;
import br.com.sl.domain.model.Candle;
import br.com.sl.domain.model.tipos.TipoFonteDadosProfit;
public class SinaisResultadoDTO
{
private TipoFonteDadosProfit tipoFonteSelecionada
;
private List<String> logs
;
private List<Ativo
> ativosAnalisados
;
private List<Candle
> candlesAnalisados
;
private List<PadraoGatilho
> padroes
;
private List<PadraoGatilho
> padroesAteG2
;
private List<PadraoGatilho
> padroesComG3
;
private List<SinalTradeGatilho3
> sinaisTradeGatilho3
;
private List<ResultadoEstrategiaGatilho3
> resultados
;
private String observacoes
;
public SinaisResultadoDTO
() {
this.
ativosAnalisados =
new ArrayList<Ativo
>();
this.
candlesAnalisados =
new ArrayList<Candle
>();
this.
padroes =
new ArrayList<PadraoGatilho
>();
this.
sinaisTradeGatilho3 =
new ArrayList<SinalTradeGatilho3
>();
this.
resultados =
new ArrayList<ResultadoEstrategiaGatilho3
>();
this.
logs =
new ArrayList<String>();
this.
tipoFonteSelecionada = TipoFonteDadosProfit.
ARQUIVOS_CSV;
}
public TipoFonteDadosProfit getTipoFonteSelecionada
() {
return tipoFonteSelecionada
;
}
public void setTipoFonteSelecionada
(TipoFonteDadosProfit tipoFonteSelecionada
) {
this.
tipoFonteSelecionada = tipoFonteSelecionada
;
}
public List<String> getLogs
() {
return logs
;
}
public void setLogs
(List<String> logs
) {
this.
logs = logs
;
}
public String getLogsBacktestAsText
() {
if (logs ==
null || logs.
isEmpty()) return "";
return String.
join("\n", logs
);
}
public List<Ativo
> getAtivosAnalisados
() {
return ativosAnalisados
;
}
public void setAtivosAnalisados
(List<Ativo
> ativosAnalisados
) {
this.
ativosAnalisados = ativosAnalisados
;
}
public List<Candle
> getCandlesAnalisados
() {
return candlesAnalisados
;
}
public void setCandlesAnalisados
(List<Candle
> candlesAnalisados
) {
this.
candlesAnalisados = candlesAnalisados
;
}
public void adicionarAtivoNaLista
(Ativo ativo
) {
if (VerificadorUtil.
naoEstaNulo(ativo
)) {
if (getAtivosAnalisados
().
indexOf(ativo
) <=
0) {
getAtivosAnalisados
().
add(ativo
);
}
}
}
public List<PadraoGatilho
> getPadroes
() {
return padroes
;
}
public void setPadroes
(List<PadraoGatilho
> padroes
) {
this.
padroes = padroes
;
}
public List<PadraoGatilho
> getPadroesAteG2
() {
return padroesAteG2
;
}
public void setPadroesAteG2
(List<PadraoGatilho
> padroesAteG2
) {
this.
padroesAteG2 = padroesAteG2
;
}
public List<PadraoGatilho
> getPadroesComG3
() {
return padroesComG3
;
}
public void setPadroesComG3
(List<PadraoGatilho
> padroesComG3
) {
this.
padroesComG3 = padroesComG3
;
}
public List<SinalTradeGatilho3
> getSinaisTradeGatilho3
() {
return sinaisTradeGatilho3
;
}
public void setSinaisTradeGatilho3
(List<SinalTradeGatilho3
> sinaisTradeGatilho3
) {
this.
sinaisTradeGatilho3 = sinaisTradeGatilho3
;
}
public List<ResultadoEstrategiaGatilho3
> getResultados
() {
return resultados
;
}
public void setResultados
(List<ResultadoEstrategiaGatilho3
> resultados
) {
this.
resultados = resultados
;
}
public String getObservacoes
() {
return observacoes
;
}
public void setObservacoes
(String observacoes
) {
this.
observacoes = observacoes
;
}
public Boolean verificarSeAtivoConstaNaLista
(String nomeAtivo
) {
for (Ativo ativo: getAtivosAnalisados
()) {
if (ativo.
getNome().
equals(nomeAtivo
)) {
return true;
}
}
return false;
}
public void adicionarCandleNaLista
(Candle candle
) {
getCandlesAnalisados
().
add(candle
);
}
public void preencherOutrosPadroes
() {
padroesComG3 = padroes.
stream()
.
filter(p -
> p.
getTipoPadrao() == TipoPadrao.
COMPLETO_G3)
.
collect(Collectors.
toList());
padroesComG3 = inverterLista
(padroesComG3
);
padroesAteG2 = padroes.
stream()
.
filter(p -
> p.
getTipoPadrao() == TipoPadrao.
PARCIAL_G2)
.
collect(Collectors.
toList());
padroesAteG2 = inverterLista
(padroesAteG2
);
}
public static List<PadraoGatilho
> inverterLista
(List<PadraoGatilho
> candles
) {
List<PadraoGatilho
> invertida =
new ArrayList<>(candles
);
Collections.
reverse(invertida
);
return invertida
;
}
}