Mt4 Fine del supporto. - pagina 44

 
Реter Konow:

Ora ditemi: ho completato il compito?

Voi (sia Pietro che gli avversari) ci arrivate dalla parte sbagliata! Il compito può essere svolto in entrambi i modi!

Arriverà un assemblatore e dirà che può farlo ancora più efficacemente, e con un consumo ancora minore di risorse del computer!

Ma che senso ha?

Secondo me, dovremmo pensare all'efficienza solo quando siamo a corto di velocità o di memoria. Quando ne hai abbastanza, è più importante che sia facile mantenere e modificare il sistema. Anche se ci vuole un po' di danno alla velocità del programma e alla memoria utilizzata.

I nomi russi non mi danno fastidio, l'unica cosa che mi disturba - sono abituato ai prefissi, in modo che si possa capire immediatamente il tipo di variabile dal suo aspetto. E identificatore russo o inglese - la differenza non è grande (1C - c'è molto russo).

Ma soprattutto sono sorpreso dal rifiuto volontario di un debugger. È solo masochismo... Posso capire quando non c'è un debugger (un tempo non c'era il debug sui dati storici) - devi torcere, emettere messaggi di debug, log... Ma se avete un debugger - è molto più conveniente ed efficiente lavorare con esso!

 
George Merts:

Voi (sia Pietro che gli avversari) ci arrivate dalla parte sbagliata! Il compito può essere svolto in entrambi i modi!

Arriverà un assemblatore e dirà che può farlo ancora più efficacemente, e con un consumo ancora minore di risorse del computer!

Ma che senso ha?

Secondo me, dovremmo pensare all'efficienza solo quando siamo a corto di velocità o di memoria. Quando ne hai abbastanza, è più importante che sia facile mantenere e modificare il sistema. Anche se ci vuole un po' di danno alla velocità del programma e alla memoria utilizzata.

I nomi russi non mi danno fastidio, l'unica cosa che mi disturba - sono abituato ai prefissi, in modo che si possa capire immediatamente il tipo di variabile dal suo aspetto. E identificatore russo o inglese - la differenza non è grande (1C - c'è molto russo).

Ma soprattutto sono sorpreso dal rifiuto volontario di un debugger. È solo masochismo... Posso capire quando non c'è un debugger (un tempo non c'era il debug sui dati storici) - devi torcere, emettere messaggi di debug, log... Ma se avete un debugger - è molto più conveniente ed efficiente lavorare con esso!

George, non avevo idea di come usare un debugger. Non sapeva e non si chiedeva nemmeno a cosa servisse. Quindi non c'è masochismo qui. E ora è troppo tardi.
 

Peter, hai sostituito il compito. La vostra soluzione è talvolta necessaria, ma molto raramente, e non puramente in questa forma, ma simile.

Più spesso un compito diverso - la comparsa di nuove barre dovrebbe essere tracciata in diversi luoghi del programma. Pertanto, passare un simbolo e un lasso di tempo nelle funzioni e cercarli negli array non è affatto una buona soluzione. Poiché la funzione isNewBar ha una variabile statica, dobbiamo fare una copia della funzione per ogni simbolo del timeframe. È possibile passare una variabile per l'ultimo lasso di tempo nella funzione per riferimento.

Ma c'è una variante ideale con OOP - crea il proprio oggetto per ogni simbolo - timeframe.

Questo è, se non consideriamo che la funzione isNewBar non è affatto necessaria, solo per stereotipare da niente a fare.

 
Dmitry Fedoseev:

Peter, hai sostituito il compito. La vostra soluzione è talvolta necessaria, ma molto raramente, e non puramente in questa forma, ma simile.

Più spesso un compito diverso - la comparsa di nuove barre dovrebbe essere tracciata in diversi luoghi del programma. Pertanto, passare un simbolo e un lasso di tempo nelle funzioni e cercarli negli array non è affatto una buona soluzione. Poiché la funzione isNewBar ha una variabile statica, dobbiamo fare una copia della funzione per ogni simbolo del timeframe. È possibile passare una variabile per l'ultimo lasso di tempo nella funzione per riferimento.

Ma c'è una variante ideale con OOP - crea il proprio oggetto per ogni simbolo - timeframe.

Cioè, se non consideriamo che la funzione isNewBar non è affatto necessaria, è puramente da buttare, da non fare nulla.

Non ho cambiato nulla. Ho appena risolto questo compito in un modo diverso. Seguendo la vostra logica, devo essere arrivato inevitabilmente alla necessità di OOP. Tuttavia, in qualunque modo la si guardi, si può tranquillamente usare la mia soluzione. Qualsiasi funzione, in qualsiasi momento e da qualsiasi punto del programma accede all'array globale per un nuovo evento barra su qualsiasi simbolo e qualsiasi timeframe.

Non importa quanti simboli e quanti timeframe ci sono - nella mia soluzione il loro numero non aumenta il carico sul sistema. Basta guardare l'array - se c'è un nuovo evento barra o no.

Potete ridurre la lista dei simboli se non li prendete dal rapporto di mercato ma li digitate manualmente nell'array Symbols[]. Per favore.


Aggiunto:

A proposito, notate che la funzione New_bar() non esiste più. Si è rivelato davvero inutile. Avevi ragione.

 
Реter Konow:

Il mio compito era: fare in modo che potessi ottenere nuovi eventi di barre di un insieme di simboli, su un insieme di timeframes, senza OOP, e che fosse un codice breve ed efficiente.

Ora ditemi: ho completato il compito?

Assolutamente sì. Ma!!! Si dà il caso che il mio suggerimento sia stato un po' distorto e di conseguenza l'hai capito come l'hai capito tu. Nel forex, siete interessati solo ai dati che vi servono qui e ora. Ho bisogno delle informazioni per un simbolo e per il periodo corrente, tutto qui - gli altri non mi interessano. Abbiamo bisogno dell'informazione per un altro simbolo e un certo periodo, allora lo stesso codice dovrebbe ottenerla. E non c'è bisogno di sovraccaricare il sistema con la ricezione di informazioni, che ora non sono necessarie.

Non è colpa tua, è successo e basta. Ho cercato di fermarti, ma non ci sono riuscito.

 
Dmitry Fedoseev:

Peter, hai sostituito il compito.

Non l'ha cambiato. È stato il modo in cui la frase è stata parafrasata che l'ha intesa in quel modo.

 
Alexey Viktorov:

Assolutamente sì. Ma!!! Si dà il caso che il mio suggerimento sia stato un po' stravolto e di conseguenza lei ha capito come l'ha capito. Nel forex, siete interessati solo ai dati di cui avete bisogno qui e ora. Ho bisogno di informazioni su un simbolo e sul periodo attuale, tutto qui - gli altri non mi interessano. Abbiamo bisogno dell'informazione per un altro simbolo e un certo periodo, allora lo stesso codice dovrebbe ottenerla. E non c'è bisogno di sovraccaricare il sistema con la ricezione di informazioni, che ora non è necessaria.

Non è colpa tua, è successo così e basta. Ho cercato di fermarti, ma non ci sono riuscito.

Nessun problema, basta scrivere i nomi dei simboli necessari nell'array Symbols[].

Rimuovere il record da OnInit():

   for(int a1 = 0; a1 < All_symbols; a1++)
     {
      Symbols[a1] = SymbolName(a1 + 1,true); 
      //Возможно, нумерация символов в обзора рынка идет с нуля.
      //Тогда: Symbols[a1] = SymbolName(a1,true);
     }

E inizializzare l'array nell'ambito globale:

Symbols[3] = {"EURUSD","AUDUSD","GBPUSD"};

E rimuovi i timeframe non necessari dall'array Timeframes[];

int    Timeframes[3] = {PERIOD_M1,PERIOD_M5,PERIOD_M15};

Cambiare la variabile.

int    All_Timeframes = 3;

E cambiate la variabile All_Symbols:

int    All_symbols = 3;

In questo modo riceverai eventi solo per i simboli giusti e i tempi giusti.

Aggiunto:

Rimuovete anche l'impostazione della dimensione dell'array da OnInit(), dato che conoscete il numero di simboli:

   //-------------------------------------------------------------   
   All_symbols = SymbolsTotal(true);
   //---------------------------------------------------------   
   ArrayResize(Symbols,All_symbols);
   //---------------------------------------------------------
   ArrayResize(All_bars_table,All_symbols);
   //---------------------------------------------------------
 
Реter Konow:

Non ho sostituito nulla. Ho solo risolto questo problema in modo diverso. Seguendo la vostra logica, ho dovuto inevitabilmente arrivare alla necessità di OOP. Tuttavia, in qualunque modo la si guardi, si può tranquillamente usare la mia soluzione. Qualsiasi funzione, in qualsiasi momento e da qualsiasi punto del programma accede all'array globale per un nuovo evento barra su qualsiasi simbolo e qualsiasi timeframe.

Non importa quanti simboli e quanti timeframe ci sono - nella mia soluzione il loro numero non aumenta il carico sul sistema. Basta guardare l'array - se c'è un nuovo evento barra o no.

Potete ridurre la lista dei simboli se non li prendete dal rapporto di mercato ma li digitate manualmente nell'array Symbols[]. Per favore.


Aggiunto:

A proposito, notate che la funzione New_bar() è sparita. Si è rivelato davvero inutile. Avevi ragione.


Se è così, come evidenziato in grassetto - nel cestino.

 
Dmitry Fedoseev:

Se come evidenziato in grassetto, va nel cestino.

Perché?
 
Реter Konow:

Nessun problema, basta scrivere nell'array Symbols[] i nomi dei simboli che volete e il gioco è fatto.

Rimuovere la voce da OnInit():

E inizializzare l'array nell'ambito globale:

E rimuovi i timeframe non necessari dall'array Timeframes[];

Cambiare la variabile

E cambiate la variabile All_Symbols:

In questo modo riceverai gli eventi solo per i simboli necessari e i tempi necessari.


Peter, smettila. Non ho bisogno di altre funzioni per definire una nuova barra oltre alla mia. Beh, si dà il caso che tutto il tuo duro lavoro sia diventato inutile, mi dispiace.