Errori, bug, domande - pagina 548

 
ivandurak:

Buona notte. Ho appena iniziato a guardarlo bene. Sembra essere un chiaro bug. Cito il codice qui sotto, se commento una linea (è segnata) sembra funzionare, qual è il problema - non capisco. Non ho trovato nulla nella documentazione su questo argomento.

Non avete allocato l'array Raznica. È dichiarato ma non ha memoria allocata, allo stesso tempo non è un buffer indicatore (la memoria per i buffer è allocata automaticamente).

Qui:

   SetIndexBuffer(0,BaseMaBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,MaForMaBuffer,INDICATOR_DATA);

dite al compilatore che gli array BaseMaBuffer e MaForMaBuffer sono buffer indicatori. Gli altri array dovrebbero essere allocati attraverso

ArrayResize()
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 
ivandurak:

Buona notte. Ho appena iniziato a indagare. Sembra essere un bug evidente. Cito il codice qui sotto, se commento una riga sotto (è segnata) sembra funzionare - non capisco quale sia il problema. La situazione può essere evitata specificando una dimensione esplicita per l'array Raznica[]. Non ho trovato nulla nella documentazione su questo argomento.

Non c'è nessun bug. Si dovrebbe specificare la dimensione per gli array dinamici usando l'opzione

int  ArrayResize(
   void  array[],              // массив, переданный по ссылке
   int   new_size,             // новый размер массива
   int   reserve_size=0        // резервное значение размера (избыточное)
   );

La funzione può essere applicata solo agli array dinamici, ma dovreste tenere a mente che gli array dinamici assegnati come buffer di indicatori dalla funzione SetIndexBuffer() non possono essere ridimensionati. Per i buffer indicatori, tutte le operazioni di ridimensionamento sono eseguite dal sottosistema di esecuzione del terminale.


 
Ce l'ho, grazie per l'astuta presa per il culo. Un'altra domanda: se un array viene ridimensionato, cosa succede ai dati? E anche cambiare la direzione dell'indicizzazione come nelle serie temporali è possibile solo per l'array dinamico?
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
ivandurak:
Ho capito, grazie per la battuta intelligente. Un'altra domanda, se l'array viene ridimensionato, cosa succederà ai dati? Ed è possibile cambiare una direzione di indicizzazione come nelle serie temporali solo in un array dinamico?

I dati rimarranno al loro posto, se si riduce e poi si ripristina, è incerto (il risultato è indefinito).

Per il modo in cui la direzione di indicizzazione cambia solo il riferimento all'indice, l'array è distribuito nella stessa direzione.

Cioè, i dati non possono essere spostati ri-partizionando l'array.

 

Questo è già stato segnalato, ma il tester continua a resettare il valore del deposito iniziale definito dall'utente di 10.000 dollari.

L'insieme dei valori iniziali disponibili è piuttosto storto. Aggiungerebbe almeno 1000 dollari.

costruire 523

Win XP

 
Era così o si è rotto qualcosa... In generale, il libero accesso al metodo protetto nei non-discendenti è permesso
#include <Arrays/List.mqh>
//---------------------------------------
class CBasket;

class CFruit: public CObject {
private:
        double _weight;
protected:
        double GetWeight(){return _weight;}     
public:
        CFruit(double weight){_weight = weight;};
        ~CFruit(){};
};
//---------------------------------------
class CBasket {
private:
        CList _fruits;
protected:
public:
        CBasket(){};
        ~CBasket(){};
        double Weight() {
                double weight = 0;
                for(CFruit* f = _fruits.GetFirstNode(); f != NULL; f = _fruits.GetNextNode()) {
                        weight += f.GetWeight(); //свободный вызов protected метода другого класса
                }
                return weight;
        }
        
        void Attach(CFruit* f) {
                _fruits.Add(f);
        }
};
//---------------------------------------
int OnInit() {
        CBasket* b = new CBasket();
        
        CFruit* f1 = new CFruit(3.5);
        CFruit* f2 = new CFruit(6.5);
        b.Attach(f1);
        b.Attach(f2);
        Print(b.Weight());
      
   return(0);
}
//---------------------------------------
 

Dopo l'ottimizzazione, il file dei risultati non può essere aperto,

Build 527 + Office 2007

Il registro degli errori contiene i seguenti dati


Errore XML in "Tabella"
Causa: valore errato.
File: C:Users\Dragon\Desktop\ReportOptimizer-957640.xml
Gruppo: Cella
Tag: Dati
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

Errore XML in "Tabella".
Causa: valore errato
File: C:Users\Dragon\Desktop\ReportOptimizer-957640.xml
Gruppo: Cella
Tag: Dati
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

Errore XML in "Tabella".
Causa: valore errato
File: C:Users\Dragon\Desktop\ReportOptimizer-957640.xml
Gruppo: Cella
Tag: Dati
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

Errore XML in "Tabella".
Causa: valore errato
File: C:Users\Dragon\Desktop\ReportOptimizer-957640.xml
Gruppo: Cella
Tag: Dati
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

Errore XML in "Tabella".
Causa: valore errato
File: C:Users\Dragon\Desktop\ReportOptimizer-957640.xml
Gruppo: Cella
Tag: Dati
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

ecc.

 

Credo che tu stia ottenendo un valore vuoto.

Puoi leggere

https://www.mql5.com/ru/docs/constants/namedconstants/otherconstants

VUOTO_VALORE

Valore vuoto nel buffer dell'indicatore

DBL_MAX

DBL_MAX

Valore massimo che può essere rappresentato dal tipo doppio

1.7976931348623158e+308

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы - Документация по MQL5
 
Vigor:
Era così o si è rotto qualcosa... Comunque, è permesso accedere liberamente al metodo protetto nei non-discendenti

Grazie per il post, bug risolto, la correzione andrà nella prossima build.
 
Karlson:

Credo che tu stia ottenendo un valore vuoto.

Puoi leggere

https://www.mql5.com/ru/docs/constants/namedconstants/otherconstants

VUOTO_VALORE

Valore vuoto nel buffer dell'indicatore

DBL_MAX

DBL_MAX

Valore massimo che può essere rappresentato dal tipo doppio

1.7976931348623158e+308

E come possono entrare valori vuoti nel file? Nella finestra del tester ci sono risultati di ottimizzazione normali.