Filtro What If por mês

4 respostas

Marca Fric

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

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

0

ynachum

Cliente, bbp_participante, comunidade, 21 respostas.

Perfil da visita

9 anos atrás #126924

Você tem algum outro código de simulação já escrito como este?

Yossi

0

Marca Fric

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

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

0

ForexTrader

Assinante, bbp_participant, comunidade, 34 respostas.

Perfil da visita

9 anos atrás #127435

Recebi este erro Mark:

 

A classe ByMonth é pública e deve ser declarada em um arquivo chamado ByMonth.java

0

Marca Fric

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

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

0

Visualizando 4 respostas - 1 até 4 (de um total de 4)