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

 

Quando se trabalha com números do tipo duplo, quando se precisa atribuir algum valor a uma variável (por exemplo, zero), autores diferentes têm ortografias diferentes. Por exemplo, a=0; ou a=0,0; ou a=0,0000; Existe alguma diferença em termos de operação correta do programa?

 

se ((OrderSymbol()==Symbol()) && ((OrderMagicNumber()==44) ||| (OrderMagicNumber()==55)) && (ticket==0)){

OrderDelete(OrderTicket());

int err1=GetLastError();

Imprimir(err1);}

Este pedaço de código está funcionando bem desde recentemente...agora um erro ERR_OFF_QUOTES é devolvido. Favor observar que o erro é devolvido pela OrderDelete, mesmo que o número do bilhete seja inserido manualmente. Alguém pode esclarecer a situação? Obrigado.

 
Elenn:

Quando se trabalha com números do tipo duplo, quando se precisa atribuir algum valor a uma variável (por exemplo, zero), autores diferentes têm formas diferentes de escrevê-la. Por exemplo, a=0; ou a=0,0; ou a=0,0000; Existe alguma diferença em termos de operação correta do programa?


Não, não há regra. Mas pessoalmente, prefiro escrever valores duplos constantes usando um ponto.

Por exemplo:

if ( a == 1.0 )
{}

// ...

b = 3.0;

Primeiro, uma rápida olhada no texto mostra que o tipo de valor é o dobro.

Em segundo lugar, evita alguns erros. Compare:

double a=2/3;
double b=2.0/3.0;

Print("a=",a," b=",b);
 

Por favor, ajude. Não quer executar o código:

int start()
{
int pre12;
{
if(PREÇO_CLOSE>PREÇO_OPEN)
pre12=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,"",Bid-100*Point,Ask+100*Point,CLR_NONE);
}
retornar;

}

Isto é, como pretendido, se a vela estiver ascendente - aberta.

Tudo se compila. Mas nada acontece durante o teste. Isto é, não faz nenhum pedido. Faça um buraco no erro, por favor...

 
NaVolne:

Por favor, ajude. O código não quer executar:

int start()
{
int pre12;
{
if(PRICE_CLOSE>PRICE_OPEN)
pre12=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,"",Bid-100*Point,Ask+100*Point,CLR_NONE);
}
retornar;

}

Ou seja, se a vela está subindo, ela se abre.

Tudo se compila. Mas nada acontece durante o teste. Isto é, não faz nenhum pedido. Por favor, basta apontar o dedo para o erro.

Que candelabro é o candelabro atual na tabela? O candelabro do dia anterior? O candelabro da semana anterior? Se for o candelabro do dia anterior, por exemplo... pareceria assim

if(iOpen(NULL,1440,1)<iClose(NULL,1440,1)) a ajuda iOpen/iClose descreve claramente tudo

 
NaVolne:

Por favor, ajude. Não quer executar o código:

int start()
{
int pre12;
{
if(PREÇO_CLOSE>PREÇO_OPEN)
pre12=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,"",Bid-100*Point,Ask+100*Point,CLR_NONE);
}
retornar;

}

Isto é, como pretendido, se a vela está subindo, ela se abre.

Tudo se compila. Mas nada acontece durante o teste. Isto é, não faz nenhum pedido. Faça um buraco no erro, por favor...

A questão é que PRICE_CLOSE e PRICE_OPEN são constantes, não funções e não conjuntos de séries temporais. Para obter os valores dos preços de abertura e fechamento dos castiçais, precisamos nos referir a funções(iOpen e iClose) ou conjuntos de séries de tempo(Open e Close).

Para saber mais, leia o tutorial, por exemplo, esta seção explica as variáveis pré-definidas (que incluem as séries de tempo que você deseja, Abrir e Fechar).

 
Elenn:

Quando se trabalha com números do tipo duplo, quando se precisa atribuir algum valor a uma variável (por exemplo, zero), autores diferentes têm ortografias diferentes. Por exemplo, a=0; ou a=0,0; ou a=0,0000; Há alguma diferença em termos de operação correta do programa?

Eu entendo que no caso de

double a = 1;

O compilador toma "1" como um valor do tipo int e a conversão do tipo é realizada (int para tipo duplo alvo).

E em caso de:

double a = 1.0

ou (não há diferença)

double a = 1.0000

o compilador vê "1.(xxxx)" como um valor do tipo duplo e a conversão do tipo não é realizada.


P.S.: Graças ao PapaYozh pelo exemplo. Os pensamentos acima vieram depois disso.

Acho que é mais fácil para o compilador quando ele não cita os tipos muitas vezes. Ou talvez haja linhas com tipos "não convertidos" no ex4 também? Isso significa que o desempenho está diminuindo? Embora o compilador seja suposto otimizar o código.

Deixe que os programadores mais experientes da MQL4 me corrijam.

 
Obrigado pelas mega respostas. Leitura, escavação.
 
NaVolne:
Obrigado pelas mega respostas. Leitura, escavação.
Você deve ler o livro didático, não nossas respostas! :)) De crosta a crosta, naturalmente.
 
LexAlex:

Este código funcionou bem até recentemente...agora o erro ERR_OFF_QUOTES é devolvido. Favor observar que o erro é devolvido pela OrderDelete, mesmo que o número do bilhete esteja escrito à mão. Alguém pode esclarecer a situação? Obrigado.

Talvez esteja no nível de congelamento. Talvez algo esteja errado com a conta e o corretor tenha interrompido o fluxo devido a transações freqüentes na conta.
Razão: