SOMENTE LEITURA

O fórum agora é um arquivo somente para leitura.

Para relatórios de bugs e perguntas sobre a plataforma → [email protected]

Nossa comunidade vive no Discord e no YouTube - junte-se a nós!

JUNTE-SE A NÓS EM Discórdia YouTube

Função de verificação de Monte Carlo

5 respostas

huangwh88

Cliente, bbp_participant, community, sq-ultimate, 116 respostas.

Perfil da visita

5 anos atrás #270606

Na documentação aqui https://strategyquant.com/doc/quantanalyzer/predict-verify-strategy-performance-using-monte-carlo-simulation/É mencionado que a função de verificação deve comparar o desempenho ao vivo da estratégia com a faixa prevista usando MC.

Mas é possível importar resultados reais ao vivo e compará-los com as previsões da MC? Neste momento parece que está dividindo os dados em partes IS e OOS e comparando os resultados OOS com as previsões MC obtidas usando os resultados IS.

 

0

tomas262

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

5 anos atrás #270622

Hi,

sim, você pode usar a previsão MC e aplicá-la em seus resultados comerciais ao vivo. Basta carregar os resultados e definir os dados "Verificar - data" até a data a partir da qual você deseja iniciar a simulação de previsão. No exemplo anexo, os resultados de 1.1.2021 a 24.5.2021 são carregados. A previsão é definida para iniciar a partir de 1.3.2021 para que possamos comparar se estamos dentro dos limites da simulação MC com nossos resultados comerciais.

Anexos:
Você deve ser logado para ver os arquivos anexos.

0

Massimo Scapini

Assinante, bbp_participant, cliente, comunidade, sq-ultimate, 62 respostas.

Perfil da visita

3 anos atrás #280024

Sim,

mas desta forma acho que os dados ao vivo antes de 1 Mar 2021 são usados para simular dados depois, o que não é o que se pode querer...

Prefiro carregar dois conjuntos diferentes: 1º os dados simulados para o passado, 2º os dados ao vivo (como na seção "Comparar Dados") e depois usar o 1º conjunto de dados para simular o 2º.

Isto pode ser compensado carregando dados simulados passados e dados ao vivo em um único arquivo? Se sim, que formato pode ser usado ?

Além disso, como posso alterar o número de negócios utilizados para a função "Prever"?

0

Massimo Scapini

Assinante, bbp_participant, cliente, comunidade, sq-ultimate, 62 respostas.

Perfil da visita

3 anos atrás #280025

Provavelmente encontrei o caminho (talvez tenha sido apenas o que você sugeriu, mas simplesmente não o entendi!):

1. Carregar os dados simulados

2. Carregar os dados ao vivo

3. Criar um Portfólio fundindo 1 & 2

4. Execute o MC usando a data de início de 2 como referência

5. Feito!

0

Massimo Scapini

Assinante, bbp_participant, cliente, comunidade, sq-ultimate, 62 respostas.

Perfil da visita

3 anos atrás #280041

Em princípio funciona...

... mas infelizmente com o MT4 a exibição dos resultados é bastante enganosa porque todas as transações contidas no relatório MT4 são contadas como negociações, pelo menos no gráfico (não sei se na simulação também).

Ver anexo

 

Para corrigir isso, é preciso limpar o relatório MT4 manualmente antes de carregá-lo em QA. Muito irritante

Anexos:
Você deve ser logado para ver os arquivos anexos.

0

mestre de marcas

Assinante, bbp_participante, 2 respostas.

Perfil da visita

1 mês atrás #293111

Eu superei esse problema programando um filtro para definir a data até o momento em que o MC deve usar os dados. Basta digitar a data no formato aaaammdd e usar a mesma data na função de verificação.

---------

pacote com.strategyquant.extend.MonteCarloMethods;

 

import com.strategyquant.lib.results.SQOrder;

importar com.strategyquant.lib.results.SQOrderList;

import com.strategyquant.lib.snippets.MonteCarloSim.MonteCarloMethod;

importar java.util.Calendar;

 

public class DateFilter extends MonteCarloMethod {

 

public DateFilter() {

setName(“FilterByDate”);

// Datum im Format YYYYMMDD (z.B. 20231231 für 31.12.2023)

addIntParameter(“_STOP_DATE_”, “Nur Trades bis Datum (YYYYMMDD)”, 20231231, 19000101, 21001231, 1);

setFormatedName(“Filter: Trades bis _STOP_DATE_”);

}

 

@Override

public void compute(SQOrderList originalOrders) throws Exception {

int stopDate = getIntParameterValue(“_STOP_DATE_”);

SQOrderList filteredOrders = new SQOrderList();

 

for(int i = 0; i < originalOrders.size(); i++) {

SQOrder order = originalOrders.get(i);

 

// Umrechnung der CloseTime (Long/Timestamp) in YYYYMMDD

Calendar cal = Calendar.getInstance();

cal.setTimeInMillis(order.CloseTime);

int orderDate = (cal.get(Calendar.YEAR) * 10000)

+ ((cal.get(Calendar.MONTH) + 1) * 100)

+ cal.get(Calendar.DAY_OF_MONTH);

 

// Nur Trades hinzufügen, die am oder vor dem Stichtag liegen

se (orderDate <= stopDate) {

filteredOrders.add(order.clone());

}

}

 

// A lista original será incluída com a lista filtrada

originalOrders.clear();

for(int j = 0; j < filteredOrders.size(); j++) {

originalOrders.add(filteredOrders.get(j).clone());

}

 

// Opcional: Se o Reihenfolge para outros métodos MC for igual

// java.util.

Collections.shuffle(originalOrders);

}

}

0

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