[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 307

 
drknn:

Como a condição não é uma disjunção estrita (e é sempre verdade se pelo menos 1 elemento for verdadeiro), a maneira mais lógica de lidar com esta condição seria primeiro dividir a molécula(a>b || c>d) em átomos "a>b" e "c>d", e depois fazer um loop através de átomos sequencialmente para verificar a verdade. E se o próximo átomo for verdadeiro, então rompa imediatamente o laço, permitindo que o programa faça a ação que está logo após os parênteses - ou seja, não procurar através do resto dos átomos, porque não é necessário. E não importa se procuramos do início ao fim ou do fim ao início da lista de átomos criada. Somente o desenvolvedor pode lhe mostrar a direção da busca (metacotas). Mas por que você precisa disso? Você está escrevendo seu próprio compilador?
Ocorreu-me: se na condição lógica TC a>b é verdade muito mais vezes do que c>d===verdade, então pode importar a ordem de verificação da verdade dessas duas condições para acelerar o programa
 
artmedia70:
Ocorre-me: se na condição lógica TC a>b é verdade muito mais vezes do que c>d===verdadeiro, então pode importar como verificar a verdade dessas duas condições para acelerar o programa

Na verdade, a expressão é assim: if(a>b ||| (a<=b && c>d))). Se a verificação da verdade for realizada da esquerda para a direita, a expressão a<=b será supérflua do ponto de vista da velocidade do programa. A questão era exatamente se é da esquerda para a direita ou vice-versa, ou diferentemente em casos diferentes.
 
AndEv:

Na verdade, a expressão é assim: if(a>b ||| (a<=b && c>d))). Se a verificação da verdade for realizada da esquerda para a direita, a expressão a<=b será supérflua do ponto de vista da aceleração do programa. A questão era apenas se é da esquerda para a direita ou vice-versa, ou diferentemente em casos diferentes.

Você pode explicar a razão pela qual a EA não abre pedidos e escreve erros 133
 
paladin80:

É necessário comparar o tempo de abertura da posição com o tempo de abertura da barra atual [0]. Se o tempo de abertura de uma posição for maior ou igual ao tempo de abertura do bar - o Expert Advisor não abre novas posições. Quando uma nova barra aparece, o Time[0] mudará seu valor para um tempo posterior e esta comparação mostrará que a posição ainda não foi aberta na barra atual (nova) e podemos negociar.

A propósito, sua pergunta também pode ser dividida em 2 sub-questões:
1. No bar atual, uma posição foi aberta e conseguiu fechar, mas ainda estamos esperando por um novo bar.
2. Na barra atual uma posição foi aberta e conseguiu fechar, então podemos abrir uma posição novamente na mesma barra (ou seja, uma posição pode ser aberta na mesma barra simultaneamente).

ou seja, em uma e mesma barra a condição para abrir uma posição se torna Verdadeiro por alguns minutos e a posição é aberta. depois se torna Falso e depois Verdadeiro novamente e uma segunda posição é aberta. como lidar com isso? eu só pensei em abrir uma posição uma vez por barra talvez haja outras opções?
 
O que é dissuasor? É como "parar de falar"?
 
GarKain:
tenho um problema com isso: em um e mesmo bar por alguns minutos a condição para abrir um pedido se torna verdadeira e o pedido se abre. então ele falha e novamente abre um segundo pedido. como posso combater isso? só tentei abrir um pedido uma vez por bar talvez haja outras opções?

Vejo que você está usando uma bandeira que permite/desembarca a abertura de uma posição. Sem conhecer a condição para a bandeira, é impossível dizer-lhe algo. Em minha EA eu uso 2 abordagens ao abrir uma posição e posso oferecer o seguinte código:

if (OrdersTotal()>0)
{  for (i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderSymbol()==Symbol())
         {  if (OrderMagicNumber()==MagNum) // Проверка соответствия позиции по магик-номеру
            {  Closed_bar=OrderOpenTime();
               if (Closed_bar>=iTime(NULL,PERIOD_H1,0))
               return(0);
         }  }
}  }  }
 
moskitman:
O que é dissuasor? É como "parar de falar"?

Aplicando um filtro passa-baixo a uma série == subtraindo o componente tendência (inclinação). o exemplo mais simples: aplicar um silenciador ao preço, e depois mostrar a diferença em uma janela separada.
 
paladin80:

Vejo que você está usando uma bandeira que permite/desembarca a abertura de uma posição. Sem conhecer a condição para a bandeira, é impossível dizer-lhe algo. Em minha EA eu uso 2 abordagens ao abrir uma posição e posso oferecer o seguinte código:



if (OrdersTotal()>0)
{  for (i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderSymbol()==Symbol())
         {  if (OrderMagicNumber()==MagNum) // Проверка соответствия позиции по магик-номеру
            {  Closed_bar=OrderOpenTime();
               if (Closed_bar>=iTime(NULL,PERIOD_H1,0))
               return(0);
         }  }
}  }  }

Eu não entendo bem o que vai de onde e para onde.

 
Tenho-o escrito assim:

se isto e aquilo, então é "igual a".

Se for igual a "Verdade", então a ordem se abre.



Se eu escrever se isto e aquilo, a ordem abre. isto vai resolver o problema?

 
AndEv:
Na verdade, a expressão é assim: if(a>b ||| (a<=b && c>d))). Se a verificação da verdade for realizada da esquerda para a direita, a expressão a<=b será supérflua do ponto de vista da aceleração do programa. A questão era exatamente se é da esquerda para a direita ou vice-versa, ou diferentemente em casos diferentes.
Nesse caso, é preciso criar ses aninhados. Na MQL4, a ordem não é clara. Na MQL5, ele é da esquerda para a direita como deveria ser.