[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 98

 

Kim ha una funzione:

//+------------------------------------------------------------------+
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    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);
} 

Ho due domande:

1. Perché traduce subito il tempo in una stringa e poi la stringa in un tempo?

2. Perché questa condizione nella funzione?

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

Perché controllare il tempo sotto... Proprio qui:

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

E nei parametri delle funzioni, le variabili temporali non sono di tipo datetime, ma int per qualche motivo...

 
Ha, l'ho capito. Il fatto è che il file su cui stavo lavorando è stato aperto ieri da una chiavetta. Il testo è aperto, tutto va bene, ma non ho inserito la chiavetta oggi. Non capisco cosa voglio compilare, ho il testo, ma non ho accesso ad esso per modificarlo. Amico, succede.
 
hoz:

Kim ha una funzione:

Ho due domande:

1. Perché traduce subito il tempo in una stringa e poi la stringa in un tempo?

2. Perché questa condizione nella funzione?

Perché controllare il tempo sotto... Proprio qui:

E nei parametri delle funzioni, le variabili temporali non sono di tipo datetime, ma int per qualche motivo...


1. Per sostituire i valori attuali dell'ora e dei minuti nell'orario con i valori specificati nei parametri della funzione

Io farei così:

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

2. Per aggiungere date di inizio o fine corrette per giorno

datetime e int sono essenzialmente la stessa cosa, e i parametri non sono date complete, ma solo il numero di ore e minuti

 
MikeM:


2. Per un'ulteriore correzione delle date di inizio o fine per giorno

Perché? Dobbiamo limitare il tempo di trading dell'EA. E non ci interessa il tempo dall'ora in cui il tempo di trading finisce al tempo in cui il tempo di trading inizia, perché l'Expert Advisor non fa trading in quel momento! Non capisco cosa siano i NONSENSI...

MikeM:

Il datetime e l'int sono essenzialmente la stessa cosa, e i parametri non sono le date complete, ma solo il numero di ore e minuti

Ma il tempo deve essere il tempo, come non c'è differenza?
 
hoz:


Ma il tempo deve essere il tempo, come può non esserci differenza?


Il tempo è un numero, e un numero intero.
 
Vinin:

Il tempo è un numero, ed è un intero.


Capisco cosa intendo con il tempo - non è una data, per questo è dichiarato come un numero. Ma che dire:

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

Per quante varianti ho visto, non ho mai visto niente del genere... In qualche modo è strano. Inoltre, non c'è nessun ciclo qui, e meno e più il tempo dell'inizio e della fine del commercio. Non capisco questo punto.

Infatti, abbiamo ottenuto i tempi di inizio e fine del commercio db e de sopra. Quindi, questo pezzo può essere cancellato, e poi controlleremo l'ora:

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

Che senso ha scrivere codice extra? Per favore, spiegate questo punto. In realtà non è logico.

 
hoz:


Se non usiamo i minuti, possiamo semplificare. Capisco cosa intendiamo con il tempo - non è la data, dichiariamo la data. Che dire:

Per quante varianti ho visto, non ho mai visto niente del genere... In qualche modo è strano. Inoltre, non c'è nessun ciclo qui, e meno e più il tempo dell'inizio e della fine del commercio. Non capisco questo punto.

Infatti, abbiamo ottenuto i tempi di inizio e fine del commercio db e de sopra. Quindi, questo pezzo può essere cancellato, e poi controlleremo l'ora:

Che senso ha scrivere codice extra? Per favore, spiegate questo punto. Non è molto logico.


Ognuno è libero di fare le sue cose. Igor ha fatto così. Io lo faccio in modo diverso.

E se si ottiene un più o un meno. Quindi, dipende dal tempo di trading. Per esempio, come organizzare il trading da 21 ore a 5 ore.

Se i verbali non fossero utilizzati, tutto sarebbe molto più semplice.

 
Vinin:


Ognuno è libero di fare a modo suo. Igor ha fatto così. Faccio le cose in modo diverso.

E se è più o meno. Quindi dipende dal tempo di negoziazione. Per esempio, come organizzare il commercio tra le 21 e le 5 del mattino.

E il codice è ridondante. Non ha importanza.

Se i verbali non fossero utilizzati, tutto sarebbe molto più semplice.


Fare in modo che il tempo di negoziazione sia dalle 21.00 alle 23.59, e poi dalle 00.01 alle 5.00

Ci sono altre opzioni?

 
hoz:


Rendere l'orario di negoziazione dalle 21.00 alle 23.59 e poi dalle 00.01 alle 5.00

Ci sono altre opzioni?

Se scrivete if(Hour() >= 21 || Hour() < 5) sarà dalle 21.00 alle 4.59.
 
borilunad:
Se scrivete if(Hour() >= 21 || Hour() < 5) sarà dalle 21.00 alle 4.59.

Questo è strano. Salta la mezzanotte e non ne tiene affatto conto?
Motivazione: