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

 
DanLett:

cioè, mentre la barra attuale[0] viene costruita, la precedente viene definita


Come opzione:

datetime last_time;   // глобальная переменная

...

int start()
{
   if (last_time != Time[0])
   {
      // Ура, новый бар!
      last_time = Time[0];      // запоминаем новый бар
      //... ваши расчеты с плюсованием
   }
   
... дальше работаем
 
7777877:

Sì, grazie ha aiutato... Ma voglio capire perché ObjectSet(object_name,OBJPROP_TIMEFRAMES,PERIOD_H1) non funziona (come dovrebbe)? È un difetto della lingua stessa?

Di fatto sia PERIOD_H1 che OBJ_PERIOD_H1 sono solo una sostituzione alfa di qualche valore numerico.

OBJ_PERIOD_H1 = 0x0010 (per la build corrente) = 0001 0000 (binario)

PERIOD_H1 = 60 (per questa build) = 0011 1100 (binario)


Siccome è facile da sostituire, si mettono accidentalmente 4 timeframes invece di uno - H4, H1, M30 e M15


E invece di chiamare ObjectSet(object_name,OBJPROP_TIMEFRAMES,0x0010) (che volevate fare) avete chiamato

ObjectSet(object_name,OBJPROP_TIMEFRAMES,0x3C).

 
datetime last_time;   // глобальная переменная

...

int start()
{
   if (last_time != Time[0])
   {
      // Ура, новый бар!
      last_time = Time[0];      // запоминаем новый бар
      if(close[1]>open[1]) 
xBost_b=xBost_b+((close[1]-low[1])*10000);
   }

cos'è Time[0] e come influisce su 1 tempo più?! sono un po' confuso...

 
DanLett:

cos'è Time[0] e come influisce su 1 tempo più?! solo un po' confuso...

Time[0] è il tempo di apertura della barra più recente (attuale). Appena arriva una nuova barra, cambia.

Digitare Time in MetaEditor e premere F1 per i dettagli

 
ilunga:

Time[0] è il tempo di apertura della barra più recente (attuale). Appena arriva una nuova barra, cambia.

Digitare Time in MetaEditor e premere F1 per i dettagli

Lo leggerò subito! grazie mille!
 
DanLett:
Lo leggo subito, grazie mille!

Allora non dimenticate di guardare iTime()
 
   datetime last_time;   // глобальная переменная
  int xBost_b;
  int xBost_s;
double hi=High[1];
double op=Open[1];
double cl=Close[1];
double lo=Low[1];
int Sum_xb;
int Sum_xs;
 
 if (last_time != Time[0])
   {
      // Ура, новый бар!
      last_time = Time[0];      // запоминаем новый бар
      if(Close[1]>Open[1]) 
xBost_b=(hi-cl)*10000;
Sum_xb=Sum_xb+xBost_b;<---------не плюсует,выдает такое же число как и xBost

      if(Close[1]<Open[1])
 xBost_s=(cl-lo)*10000; 
Sum_xs=Sum_xs+xBost_s;    
Comment("\n kolvo_b=",xBost_b,"\n Sum_xb=",Sum_xb,"\n kolvo_s=",xBost_s,"\n Sum_xs=",Sum_xs);

   }
come fate a farvi dare un più ogni volta?
 
DanLett:
come faccio a far quadrare i conti ogni volta?
Levariabili globali dovrebbero essere fuori da tutte le funzioni. Inviare le somme anche lì. o dichiarare queste variabili come statiche
 
DanLett:
come faccio a farlo aggiungere ogni volta?
Togliere last_time da start() e dichiararlo statico
 
Come posso usare le barre sintetiche(https://www.mql5.com/ru/articles/1353) per far lavorare la funzione all'interno dell'EA solo sui prezzi aperti? Sulle barre regolari è stato fatto dal tempo aperto della barra corrente, come questo if (Time[0] == prevtime4) return;
prevtime4=Time[0]; ma le barre sintetiche sono senza tempo... in teoria si può scrivere qui se l'offerta è il prezzo di apertura, ma non so come farlo.