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

 

Ciao!

Potete per favore consigliarmi come impostare l'indicatore per lavorare solo sulle aperture delle barre, e non su ogni tick, e come non farlo funzionare ogni volta (su ogni nuova barra) attraverso tutta la storia?

Vorrei utilizzare l'indicatore come indicatore di apertura delle barre, e vi ringrazio in anticipo.

Rostislav


 
Rost17: Potete per favore consigliarmi come impostare l'indicatore per lavorare solo all'apertura della barra e non su ogni tick e come non farlo funzionare ogni volta (su ogni nuova barra) attraverso tutta la storia?
Datetime t;
Innanzitutto, riguardo alle barre. Quando si forma una nuova barra, un nuovo valore viene scritto in Time[0] - il tempo in cui la barra si apre.
OnCalculate(...)
{
if(Time[0] == t) return(0); // Se questa barra è elaborata --> exit
t = Time[0];

Ora per tutta la storia: rallenterà
 
STARIJ:
datetime t;
Prima di tutto, riguardo alle barre. Quando formiamo una nuova barra, scriviamo un nuovo valore in Time[0] - il tempo di apertura della barra.
OnCalculate(...)
{
if(Time[0] == t) return(0); // se questa barra è elaborata --> exit
t = Tempo[0];

Ora per tutta la storia: rallenterà

Grazie per la risposta rapida. Quello che sto chiedendo è come fare in modo che NON rallenti e scorra attraverso la storia quando appare una nuova barra, ma solo processare la nuova barra...

Ora è organizzato come segue: for(int i=limit-1; i>=0; i--) e per come lo capisco, significa che ad ogni apertura di una barra, tutti i valori su tutta la storia saranno ricalcolati di nuovo, mentre si dovrebbe lavorare solo con l'ultima barra...

 
Rost17: Sto chiedendo come fare in modo che NON rallenti e che non scorra tutta la cronologia quando appare una nuova barra, ma che elabori solo la nuova barra...

Ecco come si calcola l'ultima barra:

//| Bears Power                                                      |
//+------------------------------------------------------------------+
int OnCalculate(.....)
  {
   int limit=rates_total-prev_calculated; // Количество баров, которые будем считать = ВсегоБаров - РанееПросчитано
   if(rates_total<=InpBearsPeriod) return(0);

   if(prev_calculated>0) limit++; // Если давно считаем, то захватим и предыдущий бар для точности
   for(int i=0; i<limit; i++)
     {
      ExtTempBuffer[i]=iMA(NULL,0,InpBearsPeriod,0,MODE_EMA,PRICE_CLOSE,i);
      ExtBearsBuffer[i]=low[i]-ExtTempBuffer[i];
     }
   return(rates_total);
  }
 
STARIJ:

Guardiamo prima la linea

Per renderlo più chiaro, l'ho riscritto in questo modo.

Aha!!! Ora comincio a capire... Nel ciclo, la variabile a cambia da 1 a 6. Con valori di questa variabile 1, 5 e 6 non c'è azione. Poi solo

O nel tuo stile.

Il risultato sarà lo stesso ma sarà più veloce!

Ora dovete sbarazzarvi della funzione Statistic, scrivere il suo corpo tre volte di seguito, sostituire i parametri formali in ciascuna delle tre parti con parametri reali e rimuovere le dichiarazioni di variabili duplicate. Il codice totale sarà un po' più lungo ma l'esecuzione sarà più veloce. Ha senso buttare fuori print() - chi esattamente in questo momento guarderà il registro dei messaggi? - O sostituirlo con Alert() per visualizzarlo sullo schermo. Inoltre, c'è una variabile namZz2 - il suo valore cambia?


Ho bisogno di usare stats() invece di stats(). Stupidamente, so che posso riscrivere tre volte, come hai detto tu, ma il problema è che molto probabilmente il risultato della raccolta delle statistiche dovrà aggiungere altri array e prima o poi tornerò a quelli originali. È per questo che vi offro dei modi semplici, che già conosco, e che purtroppo mi porteranno all'inizio. Ecco perché guardo avanti, per non doverci tornare in futuro!

for(int a=1;a<6;a++)
{
   if(a==2){Statistic(mZz2,namZz2);}
   if(a==3){Statistic(mZz3,namZz3);}
   if(a==4){Statistic(mZz4,namZz4);}
}

come mettere questo codice nello statistico? per essere una singola procedura si all'inizio come ho detto la domanda si prega di guardare!

 
STARIJ:

Ecco come viene calcolato sull'ultima barra:

Grazie mille! Ho una fonte di indicatori molto vecchia. Potresti sistemarlo in modo che non ricalcoli tutta la storia ogni volta, lavori solo alla chiusura della barra e metta la freccia solo sulla barra dopo la quale è apparso il segnale? Bene, e nel nuovo stile, con OnCalculate... Sono disposto a compensare il costo del vostro tempo... Se siete d'accordo, qual è il modo migliore per farlo? Posso mandartelo in un messaggio privato o dove?
 
Игорь:

Ecco un estratto del codice di lavoro! Come raccoglierlo in un void Statistic senza void Stat intermedio! Dovrei rielaborare tutto il codice per riunire tutti gli array in uno solo e provare a grattarlo via da lì!

L'estratto che hai citato dal tuo codice di lavoro è sbagliato o la tua funzione Statistic() non fa altro che stampare quando viene chiamata da Stat().

Comunque, si fermerà subito dopo il ritorno;.

Per favore, dateci tutto il codice per capire cosa volete.

 

Per la cronaca. Troppi thread sul forum per aiutare i neofiti di MQL4.

Questo thread non è più supportato ed è chiuso.


Si prega di indirizzare tutte le domande a uno dei seguenti thread attivi:

https://www.mql5.com/ru/forum/160683

https://www.mql5.com/ru/forum/160587

Tutti gli altri post in questo thread saranno cancellati.


 
aiuto può un ordine già acquistato cambiare il suo prezzo di acquisto in 2 ore
 
Voglio un'immagine di un personaggio di Minecraft e un piccone nelle mie mani quando sono redditizio. come faccio?
Motivazione: