Resposta

Função TrailingStop - questionável

5 respostas

Mike H.

Assinante, bbp_participante, comunidade, 76 respostas.

Perfil da visita

9 anos atrás #112526

Quando visualizei a função TrailingStop no Editor, percebi que o código era idêntico

tanto para o tipo de ordem BUY quanto para o tipo de ordem SELL.

 

Eu estava me perguntando por que minhas regras de TrailingStop para minhas negociações a descoberto não estavam sendo ativadas...

 

A seguir, mostramos como o Assistente de EA escreve a Função: (sublinhei os segmentos em questão) (observe os MagicNumbers diferentes)

 

double getOrderTrailingStop(int orderMagicNumber, int orderType, double price) {
   double value = 0;
   se (orderMagicNumber == 2456) {
      value = ( 11 * getPointCoef(orderMagicNumber));
      se (valor > 0) {
         if(orderType == OP_BUY || orderType == OP_BUYSTOP || orderType == OP_BUYLIMIT) {        
            valor = lance - valor;
         {} else {
            valor = Ask + valor;
         }
      }

 

O mesmo acontece com o OrderBreakEven:
   }
   Se (orderMagicNumber == 3798) {
      value = ( 11 * getPointCoef(orderMagicNumber));
      se (valor > 0) {
         if(orderType == OP_BUY || orderType == OP_BUYSTOP || orderType == OP_BUYLIMIT) {        
            valor = lance - valor;
         {} else {
            valor = Ask + valor;
         }
      }
   }
   return(NormalizeDouble(value, Digits));
}
 

O mesmo acontece com o OrderBreakEven:

 

double getOrderBreakEven(int orderMagicNumber, int orderType, double price) {
   double value = 0;
   se (orderMagicNumber == 2456) {
      value = ( 7 * getPointCoef(orderMagicNumber));
      se (valor > 0) {
         if(orderType == OP_BUY || orderType == OP_BUYSTOP || orderType == OP_BUYLIMIT) {
            valor = lance - valor;
         {} else {
            valor = Ask + valor;
         }
      }
   }
   Se (orderMagicNumber == 3798) {
      value = ( 7 * getPointCoef(orderMagicNumber));
      se (valor > 0) {
         if(orderType == OP_BUY || orderType == OP_BUYSTOP || orderType == OP_BUYLIMIT) {
            valor = lance - valor;
         {} else {
            valor = Ask + valor;
         }
      }
   }
   return(NormalizeDouble(value, Digits));
}
 

Prezado Mark, em vez de ter que esperar por uma atualização do Assistente do EA, você poderia me mostrar como fazer as alterações no Editor?

 

??? Alterar BUY para SELL e valor = ???

0

Mike H.

Assinante, bbp_participante, comunidade, 76 respostas.

Perfil da visita

9 anos atrás #126086

Caro Mark, eu não podia esperar, então já fiz as alterações necessárias...

 

   Se (orderMagicNumber == 3978) {
      value = ( 11 * getPointCoef(orderMagicNumber));
      se (valor > 0) {
         if(orderType == OP_SELL || orderType == OP_SELLSTOP || orderType == OP_SELLLIMIT) {
            valor = Ask + valor;
         {} else {
            valor = lance - valor;
 

   Se (orderMagicNumber == 3798) {
      value = ( 0 * getPointCoef(orderMagicNumber));
      se (valor > 0) {
         if(orderType == OP_SELL || orderType == OP_SELLSTOP || orderType == OP_SELLLIMIT) {
            valor = Ask + valor;
         {} else {
            valor = lance - valor;
 

 

As funções TrailingStop e BreakEven funcionam bem agora...

 

Mais tarde, Mike H.

0

Marca Fric

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

9 anos atrás #126096

Olá Mike,

 

Desculpe-me, mas euSe eu não estiver enganado, esses são funcionalmente equivalentes.

 

if(orderType == OP_SELL || orderType == OP_SELLSTOP || orderType == OP_SELLLIMIT) {
   valor = Ask + valor;
{} else {
   valor = lance - valor;

}

 

é funcionalmente o mesmo que:

 

if(orderType == OP_BUY || orderType == OP_BUYSTOP || orderType == OP_BUYLIMIT) {

   valor = lance - valor;
{} else {
   valor = Ask + valor;
}

 

A condição If reconhece se a ordem é de compra ou de venda e usa o valor apropriado. O que você fez foi alterar apenas a verificação, mas ela deve funcionar exatamente da mesma forma.

 

Portanto, se ele funcionar repentinamente, talvez tenha sido causado por algo diferente disso.

Marcar
EstratégiaQuant arquiteto

0

Mike H.

Assinante, bbp_participante, comunidade, 76 respostas.

Perfil da visita

9 anos atrás #126108

Olá, Mark. A primeira postagem deste tópico mostra como o Assistente de EA está gerando o código...

O Assistente de EA gera o código da seguinte forma:

 

double getOrderTrailingStop(int orderMagicNumber, int orderType, double price) {
   double value = 0;
   se (orderMagicNumber == 2456) {
      value = ( 11 * getPointCoef(orderMagicNumber));
      se (valor > 0) {
         if(orderType == OP_BUY || orderType == OP_BUYSTOP || orderType == OP_BUYLIMIT) {        
            valor = lance - valor;
         {} else {
            valor = Ask + valor;
         }
      }

 

O mesmo acontece com o OrderBreakEven:
   }
   Se (orderMagicNumber == 3798) {
      value = ( 11 * getPointCoef(orderMagicNumber));
      se (valor > 0) {
         if(orderType == OP_BUY || orderType == OP_BUYSTOP || orderType == OP_BUYLIMIT) {        
            valor = lance - valor;
         {} else {
            valor = Ask + valor;
         }
      }
   }
   return(NormalizeDouble(value, Digits));
}

 

O que vejo é que não há condição de VENDA... Os dois IFs são idênticos...

Acima está a forma como o Assistente de EA está escrevendo o código >>> IFs sublinhados idênticos para números mágicos diferentes...

0

Marca Fric

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

9 anos atrás #126147

Sim, mas a lógica está correta. Se a ordem for de compra, ela calcula o preço de uma forma; caso contrário (a ordem deve ser de venda), o preço é calculado de outra forma.

 

 

 if(orderType == OP_BUY || orderType == OP_BUYSTOP || orderType == OP_BUYLIMIT) {  

  Isso significa que é uma ordem de compra

  …

{} else {

  Isso significa que é uma ordem de venda

  …

}

 

Realmente não parece haver nenhum erro no EA, ele foi testado em ambos os lados.

Marcar
EstratégiaQuant arquiteto

0

Mike H.

Assinante, bbp_participante, comunidade, 76 respostas.

Perfil da visita

9 anos atrás #126157

Agora estou vendo e entendendo... Obrigado, Mark!!!

0

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