Erros, bugs, perguntas - página 123

 

deixe os programadores resolverem o assunto. aqui está uma imagem de ecrã de 3 execuções deste guião.

Não está a funcionar para mim.

 
Prival:

Bug - costumava funcionar, mas agora não funciona.

Obrigado pela sua mensagem.

Vamos continuar a procurar.

 

Encontrei um pequeno erro no método PrintCheckResult (ficheiro Trade.mqh, Classes de comércio, classe CTrade).

void CTrade::PrintCheckResult(void) const
{
printf("CheckResult");
// printf("%d,%f,%f,%f,%f,%f,%f,%f,'%s'", - o último mas um parâmetro é desnecessário
printf("%d,%f,%f,%f,%f,%f,%f,'%s'",
m_check_result.retcode,m_check_result.balance,m_check_result.equity,
m_check_result.margin,m_check_result.margin_free,m_check_result.margin_level,
m_check_result.comment);
}

Em vez de cordel: printf("%d,%f,%f,%f,%f,%f,%f,%f,'%s'", - comentado por mim

deve haver uma linha: printf("%d,%f,%f,%f,%f,%f,%f,%f,%f,'%s'",

Verifiquei, a função corrigida funciona correctamente.

 
Prival:

Bug - costumava funcionar, mas agora não funciona.

Obrigado pela mensagem. Estará disponível na próxima actualização. Para que funcione na versão actual, utilizar fundição explícita para constante ou multiplicação em geral

void OnStart()
  {
  // вот так работает
     Print(TimeCurrent()+2*PeriodSeconds(PERIOD_D1));
  // а вот так нет (а раньше работало)  
     datetime    time_end=0;
     time_end=TimeCurrent()+(long) 2*PeriodSeconds(PERIOD_D1);
     Print(time_end);
  }
 
retired:

Encontrei um pequeno erro no método PrintCheckResult (ficheiro Trade.mqh, Classes de comércio, classe CTrade).


Obrigado pela mensagem.

Em breve será fixado.

 
mql5:

Obrigado pela sua mensagem. Estará disponível na próxima actualização. Para que funcione na versão actual utilize fundição explícita para constante ou multiplicação em geral

Obrigado. Se bem entendi, foi devido à conversão do tipo. É uma pena que não haja esta mensagem em tempo de compilação, seria mais fácil de encontrar
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Prival:
Obrigado. Se bem entendi, foi devido à conversão do tipo. É uma pena não haver tal mensagem em tempo de compilação, seria mais fácil de encontrar
O seu código está correcto, não há nada de que reclamar. O erro está realmente na conversão de operando sob x64 e foi corrigido. Aguardar por uma actualização.
 

Os erros ENUM_TRADE_RETURN_CODES devem ser interpretados correctamente a fim de os tratar correctamente. Há algum material para os descrever em pormenor?

Em particular, os seguintes erros não são completamente compreendidos:

10008

TRADE_RETCODE_PLACED

Encomenda efectuada

10021

TRADE_RETCODE_PRICE_OFF

Não há cotações disponíveis para processar o pedido


10028

TRADE_RETCODE_LOCKED

Consulta bloqueada para processamento

10029

TRADE_RETCODE_FROZEN

Ordem ou posição congelada

Alguém pode ajudar com esta questão?

 
retired:

Os erros ENUM_TRADE_RETURN_CODES devem ser interpretados correctamente a fim de os tratar correctamente. Há algum material para os descrever em pormenor?

Em particular, os seguintes erros não são completamente compreendidos:

10008

TRADE_RETCODE_PLACED

Encomenda efectuada

10021

TRADE_RETCODE_PRICE_OFF

Não há cotações disponíveis para processar o pedido


10028

TRADE_RETCODE_LOCKED

Consulta bloqueada para processamento

10029

TRADE_RETCODE_FROZEN

Ordem ou posição congelada

Alguém pode ajudar com esta questão?

Todos os códigos acima referidos referem-se aos códigos que são devolvidos pelo servidor em resposta ao pedido do terminal. É por isso que tudo é dado na secção "Códigos de retorno do servidor de troca".

Seria lógico assumir que a lista contém mais do que apenas erros.

Agora em ordem.

Quanto a

10008

TRADE_RETCODE_PLACED

Encomenda efectuada


Seria lógico supor que esta resposta não é um erro, mas simplesmente informa o cliente (o terminal de negociação) de que a ordem foi colocada com sucesso.

Neste caso, há três soluções possíveis:

1. Não processar de todo a resposta;

2. processar a colocação da encomenda no bloco OnTrade() - bastante aceitável, mas não muito correcto na minha opinião;

Na minha opinião, esta é a melhor maneira de processar um comércio mecânico.

PS

Prefiro processar as respostas do servidor no local da encomenda e apanhar o resultado das acções de um comerciante, servidor ou outro Expert Advisors no OnTrade().

Por exemplo, na OnTrade pode apanhar as operações comerciais do comerciante (colocar ou apagar uma ordem, ou trabalhar com posições).


Com respeito a


10029

TRADE_RETCODE_FROZEN

A ordem ou posição é congelada


Há um certo nível em que uma posição ou uma ordem são "congeladas" (quaisquer operações com elas são proibidas).

Este nível é uma distância ao preço actual ao qual o servidor proíbe quaisquer acções com a ordem ou posição. Esta distância é medida em pips e é definida para cada símbolo.

Pode ser obtido usando SymbolInfoInteger() com oparâmetro SYMBOL_TRADE_FREEZE_LEVEL.

Se obtiver tal resposta do servidor, deverá esperar que uma de duas coisas aconteça:

1. O preço não deslocou a distância necessária (maior do que a especificada nas propriedades do símbolo);

2. a ordem ou posição não funciona nas condições nelas estabelecidas.


Com respeito a

10021

TRADE_RETCODE_PRICE_OFF

Sem citações para processar o pedido


Provavelmente, ao obter esta resposta, deverá verificar o nome do símbolo (só por precaução), certificar-se de que o símbolo é seleccionado (importante para testadores e multicasts), verificar a disponibilidade do histórico, incluindo no servidor (se precisar de ser descarregado), provavelmente certificar-se de que o mercado está aberto e de que é possível negociar no símbolo.

PS

Embora aqui seja necessário especificar nos promotores


E quanto a

10028

TRADE_RETCODE_LOCKED

Pedido bloqueado para processamento


Esta é provavelmente a mais específica das respostas do servidor listadas acima... é mais provável que precise de esclarecimentos por parte dos programadores (vou apenas assumir que provavelmente deve esperar um certo tempo)...

 
Interesting:

Em relação a


10029

TRADE_RETCODE_FROZEN

Ordem ou posição congelada


Há um certo nível abaixo do qual uma posição ou uma ordem são "congeladas" (quaisquer acções com elas são proibidas).

Este nível é uma distância ao preço actual ao qual o servidor proíbe quaisquer acções com a ordem ou posição. Esta distância é medida em pips e é definida para cada símbolo.

Pode ser obtido usando SymbolInfoInteger() com oparâmetro SYMBOL_TRADE_FREEZE_LEVEL.

Se obtiver tal resposta do servidor, deverá esperar que uma de duas coisas aconteça:

1. O preço não deslocou a distância necessária (maior do que a especificada nas propriedades do símbolo);

2. A ordem ou posição não cumpriu as condições nelas estabelecidas.


Obrigado pela resposta detalhada. Compreendo o código "10029: TRADE_RETCODE_FROZEN: Ordem ou posição é congelada".

No entanto, ainda temos perguntas relativas às restantes (quero saber a resposta exacta e não apenas palpites):

10008

TRADE_RETCODE_PLACED

Encomenda efectuada

10021

TRADE_RETCODE_PRICE_OFF

Não há cotações disponíveis para processar o pedido


10028

TRADE_RETCODE_LOCKED

O pedido é bloqueado para processamento

Em particular, não é muito claro o que significa "10008: Ordem foi colocada", porque quando a ordem é colocada em fila de espera no servidor, é-lhe atribuído um bilhete e o código "10009: TRADE_RETCODE_DONE: Pedido executado" é devolvido.

Razão: