Ajude a adicionar MaxTradesPerBar à EA - página 2

 
serpentsnoir:

megamixx,

Se você ainda estiver por aí, posso sugerir algumas mudanças de código que farão o que você está procurando. Avise-me se você ainda estiver interessado.

Em seguida, recompilar para ter certeza de que não há erros. Avise-me quando você tiver isto e eu colarei a próxima mudança.

Consegui e compilei com sucesso graças ao Sn.
 
megamixx:

Consegui e compilei com sucesso graças ao Sn.


ok, ótimo.

A seguir, há um bloco de código como este

int openPositions()
{
//... blah...
}

copiar o bloco inteiro, colá-lo logo após e renomeá-lo para OpenTradesOnThisCandle

Em seguida, recompilar para ter certeza de que não há erros.

Estou indo para o trabalho agora, para que você não tenha notícias minhas até mais tarde. Afixe as mudanças se você ficar preso.

 

Copiou este bloco e renomeou-o, agora ele se parece com isto:

int OpenTradesOnThisCandle( )
{ int op =0;
for(int i=OrdersTotal()-1;i>=0;i--) // escanear todos os pedidos e posições...
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() != MagicNumber) continue;
if ( OrderSymbol()==Symbol() )
{
if ( OrderType() == OP_BUY ) op++;
if ( OrderType() == OP_SELL ) op++;
}
}
return(op);
}

Espero ter feito tudo certo. Eu compilei e não recebi nenhum erro a não ser um aviso:

Afunção "OpenTradesOnThisCandle" não é referenciada e será removida do arquivo exp-file
0 erro(s), 1 aviso(s)

 

Bom. A mensagem é apenas um aviso, e irá embora em breve.

Agora mude a linha onde você vê MODE_TRADES para ser MODE_HISTORY na nova subrotina que você criou.

Agora, substitua ambos os dois se as declarações por OrderType() para este

if (OrderOpenTime() > Time[0]) op++;

Quando você tiver isso (e você receberá o mesmo aviso), compile-o para ter certeza de que está livre de erros.

 
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() != MagicNumber) continue;
if ( OrderSymbol()==Symbol() )
  1. O que são valores de retorno de função ? Como posso utilizá-los ? - Fórum MQL4
  2. Se houver alguma chamada do servidor no loop Você deve contar para baixo E verificar os códigos de retorno Loops e Encerramento ou Exclusão de Ordens - fórum MQL4
 

Esta é a aparência do bloco agora:

int OpenTradesOnestaVela( )
{ int op =0;
for(int i=OrdensTotal()-1;i>=0;i--) // escanear todos os pedidos e posições...
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
se (OrderMagicNumber() != MagicNumber) continuar;
if ( OrderSymbol()==Symbol() )
{
se (OrderOpenTime() > Time[0]) op++;
if (OrderOpenTime() > Time[0]) op++;
}
}
retorno(op);
}

Compilado, 0 erros, 1 aviso

 

Oi megamix,

Não leio o fio desde o início, no entanto ...

1. Use o botão SRC ao postar o código

2. O retorno de OrderSelect() ou é verdadeiro ou falso, portanto esta é a forma correta de escrever OrderSelect(),

int OpenTradesOnThisCandle( )
  { 
  int op =0;
  for(int i = OrdersTotal() - 1;i >= 0; i-- ) // scan all orders and positions...
    {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == true   // if order select is true ...
        && OrderMagicNumber() != MagicNumber                  // ... and magic number is our magic number ...
        && OrderSymbol()      == Symbol() )                   // ... and symbol is chart symbol
        { 
        if (OrderOpenTime() > Time[0]) op++;             
        if (OrderOpenTime() > Time[0]) op++; 
        }
    } 
    return(op);
  }

:D

 
onewithzachy:

Oi megamix,

Não leio o fio desde o início, no entanto ...

1. Use o botão SRC ao postar o código

2. O retorno de OrderSelect() ou é verdadeiro ou falso, portanto esta é a forma correta de escrever OrderSelect(),

:D


Obrigado pela dica sobre o código de lançamento. Faz sentido. Quanto ao ponto nº 2, vou adiar para sn enquanto ele me acompanha nas etapas e não quero atrapalhar seu processo. Muito apreciado!

 
megamixx:


Obrigado pela dica sobre o código de lançamento. Faz sentido. Quanto ao ponto nº 2, vou adiar para sn enquanto ele me acompanha nas etapas e não quero atrapalhar seu processo. Muito apreciado!


por enquanto, vamos manter isto simples. onewewithzacky está correto, que verificar os códigos de retorno é um bom hábito.

se (OrderOpenTime() > Time[0]) op++; <<=== isto só precisa estar lá uma vez. Portanto, tire um.

A próxima coisa a fazer é encontrar este código e duplicá-lo logo abaixo.

     if(TradesInThisSymbol > 0) 
     {
      return(0);
     }

Depois mude

(TradesInThisSymbol > 0)

para

(OpenTradesOnThisCandle() > MaxTradesPerCandle)

Em seguida, compilar - o erro deve ir embora.

 
serpentsnoir:


Por enquanto, vamos manter isto simples. onewewithzacky está correto, que a verificação dos códigos de retorno é um bom hábito.

se (OrderOpenTime() > Time[0]) op++; <<=== isto só precisa estar lá uma vez. Portanto, tire um para fora.

A próxima coisa a fazer é encontrar este código e duplicá-lo logo abaixo.

Então mude

(TradesInThisSymbol > 0)

para

(OpenTradesOnThisCandle() > MaxTradesPerCandle)

Em seguida, compilar - o erro deve ir embora.


Feito.

Eliminado duplicado se (OrderOpenTime() > Time[0]) op++;

e encontrou e mudou

(TradesInThisSymbol > 0)

para

(OpenTradesOnThisCandle() > MaxTradesPerCandle)

Muito obrigado por sua ajuda neste sentido.