Resposta

alteração do valor dos parâmetros

3 respostas

chengsmine

Assinante, bbp_participant, comunidade, 42 respostas.

Perfil da visita

10 anos atrás #111615

Tenho um valor inicial de um determinado parâmetro DS definido como 5 (entrada) quando o EA é iniciado. Após o fechamento de algumas negociações, DS é aumentado para 10. Mas parece que esse novo valor não substituiu o valor original de DS quando o EA é reiniciado. Por exemplo,

Entrada: DS=5;

 

Regra 1:

PU= Abrir (0) + ConvetToRealPips(DS)

 

Depois de muitas regras:

Fechar todos os pedidos

DS=DS+5

 

Portanto, o novo valor de DS agora é 10, mas descobre-se que DS ainda é <=5 na Regra 1 quando o EA é reiniciado (retorna à Regra 1).

 

Por quê? Existe uma solução para esse problema?

 

0

Marca Fric

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

10 anos atrás #122729

Quando você reiniciar um EA, ele esquecerá todos os valores armazenados na memória e usará novamente os valores padrão.

Não há uma solução fácil para isso, simplesmente funciona assim.

 

A única maneira de manter alguns valores anteriores à reinicialização do EA seria salvá-los em um arquivo e depois carregá-los novamente.

 

Por exemplo, se você usa tamanhos diferentes em cada pedido, pode usar o tamanho do pedido real para reconhecer qual valor de DS foi usado na última vez.

 

Marcar

Marcar
EstratégiaQuant arquiteto

0

chengsmine

Assinante, bbp_participant, comunidade, 42 respostas.

Perfil da visita

10 anos atrás #122733

Como é possível lembrar o tamanho do último pedido, já que você mencionou acima que todos os valores armazenados na memória são apagados quando você reinicia um EA?

0

Marca Fric

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

10 anos atrás #122751

você não consegue se lembrar do valor do último pedido, mas pode obtê-lo no histórico de pedidos.

 

Basta adicionar essa função ao final do arquivo {EA Wizard}/code/CustomFunctions.mq4:

 

double sqGetLastPositionSize(int orderMagicNumber) {
   for(int i=OrdersHistoryTotal(); i>=0; i-) {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==verdadeiro && OrderSymbol() == Symbol()) {
         Se (orderMagicNumber == 0 || OrderMagicNumber() == orderMagicNumber) {
            return(OrderLots());
         }
      }
   }
 
   return(0);
}

 

Em seguida, você pode usá-lo nas condições chamando a função personalizada: sqGetLastPositionSize(YourMagicNumber)

 

Marcar

Marcar
EstratégiaQuant arquiteto

0

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