Errori, bug, domande - pagina 2279

 
Vladislav Andruschenko:

stava per rispondere, ma TU hai risposto alla tua stessa domanda.

Grazie per la conferma)

 

Buon pomeriggio,

Potresti far funzionare queste chiamate di funzione nel test della strategia, per favore? Grazie!

bool scaleFix=false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   ChartSetInteger(ChartID(),CHART_SCALEFIX,true);
   scaleFix=ChartGetInteger(ChartID(),CHART_SCALEFIX);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//---
   if(rates_total!=prev_calculated)  
     {
      double max=iHigh(_Symbol,_Period,iHighest(_Symbol,_Period,MODE_HIGH,Period)); 
      double min=iLow (_Symbol,_Period, iLowest(_Symbol,_Period,MODE_LOW, Period));
      if(scaleFix && ChartSetDouble(ChartID(),CHART_FIXED_MAX,max))
         printf("Chart fixed max is %f, should be %f",ChartGetDouble(ChartID(),CHART_FIXED_MAX),max); 
      if(scaleFix && ChartSetDouble(ChartID(),CHART_FIXED_MIN,min))
         printf("Chart fixed min is %f, should be %f",ChartGetDouble(ChartID(),CHART_FIXED_MIN),min); 
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
2018.09.06 12:54:55.757 2018.09.04 12:00:00   Chart fixed max is 1.171770, should be 1.162740
2018.09.06 12:54:55.758 2018.09.04 12:00:00   Chart fixed min is 1.158410, should be 1.155760
2018.09.06 12:54:55.765 2018.09.04 13:00:00   Chart fixed max is 1.171770, should be 1.162670
2018.09.06 12:54:55.765 2018.09.04 13:00:00   Chart fixed min is 1.158410, should be 1.155590
2018.09.06 12:54:55.772 2018.09.04 14:00:00   Chart fixed max is 1.171770, should be 1.162280
2018.09.06 12:54:55.772 2018.09.04 14:00:00   Chart fixed min is 1.158410, should be 1.154940
2018.09.06 12:54:55.781 2018.09.04 15:00:00   Chart fixed max is 1.171770, should be 1.162070
2018.09.06 12:54:55.781 2018.09.04 15:00:00   Chart fixed min is 1.158410, should be 1.154940
2018.09.06 12:54:55.789 2018.09.04 16:00:00   Chart fixed max is 1.171770, should be 1.162020
2018.09.06 12:54:55.789 2018.09.04 16:00:00   Chart fixed min is 1.158410, should be 1.154940
2018.09.06 12:54:55.799 2018.09.04 17:00:00   Chart fixed max is 1.171770, should be 1.161980
2018.09.06 12:54:55.800 2018.09.04 17:00:00   Chart fixed min is 1.158410, should be 1.153890

 
Per qualche motivo tutti gli ordini di mercato vengono eseguiti più a lungo di un secondo sul server InstaForex
2018.09.06 14:08:22.754 Trades  '9424479': instant buy 0.01 CADCHF at 0.7360 (deviation: 1000)
2018.09.06 14:08:22.936 Trades  '9424479': accepted instant buy 0.01 CADCHF at 0.7360 (deviation: 1000)
2018.09.06 14:08:23.944 Trades  '9424479': deal #9539619 buy 0.01 CADCHF at 0.7360 done (based on order #10514041)
2018.09.06 14:08:23.944 Trades  '9424479': order #10514041 buy 0.01 / 0.01 CADCHF at 0.7360 done in 1195.200 ms
2018.09.06 14:08:23.944 Trades  '9424479': modify #10514041 buy 0.01 CADCHF sl: 0.0000, tp: 0.0000 -> sl: 0.0000, tp: 0.8350
2018.09.06 14:08:24.134 Trades  '9424479': accepted modify #10514041 buy 0.01 CADCHF sl: 0.0000, tp: 0.0000 -> sl: 0.0000, tp: 0.8350
2018.09.06 14:08:24.134 Trades  '9424479': modify #10514041 buy 0.01 CADCHF -> sl: 0.0000, tp: 0.8350 done in 184.895 ms
2018.09.06 14:08:24.134 Trades  '9424479': instant sell 0.01 CADCHF at 0.7350, close #10514041 buy 0.01 CADCHF 0.7360 (deviation: 1000)
2018.09.06 14:08:24.314 Trades  '9424479': accepted instant sell 0.01 CADCHF at 0.7350, close #10514041 buy 0.01 CADCHF 0.7360 (deviation: 1000)
2018.09.06 14:08:25.323 Trades  '9424479': deal #9539620 sell 0.01 CADCHF at 0.7350 done (based on order #10514042)
2018.09.06 14:08:25.323 Trades  '9424479': order #10514042 sell 0.01 / 0.01 CADCHF at 0.7350 done in 1193.896 ms
2018.09.06 14:08:25.323 Trades  '9424479': buy limit 0.01 CADCHF at 0.6360
2018.09.06 14:08:25.509 Trades  '9424479': accepted buy limit 0.01 CADCHF at 0.6360
2018.09.06 14:08:25.510 Trades  '9424479': order #10514043 buy limit 0.01 / 0.01 CADCHF at market done in 181.861 ms
2018.09.06 14:08:25.510 Trades  '9424479': cancel order #10514043 buy limit 0.01 CADCHF at 0.6360
2018.09.06 14:08:25.691 Trades  '9424479': accepted cancel order #10514043 buy 0.00  at market
2018.09.06 14:08:25.691 Trades  '9424479': cancel #10514043 buy limit 0.01 CADCHF at market done in 181.474 ms
2018.09.06 14:08:25.692 Trades  '9424479': buy stop 0.01 CADCHF at 0.8360
2018.09.06 14:08:25.878 Trades  '9424479': accepted buy stop 0.01 CADCHF at 0.8360
2018.09.06 14:08:25.882 Trades  '9424479': order #10514044 buy stop 0.01 / 0.01 CADCHF at market done in 190.823 ms
2018.09.06 14:08:25.883 Trades  '9424479': cancel order #10514044 buy stop 0.01 CADCHF at 0.8360
2018.09.06 14:08:26.062 Trades  '9424479': accepted cancel order #10514044 buy stop 0.01 CADCHF at 0.8360
2018.09.06 14:08:26.062 Trades  '9424479': cancel #10514044 buy stop 0.01 CADCHF at market done in 183.056 ms

Allo stesso tempo, quelli in sospeso sono vicini al ping. Quale può essere la ragione di questo skew sul demo?

 

Quando ho aggiornato il prodotto nel marketplace ho riempito le pagine in inglese/russo con una descrizione di ciò che è cambiato e ho pubblicato la nuova versione, ma niente della mia descrizione è apparso nella sezione "cosa c'è di nuovo" del mio prodotto.

Non posso nemmeno modificare questa descrizione perché non c'è nessun documento contro l'ultima versione.

dov'è la descrizione dei cambiamenti?

 
Tetyana Shcherba:

Quando ho aggiornato il prodotto nel marketplace ho riempito le pagine in inglese/russo con una descrizione di ciò che è cambiato e ho pubblicato la nuova versione, ma niente della mia descrizione è apparso nella sezione "cosa c'è di nuovo" del mio prodotto.

Non c'è nemmeno la possibilità di modificare questa descrizione perché non c'è nessun documento contro l'ultima versione.


Stessa cosa, pensavo fosse un problema tecnico.

 

Dopo aver selezionato la voce di menu "Run single test"

non c'è nulla che indichi che un singolo test appropriato è in corso ed è stato eseguito. È una buona idea passare alla scheda "Graph" se l'esecuzione singola ha successo, o alla scheda "Log" se fallisce.


Può sembrare un piccolo inconveniente cosmetico.

 
Nikolai Semko:

Quando ho bisogno di riempire parte di un grande array con un singolo valore Z, uso una costruzione:


Molte persone diranno - perché è così complicato, può essere più semplice:

Ma per qualche ragione sconosciuta, la prima variante che usa un array intermedio è molto più veloce della seconda

Ho già scritto su questa questione a SD un paio di anni fa. Ho ricevuto una risposta che diceva che avevo trovato e risolto il problema e che sarebbe stato ok nella prossima build.

Ma il problema persiste.

Ho lo stesso test in MT4:

Avete riscontrato una particolarità del funzionamento della memoria in Windows

Subito dopo ArrayResize aggiungete

ArrayFill(arr,0,size,0);
Questo avvia l'effettiva allocazione della memoria fisica in modo che questo non accada durante il test.


Ecco i risultati dal mio computer

2018.09.06 16:25:44.238 TestArrayFill (EURUSD,H1)       Время заполнения через ArrayFill = 94
2018.09.06 16:25:44.238 TestArrayFill (EURUSD,H1)       Время заполнения через ArrayInitialize + ArrayCopy = 147
 
Ilyas:

Siete incappati in una particolarità della memoria in Windows

Subito dopo ArrayResize aggiungete

Questo avvia l'effettiva allocazione della memoria fisica in modo che questo non accada durante il test.

Cosa misura allora il profiler integrato di ME su ArrayResize?

 
fxsaber:

Cosa misura allora il profiler integrato di ME su ArrayResize?

Misura il tempo di esecuzione della funzione ArrayResize.

Il codice del test TestArrayFill è costruito in modo tale che la memoria "fredda" sia allocata per l'array, senza possibilità di ottenere memoria "calda".


Per essere chiari, ArrayResize alloca la memoria virtuale (o la memoria di processo), ma non c'è garanzia che la memoria virtuale ottenga immediatamente (o abbia già) pagine fisiche.

Windows alloca la memoria fisica come necessario, la prima volta che si accede alla pagina di memoria virtuale.
La pagina è di 4KB, cioè per "scaldarsi", non tutti gli elementi potrebbero essere azzerati tramite ArrayFill (come ho scritto) ma solo ogni 4096 / sizeof(array element type) partendo da zero.


Dal momento che l'azzeramento delle variabili è garantito in MQL4, ArrayResize in MT4 attraversa l'array azzerandolo, quindi non c'è alcun effetto di memoria "fredda".

 
Ilyas:

La sottigliezza, però. Grazie! La Documentazione è probabilmente in ritardo per uno spoiler di "Sottigliezza".