Errori, bug, domande - pagina 1241

 
barabashkakvn:

La ricerca degli aggiornamenti viene attivata quando ci si connette al server MetaQuotes-Demo. È possibile nei seguenti casi:

  1. Passare un conto di trading da un altro conto a un conto di trading aperto su MetaQuotes-Demo;
  2. Quando si riavvia il terminale.
Grazie.
 
joo:

:O

No, l'errore non appare più.

Schrodinger camminava per la stanza alla ricerca di un gattino malconcio, ma era seduto in una scatola né morto né vivo. )))

 
tol64:

Schrodinger camminava per la stanza alla ricerca di un gattino malconcio, ma il gattino era seduto in una scatola né morto né vivo. )))

Davvero molto strano. Cosa smetterà di funzionare la prossima volta?
 
joo:
Davvero molto strano. Cosa smetterà di funzionare la prossima volta?
Non si può dire. Dovremo fare un controllo. )
 
joo:

Ho messo le stampe al loro posto - l'errore è sparito...

L'effetto osservatore nella meccanica quantistica è qualcosa...

Abbiamo riprodotto la tua situazione solo quando abbiamo infilato NaN nell'espressione.
 
Renat:
Abbiamo riprodotto la tua situazione solo quando abbiamo infilato NaN nell'espressione.

quindi fabs funziona correttamente o no?

 
joo:

fabs funziona correttamente o no?

Giusto.
 

Buon pomeriggio, sto chiedendo aiuto per implementare quello che penso sia uno schema semplice.

Ho un EA che funziona bene su un simbolo. Voglio "modificarlo" in modo che funzioni per più simboli contemporaneamente. Per questo, ho bisogno di creare correttamente un array di dati, i cui membri potrebbero essere accessibili da tutte le istanze dell'EA collegate a diversi simboli. Cioè c'è un solo array di dati, ma ci sono più istanze dell'EA. Ogni istanza EA può leggere e modificare i membri dell'array.

Da quanto ho capito, è necessario creare un array con membri statici (static).

Un semplice esempio: contate il numero totale di tick su tutti i grafici, dove gli EA sono collegati. Colleghiamo l'EA a 2 grafici e sull'evento OnTick() aumentiamo il contatore di 1. Per semplicità, ho provato a usare un contatore statico variabile invece dell'array. Purtroppo, ogni EA funziona solo con il suo contatore, il contatore non è "comune". Risultato:

symbol1, tick1 : contatore = 0;

simbolo1, tick2 : contatore = 1;

simbolo2, tick1 : contatore = 0; - qui ci si aspettava un contatore = 2

Per esempio, ho creato una semplice classe con un contatore:

//+------------------------------------------------------------------+
//|                                                   TestStatic.mqh |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class TestStatic
  {
private:
static int counter;
public:
                     TestStatic();
                    ~TestStatic();

static void IncreaseCounter();
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
TestStatic::TestStatic()
  {
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
TestStatic::~TestStatic()
  {
  }
//+------------------------------------------------------------------+
int TestStatic::counter=0;
TestStatic::IncreaseCounter()
  {
   Print("Symbol: "+_Symbol +", counter: "+ TestStatic::counter);
   TestStatic::counter++;
  };

Ecco il codice EA:

//+------------------------------------------------------------------+
//|                                                Exp_testMulti.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
#include <TestStatic.mqh>

static string tickCounter[2][2];

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
  
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   TestStatic::IncreaseCounter();
    
  }
//+------------------------------------------------------------------+

Per favore, aiutatemi a capirlo, grazie mille in anticipo!

 
VangoghFX:

Buon pomeriggio, sto chiedendo aiuto per implementare quello che penso sia uno schema semplice.

Ho un EA che funziona bene su un simbolo. Voglio "modificarlo" in modo che funzioni per più simboli contemporaneamente. Per questo, ho bisogno di creare correttamente un array di dati, i cui membri potrebbero essere accessibili da tutte le istanze dell'EA collegate a diversi simboli. Cioè c'è un solo array di dati, ma ci sono più istanze dell'EA. Ogni istanza EA può leggere e modificare i membri dell'array.

Da quanto ho capito, è necessario creare un array con membri statici (static).

Un semplice esempio: contate il numero totale di tick su tutti i grafici, dove gli EA sono collegati. Colleghiamo l'EA a 2 grafici e sull'evento OnTick() aumentiamo il contatore di 1. Per semplicità, ho provato a usare un contatore statico variabile invece dell'array. Purtroppo, ogni EA funziona solo con il suo contatore, il contatore non è "comune". Risultato:

symbol1, tick1 : contatore = 0;

simbolo1, tick2 : contatore = 1;

simbolo2, tick1 : contatore = 0; - qui ci si aspettava un contatore = 2

Per esempio, ho creato una semplice classe con un contatore:

Ecco il codice EA:

Per favore, aiutatemi a capirlo, grazie mille in anticipo!

Pomeriggio. In particolare, per implementare il tuo esempio con tick, variabili globali di terminale (c'è stato recentemente pubblicato un articolo su questo argomento). A proposito di una tale serie... Non sono sicuro, dovrei provare. Ma posso suggerire un'altra variante. In un unico Expert Advisor, prescrivere i simboli necessari per il lavoro e fare, come hai suggerito, una matrice statica/globale dei dati necessari. E lasciate che l'EA faccia un loop su tutti i simboli richiesti.
 
Tapochun:
Buon pomeriggio. In particolare per il tuo esempio con i tick, le variabili globali del terminale funzioneranno (c'era un articolo su questo recentemente). A proposito di una tale serie... Non sono sicuro, ho bisogno di provare. Ma posso suggerire un'altra variante. In un unico Expert Advisor, prescrivere i simboli necessari per il lavoro e fare, come hai suggerito, una matrice statica/globale dei dati necessari. E lasciate che l'Expert Advisor esegua un ciclo su tutti i simboli necessari.

Grazie mille per la sua risposta.

Ho usato l'esempio con le zecche come il più semplice e illustrativo per descrivere l'idea generale. L'Expert Advisor utilizza algoritmi più complessi.

Non mi piace la variante in cui N simboli sono scritti in un EA perché è troppo ingombrante e difficile da usare. Ci sono diversi articoli su questo argomento sul portale, e li ho visti: ma non mi piacciono i grandi cicli, gli array, la copia di dati, un sacco di pacchetti di variabili per ogni simbolo, ecc. Voglio usare un approccio più semplice e più efficiente, a mio parere: un codice di EA per ogni simbolo (il simbolo è determinato dal grafico, al quale l'EA è collegato) - e ogni copia dell'EA lavora in parallelo con le altre. Ma in questo caso, le informazioni analitiche, necessarie per prendere decisioni, sono condivise tra loro.

L'idea di avere variabili globali mi ha visitato, ma è più un approccio procedurale, e voglio usare tutti i vantaggi dell'OOP. Ho intenzione di scrivere una classe separata che passi i dati analitici necessari agli Expert Advisors sotto forma di un array e permetta loro di prendere decisioni di trading.

Motivazione: