Erros, bugs, perguntas - página 849

 
Heroix:

Isto são 2 terminais em 1 computador. A todas as sugestões do terminal para actualizar - respondo "sim".

O ficheiro foi transferido para flash a partir de outro computador como .mql5, aberto e compilado por diferentes editores de dois terminais.

De qualquer forma, tal como entendi, preciso de actualizar o MT...

Se estiver a actualizar manualmente, também precisa de transferir a pasta /MQL5, porque esta contém um número enorme de bibliotecas padrão que está a utilizar.

Uma vez que apenas transferiu os executáveis e o seu código fonte como um ficheiro mq5, cometeu um erro.

 
OrderLots() e iClose o mais possível em MQL 5???
 

Actualizado para bild 695. Um erro começou a aparecer ao compilar o Object.mqh.


 
denkir:

Actualizado para bild 695. Um erro começou a aparecer ao compilar o Object.mqh.

Actualizou automaticamente ou apenas moveu os ficheiros?

Se o fez automaticamente, ao armazenar ficheiros em UserData, copie o directório /MQL5 da raiz do programa para o directório de dados (pode abri-lo a partir do menu File).

 
Aos promotores

O que aconteceu ao calendário económico, será que existe?

Pergunta adicional: Em que dados se baseou e como pode ser "ligado" ao CD?

 
papaklass: Os dados não coincidem, mas deveriam, porque o segundo e o terceiro casos são partes separadas da primeira condição. Não consigo compreender qual é o problema.

Esta é a condição

if( mn < STP || mn >= STP )

- A sua redacção está redigida desta forma por que razão? Tal como está, funcionará para qualquer mn e STP. Porque é que precisamos mesmo de o introduzir? E as duas opções seguintes - há um corte específico de certas situações.

Mas tudo parece ser lógico: um + dois == tri (sem entrar em detalhes dos cálculos um, dois e três) em todas as três variantes.

 
papaklass:

É disso que estou a falar. Quero dividir o espaço comum (caso 1) em dois grupos (casos 2 e 3). Logicamente, a expressão um + dois == tri deveria ser verdadeira, mas não é. Na primeira condição um=148, e na segunda 172. Também não é um jogo para dois e para três. Não sei qual é o problema.

Talvez o problema esteja numa condição comum? Este código depende de alguma outra coisa?

Apenas um exemplo trivial:

condição (a): aberto se o bar em H1 subir. TP=SL=100

condição (b): Aberto se a barra em H1 diminuir. TP=SL=100

Condição adicional: não verificamos as condições pela segunda vez, se já tivermos uma posição.

Depois, se activarmos (a) mais (b), abriremos sempre que TP/SL for activado.

se incluirmos (a) abrimos em todas as primeiras vezes mais (!!!!) mais algumas vezes quando não abrimos porque abrimos antes com condição (b)

e para incluir apenas a condição (b) de forma semelhante

 
papaklass: Logicamente, a expressão um + dois == tri deveria estar correcta, mas não funciona para mim.

Olhe mais de perto: esta é exactamente a comparação (um + dois == tri) que é feita, para cada uma das opções.

Papaklass: Na primeira condição um=148, e na segunda 172.

Bem, esta é uma questão diferente, nomeadamente, porque é que o valor de uma da primeira variante não é igual ao valor de uma da segunda e terceira variantes.

Está a introduzir uma condição restritiva na segunda e terceira variantes, em comparação com a primeira variante. Considerar, por exemplo, porque é que na segunda variante o valor de um aumenta em comparação com a primeira variante. A parte citada do código não é clara até agora.

 
papaklass:

Para o posto anterior.

No terceiro caso: um=0, dois=124, tri=124.

Os dados não coincidem, mas deveriam, porque o segundo e terceiro casos são partes separadas da primeira condição. Não consigo compreender qual é o problema.

PS: entrada em STP=200;

Resultado correcto com conjunto de dados em mudança, desde o espaço mn<STP que excluiu.

if( /*mn < STP || */ mn >= STP ){
 
papaklass: Nos meus exemplos, faço apenas a amostragem:

1. Escolho espaço2 (um) e espaço3 (dois); 230 = 148 + 82, ou seja, espaço2 (um) = 148 e espaço3 (dois)=82.

2. ... Deveria permanecer 148, e tornou-se 172.

3. ... Deve permanecer 82, e passa a 124.

É disso que estou a falar: a questão para si éporque é que o valor de uma da primeira opção não é igual ao valor de uma da segunda e terceira opções.

Os valores dos espaços2 e espaço3 devem ser constantes, porque as condições de obtenção destes espaços são as mesmas nos três exemplos que dei nos posts anteriores.

Para encontrar um erro nesta suposição lógica, sugiro fazer muito simplesmente: imprimir cada caso de "espaçosX" crescentes nas três variantes, comparar resultados e analisar por que razão "valores de espaços2 e espaços3" não são os mesmos.

Adenda. ilunga já deu a entender que algumas transacções podem ser perdidas quando se passa de uma variante para outra. Tem uma função/método killer OpenPosition() incorporada no corpo do operador if(). E funciona em tempos diferentes, dependendo da condição verificada pelo operador do if().