Assim podemos verificar se a tabela do histórico atual, previamente gerada através da função HistorySelect, contém o registro que precisamos. O mesmo se aplica ao DEAL_TICKET.
Nem todos sabem que a função GetMicrosecondCount, ao contrário da GetTickCount, está ligada à hora local do computador. Isto significa que se esta hora mudar (por exemplo, devido à sincronização com a hora da Internet), os valores da GetMicrosecondCount também mudarão por um valor correspondente.Isto deve ser tido em conta se esta função for usada para medir intervalos de tempo; na verdade, não deve ser usada para este fim. GetTickCount, por outro lado, não tem estes problemas.
Como demonstração, você pode executar este código e mudar o tempo do computador enquanto ele está rodando.
Pode não ser conhecido que a função GetMicrosecondCount, ao contrário da GetTickCount, esteja ligada à hora local do computador. Isto significa que se esta hora mudar (por exemplo, devido à sincronização com a hora da Internet), os valores da GetMicrosecondCount também mudarão por um valor correspondente.Isto deve ser tido em conta se esta função for usada para medir intervalos de tempo; na verdade, não deve ser usada para este fim. GetTickCount, por outro lado, não tem estes problemas.
Para demonstrar isso, você pode executar esse código e alterar o tempo do computador durante a execução do código.
Bem, este é um bug que os desenvolvedores devem corrigir. A função então não se encaixa na descrição:
Функция GetMicrosecondCount() возвращает количество микросекунд, прошедших с момента начала работы MQL5-программы.
O valor desta função em comparação com GetTickCount é microssegundos, não milissegundos (1000 vezes maior precisão). É também não insuflável. É por isso que não é muito correcto falar sobre a sua substituibilidade.
Nem todos sabem que a função GetMicrosecondCount, ao contrário da GetTickCount, está ligada à hora local do computador. Isto significa que se esta hora mudar (por exemplo, devido à sincronização com a hora da Internet), os valores da GetMicrosecondCount também mudarão por um valor correspondente.Isto deve ser tido em conta se esta função for usada para medir intervalos de tempo; na verdade, não deve ser usada para este fim. GetTickCount, por outro lado, não tem estes problemas.
Para demonstrar isso, você pode executar esse código e mudar o tempo do computador enquanto ele está rodando.
Mais uma observação importante - daí decorre que é absolutamente inadequado usar a função GetTickCount em vez de GetMicrosecondCount. Acho que será uma surpresa para muitas pessoas.
Examinando a operação de um simples roteiro:
voidOnStart()
{
uint i=GetTickCount();
uint i0=GetTickCount();
while(i==i0) i0=GetTickCount();
int N1=1;
ulong t1=GetMicrosecondCount();
uint i1=GetTickCount();
uint i2=GetTickCount();
while(i1==i2) { i2=GetTickCount(); N1++;}
t1=GetMicrosecondCount()-t1;
ulong t=GetMicrosecondCount();
ulong t0=GetMicrosecondCount();
while(t==t0) t0=GetMicrosecondCount();
int N2=1;
ulong t2=GetMicrosecondCount();
ulong t3=GetMicrosecondCount();
while(t2==t3) { t3=GetMicrosecondCount(); N2++;}
ulong t4=t3-t2;
Print("1 значение в милисекундах: " +(string)i1+", следующее значение "+ (string)i2 + ", разница - " +(string)t1 +
" микросекунд, время выполнения функции GetTickCount (одного прохода цикла) = " +DoubleToString((double)t1*1000.0/N1,3)+ " наносекунды");
Print("1 значение в микросекундах: " +(string)t2+", следующее значение "+ (string)t3 + ", разница - " +(string)t4 +
" микросекунд, время выполнения функции GetMicrosecondCount (одного прохода цикла) = " +DoubleToString((double)t4*1000.0/N2,3)+ " наносекунды");
}
O resultado do trabalho:
2018.07.2700:23:02.261 TestTimeCount 1 значение в милисекундах: 25225093, следующее значение 25225109, разница - 15663 микросекунд, время выполнения функции GetTickCount (одного прохода цикла) = 2.323 наносекунды
2018.07.2700:23:02.261 TestTimeCount 1 значение в микросекундах: 20247, следующее значение 20248, разница - 1 микросекунд, время выполнения функции GetMicrosecondCount (одного прохода цикла) = 33.333 наносекунды
2018.07.2700:23:03.590 TestTimeCount 1 значение в милисекундах: 25226421, следующее значение 25226437, разница - 15586 микросекунд, время выполнения функции GetTickCount (одного прохода цикла) = 2.324 наносекунды
2018.07.2700:23:03.590 TestTimeCount 1 значение в микросекундах: 22835, следующее значение 22836, разница - 1 микросекунд, время выполнения функции GetMicrosecondCount (одного прохода цикла) = 30.303 наносекунды
2018.07.2700:23:04.920 TestTimeCount 1 значение в милисекундах: 25227750, следующее значение 25227765, разница - 15657 микросекунд, время выполнения функции GetTickCount (одного прохода цикла) = 2.309 наносекунды
2018.07.2700:23:04.920 TestTimeCount 1 значение в микросекундах: 23701, следующее значение 23702, разница - 1 микросекунд, время выполнения функции GetMicrosecondCount (одного прохода цикла) = 27.027 наносекунды
podemos tirar as seguintes conclusões:
O valor da função GetTickCount() muda a cada 15,625milissegundos(1/64 de segundo, 64=2^6), enquanto o valor da função GetMicrosecondCount() muda a cada micro segundo. Isso significa que a função GetMicrosecondCount é 15625 vezes mais precisa do que GetTickCount, e não 1000.
mas a função GetTickCount() é aproximadamente 12-15 vezes mais rápida do que GetMicrosecondCount().
Bem, então, este é um bug que os desenvolvedores fariam bem em consertar. Porque então a função não corresponde à descrição:
O valor desta função em comparação com GetTickCount é microssegundos, não milissegundos(1000 vezes mais preciso). Também é não insuflável. É por isso que não é muito correcto falar sobre a sua substituibilidade.
Se você medir o tempo de execução de algumas seções do programa, as flutuações de desempenho do sistema nivelam toda essa precisão e há um erro em milissegundos ou mesmo dezenas de milissegundos. Se você medir segmentos muito pequenos com duração inferior a 1 milissegundo, então qual é o ponto. A proporção de erro de medição será muito alta.
Eu ainda não vi nenhum uso prático de microssegundos. Se você medir o tempo de execução de algumas seções do programa, as flutuações de desempenho do sistema irão nivelar toda essa precisão, e o erro está em milissegundos, ou mesmo dezenas de milissegundos. Se você medir segmentos muito pequenos com duração inferior a 1 milissegundo, então qual é o ponto. O erro de medição será muito alto.
ver o meu post anterior
Eu tenho muitos exemplos com o uso prático de microssegundos.
Outra observação importante sugere que o uso da função GetTickCount em vez de GetMicrosecondCount é bastante inapropriado. Acho que vai ser uma surpresa para muitos programadores.
Examinando a operação de um simples roteiro:
as seguintes conclusões podem ser tiradas:
O valor da função GetTickCount () muda a cada 15,6 milissegundos em vez de a cada milissegundo, enquanto o valor da função GetMicrosecondCount() muda a cada micro segundo. Isso significa que GetMicrosecondCount é 15600 vezes mais preciso do que GetTickCount, não 1000.
mas GetTickCount() é aproximadamente 12-15 vezes mais rápido do que GetMicrosecondCount().
Fórum sobre negociação, sistemas de negociação automatizados e testes de estratégia de negociação
Bugs, bugs, perguntas
fxsaber, 2016.07.19 12:41
Pelo exemplo de ORDER_TICKET a idéia deve ser clara.
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
OrderCloseTime () em MQL5?
fxsaber, 2018.07.18 03:51
Assim podemos verificar se a tabela do histórico atual, previamente gerada através da função HistorySelect, contém o registro que precisamos. O mesmo se aplica ao DEAL_TICKET.
Fórum sobre negociação, sistemas de negociação automatizados e testes de estratégia de negociação
Salvar nível de preço da posição através de compensação (é possível?)
fxsaber, 2018.07.17 20:45
Nem todos sabem que a função GetMicrosecondCount, ao contrário da GetTickCount, está ligada à hora local do computador. Isto significa que se esta hora mudar (por exemplo, devido à sincronização com a hora da Internet), os valores da GetMicrosecondCount também mudarão por um valor correspondente.Isto deve ser tido em conta se esta função for usada para medir intervalos de tempo; na verdade, não deve ser usada para este fim. GetTickCount, por outro lado, não tem estes problemas.
Como demonstração, você pode executar este código e mudar o tempo do computador enquanto ele está rodando.
Talvez nem todos saibam que a função GetMicrosecondCount, ao contrário da GetTickCount, está ligada à hora local do computador.
Eu não sabia, obrigado!
Uma variante da função GetTickCount que evita transbordamentos (desde que o intervalo entre chamadas para a função não exceda 50 dias)
Pode não ser conhecido que a função GetMicrosecondCount, ao contrário da GetTickCount, esteja ligada à hora local do computador. Isto significa que se esta hora mudar (por exemplo, devido à sincronização com a hora da Internet), os valores da GetMicrosecondCount também mudarão por um valor correspondente.Isto deve ser tido em conta se esta função for usada para medir intervalos de tempo; na verdade, não deve ser usada para este fim. GetTickCount, por outro lado, não tem estes problemas.
Para demonstrar isso, você pode executar esse código e alterar o tempo do computador durante a execução do código.
Bem, este é um bug que os desenvolvedores devem corrigir. A função então não se encaixa na descrição:
Функция GetMicrosecondCount() возвращает количество микросекунд, прошедших с момента начала работы MQL5-программы.O valor desta função em comparação com GetTickCount é microssegundos, não milissegundos (1000 vezes maior precisão). É também não insuflável.É por isso que não é muito correcto falar sobre a sua substituibilidade.
Nem todos sabem que a função GetMicrosecondCount, ao contrário da GetTickCount, está ligada à hora local do computador. Isto significa que se esta hora mudar (por exemplo, devido à sincronização com a hora da Internet), os valores da GetMicrosecondCount também mudarão por um valor correspondente.Isto deve ser tido em conta se esta função for usada para medir intervalos de tempo; na verdade, não deve ser usada para este fim. GetTickCount, por outro lado, não tem estes problemas.
Para demonstrar isso, você pode executar esse código e mudar o tempo do computador enquanto ele está rodando.
Mais uma observação importante - daí decorre que é absolutamente inadequado usar a função GetTickCount em vez de GetMicrosecondCount.
Acho que será uma surpresa para muitas pessoas.
Examinando a operação de um simples roteiro:
O resultado do trabalho:
podemos tirar as seguintes conclusões:
Bem, então, este é um bug que os desenvolvedores fariam bem em consertar. Porque então a função não corresponde à descrição:
O valor desta função em comparação com GetTickCount é microssegundos, não milissegundos(1000 vezes mais preciso). Também é não insuflável.É por isso que não é muito correcto falar sobre a sua substituibilidade.
Se você medir o tempo de execução de algumas seções do programa, as flutuações de desempenho do sistema nivelam toda essa precisão e há um erro em milissegundos ou mesmo dezenas de milissegundos. Se você medir segmentos muito pequenos com duração inferior a 1 milissegundo, então qual é o ponto. A proporção de erro de medição será muito alta.
Eu ainda não vi nenhum uso prático de microssegundos. Se você medir o tempo de execução de algumas seções do programa, as flutuações de desempenho do sistema irão nivelar toda essa precisão, e o erro está em milissegundos, ou mesmo dezenas de milissegundos. Se você medir segmentos muito pequenos com duração inferior a 1 milissegundo, então qual é o ponto. O erro de medição será muito alto.
Outra observação importante sugere que o uso da função GetTickCount em vez de GetMicrosecondCount é bastante inapropriado.
Acho que vai ser uma surpresa para muitos programadores.
Examinando a operação de um simples roteiro:
as seguintes conclusões podem ser tiradas:
O argumento significativo