Filtro What If por mês
4 respostas
Marca Fric
9 anos atrás #112399
Estou publicando um código de exemplo que adiciona uma nova condição What If que permite filtrar por mês.
Basta abrir o QuantEditor, criar um novo arquivo What If e copiar o conteúdo para lá:
importar java.util.ArrayList; importar java.util.Iterator; import com.sonarbytes.eaa.logic.whatif.WhatIf; import com.sonarbytes.strategy.Order; import com.sonarbytes.strategy.StrategyStatsData; import com.sonarbytes.windows.panels.propertyPanel.CComboBoxItemList; import com.sonarbytes.utils.SQTime; public class ByMonth extends WhatIf { public ByMonth() { setName("By month"); addIntParameter("_JAN_", "January", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_FEB_", "February", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_FEB_", "February", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_MAR_", "March", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_MAR_", "March", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_APR_", "April", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_APR_", "April", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_MAY_", "May", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_MAY_", "May", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_JUN_", "Jun", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_JUN_", "Jun", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_JUL_", "July", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_JUL_", "July", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_AUG_", "August", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_AUG_", "August", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_SEP_", "September", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_SEP_", "September", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_OCT_", "October", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_OCT_", "October", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_NOV_", "November", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_NOV_", "November", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_DEC_", "December", 1, 1, Integer.MAX_VALUE, 1); // definir o nome desse método que será exibido com o(s) parâmetro(s) setFormatedName("By month"); } /** * A função recebe a lista de todas as ordens classificadas por tempo de abertura e pode manipular a lista e remover qualquer ordem que corresponda a determinado filtro da lista. * A função recebe a lista de todas as ordens classificadas por horário de abertura e pode manipular a lista e remover da lista qualquer ordem que corresponda a determinado filtro. * * Estrutura do pedido: * .ticket - ticket do pedido (número inteiro) * .size - tamanho do pedido * .type - tipo de ordem: 1 - negociação longa, 2 - negociação curta * .pl - negociação que resulta em Profit/Loss em $ * .pctPL - negociação resultante de Profit/Loss em % * .pipsPL - resultado da negociação Profit/Loss em pips * .openPrice - preço de abertura de uma ordem * .openTime - hora de abertura de uma ordem (em segundos a partir de 1.1.1970) * .stoploss - nível de stop loss definido na negociação * .takeprofit - nível de meta de lucro definido na negociação * .closePrice - preço de fechamento de uma ordem * .closeTime - hora de fechamento de uma ordem (em segundos a partir de 1.1.1970) * .closeType - tipo de fechamento * .DD - drawdown durante essa negociação em $ * .pctDD - drawdown durante essa negociação em % * .pipsDD - drawdown durante essa negociação em pips * .accountBalance - saldo da conta durante essa negociação * .symbol - símbolo do instrumento (por exemplo, "EURUSD") * * @param originalOrders - lista de ordens originais que podem ser alteradas. Cada ordem tem as propriedades de ordem especificadas acima */ @Override public void filter(ArrayList originalOrders) { int jan = getIntParameterValue("_JAN_"); int feb = getIntParameterValue("_FEB_"); int mar = getIntParameterValue("_MAR_"); int apr = getIntParameterValue("_APR_"); int may = getIntParameterValue("_MAY_"); int jun = getIntParameterValue("_JUN_"); int jul = getIntParameterValue("_JUL_"); int aug = getIntParameterValue("_AUG_"); int sep = getIntParameterValue("_SEP_"); int oct = getIntParameterValue("_OCT_"); int nov = getIntParameterValue("_NOV_"); int dec = getIntParameterValue("_DEC_"); for(Iterator i = originalOrders.listIterator(); i.hasNext() ;) { Order order = (Order)i.next(); SQTime time = new SQTime(order.openTime); int orderMonth = time.getMonth(); se (orderMonth == 0 && jan != 1) i.remove(); if(orderMonth == 1 && feb != 1) i.remove(); if(orderMonth == 2 && mar != 1) i.remove(); if(orderMonth == 3 && apr != 1) i.remove(); if(orderMonth == 4 && may != 1) i.remove(); if(orderMonth == 5 && jun != 1) i.remove(); if(orderMonth == 6 && jul != 1) i.remove(); if(orderMonth == 7 && aug != 1) i.remove(); if(orderMonth == 8 && sep != 1) i.remove(); if(orderMonth == 9 && oct != 1) i.remove(); if(orderMonth == 10 && nov != 1) i.remove(); if(orderMonth == 11 && dec != 1) i.remove(); } } }
Marcar
EstratégiaQuant arquiteto
ynachum
9 anos atrás #126924
Marca Fric
9 anos atrás #126949
Você pode ver o código de todas as opções de variações hipotéticas já usadas no programa, basta abrir o QuantEditor no EA Analyzer.
Marcar
EstratégiaQuant arquiteto
ForexTrader
9 anos atrás #127435
Recebi este erro Mark:
A classe ByMonth é pública e deve ser declarada em um arquivo chamado ByMonth.java
Marca Fric
9 anos atrás #127441
Sim, não sei onde você o criou, mas você deve criar um arquivo chamado ByMonth.java no QuantEditor e colocar esse código lá.
O nome do arquivo deve ser igual ao nome da classe.
Marcar
EstratégiaQuant arquiteto
Visualizando 4 respostas - 1 até 4 (de um total de 4)