SQOrder Class MAE/MFE Properties Returning 0
6 respostas
seaton
8 anos atrás #114154
Acabei de brincar com meu primeiro gráfico e fiz um ganho MAE vs %, tudo muito simples e direto (estou adorando a capacidade de estender, BTW), mas a classe SQOrders parece estar retornando 0 para as propriedades MAE e MFE?
Acabei de tentar anexar o arquivo e o fórum não permite, portanto, colei-o abaixo.
Aliás, seria bom ter uma seção no fórum que permitisse o compartilhamento de extensões, pois fico feliz em compartilhar as minhas.
pacote com.strategyquant.extend.TradeAnalysisPanes; import java.util.ArrayList; import org.jfree.chart.JFreeChart; import com.strategyquant.lib.charts.common.SQChart;; import com.strategyquant.lib.charts.common.SQScatterChart;; import com.strategyquant.lib.charts.common.duration.TimeDuration; import com.strategyquant.lib.charts.common.duration.TimeDuration; import com.strategyquant.lib.language.L; import com.strategyquant.lib.results.SQData; import com.strategyquant.lib.results.SQOrder; import com.strategyquant.lib.results.SQOrderList; import com.strategyquant.lib.results.SQResultsGroup; import com.strategyquant.lib.results.SQResultsGroup; import com.strategyquant.lib.settings.SQConst; import com.strategyquant.lib.snippets.TradeAnalysisChartPane; public class MAEvsGainChart extends TradeAnalysisChartPane { //private ArrayList timeDurationList; public MAEvsGainChart() { this.name = L.t("MAE vs. Resultado da negociação (ganho %)"); } @Override public JFreeChart drawChart(SQResultsGroup strategyResult, SQData data) { SQScatterChart chart = new SQScatterChart(); chart.xLegend = L.t("% Gain"); chart.yLegend = L.t("MAE"); se(strategyResult==null) { return chart.render(); } ArrayList trades = computeData(strategyResult, data); for(int trade=0; trade<trades.size(); trade++) { double[] values = trades.get(trade); se(valores[1]<0) { chart.add("losers", values[1], values[0]); } else { chart.add("winners", values[1], values[0]); } } //chart.setDurationDomainAxis(true); chart.setSeriesColor("losers", SQChart.COLOR_RED); } chart.setSeriesColor("losers", SQChart.COLOR_RED); chart.setSeriesColor("winners", SQChart.COLOR_GREEN); return chart.render(); } private ArrayList computeData(SQResultsGroup strategyResult, SQData data) { ArrayList trades = new ArrayList(); SQOrderList orderList = filterOrders(strategyResult, data); for(SQOrder order : orderList) { double[] values = new double[2]; valores[0] = order.MAE; values[1] = order.PctPL; trades.add(values); } return trades; } }
Tamas
8 anos atrás #132436
Olá, seaton,
deve ser fácil de calcular MAE/MFE se precisar deles para seu relatório.
Eles precisam ser calculados para um conjunto específico de ordens.
Primeiro, receba os pedidos
SQOrderList orderList = filterOrders(strategyResult, data);
e, em seguida, calcular o MAE para cada ordem.
for(SQOrder order : orderList) {
order.MAE = value;
}
Com os melhores cumprimentos,
Tomas
seaton
8 anos atrás #132454
Obrigado, Thomas,
Eu havia assumido incorretamente que o MAE e o MFE em cada ordem já haviam sido calculados.
Obrigado
seaton
8 anos atrás #132455
Na verdade, quando estava dirigindo para o trabalho hoje, estava refletindo sobre isso e não há como calcular o MAE/MFE a partir do SQAnalyser, pois esses números precisam ser capturados durante a negociação/teste de retorno e, portanto, não podem ser calculados pelo SQAnalyser.
Como os dados que estou carregando são de backtests do MT4 que salvei, essas informações não estarão disponíveis, pois tenho certeza de que o backtester do MT4 não as fornece; no entanto, com os backtests do SQ, acho que elas são calculadas internamente, portanto, vou testá-las.
seaton
8 anos atrás #132456
Acabei de confirmar que esse é o caso:
O MAE/MFE é calculado no Strategy Quant e NÃO está nos backtests do MT4. Essa é apenas uma das muitas deficiências do MT4 como plataforma. De qualquer forma, faremos a depuração nos testes do Strategy Quant para que ele funcione corretamente.
seaton
8 anos atrás #132459
Ok, isso me levou ao próximo problema.
Como o Strategy Quant está calculando o MAE/MFE, já que eles parecem estar incorretos?
1) O MAE está sendo mostrado como um número positivo, ele nunca deve ser maior que 0, enquanto o MFE nunca deve ser menor que 0
2) Os valores do MAE e do MFE parecem muito parecidos, portanto, estou um pouco cético em relação a eles.
Esses dados foram extraídos de uma estratégia do StrategyQyant carregada no SQ Analysis, com resultados semelhantes em estratégias diferentes.
tomas262
8 anos atrás #132484
Isso precisa ser verificado. Também obtenho valores diferentes de MAE/MFE no Analyzer ao tentar importar a estratégia gerada no SQ
Visualizando 6 respostas - 1 até 6 (de um total de 6)