Erros, bugs, perguntas - página 77

 
Interesting:

Acertei que os valores devolvidos pela ACCOUNT_TRADE_ALLOWED são gerados no lado do servidor?

Nenhuma acção do lado do comerciante (em terminal) pode alterar este valor...

PS

Mas a relutância da ACCOUNT_TRADE_EXPERT em mudar é realmente estranha...

O que faz então o botão "Auto-Trading" no menu do terminal e a caixa de verificação "Allow auto-trading"?

PPS

Em lançamentos antigos tudo parecia estar correcto e tudo funcionava, mas em 299 não percebo o que se passa...


Quem cavou em ACCOUNT_TRADE_ALLOWED e ACCOUNT_TRADE_EXPERT e porquê?


Aos criadores - Ou já estou a enlouquecer ou "drubashki" apareceu no terminal. :)

E não no último lançamento, mas pelo menos em 294 (quem os deixou lá?)... :(


Uma pequena experiência

Vamos pegar no lançamento do terminal 294 e colocar no gráfico um Expert Advisor que controla o valor de retorno de AccountInfoInteger(ACCOUNT_TRADE_ALLOWED).

Ao mesmo tempo, a auto-negociação é desactivada nos parâmetros do Expert Advisor e no terminal (o botão "auto-negociação").

Como resultado, o diário de bordo do Conselheiro Especialista contém o seguinte

Aqui podemos ver o registo das acções realizadas pelo Expert Advisor (durante a inicialização) e a verificação do valor ACCOUNT_TRADE_ALLOWED no temporizador.

Estamos interessados em todos os símbolos destacados a cores (antes disto a lista de símbolos era carregada numa classe especializada).

1. O primeiro resultado devolvido pelo temporizador é azul (espera-se que seja falso);

2. A cor vermelha realça o resultado seguinte, que foi devolvido pelo temporizador, e de repente revelou-se verdadeiro(estou muito interessado no que BARABACA permitiu negociar);

3. A reacção da minha turma (evento OnEventTimer) às mudanças é verde.

Aqui a turma "compreende" que a auto-comercialização é permitida e informa sobre ela com prazer (não partilho do seu optimismo);

Além disso, a mensagem é apresentada duas vezes (embora não tivesse sido vista antes). A mensagem não deve aparecer duas vezes, uma vez que o evento OnEventTimer contém uma verificação que exclui esta possibilidade.

//Reading information on current parameters of the trade account
RealTradeAllowed = TradeAllowed(); //TradeAllowed
RealTradeExpert  = TradeExpert();  //TradeExpert
//Checking the status change of the use possibility automatic trade
  if(varTradeAllowed!=RealTradeAllowed)
  //Processing the event TradeAllowed
  {
  OnTradeAllowed(RealTradeAllowed);
  //We write current status of the RealTradeAllowed in variable
  varTradeAllowed = RealTradeAllowed;
  }

4. Então o temporizador retorna constantemente verdadeiro, aconteça o que acontecer ao terminal.

PS

A situação com AccountInfoInteger(ACCOUNT_TRADE_EXPERT) é ainda mais confusa. O temporizador retorna o ture independentemente das configurações do terminal e do Expert Advisor.

Será que precisamos dele?

 
AM2:

Estou também interessado numa questão semelhante. O que devo fazer se não houver fundos suficientes na minha conta para abrir uma posição?

1. Impedir o Expert Advisor de negociar.

2. Proibir a abertura de uma posição.

3. retirar o Consultor Especialista do quadro.

O ponto 3 pode ser resolvido utilizando o ExpertRemove. Resolvi o 2º item desta forma:

1. Compreendo que a proibição de negociação não é definida programmaticamente, mas utilizando o botão "Auto-Trading" e a caixa de verificação "Allow auto-trading" seguida da verificação ACCOUNT_TRADE_ALLOWED e ACCOUNT_TRADE_EXPERT.

Também pode proibir operações comerciais adicionando o parâmetro necessário ao seu Consultor Especialista e depois controlando este parâmetro (por exemplo, proibir a negociação numa conta real).

O controlo preliminar é realizado durante a inicialização de um Expert Advisor, enquanto no modo de trabalho é tratado em OnTimer() ou OnTick().

2. O controlo da possibilidade de abrir (fechar) uma posição deve ser conduzido considerando o estado actual: a ligação, a possibilidade de auto-comercialização, e outras condições (por exemplo, o controlo da possibilidade de realizar uma determinada operação para este símbolo).

Para controlar todas as condições, é melhor criar uma função com um resultado semelhante a um bool.

Por exemplo, como este:

//Function IsTradePermit
bool IsTradePermit(bool TardeAllowed,bool Connect,double FreeMargin)
{
//----------------------------------------------------------------------------//
//Work variables
bool Result;
//----------------------------------------------------------------------------//

//Тут мы проверяем разрешена или нет торговля

//----------------------------------------------------------------------------//
return(Result);
//----------------------------------------------------------------------------//
}

3. o consultor especializado só deve ser retirado do quadro em casos extremos (quando o seu trabalho não pode ser feito ou quando já não é necessário)

Esta situação é muito extrema e rara. Deve ser utilizado, por exemplo, se alguns ficheiros necessários para o Consultor Especialista não forem encontrados, ou se houver um erro que o Consultor Especialista não consiga resolver.

PS

A remoção e colocação de EAs também é útil se vários EAs negociarem em pares diferentes, mas são geridos por um EA (ele decide em que par colocar um EA e qual remover)...

 
Interesting:

Quem cavou ACCOUNT_TRADE_ALLOWED e ACCOUNT_TRADE_EXPERT, e o mais importante, porquê?


Desenvolvedores - Ou já estou a ficar louco ou o terminal "drubashki" apareceu... :)

E não no último lançamento, mas pelo menos em 294 (quem os deixou entrar ali?)... :(


Uma pequena experiência

Vamos pegar no lançamento do terminal 294 e colocar no gráfico um Expert Advisor que controla o valor de retorno de AccountInfoInteger(ACCOUNT_TRADE_ALLOWED).

Ao mesmo tempo, a auto-negociação é desactivada nos parâmetros do Expert Advisor e no terminal (o botão "auto-negociação").

Como resultado, o diário de bordo do Conselheiro Especialista contém o seguinte

Aqui podemos ver o registo das acções realizadas pelo Expert Advisor (durante a inicialização) e a verificação do valor ACCOUNT_TRADE_ALLOWED no temporizador.

Estamos interessados em todos os símbolos destacados a cores (antes disto a lista de símbolos era carregada numa classe especializada).

1. O primeiro resultado devolvido pelo temporizador é azul (espera-se que seja falso);

2. A cor vermelha realça o resultado seguinte, que foi devolvido pelo temporizador, e de repente revelou-se verdadeiro(estou muito interessado no que BARABACA permitiu negociar);

3. A reacção da minha turma (evento OnEventTimer) às mudanças é verde.

Aqui a turma "compreende" que a auto-comercialização é permitida e informa sobre ela com prazer (não partilho do seu optimismo);

Além disso, a mensagem é apresentada duas vezes (embora não tivesse sido vista antes). A mensagem não deve aparecer duas vezes, uma vez que o evento OnEventTimer contém uma verificação que exclui esta possibilidade.

4. Então o temporizador retorna constantemente verdadeiro, aconteça o que acontecer ao terminal.

PS

A situação com AccountInfoInteger(ACCOUNT_TRADE_EXPERT) é ainda mais confusa. O temporizador retorna a ture independentemente das configurações do terminal e do Expert Advisor.

Será que precisamos dele?

Algo de estranho se passa aqui, ACCOUNT_TRADE_ALLOWED e ACCOUNT_TRADE_EXPERT são permissões para negociar na sua empresa de corretagem.

Botão "AutoTrade". - TerminalInfoInteger(TERMINAL_TRADE_ALLOWED).

Existe MQL5InfoInteger(MQL5_TRADE_ALLOWED) - permissão/proibição de comércio para perito/script

 
Swan:

Algo de estranho acontece, ACCOUNT_TRADE_ALLOWED e ACCOUNT_TRADE_EXPERT são permissões de comércio no CD.

Botão "AutoTrade". - TerminalInfoInteger(TERMINAL_TRADE_ALLOWED).

Existe também MQL5InfoInteger(MQL5_TRADE_ALLOWED) - permissão/proibição de comércio para perito/script

Conheço a MQL5InfoInteger(MQL5_TRADE_ALLOWED), funciona bem e é normalmente monitorizada em Expert Advisor; MQL5_DLLS_ALLOWED é também normalmente processada.

Assim, tal como eu o entendo:

TERMINAL_DLLS_ALLOWED e TERMINAL_TRADE_ALLOWED são permissões de nível terminal;

MQL5_DLLS_ALLOWED e MQL5_TRADE_ALLOWED - permissões a nível de peritos;

ACCOUNT_TRADE_ALLOWED e ACCOUNT_TRADE_EXPERT - permissões a nível de servidor.

Então assumiremos que o servidor muda falso para verdadeiro (embora não seja claro porque é que esta mensagem é mostrada duas vezes).

 
Swan, obrigado pela dica . É tudo fixo. Tudo parece estar a funcionar bem...
 

Boa tarde tenho este problema, começo a percorrer a tabela horária e numa determinada data vai para a tabela diária, também com 15 minutos vão para a tabela horária ou 4 horas, ficheiros apagados onde o histórico é armazenado de acordo com a documentação mas nada mudou.

Документация по MQL5: Файловые операции / FileDelete
Документация по MQL5: Файловые операции / FileDelete
  • www.mql5.com
Файловые операции / FileDelete - Документация по MQL5
 
RomanIgorevi4:

Boa tarde tenho este problema, começo a percorrer a tabela horária e numa determinada data vai para a tabela diária, também com 15 minutos vão para a tabela horária ou 4 horas, ficheiros apagados onde o histórico é armazenado de acordo com a documentação mas nada mudou.

Antes desta data existe apenas um histórico diário no servidor (sem histórico de minutos), pelo que todos os períodos de tempo são exibidos como diários.
 

Descobri que existe um problema com HistoryDealsTotal() ao utilizar os algoritmos de optimização do testador.

Durante um backtest normal tudo está bem, mas numa sessão de optimização, durante a fase de inicialização da EA, HistoryDealsTotal() devolve o número de negócios da execução anterior da EA. Mais tarde, durante a fase de negociação, HistoryDealsTotal() começa novamente em 0.

Encontrei este número através do seguinte trecho de código:

    // constructor
    void MyClass() {
        _dealCnt = HistoryDealsTotal();  // this is causing trouble!
        _orderCnt = OrdersTotal();
        _positionCnt = PositionsTotal();
        _historyOrderCnt = HistoryOrdersTotal();
        ...
    }

A forma de contornar isto, é inicializar com 0, mas mesmo assim ficaria satisfeito com uma resposta oficial a esta questão, porque para mim parece que algumas variáveis internas são reiniciadas demasiado tarde.

Obrigado de antemão!

Documentation on MQL5: Trade Functions / HistoryDealsTotal
Documentation on MQL5: Trade Functions / HistoryDealsTotal
  • www.mql5.com
Trade Functions / HistoryDealsTotal - Documentation on MQL5
 

Olá, responda à minha pergunta:

Porque não posso descarregar o mt5, descarrego o ficheiro de instalação, inicio a meio caminho, pára, salta para outro ponto de acesso, etc. No final há um erro...

-lido falhou [12002]

esta é a história constantemente, não importa quantas vezes reinstale o terminal ou janelas, mas agora ao terceiro dia falha

 

por favor diga-me porque é que esta construção regressa sempre 0

MqlDateTime dt; Print(dt.min);

e como é que sei quantos minutos são agora?

MqlDateTime dt; if(dt.min)>33 ...