Erros, bugs, perguntas - página 445

 
komposter:

Para acompanhar a normalização do lote

Rapazes, porquê teorizar?

Para rir e não ficar enferrujado na cabeça.

Tudo tem de ser moderado. Trabalho com dinheiro real há mais de 5 anos, com diferentes corretores, tipos de conta, e instrumentos, e nunca cometi um erro.
Nunca cometi um erro. E nunca o cometerei. Não importa, não estamos a falar a sério.
 
komposter:

O passo deve ser um múltiplo de lote mínimo.

O que o faz ter tanta certeza? Prática - Eu compreendo, mas não a limitação do motor.
Os argumentos das partes são claros. Em todo o caso, aprecio sinceramente a simpatia. :)

Cisne:

Olhados, todos os instrumentos são negociados ao mesmo tempo nas contas do campeonato. Registar)

Sim, parece ter-se registado. É nesse que estou a apanhar este erro.

Cisne:

Pode dar-lhe outra tentativa:

if(preço actual == 0.0) retorno;

Obrigado pela ideia! Terei de experimentar esta opção. :)

 

voix_kas:

Sim, acho que estou registado. É aí que estou a apanhar este erro.

Há uma barra de minutos no GBPCHF 2011.01.03 às 00:00. Não contactou o Servicedesk?
 
Swan:
Em GBPCHF 2011.01.03 às 00:00 há um bar de minutos. Já contactou o Servicedesk?

Eu não fui ao SD.

Aqui está a situação. Estou a escrever um EA multi-divisas. Coloquei-o na tabela Eurobucks e tento seguir todos os pares de moedas válidos passados ao Expert Advisor como um parâmetro.

Falta de metodologia/documentação. Aqui estão algumas perguntas, por exemplo:

1. Porque pode o preço ser zero? Afinal, por essa altura (2011.01.03 00:00:00) o último preço conhecido (tanto Bid como Ask) ainda existia? Com base nos princípios que o terminal lhe dá.

2. há uma sessão de orçamentação. Em que é, em princípio, diferente de uma sessão de negociação? É lógico assumir que é possível negociar durante a segunda. E se não pudermos negociar durante a primeira sessão (cotação), então porque é que as cotações mudam? As citações mudam devido a, desculpem-me por esta interpretação, "desequilíbrio entre a oferta e a procura".

3. Suponha que recebemos um Tick num par de moedas. No mesmo caso, tentamos "ver" o estado de outro par. Onde está a garantia de que a última citação que veio para o outro par ainda é válida? Qual é o tempo de vida de uma citação? A explicação mais racional é a verificação da última cotação com a verificação simultânea do volume do lote no mercado. Isto é, a meu ver: N citação de eurusd é recebida. Não vem em vão, mas é colocada uma opção a esta citação para um determinado volume. Aqueles que querem comprar/vender estão a apanhar a tarte. A dada altura, ele (o bolo) termina e esta citação "pára para viver". Depois o terminal dá a próxima citação (menos atractiva). E se não houver qualquer cotação (ninguém quer vender/comprar moeda)? Então o preço é igual a zero?

De qualquer forma, não sou especialista em bolsa/forex.

Ficaria grato se alguém me pudesse dar uma resposta detalhada às perguntas formuladas. Como é que é realmente, e como é que estas ou aquelas situações são apresentadas no terminal MT5?

 
voix_kas:

Eu não fui ao SD.

Aqui está a situação. Estou a escrever um EA multi-divisas. Coloquei-o na tabela Eurobucks e tento seguir todos os pares de moedas válidos passados ao Expert Advisor como um parâmetro.

Falta de metodologia/documentação. Aqui estão algumas perguntas, por exemplo:

1. Porque pode o preço ser zero? Afinal, por essa altura (2011.01.03 00:00:00) o último preço conhecido (tanto Bid como Ask) ainda existia? Em que princípios é que o terminal dá isto.

2. há uma sessão de orçamentação. Em que é, em princípio, diferente de uma sessão de negociação? É lógico assumir que é possível negociar durante a segunda. E se não pudermos negociar durante a primeira sessão (cotação), então porque é que as cotações mudam? As citações mudam devido a, desculpem-me esta interpretação, "desequilíbrio entre a oferta e a procura".

3. Suponha que recebemos um Tick num par de moedas. No mesmo caso, tentamos "ver" o estado de outro par. Onde está a garantia de que a última citação que veio para o outro par ainda é válida? Qual é o tempo de vida de uma citação? A explicação mais racional é a verificação da última cotação com a verificação simultânea do volume do lote no mercado. Isto é, a meu ver: N citação de eurusd é recebida. Não vem em vão, mas é colocada uma opção a esta citação para um determinado volume. Aqueles que querem comprar/vender estão a apanhar a tarte. A dada altura, ele (o bolo) termina e esta citação "pára para viver". Depois o terminal dá a próxima citação (menos atractiva). E se não houver qualquer cotação (ninguém quer vender/comprar moeda)? Então o preço é igual a zero?

De qualquer forma, não sou especialista em bolsa/forex.

Ficaria grato se alguém pudesse responder em pormenor às perguntas que me foram dirigidas. Como é na realidade, e como estas ou aquelas situações são representadas no terminal MT5?

Vamos lidar com isto ponto por ponto. Um Consultor Especialista é multi-moeda, pelo que deve comportar-se em conformidade.

1. Vamos excluir o principal problema possível de obter o preço 0 - a lista de símbolos que devem ser comercializados selectivamente seleccionados (ou seja, não precisa de se preocupar com a disponibilidade dos símbolos necessários na MarketWatch)?

2. Sobre as sessões de negociação e citação, o comentário já foi feito pelos criadores (em particular, Rashid Umarov comentou-o aqui). Sobre uma situação em que há uma cotação, mas não se pode negociar - é bastante normal (especialmente para a bolsa de valores). Também ninguém garante que as cotações serão actualizadas durante uma sessão de negociação. 3.

3. Sobre o copo - e onde obter o copo (mais importante, o que colocar nele) no mercado Forex? Para perguntas, as respostas são assim (se tudo estiver bem e houver uma ligação ao servidor):

(a) "Última citação" (informação sobre a última citação) é válida desde o momento em que uma citação ocorre até ao aparecimento de uma nova citação. No terminal, a hora da última cotação pode ser visualizada na "visão geral do mercado".

b) Se recolher informações sobre carraças apenas no manipulador OnTick() de um Expert Advisor de múltiplas moedas, ninguém pode garantir, que entre carraças do par principal não haverá uma dúzia de carraças de outros pares. Porque dependendo de um par e da actividade comercial sobre ele, entre carrapatos pode passar de uma fracção de segundo para vários minutos.

Claro que para o mercado Forex (especialmente para EURUSD) não é muito essencial, mas deve tê-lo em mente e tê-lo em conta na lógica do Expert Advisor.

c) Pode determinar programmaticamente a hora da última cotação analisando a estrutura do MqlTick e comparando a hora da última cotação com um determinado valor, pode facilmente determinar a relevância de uma cotação.

struct MqlTick
  {
   datetime     time;          // Время последнего обновления цен
   double       bid;        // Текущая цена Bid
   double       ask;        // Текущая цена Ask
   double       last;       // Текущая цена последней сделки (Last)
   ulong        volume;     // Объем для текущей цены Last
  };

d) Como já mencionei acima, deverá monitorizar a ligação com o servidor e, se possível, verificar/receber citações não só em OnTick(), mas também em OnTimer().

 

Vamos em marcha atrás. Em que circunstâncias pode o preço (bid/ask) assumir valores zero no terminal?

Depois vem a segunda pergunta. Bem, descobrimos que a última citação para este símbolo foi recebida há 2 segundos/minutos/hora. A sessão de negociação não encerrou. Como podemos evitar o erro "sem preço"?

Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
  • www.mql5.com
Получение рыночной информации / SymbolInfoSessionQuote - Документация по MQL5
 
voix_kas:

Vamos em marcha atrás. Em que circunstâncias pode o preço (bid/ask) assumir valores zero no terminal?

Depois vem a segunda pergunta. Bem, descobrimos que a última citação para este símbolo foi recebida há 2 segundos/minutos/hora. A sessão de negociação não encerrou. Como podemos não obter um erro "sem preço"?

Quando recebeu um preço zero, perguntou à GetLastError?
 
stringo:
Quando obteve o preço zero, perguntou à GetLastError?

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

Além disso. Aqui está o mesmo erro recebido. Ao mesmo tempo, o relógio de mercado mostra a presença do preço e a ferramenta está sincronizada nos registos.

 
voix_kas:

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

Além disso. Aqui está o mesmo erro recebido. Enquanto o relógio de mercado mostra a disponibilidade de preços e a ferramenta está sincronizada nos registos.

É necessário um código de erro depois de "sem preço...", não depois de "falhou...".
 
uncleVic:
Precisa do código de erro depois de "sem preço...", não depois de "falhou...".
  ...
  // Формирование торгового приказа.
  MqlTradeResult TradeResult;
  MqlTradeRequest TradeRequest;

  TradeRequest.action = TRADE_ACTION_DEAL;
  TradeRequest.symbol = Instrumet;
  TradeRequest.volume = NormalizeDouble(Volume, 8);
  TradeRequest.price = SymbolInfoDouble(Instrumet, SYMBOL_ASK);
  TradeRequest.sl = 0;
  TradeRequest.tp = 0;
  TradeRequest.deviation = Deviation;
  TradeRequest.type = ORDER_TYPE_BUY;
  TradeRequest.type_filling = TypeFilling;

  // Отправка торгового приказа.
  ResetLastError();
  if (!IsTradeAllowed()) return;
  if (OrderSend(TradeRequest, TradeResult)) TradeResultAnalyse("Buy.OrderSend", TradeResult.retcode);
  else Print("Buy.OrderSend = false! Код ошибки: \'", _LastError, "\'.");

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:

if(!NormalizeDouble(SymbolInfoDouble(Instrumet, SYMBOL_ASK), 8)) return;