Testando 'CopyTicks'. - página 39

 
 
fxsaber:

Eles não devem ser lentos e dependentes do servidor comercial.

Velocidade de entrega: o terminal armazena 4096 últimos ticks para cada símbolo em cache para acesso rápido (para símbolos com estatísticas de execução - 65536 ticks), os pedidos a estes dados são mais rápidos. Ao solicitar ticks da sessão de negociação atual fora do cache, CopyTicks() acessa ticks já armazenados na memória do terminal, estes pedidos levam mais tempo para serem executados. As mais lentas são as solicitações de carrapatos para outros dias, pois neste caso os dados são lidos a partir do disco.

Se os terminais estiverem no mesmo disco, você está certo.

Você já realizou vários testes? Você está constantemente sofrendo atrasos em um determinado servidor? Caso o disco estivesse ocupado com alguma outra operação no momento do teste.

 
Alexey Kozitsyn:

Se os terminais estiverem no mesmo drive, você está certo.

Você já realizou vários testes? A latência é constante em um determinado servidor? Só para o caso de a unidade estar ocupada com alguma outra operação no momento do teste.

É 100% reprodutível. O terminal é o mesmo.

 

Como obter carrapatos no indicador OnDeinit? Quero receber carrapatos, que já existem nos arquivos tkc e que são dados quase instantaneamente. Mas como determinar quais carrapatos estão lá e quais não estão?

Por trás de toda a aparente atratividade da simplicidade do CopyTicks, existem na verdade armadilhas escondidas, impossíveis de serem evitadas devido à funcionalidade limitada por causa deste apelo externo novamente.

 
fxsaber:

Como obter carrapatos no indicador OnDeinit? Quero receber carrapatos, que já existem nos arquivos tkc e que são dados quase instantaneamente. Mas como determinar quais carrapatos estão lá e quais não estão?

Por trás de toda a aparente atratividade da simplicidade do CopyTicks, existem na verdade armadilhas escondidas, impossíveis de serem evitadas devido à funcionalidade limitada por causa dessa atratividade externa novamente.

Por que devemos receber os carrapatos no OnDeinit()?
 
Alexey Kozitsyn:
Por que ter carrapatos no OnDeinit()?

Você precisa criar um símbolo personalizado e escrever nele todo o histórico de tick convertido (a partir de uma certa data) que já existe nos arquivos tkc. Os carrapatos, que não estão na máquina, não são interessantes. Portanto, o indicador não deve abrandar nesta tarefa. Entretanto, o CopyTicks não permite receber carrapatos dessa forma.

 
Tentando colocar carrapatos em outro símbolo no OnInit
#include <Trade\Trade.mqh>

bool OpenPos( const string Symb )
{
  static CTrade Trade;
  
  return(Trade.Buy(1, Symb));
}

void OnInit()
{
  Sleep(3600 * 1000);    
  
  OpenPos("NZDUSD"); // Заставляем Агент получить тики по чужому символу

  MqlTick Ticks[];
  
  Print(CopyTicks("NZDUSD", Ticks, COPY_TICKS_INFO, 0, 5)); // 0
  
  ArrayPrint(Ticks);
}


Resultado

MetaTester 5 started on 127.0.0.1:3000
initialization finished
login (build 1653)
template file tester.tpl added. 2398 bytes loaded
38520 bytes of account info loaded
1482 bytes of tester parameters loaded
188 bytes of input parameters loaded
3456 bytes of symbols list loaded
expert file added: Experts\Test4.ex5. 44667 bytes loaded
initial deposit 10000000.00 USD, leverage 1:500
successfully initialized
48 Kb of total initialization data received
Intel Core i7-2700 K  @ 3.50 GHz, 16301 MB
EURUSD: symbol to be synchronized
EURUSD: symbol synchronized, 3464 bytes of symbol info received
EURUSD: history synchronization started
EURUSD: load 27 bytes of history data to synchronize in 0:00:00.000
EURUSD: history synchronized from 2016.01.04 to 2017.10.11
EURUSD: ticks synchronization started
EURUSD: load 34 bytes of tick data to synchronize in 0:00:00.000
EURUSD: history ticks synchronized from 2017.04.03 to 2017.10.10
EURUSD,M1: history cache allocated for 667542 bars and contains 651824 bars from 2016.01.04 00:00 to 2017.09.29 23:59
EURUSD,M1: history begins from 2016.01.04 00:00
EURUSD,M1 (MetaQuotes-Demo): generating based on real ticks
EURUSD,M1: testing of Experts\Test4.ex5 from 2017.10.01 00:00 to 2017.10.11 00:00 started
EURUSD : real ticks begin from 2017.04.03 00:00:00
EURUSD : 2017.10.01 00:00 - 2017.10.11 00:00  last prices absent for 7 whole days, bars built by bid prices
NZDUSD: symbol to be synchronized
NZDUSD: symbol synchronized, 3464 bytes of symbol info received
NZDUSD: history synchronization started
NZDUSD: load 27 bytes of history data to synchronize in 0:00:00.000
NZDUSD: history synchronized from 2016.01.04 to 2017.10.11
NZDUSD: ticks synchronization started
NZDUSD: load 34 bytes of tick data to synchronize in 0:00:00.000
NZDUSD: history ticks synchronized from 2017.10.02 to 2017.10.10
2017.10.01 01:00:00   instant buy 1.00 NZDUSD at 0.72043 (0.72017 / 0.72043)
2017.10.01 01:00:00   deal #2 buy 1.00 NZDUSD at 0.72043 done (based on order #2)
2017.10.01 01:00:00   deal performed [#2 buy 1.00 NZDUSD at 0.72043]
2017.10.01 01:00:00   order performed buy 1.00 at 0.72043 [#2 buy 1.00 NZDUSD at 0.72043]
2017.10.01 01:00:00   CTrade::OrderSend: instant buy 1.00 NZDUSD at 0.72043 [done at 0.72043]
2017.10.01 01:00:00   true
2017.10.01 01:00:00   0
NZDUSD : real ticks begin from 2017.10.02 00:00:00
NZDUSD : 2017.10.01 00:00 - 2017.10.11 00:00  last prices absent for 7 whole days, bars built by bid prices


Ou seja, não há dados de carrapato no início sobre o caráter de outra pessoa. E os carrapatos são gerados no banco de dados como o OnTick aparece. É projetado dessa forma ou os carrapatos para os caracteres estrangeiros devem estar disponíveis, bem como para o símbolo principal do teste?

 
O que significa esta citação da Documentação?

Примечание

A função CopyTicksRange() foi projetada para solicitar carrapatos de uma faixa estritamente especificada, por exemplo, para um determinado dia da história. Enquanto CopyTicks()permite especificar apenas a data de início, por exemplo - para obter todos os ticks desde o início do mês até o momento atual.

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTicksRange
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTicksRange
  • www.mql5.com
[out]  Cтатический или динамический массив MqlTick для приема тиков. Если в статический массив не вмещаются все тики из запрошенного интервала времени, то будет получено столько тиков, сколько помещается в массив. При этом функция сгенерирует ошибку ERR_HISTORY_SMALL_BUFFER (4407) . ERR_NOT_ENOUGH_MEMORY – не хватает памяти для получения...
 

CopyTicks só funciona com caracteres que estão incluídos na Market Review. E isto sempre foi lógico antes do advento dos símbolos personalizados.

Os símbolos personalizados têm um enorme campo de aplicação e está longe de ser sempre que estes símbolos são necessários no Market Watch. No entanto, às vezes é necessário tirar um pouco da história do tick através do CopyTicks.

Portanto, por favor, desative o retorno do erro CopyTicks para símbolos personalizados se o personalizado não for selecionado em Market Watch.

 
Para caracteres personalizados, para descobrir o número total de ticks, você tem que usar CopyTicksRange(Symb, Ticks) ( mais isto) e observar o tamanho da matriz. Mas isto é muito esbanjador!