Mt4 Fine del supporto. - pagina 35

 
Реter Konow:

Questa variante della funzione non ha alcuna funzione New_bar();

Questa è l'opzione con il maggior risparmio di risorse che ho fornito. Inoltre, ha un altro vantaggio: il nuovo evento barra viene salvato tutte le volte che il codice utente viene eseguito su un evento timer o tick.

In precedenza, si poteva ottenere questo evento solo una volta e il flag veniva cancellato con New_bar(). La funzione speciale ora cancella l'array "event_new_bar[][]" una volta al minuto e viene chiamata solo dopo l'esecuzione del codice personalizzato.

Le funzioni personalizzate possono accedere direttamente all'array e recuperare nuove informazioni sull'evento barra tutte le volte che il codice viene eseguito su un evento timer o tick.

Questo risparmia ancora più risorse.

Anche l'ultimo codice non funziona, ci sono voluti 7 minuti perché la stampa arrivasse

//+------------------------------------------------------------------+
//Пример использования событий нового бара в пользовательском функционал.
//Просто обращаемся к глобальному массиву "События_нового_бара[a1][a2]" напрямую
//и используем событие в наших торговых алгоритмах.
//+------------------------------------------------------------------+
void Моя_стратегия_торговли_на_новых_барах()
{
  for(int a1 = 0; a1 < Всех_символов; a1++)
   {
    string Этот_символ    = Символы[a1];
    //----------------------------------
    for(int a2 = 0; a2 < Всех_таймфреймов; a2++)
      {
       bool   Новый_бар      = События_нового_бара[a1][a2];
       int    Этот_таймфрейм = Таймфреймы[a2];
       //----------------------------------
       if(Новый_бар && Этот_символ == "EURUSD" && Этот_таймфрейм == PERIOD_M5)
         {
          Print("M5");
         }
       //---------------------------------- 
       if(Новый_бар && Этот_символ == "EURUSD" && Этот_таймфрейм == PERIOD_M1)
         {
          Print("M1");
         }
       //----------------------------------        
      }
   }
}
 
Vitaly Muzichenko:

Anche l'ultimo codice non funziona, ci sono voluti 7 minuti perché la stampa arrivasse.

Questa funzione dovrebbe essere chiamata da OnTick o da un timer.

Potrebbe esserci un piccolo problema, ma non sono ancora riuscito a individuarlo. Date un'occhiata voi stessi al codice e cercate un errore. È semplice come 3 copechi. E anche con i commenti.

Se non lo capite, chiedete. Ho altre cose da fare.

 
Реter Konow:

Questa variante della funzione non ha alcuna funzione New_bar();

Questa è l'opzione con il maggior risparmio di risorse che ho fornito. Inoltre, ha un altro vantaggio: il nuovo evento barra viene salvato tutte le volte che il codice utente viene eseguito su un evento timer o tick.

In precedenza, si poteva ottenere questo evento solo una volta e il flag veniva cancellato con New_bar(). La funzione speciale ora cancella l'array "event_new_bar[][]" una volta al minuto e viene chiamata solo dopo l'esecuzione del codice personalizzato.

Le funzioni personalizzate possono accedere direttamente all'array e recuperare nuove informazioni sull'evento barra tutte le volte che il codice viene eseguito su un evento timer o tick.

Le risorse vengono risparmiate ancora di più.


Non capisco l'umorismo. Perché - il debugger non capisce il russo? O sono solo io ad avere questo difetto? Vede le variabili in latino, ma non in cirillico.

Peter, allora come usi il debugger, o non lo usi?

 

Chiunque sia interessato può cercare un bug nel codice.

Il succo del codice:

1. Dichiarare gli array globali:

  • array unidimensionale per i nomi dei simboli "Symbols[]"
  • array unidimensionale per timeframes "Timeframes[]"
  • Un array bidimensionale dove scriviamo il numero attuale di barre "Number_bars[][]".
  • array bidimensionale "New Bar Events[][]" dove scriveremo le bandiere del nuovo evento barra di ogni simbolo e di ogni timeframe. Quelli che sono negli array "Symbols[]" e "Timeframes[]". Questa matrice sarà riempita nel ciclo dai simboli e dagli intervalli di tempo sull'evento del timer, una volta al minuto. Dopo di che sarà cancellato. Nell'intervallo tra il riempimento e la cancellazione questo array sarà chiamato dalla funzionalità utente e informato delle nuove barre.

2. All'inizializzazione, impostate la dimensione dell'array di simboli e scriveteci i nomi dei simboli dalla revisione del mercato.

3. Imposta la dimensione della prima dimensione dell'array "Number_bars[][]" che equivale al numero di simboli, e la seconda dimensione equivale al numero di timeframes. Questo array è come una tabella. Registrerà il numero attuale di barre di ogni simbolo e di ogni timeframe. Il numero è restituito dalla funzione iBars.

4. Imposta la dimensione della prima dimensione dell'array "Events_new_bar[][]", che è uguale al numero di simboli, e la seconda dimensione è uguale al numero di timeframes. Questo array è come una tabella. Registrerà le bandiere degli eventi delle nuove barre di ogni simbolo su ogni timeframe.

5. All'interno del timer, contiamo alla rovescia il minuto e facciamo un doppio ciclo (annidato) sui simboli (che sono nell'array Symbols[]) e sui timeframe (che sono nell'array Timframes[]). Chiamiamo la funzione iBars e otteniamo il numero corrente di barre di ogni simbolo e ogni timeframe dagli array Symbols e Timeframe. Per prima cosa, confrontiamo il numero attuale di barre con il numero già memorizzato nell'array. Se questi valori non sono uguali, impostiamo il flag del nuovo evento barra nell'array "Event_new_bar[][]". Scriviamo quindi il numero attuale di barre al posto di quello precedente.


L'array globale "events_new_bar[][]" è disponibile in qualsiasi punto del programma e viene riempito automaticamente ogni minuto, e anche cancellato automaticamente. Durante il periodo in cui l'array viene riempito, la funzionalità utente riceve dati freschi sulle nuove barre. L'array viene quindi cancellato automaticamente.


Questo è tutto.

 
Реter Konow:

Questa funzione dovrebbe essere chiamata da OnTick o da un timer.

Potrebbe esserci qualche piccolo problema, ma non sono ancora riuscito a localizzarlo. Date un'occhiata voi stessi al codice e cercate un errore. È semplice come 3 copechi. E con i commenti in testa.

Se non lo capite, chiedete pure. Ho altre cose da fare.


risposta professionale

 
Nikolai Semko:

Non capisco l'umorismo. Cosa - il debugger non capisce il russo? O sono solo io ad avere questo difetto? Vede le variabili in latino, ma non in cirillico.

Peter, allora come usi il debugger, o non lo usi?

Nikolai, per mia vergogna non ho idea di come usare il debugger. Non l'ho mai usato. ((
 
Galina Bobro:

risposta professionale

E questo è trolling professionale.
 
Реter Konow:

Questa funzione dovrebbe essere chiamata da OnTick o da un timer.

Potrebbe esserci qualche piccolo problema, ma non sono ancora riuscito a localizzarlo. Date un'occhiata voi stessi al codice e cercate un errore. È semplice come 3 copechi. E anche con i commenti.

Se non capite, chiedete pure. Ho altre cose da fare.

È così complesso e contorto che non si riesce a capirlo.

Mi dispiace, ma è anche completamente illeggibile.

 
Vitaly Muzichenko:

È così complicato e contorto che è un casino.

Mi dispiace, ma è anche completamente illeggibile.

Sapete cosa si dice di "non si può... non torturare..."? Penso che sia una buona.

 
Реter Konow:

Conoscete il detto "non si può... non torturare..."? Penso che sia una buona.

Esatto, è così che hai portato avanti il compito in modo definitivo, bene, o non ho capito bene la tua soluzione.