Erros, bugs, perguntas - página 446

 
voix_kas:

Código de erro: 4756. Pode vê-lo na imagem do ecrã.

1. Mais uma vez repito a minha pergunta - Lista de símbolos que são supostamente seleccionados de forma selectiva (isto é, para todos os símbolos que vão comercializar multinacionais foi executado comando SymbolSelect com o segundo parâmetro verdadeiro)?

Aconselho no bloco de inicialização a seleccionar todos os símbolos que são exigidos pela SymbolSelect e verificar a existência deste erro após esta modificação.

2. Aos promotores:

a) Porque deveria a lista de símbolos terminais incluir explicitamente símbolos que não foram seleccionados pela SymbolSelect (assumindo que não foram realizadas quaisquer acções sobre eles, excepto para recolher alguma informação)?

b) não pense que coisas aparentemente inofensivas como SymbolsTotal(false) e SymbolName(index,false) levam à exibição explícita de símbolos na janela de visualização.

Tanto quanto sei, deveria ser assim - No SymbolSelect No SymbolSelect Nenhum símbolo entre os exibidos na MarketWatch.

c) Tanto quanto sei, no testador, o ambiente deve descarregar todos os símbolos que são consultados, e exibir apenas aqueles que são seleccionados na SymbolSelect ou para os quais o utilizador tenta obter preços ou qualquer outra informação relevante.

Por exemplo, se estou a tentar determinar se um símbolo está sincronizado ou quão profundo é o seu histórico no servidor, porque deveria ser imediatamente colocado na MarketWatch com o sinal de selecção?

 
voix_kas:

E como é que apanho o código de erro no ponto indicado? Registo o erro na última linha do código acima.

Este erro não aparece se o seguinte termo for adicionado imediatamente antes deste código:

Por exemplo, como este:

double price=SymbolInfoDouble(Instrumet, SYMBOL_ASK);
if(price==0.0)
  {
   Print("Ай-яй-яй. Ошибка ",GetLastError());
   return(false);
  }
TradeRequest.price = price;
 
Interesting:

2. A pergunta aos programadores - Porque é que os símbolos que não foram seleccionados utilizando SymbolSelect (assumindo que não foram realizadas quaisquer acções sobre eles, a não ser a recolha de determinadas informações) entram na lista de símbolos terminais de uma forma explícita (pode vê-la na imagem de ecrã acima)?

O testador MT5 utiliza uma simulação muito precisa das condições comerciais, incluindo a conversão mais precisa dos lucros para a moeda do saldo.

Isto significa que quando se trabalha com cruzes, temos de simular o par de moedas base para recalcular o lucro. Ou seja, quando se trabalha com alguns instrumentos (cruzes) há um volume duplo de modelação, de modo a que a qualquer segundo o cálculo seja absolutamente exacto e repetível.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

Interessante
Claro que sim. Este código vem antes de todas as acções subsequentes:

if (SymbolInfoInteger(Instrumet, SYMBOL_SELECT) || SymbolSelect(Instrumet, true))
{
  ...
}

Se a condição não for cumprida, não é realizada qualquer outra acção sobre esta ferramenta.

Sobre"SymbolSelect "durante a inicialização... Entãopensa que a primeira chamada ( SymbolSelect(Instrumet, verdadeiro) ) não carrega a ferramenta?

É que primeiro passo pelos símbolos de presença (inicializar). E depois em OnTick|OnTimer selecciono explicitamente se o instrumento não foi seleccionado antes.

tioVic

Obrigado. É assim que eu estou a lidar com este erro.
Se puder, por favor explique o que faz com que o preço nulo apareça? E pode acontecer na vida real (ou seja, em tempo real, não apenas durante os testes)?

 
voix_kas:

Interessante
Claro que sim. Este código vem antes de todas as acções subsequentes:

Se a condição não for cumprida, não é realizada qualquer outra acção sobre esta ferramenta.

Sobre"SymbolSelect" durante a inicialização... Entãopensa que a primeira chamada ( SymbolSelect(Instrumet, verdadeiro) ) não carrega a ferramenta?

É que primeiro passo pelos símbolos de presença (inicializar). E depois em OnTick|OnTimer faço uma selecção explícita se a ferramenta não tiver sido previamente seleccionada.


É estranho, ou não compreendo alguma coisa ou há algum código algures que não funciona da forma que eu espero.

Tanto quanto sei SymbolSelect é suficiente para ser usado uma vez, no bloco de inicialização (é melhor verificar o resultado).

No meu testador, simplesmente formo a MarketWatch a partir de um conjunto preliminarmente preparado como este

  //Forming list of symbols
  for(int f=0;f<ArraySize(ArrSymbolsEA);f++)
  {
  SymbolSelect(ArrSymbolsEA[f],true);
  }

Normalmente é suficiente tornar todos os símbolos disponíveis para comércio no Testador de Estratégia.

No entanto, neste caso, se faltar um símbolo no diário, haverá um erro como este

2011.07.06 18:47:57     symbol NZDUSD does not exist

Se tudo estiver a funcionar correctamente, a janela de teste deve ter o seguinte aspecto


 
voix_kas:

Obrigado. É exactamente assim que estou a contornar este erro agora.
Se pudesse, por favor, explicar o que causa a ocorrência do preço zero? E isto pode acontecer na vida real (leia-se, em modo "tempo real", não apenas durante os testes)?


O que é o código de erro?
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений - Документация по MQL5
 

Aos promotores

Ia escrever isto em SD, mas mudei de ideias. Por favor adicione bool SymbolExists(nome) / bool SymbolIsExists(nome) função

Finalidade - determina se um símbolo especificado é encontrado no servidor. Em caso de sucesso, os retornos são verdadeiros.

Apenas desta forma, esse símbolo não será exibido na MarketWatch (o princípio é o mesmo que para SymbolIsSynchronized).

Tudo isto permitirá livrar-se de tais problemas

2011.07.06 18:47:57     symbol NZDUSD does not exist
 
uncleVic:
O que é o código de erro?

Tanto quanto o testador de estratégia mostra, dois erros são gerados ao mesmo tempo. Apenas o último pode ser interceptado.
Como é que o sei? Eu dei o código acima. Onde devo colocar a informação do código de erro?

 
Interesting:

É estranho, ou não percebo alguma coisa ou há código algures que não funciona como eu penso que funciona.

...

Se tudo funcionasse como esperado, a janela de teste deveria ter este aspecto

Por favor, faça o teste com a sua multi-moeda a partir de 2011.01.03 00:00:00.

Até 2011.01.03 00 :59:59 apenas 3 pares de moedas estão disponíveis (que são exibidos em marketwatch, pode ver na imagem do ecrã). A partir de 2011.01.0301:00:00 - tudo é normal.

P.S.

Estamos a falar de contas de demonstração do MQ (para preparar o Campeonato).

 
voix_kas:

Por favor, faça o teste com a sua multi-moeda a partir de 2011.01.03 00:00:00.

Tenho até 2011.01.03 00 :59:59 apenas 3 pares de moedas disponíveis (que são exibidos em marketwatch, pode ver na imagem do ecrã). A partir de 2011.01.0301:00:00 - tudo é normal.

P.S.

Estamos a falar de contas de demonstração do MQ (para preparar o Campeonato).

A história é sincronizada por símbolos?