Erros, bugs, perguntas - página 108

 
Interesting:

Mais fiável? Porque é que não é fiável obter pegas na inicialização? Porque é que não é fiável verificar os dados necessários? E ainda mais, porque é que a presença de controlos não é fiável?

Para principiantes pode não ser tão fácil, mas com o tempo tudo se tornará claro...

Na verdade, estou a tentar perceber isso imediatamente, não mais tarde. Não quero apenas copiar algumas acções sem compreender o seu significado. Se eu tiver o código como uma função integrada como no MQL4, provavelmente acrescentarei algum parâmetro extra com o número de barras.

 

Porque é que carrega?

 
simpleton:

Os "números normais" são expressões constantes, que também têm um tipo. Neste caso, é do tipo int.

Uma expressão que consiste numa multiplicação de duas subexpressões, cada uma do tipo int, é também do tipo int. É aqui que o transbordo ocorre.

E só então a conversão implícita do tipo da expressão int para o tipo longo ocorre durante a inicialização da variável longa.

Aqui tudo é claro. A propósito, não é necessário, neste caso, lançar cada um dos operandos a longo prazo. Podemos apenas lançar um e implicitamente lançar o segundo.

Era isto que eu estava a tentar dizer, mas utilizando uma linguagem menos académica. O principal é avisar os outros buscadores.

A questão é diferente. Onde no que o Talmud diz que :

Os"números normais" são expressões constantes que também têm um tipo. Neste caso, é do tipo int.

Por exemplo, se X estiver definido para 10000000000 , então torna-se do tipo longo ? e porque não ulong ou datetime ou mesmo string?

Qual é o tipo de número 255uchar oucurto ?

 
gumgum:

Porque é que carrega?

Provavelmente porque GBPJPY crosspairs e há cálculos de margem algures no código. IMHO
 
simpleton:

Parece haver uma confusão entre o diário de bordo e o código. O código acima funciona "limpo". E, para obter tal registo, tive de fazer variáveis A e B de tipo int ou uint, e variável X de tipo uint:

E aqui está o trabalho de código original:

Construir 314 (20 Ago 2010).

Eu citei um código diferente

long A = AccountInfoInteger(ACCOUNT_LOGIN);  // 661701
long B = A;
long C = 661701;

Print(" A=",A,"  B=",B,"  C=",C);

long X =(long)10000;

long L1 = A*X;
long L2 = B*X;
long L3 = C*X;

Print(" L1=",L1,"   L2=",L2,"   L3=",L3);

Preste especial atenção à primeira linha, a sua conta pode ter um número diferente. Procure-o e coloque-o em C =

Resultado verificado novamente

2010.08.25 20:23:12     Servis (EURUSD,H1)       L1=2322042704   L2=2322042704   L3=6617010000
2010.08.25 20:23:12     Servis (EURUSD,H1)       A=661701  B=661701  C=661701

Construir 314 (20 Ago 2010).

 
Por favor diga-me porque é que a função SymbolInfoDouble(_Symbol,SYMBOL_POINT) dá um valor de cinco dígitos de 0,00001 após o ponto decimal para USDCHF, quando o valor aceite para este par é 0,0001?
Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
  • www.mql5.com
Получение рыночной информации / SymbolInfoDouble - Документация по MQL5
 
rut_:
Por favor diga-me porque é que a função SymbolInfoDouble(_Symbol,SYMBOL_POINT) do par USDCHF produz um tamanho de ponto de cinco dígitos após o ponto decimal 0,00001, quando este par é aceite para o valor de ponto 0,0001?

porque pensa que existem 4 dígitos neste instrumento, o terminal mostra claramente que as citações que existem são de 5 dígitos
 
sergey1294:
O que o faz pensar que há 4 dígitos neste instrumento, o terminal mostra claramente que as citações lá são de 5 dígitos

Esta função pode devolver valores de pontos diferentes mesmo em contas com cinco dígitos, tudo depende das configurações que serão aceites pelo corretor.

Por exemplo, uma empresa de corretagem tem o seguinte comentário

1 pips (пункт) равен:

для валютных пар с 5 знаками после запятой - минимальному изменению 4-го знака после запятой (0,0001);
для валютных пар с 3 знаками после запятой - минимальному изменению 2-го знака после запятой (0,01).

e outro tem 1 pips igual ao quinto dígito.

 
SHOOTER777:

Era isso que eu estava a tentar dizer, mas em termos menos académicos. E, mais importante ainda, para avisar os outros buscadores.

A questão é diferente. Onde é que o Talmud diz que :

Os"números normais" são expressões constantes, que também têm um tipo. Neste caso, é do tipo int.

Por exemplo, se X estiver definido para 10000000000 , então torna-se do tipo longo ? e porque não ulong ou datetime ou mesmo string?

Qual é o tipo de número 255uchar oucurto ?

A constante 10000000000 já é do tipo longo.

Como devo dizer? As línguas normais têm sufixos-modificadores que lhe permitem especificar o tipo de constante sem utilizar uma conversão de tipo explícita. Para a MQL5, só a encontrei para flutuar. Portanto, é impossível definir constantes de uchar, ushort, uint, ulong, char, tipos curtos e longos (se o valor constante se encaixar no tipo int) sem conversão explícita do tipo.

A constante 255 tem um tipo int. Pode encontrar algo nas descrições de tipo, por exemplo, as constantes de caracteres são declaradas como tendo tipo ushort. Há também informação sobre constantes de tipo data/hora, tipo de cor, tipo bool, tipo duplo e tipo de corda.

Pode tentar imprimir o tamanho do tipo constante, desde que o tamanho da operação seja introduzido (mas porque é que é introduzido, por favor explique a um dos criadores):

void OnStart()
{
  Print("sizeof true                = ", sizeof true);
  Print("sizeof 'a'                 = ", sizeof 'a');
  Print("sizeof 255                 = ", sizeof 255);
  Print("sizeof 200000000           = ", sizeof 20000000);
  Print("sizeof 10000000000         = ", sizeof 10000000000);
  Print("sizeof C'128,128,128'      = ", sizeof C'128,128,128');
  Print("sizeof D'2004.01.01 00:00' = ", sizeof D'2004.01.01 00:00');
  Print("sizeof 1.0f                = ", sizeof 1.0 f);
  Print("sizeof 1.0                 = ", sizeof 1.0);
  Print("sizeof \"Xa!\"               = ", sizeof "Xa!");
  Print("sizeof \"Xa-xa-xa!!!\"       = ", sizeof "Xa-xa-xa!!!");
}

/* Вывод в лог (хронология - сверху вниз):
GF      0       1 (EURUSD,M15)  02:03:23        sizeof true                = 1
IS      0       1 (EURUSD,M15)  02:03:23        sizeof 'a'                 = 2
LF      0       1 (EURUSD,M15)  02:03:23        sizeof 255                 = 4
JI      0       1 (EURUSD,M15)  02:03:23        sizeof 200000000           = 4
EQ      0       1 (EURUSD,M15)  02:03:23        sizeof 10000000000         = 8
DG      0       1 (EURUSD,M15)  02:03:23        sizeof C'128,128,128'      = 4
JN      0       1 (EURUSD,M15)  02:03:23        sizeof D'2004.01.01 00:00' = 8
GE      0       1 (EURUSD,M15)  02:03:23        sizeof 1.0f                = 4
GR      0       1 (EURUSD,M15)  02:03:23        sizeof 1.0                 = 8
QJ      0       1 (EURUSD,M15)  02:03:23        sizeof "Xa!"               = 12
ER      0       1 (EURUSD,M15)  02:03:23        sizeof "Xa-xa-xa!!!"       = 12
*/

Em geral, apenas f para as constantes duplas funciona modificando-as para flutuar, o que pode ser visto pelo tamanho de um tipo tão constante.

Aqui, o único uso sensato do tamanho da operação que pude encontrar. :)

 
SHOOTER777:

Dei-lhe um código diferente

Preste especial atenção à primeira linha, pode haver um número diferente na sua conta. Procure-o e coloque-o em C =

Resultado verificado novamente

Construir 314 (20 Ago 2010).

Não, eu não tenho o mesmo efeito que você. Tenho apenas de verificar as versões bit do MT5. Eu tenho a versão de 64 bits, qual é a sua?

A propósito, o código modificado que testei dá-lhe os mesmos resultados que eu?

Se sim, então o que vejo é muito semelhante àquele bug sobre a "origem" de um valor - ou seja, o código pode comportar-se de forma diferente (tanto correcta como incorrecta) dependendo de onde veio originalmente o valor em que se baseiam os cálculos posteriores.

Razão: