Errori, bug, domande - pagina 1261

 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Le applicazioni mobili MetaTrader 4 e MetaTrader 5 per Android sono state aggiornate

pav36krs, 2014.12.20 10:21

I miei amici aiutano!!! Ho scaricato Metatrader, e non si avvia in 32 bit sul mio Windows 64 bit. Questa è la prima volta che ho incontrato un tale problema prima di installare Metatrader da alpha forex, e tutto ha funzionato bene.

 

Errori nelle operazioni bitwise.

Print(int(1)<<34);

Otteniamo 4, che dovrebbe essere 0. Quanti anni di lucidatura di MT, e ancora questi errori.

 

E cosa, il compilatore non ha giurato su questo offset? Ne dubito.

Comunque, questo è quello che volevamo.

00000000000000000000000000000001 << 34
00000000000000000000000000000100
 
GVladimir:

E cosa, il compilatore non ha giurato su questo offset? Ne dubito.

Comunque, questo è quello che volevamo.

Evidentemente non sai molto bene come funzionano gli spostamenti di bit. Non ci può essere niente nei bit di ordine inferiore. Nel dubbio, C++ è il tuo aiuto.
 
meat:
Niente può accadere lì nei bit di ordine inferiore.
In MQL credo che tutti gli spostamenti di bit siano implementati come ciclici (ROL/ROR), (che probabilmente non conoscete, perché né C né C++ li hanno) proprio per queste situazioni
 
GVladimir:
In MQL credo che tutti gli spostamenti di bit siano implementati come spostamenti ciclici (ROL/ROR), (che probabilmente non conoscete, perché né C né C++ li hanno) proprio per queste situazioni

La documentazione MQL non dice nulla su uno spostamento ciclico, quindi si assume il solito spostamento. Ma vi ho trovato la seguente frase

Non è raccomandato spostare un numero di bit maggiore o uguale al numero di bit nella variabile che viene spostata, perché il risultato di questa operazione è indefinito.

Questo non è corretto. Non ci può essere un risultato indefinito nelle operazioni bitwise. È solo che il bit di partenza è memorizzato in un flag speciale o non memorizzato, ma questo non ha alcun effetto sull'algoritmo di spostamento, cioè i bit di destra sono comunque riempiti di zeri. Se è uno spostamento ciclico, questo deve essere esplicitamente dichiarato (anche se un normale spostamento compatibile con C++ sarebbe più corretto).

 

è possibile collegare un indicatore compilato dalla vecchia build come risorsa a un altro indicatore?

Non riesco a farlo funzionare in questo modo:

........ 

#resource "\\Indicators\\тфьу.ex4"

........ 

int OnCalculate(const int rates_total,

                const int prev_calculated,

                const datetime &time[],

                const double &open[],

                const double &high[],

                const double &low[],

                const double &close[],

                const long &tick_volume[],

                const long &volume[],

                const int &spread[])

  {

........ 

ExtLimeBuffer[i]=iCustom(_Symbol,0,"::Indicators\\тьфу.ex4",pr1,pr2,pr3,pr4,pr5,pr6,pr7,2,i);

........ 

  return(rates_total);

}


 

il compilatore dice questo:

unknown resource type 'C:\Program Files\MT4\MQL4\Indicators\тфьу.ex4' тфьу1.mq4 10 1

 

 


 
meat:

La documentazione MQL non dice nulla su uno spostamento ciclico, quindi assume uno spostamento normale. Tuttavia, ho trovato una frase simile lì:

Questo non è corretto. Non ci può essere un risultato indefinito nelle operazioni bitwise. È solo che il bit di partenza è memorizzato in un flag speciale, o non memorizzato, ma questo non influenza l'algoritmo di spostamento, cioè i bit di destra sono comunque riempiti di zeri. Se si tratta di uno spostamento ciclico, è necessario specificarlo esplicitamente (anche se uno spostamento compatibile con plain++ sarebbe più corretto).

Può essere.

Un massimo di 5 bit per gli interi a 32 bit (o 6 bit per gli interi a 64 bit) deve essere coinvolto nelle operazioni di spostamento. Se un valore di spostamento richiede più di 5 (o 6) bit, processori diversi gestiscono questa situazione in modo diverso. Nella documentazione, abbiamo appena riflesso questo fatto dicendo che il risultato dell'operazione è indefinito.

Документация по MQL5: Торговые функции / OrderCalcProfit
Документация по MQL5: Торговые функции / OrderCalcProfit
  • www.mql5.com
Торговые функции / OrderCalcProfit - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
sanyooooook:

...
il compilatore scrive così:

unknown resource type 'C:\Program Files\MT4\MQL4\Indicators\тфьу.ex4' тфьу1.mq4 10 1

A quanto pare il compilatore è più intelligente di quanto sembri. Vuole trovare il codice sorgente di tfu1.mq4 e poi allegarlo come risorsa.