Testando 'CopyTicks'. - página 25

 
Ou talvez você o tenha torturado? :)
 
prostotrader:
Ou talvez você o tenha torturado? :)

Ele é. Ele se sente muito mal. Eu tenho que entregar a ele - ele se mete em um estupor, mas raramente.

Eu escrevi um bom indicador de carrapato. Sou preguiçoso demais para depurar falhas raras.

 
fxsaber:

Ele é. Ele se sente muito mal. Eu tenho que entregar a ele - ele se mete em um estupor, mas raramente.

Eu escrevi um bom indicador de carrapato. Eu sou preguiçoso para depurar falhas raras.

Conseguir encaixar todos os carrapatos uniformemente na vela em tempo real todas as vezes?

Adicionado:

No modo COPY_TICKS_TRADE com verificação de volume.

 
Alexey Kozitsyn:

Conseguir encaixar todos os carrapatos uniformemente na vela em tempo real todas as vezes?

Adicionado:

No modo COPY_TICKS_TRADE com verificação de volume.

Eu tenho uma ligeiramente diferente. Como "não tem análogos" e blá, blá, blá, blá.

Acho que não para o desempenho, pois foi prometido melhorar significativamente na próxima construção.

 
fxsaber:

Eu tenho uma ligeiramente diferente. Como "inigualável" e blá, blá, blá, blá.

Acho que não para o desempenho, pois foi prometido melhorar significativamente na próxima construção.

Não se trata de desempenho... Existem situações como esta, por exemplo, agora:

O indicador recolhe carrapatos e calcula o volume por eles. Em seguida, compara este volume com o volume[].

E há erros em várias situações:

Às vezes o volume da primeira vela do dia é calculado incorretamente (não coincide com a verificação);

Às vezes o volume por carrapato é calculado corretamente, mas o volume retorna um valor incorreto. 3;

3. às vezes, o volume por carrapato é calculado incorretamente, enquanto que o volume retorna um valor incorreto;

O mais interessante é que se os erros 1, 2 ou 3 ocorrerem no histórico, após a recompilação do indicador o erro não desaparece. E em caso de conexão com outro servidor, ele desaparece.

Em resumo, os milagres ainda não terminaram.

Se este post for lido por desenvolvedores e quiser entender - por favor, dirija-se diretamente ao "Service Desk", eu fornecerei todas as fontes.

 
Renat Fatkhullin:

É assim que você deve testar o CopyTicks:

MqlTick ExtArr[2048];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   ulong from   =(TimeTradeServer()-1200)*1000;
   ulong ticks  =GetMicrosecondCount();
   int   records=CopyTicks(_Symbol,ExtArr,COPY_TICKS_INFO,from,2048);

   ticks=GetMicrosecondCount()-ticks;
   Print("Time: ",ticks," msc for ",records," records");
  }

Aqui está a saída em microssegundos: 95 microssegundos por amostra de carrapatos 2048 INFO durante os últimos 20 minutos

2016.10.18 14:15:38.673 TEST (USDCHF,M1)        Time: 95 msc for 1206 records
Isto é radicalmente diferente das dezenas de milissegundos que você alegou. Isso é porque você não mediu o CopyTicks.

Travagem após o fechamento do mercado

MqlTick ExtArr[2048];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   ulong from   =(TimeCurrent()-1200)*1000;
   ulong ticks  =GetMicrosecondCount();
   int   records=CopyTicks(_Symbol,ExtArr,COPY_TICKS_INFO,from,2048);

   ticks=GetMicrosecondCount()-ticks;
   Print("Time: ",ticks," msc for ",records," records");
  }

Resultado

2016.10.29 00:31:10.952 Test (GBPUSD,M1)        Time: 85 msc for 1333 records
2016.10.29 00:31:05.435 Test (EURCHF,M1)        Time: 15283 msc for 874 records
2016.10.29 00:31:03.960 Test (EURCHF,M1)        Time: 11629 msc for 874 records
2016.10.29 00:31:02.128 Test (EURCHF,M1)        Time: 10127 msc for 874 records
2016.10.29 00:31:00.332 Test (EURCHF,M1)        Time: 7318 msc for 874 records

2016.10.29 00:30:52.049 Test (EURUSD,M1)        Time: 51 msc for 862 records

Pode parecer que isto está apenas no EURCHF. Mas assim que começamos a bombear as citações para EURUSD. Assim que o roteiro começa a rodar por dezenas de ms no EURSD. Esta desaceleração começou após o fechamento do mercado. Tudo era muito mais rápido antes do fechamento do mercado.

 

Caros desenvolvedores! O problema com CopyTicks(), e em particular a sincronização de volumes em uma vela (empilhar todos os volumes de uma vela em uma vela e compará-los com o volume[] dessa vela). E continua.

Agora temos novamente 2 erros:

1. Erro estável de controle de volume em uma vela de abertura (10,00). Testei em RTS, SBRF, Si (todos a -12,16). Erro em cada um destes símbolos!

2. Se por algum motivo houver um erro de controle de volume no castiçal depois das 10h00 em tempo real, o mesmo erro ocorre no histórico. No entanto! Se você mudar o servidor, o erro no histórico desaparece.

 

Exemplo para o cargo anterior (no erro 2):

2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:05 пройден! Контрольная сумма = 3480 (1353+2127)
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:06 пройден! Контрольная сумма = 4103 (2236+1867)
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: ОШИБКА на свече 2016.10.31 10:07! Сумма объемов на покупку = 1074, сумма объемов на продажу = 3917, контрольная сумма (покупки+продажи) = 5009
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:08 пройден! Контрольная сумма = 3121 (1479+1642)
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:09 пройден! Контрольная сумма = 3760 (1046+2714)

Isto é antes da troca do servidor. E aqui está o log após a troca do servidor:

2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:05 пройден! Контрольная сумма = 3480 (1353+2127)
2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:06 пройден! Контрольная сумма = 4103 (2236+1867)
2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:07 пройден! Контрольная сумма = 5009 (1082+3927)
2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:08 пройден! Контрольная сумма = 3121 (1479+1642)
2016.10.31 12:18:12.110 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:09 пройден! Контрольная сумма = 3760 (1046+2714)

Aqui está, a "BORDER" localizada! Eu mesmo não desenho aqui o controle, os valores entre parênteses não se ajustam, eu não preciso dele. Mas há um erro, e ele pode ser corrigido mudando o servidor!

Este é o registro do controle do histórico (ao iniciar o indicador/clicar o botão "refresh").

 

E agora observações sobre o erro nº 1.

Algum tempo após a abertura do mercado (já se passaram cerca de 40 minutos). Com o recálculo completo do indicador - não há erro de controle da vela às 10.00 horas! Mesmo sem trocar o servidor. Como se alguém baixasse o histórico para o servidor.

 

Outra observação sobre o erro nº 2:

Если по какой-то причине возникает ошибка контроля объемов на свече после 10.00 в реальном времени, то эта же ошибка возникает и на истории. Однако! Если изменить сервер - ошибка на истории пропадает. 

Parece que os carrapatos que anteriormente eram recebidos localmente estão em cache na máquina e só são sobregravados após uma troca de servidor. Isso seria bom, mas no caso de serem recebidos na íntegra! Mas, ao que parece, os erros da história se acumulam. E a única maneira de se livrar deles é mudar o servidor comercial (pelo menos eu sei apenas desta maneira).