Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 989

 

Salve. Per favore, mostratemi dov'è l'errore.

void OnStart()
  {
datetime current_time=TimeCurrent();
//datetime current_time=D'2019.10.18 19:55:00';
datetime our_time=(current_time-60)-MathMod((current_time-60),60);
datetime t1=our_time;
datetime t2=our_time+60;
PrintFormat("current_time=%s",TimeToString(current_time,TIME_DATE|TIME_MINUTES|TIME_SECONDS));
PrintFormat("our_time=%s",TimeToString(our_time,TIME_DATE|TIME_MINUTES|TIME_SECONDS));
string stock="MSFT";
MqlTick tick_array[];// массив для приема тиков
int received=CopyTicksRange(stock, tick_array, COPY_TICKS_TRADE, t1*1000, t2*1000);
Print(stock," Всего тиков ",received);
Print(tick_array[0].time,": Last = ",tick_array[0].last,"  Volume = ",tick_array[0].volume );
ulong total=tick_array[0].volume; ulong buy=tick_array[0].volume; ulong sell=0; bool flag='b';
int ticks=ArraySize(tick_array); double pprice=tick_array[0].last; int i=1;
while(i<ticks)
      { 
        total=total+tick_array[i].volume;//{считаем общий объем}
        if (pprice<tick_array[i].last)  flag='b';//{если пред.тик меньше зн.'b'}
        if (pprice<=tick_array[i].last)
            if (flag='b')
                buy=buy+tick_array[i].volume;//{считаем,что сделка по BID} 
        if (pprice>tick_array[i].last)  flag='s';//{если пред.тик больше зн.'s'} 
        if (pprice>=tick_array[i].last)
            if (flag='s')
               sell=sell+tick_array[i].volume;//{считаем,что сделка по ASK}
        pprice=tick_array[i].last;//{ставим счетчик на последн. тик}
        i=i+1; 
      }               
Print (total," ",buy," ",sell);       
  }
 
werter:

Salve. Potresti per favore mostrarmi dov'è l'errore?

da qualche parte nel codice

 
Vladimir Pastushak:

da qualche parte nel codice.

Esilarante.

Questo è BuySellVolume. Il volume totale non è uguale alla somma di Buy e Sell, ma solo leggermente superiore.

 

Cosa può significare il 'inf' nell'indicatore sul MLQ5?

È la prima volta che mi capita e non ho trovato nulla nella ricerca della documentazione

 
Alexandr Sokolov:

Cosa può significare il 'inf' nell'indicatore sul MLQ5?

È la prima volta che mi capita e non ho trovato nulla nella ricerca della documentazione

Non una buona ricerca: una ricerca INF produce diversi risultati.

Per esempio guarda in MathLog

Valore di ritorno

Il logaritmo naturale del valore in caso di successo. Se val è negativo, la funzione restituisce NaN (valore non definito). Se il valore è 0, la funzionerestituisce INF (infinito).


Questo risultato significa: il codice ha un errore nell'algoritmo di calcolo del valore (per esempio ci dimentichiamo di inizializzare le variabili - speriamo nel peggio, nelle operazioni di divisione non pensiamo ...).

Поиск - MQL5.community
Поиск - MQL5.community
  • www.mql5.com
Поиск выполняется с учетом морфологии и без учета регистра. Все буквы, независимо от того, как они введены, будут рассматриваться как строчные. По умолчанию наш поиск показывает страницы...
 
Vladimir Karputov:

Non una buona ricerca: una ricerca INF produce diversi risultati.

Per esempio guarda in MathLog

Valore restituito

Il logaritmo naturale del valore in caso di successo. Se val è negativo, la funzione restituisce NaN (valore non definito). Se il valore è 0, la funzione restituisce INF (infinito).


Questo risultato significa: il codice contiene un errore nell'algoritmo di calcolo del valore (per esempio ci dimentichiamo di inizializzare le variabili - speriamo nel peggio, nelle operazioni di divisione non pensiamo ...).

Questo è tutto quello che ho trovato nella ricerca >>> documentazione (ma non ho letto ogni descrizione, la trovo sempre per titolo - abitudine)


Sull'inizializzazione delle variabili (o ti ho frainteso o l'ho sentito per la prima volta), per esempio:

double a = 0, b;

... Non è abbastanza? Di solito dichiaro le variabili e uso

 
Alexandr Sokolov:

Ecco tutto quello che ho visto nella mia ricerca >>> documentazione (ma non ho letto la descrizione di ciascuno, la trovo sempre dal titolo - abitudine)

***

Cattiva abitudine.


Alexandr Sokolov:


... non è abbastanza? Di solito dichiaro le variabili e uso

E qui arriva il "cigno nero" - la variabile b non è inizializzata, può contenere qualsiasi schifezza.

 
Alexandr Sokolov:

Cosa può significare il 'inf' nell'indicatore sul MLQ5?

È la prima volta che mi capita e non ho trovato nulla nella ricerca della documentazione

Ho capito qual è il problema!

Se avete inizializzato i buffer EMPTY_VALUE

ArrayInitialize(Bufer,EMPTY_VALUE);

... poi in ulteriori calcoli avete copiato o calcolato un numero insufficiente di serie temporali e poi moltiplicate qualsiasi valore per EMPTY_VALUE dal buffer - ottenete inf


Qui ho appena aleritato, e solo moltiplicando per EMPTY_VALUE si ottiene inf


 
Vladimir Karputov:

Grazie

 
Alexandr Sokolov:

Ho capito qual è il problema!

Se avete inizializzato i buffer EMPTY_VALUE

... poi in ulteriori calcoli avete copiato o calcolato un numero insufficiente di serie temporali e poi moltiplicate qualsiasi valore per EMPTY_VALUE dal buffer - poi ottenete inf


Qui ho appena alerato, e solo quando si moltiplica per EMPTY_VALUE si ottiene inf


Sembra che tu abbia trovato la ragione. Così, quando si inizializza un buffer con EMPTY_VALUE, durante le operazioni aritmetiche dovremmo prima controllare "EMPTY_VALUE è accidentalmente presente nel buffer a questo indice?