Filtro What If por mês
4 respostas
Marca Fric
12 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
11 anos atrás #126924
Você tem algum outro código de simulação já escrito como este?
Yossi
0
Marca Fric
11 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
11 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
11 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)