[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 369

 

Estou testando uma EA e minha função Sleep() não está funcionando

Quero que meu consultor especializado congele por muito tempo depois que o pedido for fechado, mas ele continua fazendo falsas aberturas no lugar.


bool cl() {if (OrderSelect(0,SELECT_BY_POS)==verdadeiro){ int t=OrderType();
double l=OrderLots();
int tik=OrderTicket();Alert("tik=", tik);
}
if (t===OP_BUY) OrderClose(tik,l,Bid,3,Red);
if (t===OP_SELL) OrderClose(tik,l,Ask,3,Green);
Sleep(300000000);
}

 

Dormir não funciona no testador.

 

Eu gostaria de saber se é possível para meu consultor especializado reagir à mudança de cor indicadora, digamos verde-compra-venda-vermelho

e na aparência de diferentes ícones na tela ... talvez haja uma característica no MT4 ?

 
unumi >> :

Eu gostaria de saber se é possível para o consultor especializado reagir a uma mudança da cor do indicador, digamos verde-compra-venda-vermelho

E o aparecimento de diferentes ícones na tela...talvez haja uma função no MT4 ?

Se o indicador mudar de cor, então ou a) sua linha é traçada em buffers diferentes, então é suficiente pesquisá-los para entender o estado (no MT4 a cor do buffer dinâmico não pode ser alterada, ao contrário do MT5), ou b) a linha do indicador é traçada por objetos de grade - então você só precisa ler o ObjectGet(....).

O mesmo se aplica aos ícones - eles podem ser emitidos como código através de um buffer ou como objetos.

 
Svinozavr >> :

Se o indicador mudar de cor, então ou a) sua linha é exibida por buffers diferentes e é suficiente para sondá-los para entender o estado (em MT4 a cor do buffer não pode ser alterada dinamicamente, ao contrário do MT5), ou b) a linha indicadora é exibida por gr.objects - então basta ler as propriedades ObjectGet(....).

O mesmo para os ícones - eles podem ser desenhados como um código usando o buffer, ou como objetos.

>> Obrigado, eu peguei.

 

Boa noite.

Você pode me aconselhar, eu tenho duas perguntas relacionadas.

1. Como zerar os elementos da matriz em cada tick (se necessário, de acordo com o exemplo).

2. Como somar corretamente os valores dos elementos da matriz.

Por exemplo:

Em cada tick os elementos da matriz são preenchidos, pode preencher 1 ou 2 ou 3 ou 4.... ou 15 elementos,

mas cada vez que eu preciso da soma aritmética dos valores dos elementos da matriz.

 
gvi2504 писал(а) >>

Boa noite.

Você pode me aconselhar, eu tenho duas perguntas relacionadas.

1. Como zerar os elementos da matriz em cada tick (se necessário, de acordo com o exemplo).

2. Como somar corretamente os valores dos elementos da matriz.

Por exemplo:

Em cada tick os elementos da matriz são preenchidos, pode preencher 1 ou 2 ou 3 ou 4.... ou 15 elementos,

mas cada vez que eu preciso da soma aritmética dos valores dos elementos da matriz.

1. Função ArrayInitialize(ArrayName,0).

2. No preenchimento imediato da soma da matriz, declare uma variável, por exemplo, soma, atribua um valor 0 a ela e, no preenchimento da matriz, acrescente um valor a esta variável.

 
Integer >> :

1. Função ArrayInitialize(ArrayName,0).

2. Conforme o array está sendo preenchido, somar imediatamente. Declarar uma variável, como soma, atribuir-lhe um valor 0, depois adicionar um valor a esta variável conforme o array está sendo preenchido.

Ótimo.

Exatamente o que você precisa. >> Muito obrigado.

 
Bion писал(а) >>

Dormir (300000000);

Um sono tão longo não é uma opção, mesmo se o Sleep() funcionasse no testador. Depois de aberto, o tempo pode ser memorizado:

LastTime=TimeCurrent();

No início da função start(), verifique:

if(TimeCurrent()<LastTime+Pause)return(0);

Pausa - tempo de "dormir" após a abertura (em segundos).

 
Integer писал(а) >>

Um sono tão longo não é uma opção, mesmo se o Sleep() funcionasse no testador. Após a abertura, você pode se lembrar da hora da abertura:

LastTime=TimeCurrent();

No início da função start(), verifique:

if(TimeCurrent()<LastTime+Pause)return(0);

Pausa - tempo de "dormir" após a abertura (em segundos).

Eu fiz o que você me aconselhou.

data/hora LastTime;
data/hora Pausa=3600;

int start()
{
if(TimeCurrent()<LastTime+Pause)return(0);

...

bool cl() {if(OrderSelect(0,SELECT_BY_POS)==verdadeiro){ int t=OrderType();
double l=OrderLots();
int tik=OrderTicket();Alerta("tik=", tik);
}
if (t===OP_BUY) OrderClose(tik,l,Bid,3,Red);
se (t===OP_SELL) OrderClose(tik,l,Ask,3,Green);
LastTime=TimeCurrent();
}

No entanto, no testador, a ordem abre de acordo com a condição, mas não reage ao tempo.

Além disso, o testador não mostra nenhuma reação ao parâmetro "tempo de existência da ordem pendente", ou seja, a ordem não é apagada quando chega a hora de apagá-la.

É suposto ser assim?

Como podemos fazer o testador considerar o tempo decorrido desde que o pedido foi fechado?