Errori, bug, domande - pagina 896

 

Saluti!

MT5 Optimizer - CustomMax calcola correttamente?

Sto eseguendo l'ottimizzatore (ottimizzazione genetica) in MT5 5.00 build 722 e accidentalmente ho notato che i risultati dell'ottimizzazione sono calcolati in modo inaspettato.

L'Expert Advisor ritorna OnTester():

Profit * Trades * (1/(MaxEquityDDPercent+1)) * RecoveryFactor

Dove:

   double Profit = TesterStatistics(STAT_PROFIT);

   double Trades = TesterStatistics(STAT_TRADES);

   double MaxEquityDDPercent = TesterStatistics(STAT_EQUITY_DDREL_PERCENT);

   double RecoveryFactor = MathAbs(TesterStatistics(STAT_RECOVERY_FACTOR));

Ci si aspettava che con un fattore di profitto e di recupero più piccolo il risultato sarebbe stato minore, ma non è così - vedi lo screenshot.


È qualcosa che non capisco bene?

 
MetaDriver:

Bene, muoviamoci:

Ma temo che non vi piacerà. A me, per esempio, non piace - il grafico si contrae e si raddoppia. E volevo fare meglio - spostarlo dolcemente al posto giusto...

// La cosa interessante è che funziona due volte più velocemente con ChartRedraw() che senza. Allo stesso tempo, sobbalza di più.

C'è ancora un problema con ChartNavigate(). Verrà aggiustato un giorno? O non è considerato un bug?

C'è già un post su questo argomento in Service Desk? O per aggiungerne altri? ))

 

Errore di esecuzione: Stack overflow

class A {
        static  bool OrderSend( const MqlTradeRequest& request, MqlTradeResult& result, bool async_mode = false )
	void function();
};
void A::function()
{...
	OrderSend(...) // ошибка выполнения возникает здесь
	A::OrderSend(...) // не помогает
...}

Se sostituiamo OrderSend con qualsiasi altro nome, tutto va bene

la presenza di statica non influisce sull'errore

chiamando A::OrderSend()- l'errore non è influenzato

 
A100:

Errore di esecuzione di stack overflow

Se sostituisci OrderSend con qualsiasi altro nome, va bene


perché il contesto deve essere risolto

::OrdineInvia

 

Penso che non sto chiamando ::OrderSend, ma A::OrderSend()

dovrebbe funzionare

 
A100:

Penso che non sto chiamando ::OrderSend, ma A::OrderSend()

A quale linea stai pensando?

che avete appena

void A::function()
{...
	OrderSend(...) // ошибка выполнения возникает здесь
вызывается именно ваша A::OrderSend
Se volete chiamare il terminale, fate :: prima di Ordersend
 
Grazie, ho trovato la ragione - ritiro la domanda - l'ho bloccata io stesso
 
A100:
Grazie, ho trovato la ragione - rimuovo la domanda - l'ho messa in loop io stesso

Ho capito che ti sei chiamato nel tuo Ordersend senza ::

Mi ci sono ritrovato subito, quando ho ridefinito Print e Comment in classe. ora lo faccio sempre :)

 
sergeev:

Ho capito che ti sei chiamato nel tuo Ordersend senza ::

Beh, sì, anche se A::OrderSend ha 3 (tre) parametri, maquest'ultimo è il default e il compilatore non potrebbe (e non dovrebbe) distinguere da ::OrderSend per il numero di parametri
 
Puoi dirmi come creare un sondaggio sul forum?