ENUM_TRADE_RETURN_CODES Código ID Descrição 10004 TRADE_RETCODE_REQUOTE Pedido rejeitado 10006 TRADE_RETCODE_REJECT Pedido rejeitado ... sem código 10005. Não será isto um erro? Respeitosamente ...
Pergunta. Existe uma função chamada GetTickCount () - devolve o número de milissegundos decorridos desde o início do sistema. A nota diz que "a contagem é limitada pela resolução do temporizador do sistema ".Uma vez que o tempo é armazenado como um inteiro não assinado, ele transborda a cada 49,7 dias quando o computador está em funcionamento contínuo".
E o que acontece depois de o balcão transbordar? Reinicia e inicia uma nova contagem decrescente, ou o sistema congela?
Pergunta. A descrição do interruptor (expressão){...} diz que "a expressão do operador do interruptor deve ser do tipo inteiro". Já vi a descrição deste operador com expressões de outros tipos na Internet. O uso do operador de comutação será alargado através da adição de expressões do tipo string?
Pergunta. A descrição do interruptor (expressão){...} diz que "a expressão do operador do interruptor deve ser do tipo inteiro". Já vi a descrição deste operador com expressões de outros tipos na Internet. Vamos alargar o uso do operador de comutação adicionando expressões do tipo string?
Não, infelizmente, não o fará. Para tipos de cordas apenas se ... senão, se ... senão .
A utilização de tipos inteiros no interruptor irá acelerar o operador do interruptor várias vezes mais do que se
Pergunta. A descrição da função StringConcatenate() diz que "StringConcatenate() funciona mais rapidamente e mais económico na memória do que a ligação de cordas através de operações de adição devido ao facto de não serem utilizadas variáveis temporárias de tipo string". Utilizei os exemplos do Manual de Referência, alterando-os ligeiramente:
string a="a",b="b",c;
uint start,stop;
long i,length=10000000;
//--- первый способ
start=GetTickCount();
for(i=0;i<length;i++)
{
c=a+b;
}
stop=GetTickCount();
Print("time for 'c = a + b' = ",(stop-start)," milliseconds, i = ",i);
//--- второй способ
a="a"; // заново инициализируем переменную a
start=GetTickCount();
for(i=0;i<length;i++)
{
StringAdd(a,b);
}
stop=GetTickCount();
Print("time for 'StringAdd(a,b)' = ",(stop-start)," milliseconds, i = ",i);
//--- третий способ
a="a";c="";
start=GetTickCount();
for(i=0;i<length;i++)
{
int k=StringConcatenate(c,a,b);
//c=""; //с такой строчкой работает ещё дольше.
}
stop=GetTickCount();
Print("time for 'StringConcatenate(c,a,b)' = ",(stop-start)," milliseconds, i = ",i);
A produção é:
DR 0 DoubleToString (EURGBP,M1) 22:15:55 time for'c = a + b' = 2359 milliseconds, i = 10000000
QE 0 DoubleToString (EURGBP,M1) 22:15:56 time for'StringAdd(a,b)' = 1031 milliseconds, i = 10000000
FE 0 DoubleToString (EURGBP,M1) 22:16:00 time for'StringConcatenate(c,a,b)' = 3891 milliseconds, i = 10000000
Acontece que o StringConcatenate funciona mais lentamente do que a encadernação de cordas usando operações de adição. Qual é o problema?
Pergunta. A descrição da função StringConcatenate() diz que "StringConcatenate() funciona mais rapidamente e mais económico na memória do que a ligação de cordas através de operações de adição devido ao facto de não serem utilizadas variáveis temporárias de tipo string". Utilizei exemplos da Referência, alterando-os um pouco:
Consegui a produção:
Acontece que o StringConcatenate funciona mais lentamente do que a encadernação de cordas usando operações de adição. Qual é o problema?
É um pouco errado verificar (se o entendi correctamente). O truque da função é outra coisa...
Aproximadamente este código
////////////////////////////////////////////////////////////////////////////////// Global variables, used in working the trade system //////////////////////////////////////////////////////////////////////////////////string a="Пример";
double b=1.26,c = 1.27;
string d;
uint start,stop;
long i,length=10000000;
////////////////////////////////////////////////////////////////////////////////voidOnStart()
{
//----------------------------------------------------------------------------////Work variables//----------------------------------------------------------------------------//
start=GetTickCount();
for(i=0;i<length;i++)
{
d=a+(string)b+(string)c;
}
stop=GetTickCount();
Print("time for 'd = a + b + c' = ",(stop-start)," milliseconds, i = ",i);
//Второй способ
d= "";
start=GetTickCount();
for(i=0;i<length;i++)
{
StringAdd(d,a);
StringAdd(d,(string)b);
StringAdd(d,(string)c);
}
stop=GetTickCount();
Print("time for 'StringAdd()' = ",(stop-start)," milliseconds, i = ",i);
//Третий способ
d= "";
start=GetTickCount();
for(i=0;i<length;i++)
{
int k=StringConcatenate(d,a,b,c);
}
stop=GetTickCount();
Print("time for 'StringConcatenate(d,a,b,c)' = ",(stop-start)," milliseconds, i = ",i);
//----------------------------------------------------------------------------//
}
////////////////////////////////////////////////////////////////////////////////
E este resultado
2011.04.1515:28:58123 (EURUSD,D1) time for'd = a + b + c' = 81094 milliseconds, i = 100000002011.04.1515:30:24123 (EURUSD,D1) time for'StringAdd()' = 85828 milliseconds, i = 100000002011.04.1515:31:46123 (EURUSD,D1) time for'StringConcatenate(d,a,b,c)' = 81812 milliseconds, i = 100000002011.04.1515:33:36123 (EURUSD,D1) time for'd = a + b + c' = 82938 milliseconds, i = 100000002011.04.1515:35:00123 (EURUSD,D1) time for'StringAdd()' = 83859 milliseconds, i = 100000002011.04.1515:36:21123 (EURUSD,D1) time for'StringConcatenate(d,a,b,c)' = 80719 milliseconds, i = 10000000
PS
Muito provavelmente, a linha d= "" deveria ter sido colocada na linha de "for loop", mas não creio que este bug tenha muito efeito no resultado.
Estranho. É necessário o código para MQL5, que já deve estar no sítio web. Tudo o que tem de fazer é pesquisar. É exactamente disso que estou a falar.
Mas isso depende de si.
É uma busca muito aborrecida, talvez alguém lhe diga.
A propósito, refiz este código para mql5. Talvez alguém o possa usar.
por favor comente:
ENUM_TRADE_RETURN_CODES
Código ID Descrição
10004 TRADE_RETCODE_REQUOTE Pedido rejeitado
10006 TRADE_RETCODE_REJECT Pedido rejeitado
...
sem código 10005. Não será isto um erro?
Respeitosamente ...
Pergunta. Existe uma função chamada GetTickCount () - devolve o número de milissegundos decorridos desde o início do sistema. A nota diz que "a contagem é limitada pela resolução do temporizador do sistema ".Uma vez que o tempo é armazenado como um inteiro não assinado, ele transborda a cada 49,7 dias quando o computador está em funcionamento contínuo".
E o que acontece depois de o balcão transbordar? Reinicia e inicia uma nova contagem decrescente, ou o sistema congela?
Yedelkin:
O que acontece quando o contador transborda? Reinicia e inicia uma nova contagem ou o sistema pára?
Sobreflui e começa do zero.
Pergunta. A descrição do interruptor (expressão){...} diz que "a expressão do operador do interruptor deve ser do tipo inteiro". Já vi a descrição deste operador com expressões de outros tipos na Internet. O uso do operador de comutação será alargado através da adição de expressões do tipo string?
Pergunta. A descrição do interruptor (expressão){...} diz que "a expressão do operador do interruptor deve ser do tipo inteiro". Já vi a descrição deste operador com expressões de outros tipos na Internet. Vamos alargar o uso do operador de comutação adicionando expressões do tipo string?
Não, infelizmente, não o fará. Para tipos de cordas apenas se ... senão, se ... senão .
A utilização de tipos inteiros no interruptor irá acelerar o operador do interruptor várias vezes mais do que se
Não, infelizmente não o fará. Para tipos de cordas apenas se ... senão, se ... senão
A utilização de tipos inteiros no interruptor acelerará o código várias vezes mais do que se
Pergunta. A descrição da função StringConcatenate() diz que "StringConcatenate() funciona mais rapidamente e mais económico na memória do que a ligação de cordas através de operações de adição devido ao facto de não serem utilizadas variáveis temporárias de tipo string". Utilizei os exemplos do Manual de Referência, alterando-os ligeiramente:
A produção é:Acontece que o StringConcatenate funciona mais lentamente do que a encadernação de cordas usando operações de adição. Qual é o problema?
Pergunta. A descrição da função StringConcatenate() diz que "StringConcatenate() funciona mais rapidamente e mais económico na memória do que a ligação de cordas através de operações de adição devido ao facto de não serem utilizadas variáveis temporárias de tipo string". Utilizei exemplos da Referência, alterando-os um pouco:
Consegui a produção:Acontece que o StringConcatenate funciona mais lentamente do que a encadernação de cordas usando operações de adição. Qual é o problema?
É um pouco errado verificar (se o entendi correctamente). O truque da função é outra coisa...
Aproximadamente este código
E este resultado
PS
Muito provavelmente, a linha d= "" deveria ter sido colocada na linha de "for loop", mas não creio que este bug tenha muito efeito no resultado.