[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 98

 

Kim tem uma função:

//+------------------------------------------------------------------+
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    hb - часы времени начала торговли                                       |
//|    mb - минуты времени начала торговли                                     |
//|    he - часы времени окончания торговли                                    |
//|    me - минуты времени окончания торговли                                  |
//+----------------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0, int mb=0, int he=0, int me=0) {
  datetime db, de;           // Время начала и окончания работы
  int      hc;               // Часы текущего времени торгового сервера

  db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+hb+":"+mb);
  de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+he+":"+me);
  hc=TimeHour(TimeCurrent());
  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  }

  if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);
} 

Tenho duas perguntas:

1. Por que ele traduz o tempo para um fio de uma vez e depois o fio para um tempo?

2. Por que esta condição na função?

  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  }

Porque verificando o tempo abaixo... Aqui mesmo:

if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);

E nos parâmetros de função, as variáveis de tempo não são do tipo data/hora, mas int por alguma razão...

 
Ha, eu descobri. A questão é que o arquivo que eu estava trabalhando na edição foi aberto de um pen drive ontem. O texto está aberto, tudo está bem, mas eu não liguei o pen drive hoje. Não entendo o que quero compilar, tenho texto, mas simplesmente não tenho acesso a ele para edição. Acontece.
 
hoz:

Kim tem uma função:

Tenho duas perguntas:

1. Por que ele traduz o tempo para um fio de uma vez e depois o fio para um tempo?

2. Por que esta condição na função?

Porque verificando o tempo abaixo... Aqui mesmo:

E nos parâmetros de função, as variáveis de tempo não são do tipo data/hora, mas int por alguma razão...


1. Para substituir os valores atuais de hora e minuto no tempo pelos valores especificados nos parâmetros de função

Eu o faria desta maneira:

db=TimeCurrent()-TimeCurrent()%86400+hb*3600+mb*60;

2. Para corrigir adicionalmente as datas de início ou término por dia

data e int são essencialmente a mesma coisa, e os parâmetros não são datas completas, mas apenas o número de horas e minutos

 
MikeM:


2. Para correção adicional de datas de início ou fim por dia

Por quê? Precisamos limitar o tempo de negociação da EA. E não estamos interessados no tempo desde a hora em que o tempo de negociação termina até a hora em que começa o tempo de negociação, porque a EA não negocia nesse momento! Eu não entendo o que são NONSENSES...

MikeM:

A data e a int são essencialmente a mesma coisa, e os parâmetros não são as datas completas, mas apenas o número de horas e minutos

Mas o tempo deve ser tempo, como não há diferença?
 
hoz:


Mas o tempo deve ser tempo, como não pode haver diferença?


O tempo é um número, e um número inteiro.
 
Vinin:

O tempo é um número, e é um número inteiro.


Entendo o que quero dizer com tempo - não é uma data, é por isso que é declarado como um número. Mas e daí?

  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  }

Por mais variantes que eu tenha visto, nunca vi nada como isto. É estranho de alguma forma. Além disso, não há ciclo aqui, e menos e mais o tempo do início e do fim do comércio. Eu não entendo este ponto.

Na verdade, temos os tempos de início e fim da db e de comércio acima. Portanto, esta peça pode ser apagada, e então verificaremos o tempo:

  if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);

Qual é o objetivo de escrever um código extra? Por favor, explique este ponto. Na verdade, não é lógico.

 
hoz:


Se não usarmos minutos, podemos simplificá-lo. Entendo o que queremos dizer com tempo - não é data, nós declaramos data. E daí?

Por mais variantes que eu tenha visto, nunca vi nada como isto. É estranho de alguma forma. Além disso, não há ciclo aqui, e menos e mais o tempo do início e do fim do comércio. Eu não entendo este ponto.

Na verdade, temos os tempos de início e fim da db e de comércio acima. Portanto, esta peça pode ser apagada, e então verificaremos o tempo:

Qual é o objetivo de escrever um código extra? Por favor, explique este ponto. Não é realmente lógico.


Cada um é livre para fazer sua própria coisa. Igor o fez desta maneira. Eu o faço de forma diferente.

E se você recebe um mais ou um menos. Depende do momento da negociação. Por exemplo, como organizar a negociação de 21 horas a 5 horas.

Se as atas não fossem utilizadas, tudo seria muito mais simples.

 
Vinin:


Cada um é livre para fazer do seu jeito. Igor o fez desta maneira. Eu faço as coisas de maneira diferente.

E se é mais ou menos. Portanto, depende do momento da negociação. Por exemplo, como organizar o comércio entre as 21h e as 5h da manhã.

E o código é redundante. Isso não importa.

Se as atas não fossem utilizadas, tudo seria muito mais simples.


Faça com que o tempo de negociação seja de 21.00 a 23.59, e depois de 00.01 a 5.00

Existem outras opções?

 
hoz:


Faça o horário de negociação de 21.00 a 23.59 e depois de 00.01 a 5.00

Existem outras opções?

Se você escrever if(Hora() >= 21 || Hora() < 5) será de 21.00 a 4.59.
 
borilunad:
Se você escrever if(Hora() >= 21 || Hora() < 5) será de 21.00 a 4.59.

Isso é estranho. Passa da meia-noite e não leva isso em conta?