[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 749

 
artmedia70:
Desenvolvedores sábios. Se fosse possível chamar um roteiro, eu cobraria um deslize nele, mas você também não pode, aparentemente, porque não há necessidade de um monte de assessores de uma só vez... Não há uma saída fácil para nós :)
 

Cavalheiros programadores. Poderia me ajudar, por favor?

A partir das variáveis de entrada.

externo bool UseHourTrade = True;
externo int FromHourTrade = 0;
externo int ToHourTrade = 23;

int start(){
if (UseHourTrade){
if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
Comentário("Ainda não chegou a hora do comércio");
return(0);
}
}

Quero adicionar um segundo período de tempo quando o comércio deve ser feito com outras variáveis UseHourTrade2, FromHourTrade2, ToHourTrade2.

Por favor, me diga o que deve ser adicionado para iniciar a função. Eu tentei tantas coisas que não funcionam.

Quero agradecer antecipadamente a vocês. Eu não posso ajudar.

 
cyclik33:
extern bool UseHourTrade = True,
            UseHourTrade2 = True;
 extern int FromHourTrade = 0,
            FromHourTrade2 = 0,
            ToHourTrade = 23,
            FromHourTrade2 = 23;

int start(){
   if (UseHourTrade){
   if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
 Comment("Time for trade has not come else!");
 return(0);
 }
   if (UseHourTrade2){
   if (!(Hour()>=FromHourTrade && Hour()<=FromHourTrade2)) {
 Comment("Time for trade has not come else!");
 return(0);
 }
 }

Algo parecido, acho eu.

SZY O botão de inserção de código "SRC" é desajeitado de usar, não é fácil de ler.

 
Abzasc:

O enigma é este.

O indicador no final do código cria um objeto, que serve como uma bandeira para outro indicador.

Após criar o objeto, preciso "dormir" o indicador por 5 segundos, depois apagar o objeto e dormir por 60 segundos, após o que ele irá para a última tentativa e recomeçará do início com um novo tique.

Tentando fazer isso

Ela fica pendurada até parecer que o tempo está se esgotando.

Alguma dica de como fazer isso?


A lógica é esta - ambos os indicadores sabem o nome do objeto e um objeto adicional

o primeiro cria o objeto e não faz nada enquanto ele está lá - logo no início do início escrevemos a condição de saída (retorno;)

o segundo lê o objeto, faz seus negócios e estabelece um objeto adicional

o primeiro, sem ver o objeto principal, deixa de fazer nada e imediatamente encontra o segundo (objeto adicional), lê o tempo de criação do objeto (ele é inserido lá pelo segundo componente na descrição ao criar), conta a pausa necessária (60 segundos) e apaga todos os objetos - você pode continuar trabalhando ....

 
Abzasc:
Não funciona em indicadores. Não entendo a razão de fazê-lo desta maneira. Aparentemente, um indicador de trabalho constante deve ser hipnotizante :)

A razão é que o indicador funciona no fluxo da interface, você não pode colocá-lo para dormir, porque se você pudesse "desacelerá-lo", naquele momento você não poderia pressionar nenhum botão no terminal, por exemplo "Nova ordem", ou fechar uma ordem, etc.
Uma outra sutileza neste tópico diz respeito ao testador. No terminal real, há vários fios, um fio de interface é criado separadamente para os Expert Advisors (por isso pode ser desacelerado sem consequências) e no testador, é o mesmo para todos, e todos para um :)
É por isso que a função Sleep() funciona de forma tão específica no modo teste. Se você colocar o fluxo do testador para dormir, então tudo deixará de funcionar, incluindo os Expert Advisors, indicadores e geração de carrapatos, é claro. Portanto, se eu entendi sua idéia corretamente, ela só pode ser testada em uma demonstração. Se você quiser retardar o fluxo da interface, você pode usar a seguinte função:

//+------------------------------------------------------------------+
//| MySleep function                                                 |
//+------------------------------------------------------------------+
void MySleep(int sec){
   int pause = TimeSeconds(TimeLocal()) + sec;
   if(pause >= 60)pause = pause - 60;
   while(TimeSeconds(TimeLocal()) != pause){}
}
//+------------------------------------------------------------------+
 
xrust:


conta para baixo a pausa desejada (60 seg)

Você pode tentar, mas o importante é como fazer uma pausa... Estou preso a este aqui.
 

Leia atentamente, eu expliquei tudo, e não é necessário usar um objeto gráfico, você pode fazer com globals....

 
ToLik_SRGV:

A razão é que o indicador funciona no fluxo de interface, não pode ser colocado para dormir...

Aí está... agora está mais leve, obrigado.


Homem, o que é demais. Não pode colocá-lo em um indicador, não pode colocá-lo para dormir... Vou tentar fazer isso com variáveis globais.
 
xrust:

Leia atentamente, já expliquei tudo, e não é necessário usar um objeto gráfico, você pode fazer com globals....

Acho que entendi. A eliminação por tempo de existência também é um temporizador. Mas vou reler mais uma vez:)
 
Abzasc:

... Vou tentar fazer com que funcione com variáveis globais.

Acho que Rustam insinuou isso corretamente, porque o congelamento de fios é a última coisa que você deve fazer, é uma medida extrema, e não apenas em MQL, mas em todas as linguagens de programação.