Erros, bugs, perguntas - página 2279

 
Vladislav Andruschenko:

estava prestes a responder, mas VOCÊ respondeu à sua própria pergunta.

Obrigado pela confirmação)

 

Boa tarde,

Pode fazer com que estas chamadas de função funcionem no teste de estratégia, por favor? Obrigado!

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

 
Por alguma razão, todas as ordens de mercado no InstaForex-Server são executadas por mais de um segundo
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

Ao mesmo tempo, os pendentes estão próximos do ping. Qual pode ser a razão de um tal enviesamento na demonstração?

 

Quando actualizei o produto no mercado, preenchi as páginas inglês/russo com uma descrição do que mudou e publiquei a nova versão, mas nada da minha descrição apareceu na secção "o que há de novo" do meu produto.

Nem sequer posso editar esta descrição, pois não existe qualquer documento contra a versão mais recente.

onde está a descrição das alterações ?

 
Tetyana Shcherba:

Quando actualizei o produto no mercado, preenchi as páginas inglês/russo com uma descrição do que mudou e publiquei a nova versão, mas nada da minha descrição apareceu na secção "o que há de novo" do meu produto.

Mesmo nenhuma possibilidade de editar esta descrição, uma vez que não há nenhum documento contra a última versão.


A mesma coisa, pensei que era uma falha.

 

Depois de seleccionar o item do menu "Executar teste único".

não há nada que indique que esteja em curso e tenha sido realizado um teste único apropriado. É uma boa ideia mudar para o separador "Gráfico" se a única execução for bem sucedida, ou para o separador "Registo" se falhar.


Pode parecer uma pequena picada cosmética.

 
Nikolai Semko:

Quando preciso de preencher parte de um grande conjunto com um único valor Z, utilizo uma construção:


Muitas pessoas dirão - porque é que é tão complicado, pode ser mais simples:

Mas por alguma razão desconhecida, a primeira variante que utiliza uma matriz intermédia tem um desempenho muito mais rápido do que a segunda

Já escrevi sobre esta questão à SD há um par de anos. Recebi uma resposta dizendo que tinha encontrado e resolvido o problema e que estaria tudo bem na próxima construção.

Mas o problema persiste.

Tenho o mesmo teste em MT4:

Encontrou uma peculiaridade de operação de memória no Windows

logo após o ArrayResize adicionar

ArrayFill(arr,0,size,0);
Isto inicia a alocação real da memória física para que isto não aconteça durante o teste.


Aqui estão os resultados do meu computador

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:

Encontrou uma peculiaridade de memória no Windows

Imediatamente após o ArrayResize adicionar

Isto inicia a alocação real da memória física para que isto não aconteça durante o teste.

O que mede então o perfilador incorporado no ME no ArrayResize?

 
fxsaber:

O que mede então o perfilador incorporado no ME no ArrayResize?

Mede o tempo de funcionamento da função ArrayResize.

O código de teste TestArrayFill é construído de tal forma que a memória "fria" é atribuída para a matriz, sem qualquer hipótese de obter memória "quente".


Para ser claro, o ArrayResize atribui memória virtual (ou processar memória), mas não há garantia de que a memória virtual obtenha imediatamente (ou já tenha) páginas físicas.

Windows, irá alocar memória física conforme necessário, a primeira vez que a página de memória virtual é acedida.
A página tem 4KB de tamanho, ou seja, para "aquecer", nem todos os elementos poderiam ser zerados via ArrayFill (como escrevi) mas apenas a cada 4096 / tamanho de (tipo de elemento de matriz) a partir de zero.


Uma vez que a zeragem das variáveis é garantida em MQL4, o ArrayResize em MT4 corre através da zeragem do array, pelo que não há aí nenhum efeito de memória "fria".

 
Ilyas:

Subtileza, no entanto. Obrigado! A Documentação está provavelmente muito atrasada para um spoiler "Subtilety".