Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 364

 
bercut0077:
Bom dia, há um indicador, mas no testador após um certo período do início do ano até março funciona e depois deixa de dar sinais, e eu preciso testar um longo período (AuthorizedSSBODynamicBreakoutBoxFinalEdition), onde no código pode estar essa limitação - por favor, pelo menos dê uma pista de onde cavar, quais operadores a determinam?
Por vezes, há falhas. Ele simplesmente pára de desenhar a caixa. Não há restrições em nenhum lugar. Teste o potikovo. Às vezes ajuda.
 
Sepulca:
Você tem o código fonte do indicador? Caso contrário, procure o autor))))

Eu tenho o código fonte - é uma bagunça.
 
Não, então eu nem vou tentar. Às vezes você se perde em seu próprio código, muito menos no de outra pessoa))))
[Excluído]  

Como me dizer, por favor, algum Expert Advisor comprovado em MQL4 e 5, e o tempo é muito curto, às vezes você precisa verificar uma idéia ou ajudar alguém a finalmente criar uma base para o robô e terminar de escrevê-la você mesmo ...

Eu ficaria grato, obrigado de antemão!!! =)

[Excluído]  
vadynik:

Estou escrevendo uma função como esta

Mas por que a OrderOpenPrice() retorna o preço arredondado para quatro dígitos nos cinco dígitos?


int i, k=OrdersTotal();

  for (i=k-1; i>=0; i--) 
   {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {                
       if ((OrderType()==OP_BUY)&&(OrderOpenPrice()>=Ask-350*Point)&&(OrderMagicNumber()==Magic)||(OrderType()==OP_BUY)&&(OrderOpenPrice()<=Ask+250*Point)&&(OrderMagicNumber()==Magic))
         {
           double o=OrderOpenPrice();
           Print(o);
           OrderClose(OrderTicket(),OrderLots(),Bid,50,Blue); 
         
      }
    }
  }
Tente fazer isso e veja o que a OrderOpenPrice() realmente retorna, talvez a razão seja que você normaliza a função com o parâmetro Dígitos e você vê na impressora não o que ela realmente é.
 
vadynik:

Estou escrevendo uma função como esta

Mas por que o OrderOpenPrice() retorna o preço arredondado para quatro casas decimais?

A impressão não retorna um preço arredondado, neste caso, ela simplesmente produz o número padrão de casas decimais.
Na verdade, o Forex não funciona com casas decimais inferiores a dígitos. Em geral, o exemplo do EURSD mostra apenas quatro casas decimais.

Mas no seu caso é melhor fazê-lo: Print(DoubleToStr(OrderOpenPrice(),Digits));

 
Ekburg:

Tente fazer isso e veja o que a OrderOpenPrice() realmente retorna, talvez a razão seja que você normaliza a função com o parâmetro Dígitos e você vê na impressora não o que ela realmente é.

É o mesmo sem normalização, eu preciso subtrair pontos do preço de abertura, se for o caso o preço é o que eu preciso, mas então eu recebo um descasamento de tipo no IF(
Print(DoubleToStr(OrderOpenPrice(),Digits));
[Excluído]  
vadynik:

Preciso subtrair pontos do preço de abertura e, se for o caso, o preço é o que eu preciso, mas depois recebo um desajuste de tipo no IF (

Faça cálculos em quatro dígitos. Se a precisão for importante para você, então coloque-a de volta com o valor do último dígito, pois ela não muda durante os cálculos, devido à natureza dos cálculos.
 
Ekburg:

Faça cálculos como para quatro dígitos, e se a precisão for importante para você, então devolva-o no lugar, com o valor do último dígito que foi anterior, porque não muda durante os cálculos, devido às especificidades dos cálculos.
A normalização é necessária somente em Orderend, Orderclose etc. Bem e ainda na comparação de valores reais e em impressoras especificam qualquer quantidade de sinais após um ponto decimal. Mas se você apenas escrever Print(whatever_double_value), geralmente imprimirá quatro casas decimais. Portanto, a maneira correta de fazer isso é escrever
Print(DoubleToStr(OrderOpenPrice(),Digits));

Como já mencionado, primeiro converta duas vezes para string com número especificado de casas decimais e depois imprima-o em log usando Print....
 
E se forem calculados pontos, não confundi-los com pontos. Diga duplo SPRED= pontos de SPRED=(Ask-Bid)/pontos de SPRED.