[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 371

 
Fox_RM:

Non c'è praticamente nessuna differenza, solo un processo leggermente diverso per ottenere i punti di controllo A e B. Ho già provato con gli array.

Poi tra A e B dovrei anche fare un loop attraverso le barre. Non vedo un altro modo, ecco perché lo chiedo.

Forse qualcuno può darmi un suggerimento. Forse c'è qualcosa di sbagliato nella logica della scrittura del codice?


1. Disegna il codice senza salvare le stringhe (in una scala).

2. Invece di brevi dichiarazioni condizionali ripetute, usate il costrutto if(...) ... altro...

3. Togliete la chiamata della funzione di formazione dell'oggetto grafico dal ciclo interno (freno principale).

 
Chiripaha:

questo:



... o meglio ancora, uno di questi:

if (AOBuffer3[i]<=0){
   ExtMapBuffer1[i] =  nSum; Vol_Arr[i] =  Volume[i]*Point*coaf;
}
else{
   ExtMapBuffer1[i] = -nSum; Vol_Arr[i] = -Volume[i]*Point*coaf;
}
 
tara:

... o meglio ancora, uno di questi:

Sì, sono d'accordo.

Raccolgo tutti i miei suggerimenti nel "vecchio" commento (semmai). - Potrebbe non essere del tutto "giusto", ma non sarà disperso.

Penso che il problema sia l'accumulo di testi - riflesso nel commento principale (non so come linkarlo - mi dispiace).

 
tara:

3. Togliete la chiamata alla funzione di formazione dell'oggetto grafico dal ciclo interno (freno principale).

Ora, mi chiedo anch'io - Come si fa? (implementare)

Hm.... Esattamente! - È impilabile. E i valori intermedi non sono importanti.

      if (shift_up > shift_dn)
       {
        for (int dn_br = shift_dn; dn_br <= shift_up; dn_br++)            //-------------- Перебор значений внутри основного цикла
          {
           Vol_AO_up += Volume[dn_br]; 
          }   
         ObjectDelete ("Awesome_super_volumes"+up_koaf);        // Заодно и удалить старый текст, чтобы не копился
         SetText("Awesome_super_volumes"+up_koaf, DoubleToStr(Vol_AO_up,0), AO_time_dn, AO_dn, Blue);
       }

Allora non ce ne sarà un mucchio...

 

Ho questa chiamata nella mia funzione init:

GetMarketInfo();

Questa funzione qui:

//+-------------------------------------------------------------------------------------+
//| Сбор рыночных данных                                                                |
//+-------------------------------------------------------------------------------------+
void GetMarketInfo()
{
   gd_spread = MarketInfo(Symbol(),MODE_SPREAD) * Point;
   gd_stopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL)  * Point;
   gd_tickSize = MarketInfo(Symbol(),MODE_TICKSIZE);
}

Le variabili gd_spread, gd_stopLevel, gd_tickSize che ho dichiarato globalmente fino ad ora. Ora ho deciso di scrivere alcune librerie che usano queste variabili. Si scopre che ho spostato queste variabili nel file di intestazione. Quindi, per evitare errori nella compilazione della libreria, dovrei trasferire anche la funzioneGetMarketInfo() nella libreria, giusto?

 
hoz:

Ho questa chiamata nella mia funzione init:

Questa funzione qui:

Le variabili gd_spread, gd_stopLevel, gd_tickSize che ho dichiarato globalmente fino ad ora. Ora ho deciso di scrivere alcune librerie che usano queste variabili. Si scopre che ho spostato queste variabili nel file di intestazione. Quindi, per evitare errori nella compilazione della libreria, dovrei trasferire anche la funzioneGetMarketInfo() nella libreria, giusto?

Decisamente non chiamare questa funzione nell'init - spread e stoplevel possono variare nel tempo
 
artmedia70:
Certamente non nell'init - il livellamento di spread e stop può cambiare nel tempo


Penso che l'inite dovrebbe essere scartato, per evitare problemi nel commercio reale. Se la connessione viene interrotta da DC, e poi appare, la reinizializzazione non avviene e causa errori e problemi nel trading reale, giusto?

Beh, cosa dovremmo fare allora? Chiamare costantemente qualche funzione in ogni funzione che restituirà queste variabili di mercato?

 
hoz:


Penso che l'init dovrebbe essere abbandonato, in modo che non ci siano malfunzionamenti nel commercio reale. Dopo tutto, se la connessione viene interrotta dal DC, e poi appare, la reinizializzazione non avverrà, e questo già causa errori e guasti quando si lavora nel mondo reale, giusto?

Beh, cosa fare allora? Chiamare costantemente qualche funzione in ogni funzione, che restituirà queste variabili di mercato?

Questo tipo di informazioni dovrebbe essere diviso in mutevoli e immutabili.

I dati immutabili possono essere scritti ovunque, perché anche se c'è un'interruzione della connessione, i dati saranno ancora rilevanti. - Meglio, ovviamente, non all'inizio, per non appesantire inutilmente il gufo.

Ma quelle variabili possono essere sia attraverso la chiamata di funzione (se si usa la libreria) o semplicemente aggiornarle all'inizio della funzione iniziale.

 

Anche questo è vero. Il cervello pensa sempre alla produttività, in un momento in cui la mente non sa bene come farlo al meglio. Ho un carattere... un gemello :(

Giusto, bisogna separare subito l'uno dall'altro.

Poi di nuovo, però. Se le variabili dell'ambiente di mercatogd_stopLevel,gd_tickSize sono usate in diverse funzioni (funzioni di modifica, invio di ordini ecc.), allora non è proprio ragionevole chiamare la funzione che ottiene i valori specificati costantemente nella funzione di libreria. C'è un modo per unificare tutto questo? Dopo tutto, a differenza dello spread, lo stop loss e la dimensione del tick saranno sempre gli stessi.

 
hoz:

Anche questo è vero. Il cervello pensa sempre alla produttività, in un momento in cui la mente non sa bene come farlo al meglio. Ho un carattere... un gemello :(

Giusto, bisogna separare subito l'uno dall'altro.

Poi di nuovo, però. Se le variabili dell'ambiente di mercatogd_stopLevel,gd_tickSize sono usate in diverse funzioni (funzioni di modifica, invio di ordini ecc.), allora non è del tutto ragionevole chiamare la funzione che ottiene i valori specificati costantemente nella funzione di libreria. C'è un modo per unificare tutto questo? Dopo tutto, a differenza dello spread, lo stop loss e la dimensione del tick saranno sempre gli stessi.

Artem ha già detto che lo stoplevel può anche fluttuare - non è un valore costante! - E la dimensione del tick è, sì, una costante.

Per unificare - di nuovo, dividilo in 2 funzioni - MarketInfoConst e MarketInfoImage (variabile). Mettetene uno in Inite, l'altro all'inizio di Start(s). E sarà possibile combinarlo in una biblioteca.

La questione della produttività (ottimizzazione dei gufi) è diversa. Personalmente, non ho mai messo tutte queste funzioni nel gufo. Mi limito a prendere i parametri quando ne ho bisogno. Sì, devo scrivere più codice, ma owl gestisce meno roba di libreria "superflua", perché non tutto ciò che viene da MarketInfo può rivelarsi necessario in owl.