Discussione sull’articolo "L'Handler dell'Evento "Nuova Barra"" - pagina 6

 

Buona giornata e buon umore a tutti!

Mi chiedo se questo codice

bool IsNewBar()
  {
   static datetime TimeOld;
   datetime TimeNew[1];
   CopyTime(_Symbol,PERIOD_CURRENT,0,1,TimeNew);
   if(TimeNew[0]!=TimeOld)
     {
      TimeOld=TimeNew[0];
      return(true);
     }
   return(false);
  }

funzionerà? L'ho trovato sul sito web di MQL5 molto tempo fa e non ricordo da chi l'ho copiato.

Saluti, Vladimir.

 
MrBrooklin #:

Buona giornata e buon umore a tutti!

Mi chiedo se un codice come questo:

funzionerà? L'ho trovato sul sito web di MQL5 molto tempo fa e non ricordo da chi l'ho copiato.

Saluti, Vladimir.

A proposito, uso anche questo codice e funziona abbastanza bene, ma è un po' più ampio, può essere usato per qualsiasi TF!

bool isNewBar(string INST,int K, ENUM_TIMEFRAMES timeFrame)
  {
//----
   bool res=false;               // variabile risultato dell'analisi 
   int  i=0;                     // numero di cella dell'array old_Times[] 
   datetime new_Time[1];         // ora della nuova barra

   switch(K)
     {
      case 0:  i= 0; break;
      case 1:  i= 1; break;
      case 2:  i= 2; break;
      case 3:  i= 3; break;
      case 4:  i= 4; break;
      case 5:  i= 5; break;
      case 6: i= 6; break;
      case 7: i= 7; break;
      case 8: i= 8; break;
      case 9: i= 9; break;
      case 10: i=10; break;
      case 11:  i=11; break;
      case 12:  i=12; break;
      case 13:  i=13; break;
     }
   // copiare l'ora dell'ultima barra nella cella new_Time[0] 
   int copied=CopyTime(INST,timeFrame,0,1,new_Time);
   
   if(copied>0) // tutto ok. dati copiati
      {
      if(old_Times[i]!=new_Time[0])       // se l'ora della vecchia barra non è uguale a quella della nuova barra
         {
         if(old_Times[i]!=0) res=true;    // se questa non è la prima esecuzione, allora true = nuova barra
         old_Times[i]=new_Time[0];        // ricordare l'ora del bar 
         }
      }      
//----
   return(res);
  }
 
switch(K)
     {
      case 0:  i= 0; break;
      case 1:  i= 1; break;
      case 2:  i= 2; break;
      case 3:  i= 3; break;
      case 4:  i= 4; break;
      case 5:  i= 5; break;
      case 6: i= 6; break;
      case 7: i= 7; break;
      case 8: i= 8; break;
      case 9: i= 9; break;
      case 10: i=10; break;
      case 11:  i=11; break;
      case 12:  i=12; break;
      case 13:  i=13; break;
     }

Wow).

 
Dmitry Fedoseev #:

Wow).

Chi c'è in K? Credo di aver guardato tutto.

confronto tra gli array

Sono rimasto deluso dalla nuova barra, nessuna coincidenza di operazioni, per qualche motivo a me non chiaro, non c'è nessuna stampa, cioè nessun trigger o serieslastbar o solo un ritardo nel tempo, ho un ping alto (140), forse è questo il motivo.

Ho provato molte varianti di newbar, ovunque c'era uno stutter, testato in 3 terminali su un computer.

Ho rimosso newbar e tutti i terminali hanno negoziato sul server 1in1 al 100% per diversi giorni.

 
Fast235 #:

Chi c'è in K? Credo di aver guardato tutto.

confronto tra gli array

Sono deluso dalla nuova barra, nessuna coincidenza di accordi, per motivi che non capisco, non c'è stampa, cioè nessun trigger o serielastbar o solo un ritardo nel tempo, ho un ping alto (140), forse è questo il motivo.

Nei parametri K.

Perché con questa funzione non c'è un secondo tentativo in caso di errore con un ordine.

 

e il commercio non è in OnTick, ma da OnChartEvent(spia), e nella più veloce implementazione possibile, solo attraverso id, il resto non vengono trasferiti

7 simboli, il passaggio di un simbolo su un gran numero di condizioni e conta, nella sessione americana, 0,5-0,7% ryzen 3700x

provato anche una nuova barra attraverso una nuova barra dall'indicatore, anche divergere offerte, 5 normale e poi in uno, poi in altri balbettii.

 
L'ho buttato via del tutto, comunque l'algoritmo guarda l'ultima barra, e in questo caso c'è anche un vantaggio, se l'operazione viene annullata, non andrà da nessuna parte entro i limiti dello spread e della limitazione della "deviazione".
 
Mihail Marchukajtes #:

A proposito, anch'io uso questo codice e funziona abbastanza bene, solo che è un po' più ampio, ma si può usare per qualsiasi TF!

Grazie, Mikhail, lo aggiungerò alla mia libreria di funzioni.

Saluti, Vladimir.

 
Armen Shahinyan #:

Non ho un metodo più semplice di questo.
Rileva l'ora di apertura della barra corrente e li confronta a ogni tick.


Eliminate la prima funzione dal codice. E la vita migliorerà.

 

In generale, sono interessanti due circostanze:

1. Tutti sono stati bannati per qualche motivo.

2. Una nuova barra è sempre diversa nel tempo da quella precedente. In qualsiasi momento, perché va sempre da sinistra a destra. Prendete un tempo qualsiasi. Se non coincide con quella precedente, allora la barra è nuova.