Resposta

REGRA DE SAÍDA no problema do MT4!!!

18 respostas

Gaudio Fx

Assinante, bbp_participant, comunidade, 22 respostas.

Perfil da visita

8 anos atrás #114590

Olá,
Estou entrando em contato com você porque tenho um grande problema que surge em muitas circunstâncias na geração de estratégias e estratégias de aprimoramento
O problema que se refletiu muitas vezes é o seguinte:
Quando verifico a "Regra de saída (preço + + indicadores de operadores...)", o strategyquant em condições específicas, usando uma solução muito boa, como este exemplo que apresento a seguir:
essas são as condições da estratégia de saídaquant
e isso é o que acontece em vez do metatrader4
Nesse caso, ambas as posições vendidas têm as condições de saída antes da entrada porque o volume é maior do que a média de 50 (linha vermelha) e o MetaTrader abre e fecha ao mesmo tempo.
No entanto, isso não acontece na strategyquant, pois se supõe que a condição de saída deve ser iniciada somente no fechamento do candle de entrada
Seria como dizer que a condição de saída é no fechamento do candle de entrada e isso, Em muitas circunstâncias, ele é muito bom. mas o metatrader não acontece e abre e fecha ao mesmo tempo sem esperar pela finalização do candlecomo acontece no strategyquant, obtendo bons resultados
Como faço para deixar claro para o Metatrader que é preciso aguardar o fechamento do candle de entrada e depois ativar as regras de saída como strategyquant?
Muito obrigado
PS:
A LÓGICA QUE EU USO NÃO É BOA PARA NEGOCIAÇÃO... MAS A PERGUNTA É A MESMA
Não é lógico, eu sei... mas foi apenas um exemplo... é o conceito que eu acho importante, ou se a regra de saída está ativa antes da abertura da negociação, POR QUE no metatrader4 está ativa ao mesmo tempo em que abre, enquanto no strategyquant está ativa apenas no fechamento do candle ????? ... ESSA É A PERGUNTA... não para um exemplo lógico de saída... 

Posso alterar essa regra de saída com outra mais lógica, igual a esta:

 

 

mas se essa condição for verdadeira antes da ordem, no metatrader o fechamento será no mesmo ponto da abertura... mas no strategyquant o fechamento será após o fechamento da vela!!! Eu quero a mesma condição no MT4... É POSSÍVEL?

0

mikeyc

Cliente, bbp_participant, comunidade, 877 respostas.

Perfil da visita

8 anos atrás #134663

Essa regra de saída não faz sentido lógico para mim.

 

Por que um volume acima da média significaria o fechamento de uma posição vendida e um volume abaixo da média significaria o fechamento de uma posição comprada ou vice-versa? Esse parece ser outro exemplo de lógica estranha na escolha de regras simétricas.

 

O fato de o volume ser maior ou menor do que a média não tem uma tendência direcional.

0

Gaudio Fx

Assinante, bbp_participant, comunidade, 22 respostas.

Perfil da visita

8 anos atrás #134664

Não é lógico, eu sei... mas foi apenas um exemplo... é o conceito que eu acho importante, ou se a regra de saída está ativa antes da abertura da negociação, POR QUE no metatrader4 está ativa ao mesmo tempo em que abre, enquanto no strategyquant está ativa apenas no fechamento do candle ????? ... ESSA É A PERGUNTA... não para um exemplo lógico de saída...

Posso alterar essa regra de saída com outra mais lógica, igual a esta:

 

mas se essa condição for verdadeira antes da ordem, no metatrader o fechamento será no mesmo ponto da abertura... mas no strategyquant o fechamento será após o fechamento da vela!!! Eu quero a mesma condição no MT4... É POSSÍVEL?

0

mikeyc

Cliente, bbp_participant, comunidade, 877 respostas.

Perfil da visita

8 anos atrás #134665

Parece que são ordens pendentes (ordens limitadas ou stop). Tem certeza de que elas estão sendo fechadas e não excluídas?

 

O que a guia de resultados mostra no MT4 em vez do gráfico?

0

Gaudio Fx

Assinante, bbp_participant, comunidade, 22 respostas.

Perfil da visita

8 anos atrás #134666

Sim, sim, tenho 100% de certeza... as ordens são abertas e fechadas de uma só vez
o relatório sobre o mt4 é claro sobre a abertura e o fechamento.
 
Repito: o strategyquant ativa a regra de saída imediatamente após o fechamento do candle em que você abriu a negociação
Em vez disso, no mt4 isso não acontece, a regra de saída está ativa ao mesmo tempo em que a abertura.
 
Como faço para controlar a espera pelo fechamento da vela?
Tenho que adicionar manualmente uma alteração às estratégias? Você pode explicar como faço para preencher essa alteração para que isso aconteça?
 
Tentei fechar (1) e abrir (1), mas não funcionou, depois tentei fechar (2) e abrir (1) e qualquer ordem abre corretamente..: /

0

tomas262

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

8 anos atrás #134667

Gaudio, parece-me que as condições de entrada e saída às vezes podem "colidir" e, dependendo da precisão do backtesting, você obtém um comportamento diferente, como saída imediata após a entrada. Você pode me enviar a estratégia (arquivo *.STR) para [email protected] para que eu possa verificar isso? A solução aqui pode ser uma correção para o SQ ou a edição do código da estratégia para aguardar o fechamento da barra.

0

geektrader

Customer, bbp_participant, community, 522 replies.

Perfil da visita

8 anos atrás #134673

Sim, esse é um problema de precisão. Se você fizer um backtest dessa estratégia com dados reais de ticks, ela também funcionará da mesma forma no SQ e falhará. Portanto, certifique-se de sempre verificar as estratégias com dados de ticks reais dos últimos anos, pelo menos, para evitar esse tipo de problema. Pessoalmente, eu também nunca usaria "volume" em nenhuma lógica de negociação, pois o volume é totalmente diferente em cada corretora. O mesmo vale para "hora", exceto no caso de você saber que os dados históricos que está usando estão absolutamente sincronizados em termos de tempo de servidor com sua corretora atual.


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

mikeyc

Cliente, bbp_participant, comunidade, 877 respostas.

Perfil da visita

8 anos atrás #135652

 

 
Repito: o strategyquant ativa a regra de saída imediatamente após o fechamento do candle em que você abriu a negociação
Em vez disso, no mt4 isso não acontece, a regra de saída está ativa ao mesmo tempo em que a abertura.
 

 

 

Também acabei de descobrir esse problema com o SQ e o MT4.

 

Na SQ, a posição é aberta na abertura da barra e a posição é fechada no final da barra/abertura da barra seguinte. No MT4 (usando a precisão de cada tick), a ordem é aberta e fechada imediatamente na abertura da barra.

 

Portanto, no MT4 você não vê lucro, enquanto no SQ a lucratividade é muito boa. Os resultados são completamente diferentes.

 

Isso acontece em estratégias que têm uma regra de saída que é verdadeira ao mesmo tempo em que a regra de entrada é verdadeira, ou seja, abrir uma operação e fechar uma operação nessa barra. Parece que o SQ entende que isso significa abrir a operação na abertura da barra e fechar no final da barra, e a lógica do MT4 faz as duas coisas na abertura da barra.

 

O que é preocupante é que isso se aplica a muitas estratégias com regras de entrada e saída.....

0

mikeyc

Cliente, bbp_participant, comunidade, 877 respostas.

Perfil da visita

8 anos atrás #135653

Os testes iniciais mostram que você pode "corrigir" as estratégias do MT4 para que funcionem como no SQ, adicionando uma linha de código à função a seguir:

void closePositionAtMarket() {
   RefreshRates();
   double priceCP;

   Se (OrderType() == OP_BUY) {
      priceCP = Bid;
   } else {
      priceCP = Ask;
   }
   
   if(OrderOpenTime() >= Time[0]) return; // Nova linha de código! Sair se a ordem tiver acabado de ser aberta

   rettmp = OrderClose(OrderTicket(), OrderLots(), priceCP, MaxSlippage);
}

0

Gaudio Fx

Assinante, bbp_participant, comunidade, 22 respostas.

Perfil da visita

8 anos atrás #135655

 

Os testes iniciais mostram que você pode "corrigir" as estratégias do MT4 para que funcionem como no SQ, adicionando uma linha de código à função a seguir:

void closePositionAtMarket() {
   RefreshRates();
   double priceCP;

   Se (OrderType() == OP_BUY) {
      priceCP = Bid;
   } else {
      priceCP = Ask;
   }
   
   if(OrderOpenTime() >= Time[0]) return; // Nova linha de código! Sair se a ordem tiver acabado de ser aberta

   rettmp = OrderClose(OrderTicket(), OrderLots(), priceCP, MaxSlippage);
}

 

Estou muito feliz que finalmente alguém tenha percebido que o problema não estava no backtest do mt4, mas sim no STRATEGYQUANT.
Agora, se entendi corretamente, quando a estratégia terminar, para resolver o problema, preciso escrever no código da estratégia as cadeias de caracteres que você acabou de relatar... certo?
Mas em que ponto das linhas de código da estratégia devo inserir essa linha de scripts?
Você explicou melhor onde eu os coloquei?
 
Você é um gênio
 
muito obrigado

0

geektrader

Customer, bbp_participant, community, 522 replies.

Perfil da visita

8 anos atrás #135656

Sim, mas, na verdade, se você pensar bem, o SQ está fazendo isso errado no backtest, não o MT4. Se uma regra de abertura e fechamento for aplicada ao mesmo tempo, a ordem deverá ser aberta e fechada dentro de 2 ticks - tick 1 para abrir, tick 2 para fechar. Segurá-la por uma barra é, na verdade, menos válido do que fechá-la imediatamente, como faz o MT4. Portanto, na verdade, o código de backtesting do SQ deve ser ajustado para fechar a ordem imediatamente e para invalidar a estratégia dessa forma também, porque é isso que acontece, não é possível ter uma regra de abertura e fechamento aplicada no mesmo momento. Isso seria válido SE a estratégia TAMBÉM tivesse a opção de manter a negociação por pelo menos uma barra, então tudo bem, seu código MT4 acima estaria correto. Mas se as regras de abertura e fechamento forem válidas ao mesmo tempo, o que o SQ faz é exatamente o que é logicamente correto e como essa estratégia também funcionaria se fosse negociada manualmente. Por exemplo, as regras de ordem diriam: abra uma negociação se o fechamento anterior for maior que a abertura atual e feche-a se o fechamento anterior for maior que a abertura atual. O que você teria de fazer nesse caso para seguir as regras é abrir a ordem e fechá-la imediatamente - certamente não faz sentido, mas é exatamente isso que as estratégias que têm essas regras fazem também. Se ela dissesse: abra uma negociação se o fechamento anterior for maior que a abertura atual, mantenha pelo menos uma barra e feche-a se o fechamento anterior for maior que a abertura atual, então tudo bem, isso faz sentido.


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

mikeyc

Cliente, bbp_participant, comunidade, 877 respostas.

Perfil da visita

8 anos atrás #135658

Procure no arquivo mq4 por closePositionAtMarket()

 

Adicione a linha

 

se(OrderOpenTime() >= Tempo[0]) retorno; // Nova linha de código! Sair se a ordem tiver acabado de ser aberta

 

Onde eu o mostrei.

0

geektrader

Customer, bbp_participant, community, 522 replies.

Perfil da visita

8 anos atrás #135660

Sim, entendo perfeitamente o que você quer dizer, mas isso equivale a uma regra extra de "manter a negociação pelo menos uma barra antes de sair", o que não é uma regra no SQ para essa estratégia, como você diz, e, portanto, está LOGICAMENTE errada. Certamente sua correção faz o que você quer que ela faça, eu entendo isso, mas logicamente ela ainda não está correta. Se você tiver as mesmas regras de abertura e fechamento aplicadas ao mesmo tempo, para traduzir a lógica do SQ corretamente para o MT4, a ordem DEVE ser aberta e fechada dentro de 2 ticks se for exposta ao mercado real. Claro, SE você adicionar a regra extra de "manter pelo menos 1 barra", sua solução estará correta, mas como essa regra não está na estratégia original no SQ, não é correto fazer isso no MT4. É apenas uma questão de lógica e o SQ age corretamente aqui, não é um bug, mas exatamente como essas regras (sem a regra extra "hold trade at least 1 bar") agiriam na negociação real.


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

mikeyc

Cliente, bbp_participant, comunidade, 877 respostas.

Perfil da visita

8 anos atrás #135663

Estou apenas propondo uma solução para fazer com que o MT4 se comporte como o SQ. Ninguém precisa fazer isso, mas se quiser que a negociação ao vivo seja igual à do SQ, é necessário fazer isso.

0

Gaudio Fx

Assinante, bbp_participant, comunidade, 22 respostas.

Perfil da visita

8 anos atrás #135664

Procure no arquivo mq4 por closePositionAtMarket()

 

Adicione a linha

 

if(OrderOpenTime() >= Time[0]) return; // Nova linha de código! Sair se a ordem tiver acabado de ser aberta

 

Onde eu o mostrei.

okok...

 

Se eu quiser isso em um "ou" lógico e não em um "se", troquei o "se" por "ou"?

 

Por exemplo: or(OrderOpenTime() >= Time[0]) return; // Nova linha de código! Sair se a ordem tiver acabado de ser aberta

0

geektrader

Customer, bbp_participant, community, 522 replies.

Perfil da visita

8 anos atrás #135665

Estou apenas propondo uma solução para fazer com que o MT4 se comporte como o SQ. Ninguém precisa fazer isso, mas se quiser que a negociação ao vivo seja igual à do SQ, é necessário fazer isso.

 

Sim, no entanto, com o backtesting de dados de ticks, o SQ abre e fecha a ordem dentro de 2 ticks, assim como faz o MT4.


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Visualizando 15 respostas - 1 até 15 (de um total de 18)

1 2