Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 768

 
AlexeyVik:

Beh, la mia ora locale è 1 ora più lunga di quella del server.

Allora, puoi spiegare cosa c'è di confuso in questi valori?

Non c'è nulla di confuso in questi valori, tutto è corretto lì, ma non è di questo che stiamo parlando.

Il problema del venerdì in particolare non è rilevante se la vostra ora locale è X ore più lunga di quella del broker.

Ma immaginate se sul vostro computer locale non c'è +1, ma -1 ora di differenza con il broker.

E c'è questa semplice condizione:

if(TimeDayOfWeek(TimeCurrent()) == 5 && TimeCurrent() >= StringToTime("21:30"))
   Print("Настала пятница и время больше чем 21:30");

In questo caso:

1. il broker avrà il primo tick del venerdì, per esempio il tick di oggi, che ha un tempo di 2014.11.07 00:00

2. Prendere il numero di secondi trascorsi dal01.01.1970 00:00 fino al tick in questione, cioè2014.11.07 00:00

3. prendiamo il numero di secondi trascorsi dal 01.01. 1970 00:00 al06.11.2014 21:30 (è la data di ieri, perché prendiamo l'ora del PC locale, che al momento del tick non è venerdì, ma giovedì, che è il sesto giorno, o per essere più precisi, 2014.11.06 23:00, la differenza di 1 ora)

Voilà, il numero di secondi del punto 2 è maggiore di quello del punto 3.

Questo significa che il primo tick del venerdì eseguirà la stampa specificata nel codice, anche se se la funzioneStringToTime() prende la data dal server del broker, allora tutto funzionerebbe come previsto, la stampa apparirebbe il venerdì solo dopo che l'ora supera le21:30

 
Leonid123456:

Salve.

C'è un compito come questo. (non può attaccarlo a un segno di spunta)

Se un ordine pendente si innesca {allora...}.

Nel mio EA, uso Terminal.mqh per calcolare gli ordini.

Terminale // Mas_Tip[0] aperto Comprare

// se il numero di ordini di acquistoè aumentato di 1

se (Mas_Tip[0]+1)

{

funzione

}

Tutto funziona. Ma si innesca ad ogni prossimo tick.

Come attaccare questo caso a una zecca? E poi confrontare il valore sul tick precedente e sul tick attuale.

E puoi tradurre la stringa evidenziata nel nostro linguaggio umano? Cosa dovrebbe essere e cosa si ottiene quando si esegue questa linea...
 
AlexeyVik:
Puoi tradurre la riga evidenziata nella nostra lingua? Cosa dovrebbe essere e cosa si ottiene quando si esegue questa linea...

// se il numero di ordini diacquisto è aumentato di 1 allora...

{

funzione per esempio apre o chiude altri ordini...

}

Non deve essere cosìif (Mas_Tip[0]+1) possiamo fareif (Mas_Tip[0] >Mas_Tip[1]) // se ci sono più ordini Buy che Cell. Aprire uno in sospeso, per esempio.

Il punto è che al prossimo tick questo dato è di nuovo vero.

 
Leonid123456:

// se il numero di ordini diacquisto è aumentato di 1 allora...

{

funzione per esempio apre o chiude altri ordini...

}

se (Mas_Tip[0]+1)

Nelle parentesi di if dovrebbe esserci un bool, cioè vero o falso.

Qui è ovviamente int. Questo è un numero intero.

Naturalmente, vero è 1 e falso è 0 (se non mi sbaglio). Ma ancora non è giusto. Cosa restituisceMas_Tip[0]?

 
ikatsko:

se (Mas_Tip[0]+1)

tra parentesi di if dovrebbe essere un bool, cioè vero o falso.

Ma qui è ovviamente int. Questo è un numero intero.

Naturalmente, vero è 1 e falso è 0 (se non mi sbaglio). Ma ancora non è giusto. Cosa restituisceMas_Tip[0]?

Numero di ordini di acquisto aperti.

 
Leonid123456:

// se il numero di ordini diacquisto è aumentato di 1 allora...

{

funzione per esempio apre o chiude altri ordini...

}

No, è quello che vuoi. In realtà non lo è. C'è un certo valore nell'array Mas_Tip[0], e se è maggiore di zero, la condizione if(Mas_Tip[0]) sarà vera. E se aggiungiamo 1 a questo valore, sarà sempre vero perché il numero di ordini aperti non può essere uguale a -1.

 
AlexeyVik:

No, questo è il modo in cui lo vuoi. In effetti, non lo è. C'è un certo valore nell'array Mas_Tip[0] e se è maggiore di zero, la condizione if(Mas_Tip[0]) sarà già vera. E se aggiungiamo 1 a questo valore, sarà sempre vero perché il numero di ordini aperti non può essere uguale a -1.


Ho cercato di farlo in questo modo

   bool  Fact_1 = false;                    // Глобальная перемен.
       bool  Fact_2 = false;                    // Глобальная перемен.
//--------------------------------------------------------------------
int start()                                     // Спец. функция start
  {
                          // Локальная перемен.
   if (Fact_2==true)                            //Если сообщение уже..
      return;                                   //..было, то выходим
 
   if (Mas_Tip[0]+1)
      Fact_1 = true;                            // Произошло событие 1
 
   
 
   return;                                      // Выход из start()
  }
//--------------------------------------------------------------------
                               // Пользовательс. ф-ия
  {
             // Сообщение
   Fact_2 = true;                               // Произошло событие 2
   return;                                      // Выход из польз.ф-ии

}

Risulta essere un evento unico.

 
ikatsko:

se (Mas_Tip[0]+1)

tra parentesi di if dovrebbe essere un bool, cioè vero o falso.

Ma qui è ovviamente int. Questo è un numero intero.

Naturalmente, vero è 1 e falso è 0 (se non mi sbaglio). Ma ancora non è giusto. Cosa restituisceMas_Tip[0]?

false è 0 e true se non è 0.

Prova questa linea

bool b;
b = 7.40;
if(b) Print("b = ", b);
Il compilatore potrebbe avvertire di una possibile perdita di precisione, ma funzionerà.
 

puoi scartareMas_Tip[0]

Come ottenere un evento. Si è aperto un Buy.

 
Leonid123456:

puoi scartareMas_Tip[0]

Come ottenere un evento. Si è aperto un Buy.

Ricordare il vecchio conteggio degli acquisti in qualche variabile e confrontarlo con il valore attuale restituito dalla funzione di conteggio degli acquisti, come altro?
Motivazione: