Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1190

 
MakarFX:

Fechamento do MetaQuotes Demo Server

MetaQuotes Software Corp.

4 de março de 2009

Em 5 de abril de 2009 o servidor "demo.metaquotes.net" será desativado. No entanto, o Centro de História com o minucioso histórico vai continuar seu trabalho.

A partir deste dia, nossa empresa se recusa a utilizar o servidor de demonstração. Atualmente, o número de empresas que operam a plataforma MetaTrader 4 é tão alto, que não vemos a necessidade de manter nosso próprio servidor.

Isto é algum tipo de antiguidade (outro servidor é mencionado). Já foi feito muitas vezes este ano, a última vez foi há um mês atrás na MetaQuotes-Demo uma nova conta demo foi criada normalmente.

Além disso, se o servidor for removido, por que ele é mostrado e pingado no assistente de abertura de conta? A compota acontece apenas no último passo.

 
Artyom Trishkin:

A primeira vez que dados históricos são acessados a partir do indicador, se houver dados locais insuficientes, o carregamento de dados começa e a função retorna um erro.

Isto eu entendo perfeitamente. Se fosse sobre barras insuficientes na história, então ambas as funções retornariam 0. Entretanto, uma delas retorna 0, enquanto a outra retorna corretamente o número de barras na história. Além disso, eles são chamados um após o outro:

Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(symbol, timeframe)); // Данный вызов iBars() даёт 0 при перезапуске терминала
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(Symbol(), Period())); // Этот же вызов iBars() работает нормально
  }

Somente os dados no primeiro caso são retirados dos pré-membros prontos (símbolo e cronograma) da classe Loader (corretamente inicializados), mas no segundo caso, das funções Symbol() e Period() (que retornam exatamente os mesmos valores que foram escritos em símbolo e cronograma). Os valores das variáveis são idênticos aos das funções (eu verifiquei). Mas não está claro onde iBars (símbolo, cronograma) se aparafusa com símbolo e cronograma absolutamente corretos. Enquanto iBars(Symbol(), Period()) não comete um erro. Portanto, decidi que deve ser um erro no próprio terminal ou uma compilação incorreta do código fonte.

Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Если указаны параметры start_time и stop_time, то функция возвращает количество баров в диапазоне дат. Если эти параметры не указаны, то функция возвращает общее количество баров. Если данные для таймсерии с указанными параметрами при вызове функции Bars() еще не сформированы в терминале, или данные таймсерии в момент вызова функции не...
 
Mihail Matkovskij:

Entendo isso muito bem. Se fosse sobre a falta de barras na história, então ambas as funções retornariam 0. Mas como é, uma função retorna 0, enquanto a outra retorna corretamente o número de barras na história. Além disso, eles são chamados um após o outro:

Somente os dados no primeiro caso são retirados dos pré-membros prontos (símbolo e cronograma) da classe Loader (corretamente inicializados), mas no segundo caso, das funções Symbol() e Period() (que retornam exatamente os mesmos valores que foram escritos em símbolo e cronograma). Os valores das variáveis são idênticos aos das funções (eu verifiquei). Mas não está claro onde o iBars (símbolo, prazo) se confunde com o símbolo e o prazo absolutamente corretos. Enquanto iBars(Symbol(), Period()) não comete um erro. Por isso, decidi que há um erro em algum lugar na operação do terminal.

Agora escreva assim, como Igor aconselhou:

Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(Symbol(), Period())); // Данный вызов iBars() даёт 0 при перезапуске терминала
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(symbol, timeframe)); // Этот же вызов iBars() работает нормально
  }
E não se esqueça que este é um construtor de classes, e que é chamado antes da inicialização
 
Mihail Matkovskij:

Entendo isso muito bem. Se fosse sobre a falta de barras na história, então ambas as funções retornariam 0. Mas como é, uma função retorna 0, enquanto a outra retorna corretamente o número de barras na história. E eles são chamados um após o outro:

Você inventa uma história

e então você decide escrevê-lo como uma reclamação e então a pergunta

O que diz a mensagem de erro 4401?

o que eu escrevi?

Você entende a diferença entre uma falta de barras e um gráfico que não está pronto?

você tem a situação após o reinício do terminal com o início do indicador, e você solicita os dados na inicialização global do programa MQL (class constructor), que será executado antes do OnInit()


se foi, você escreve mais rápido do que lê, procure no fórum 4401 - todas as respostas

 
MakarFX:

Calculo o lote da seguinte forma

Está no início da EA...e eu o coloco no final do código

#property link      "http://www.mql5.com"
input double CheckLots = 0.01;
input int    Persent   = 5;
   double Lots=NormalizeDouble(AccountBalance()*CheckLots/1000-0.005,2);  

Quando a variável Lots é chamada na função OnTick, a EA a encontra e recalcula.

Não pode ser assim. A declaração e inicialização estão em andamento, e a variávelLotes está sendo atribuída com uma expressão.

NormalizeDouble(AccountBalance()*CheckLots/1000-0.005,2)

Esta atribuição pode ser feita apenas uma vez na partida. Não pode ser o caso, que uma expressão seja automaticamente atribuída cada vez queLotes são acessados. Ainda não ouvi dizer que o mql pode fazer isso.

 
Seric29:

Não pode ser assim. Você tem declaração e inicialização, e uma expressão é atribuída à variávelLotes.

Esta atribuição pode ser feita uma vez na partida, não pode ser que cada vez que você acessaLotes, uma expressão seja automaticamente atribuída. Ainda não ouvi dizer que o mql pode fazer isso.

Eu verifiquei, quando o saldo muda, o lote também muda
 
MakarFX:
Eu verifiquei, quando o saldo muda, o lote também muda

Uau, eu vou checar. Sei que você pode inicializar variáveis com elementos de matriz com funções, mas não sabia que isso muda automaticamente, acho que também não há nada disso em C++, vou verificar mais tarde.

 
Artyom Trishkin:
E não se esqueça que este é um construtor de classes, e que é chamado antes da inicialização

Isto se o objeto for automático. Mas eu o crio comnova palavra-chave(em OnInit()) e o apago com a palavra-chave apagar (em OnDeinit()). Ou seja, uso um ponteiro para um objeto do tipo Loader. Mas eu acho que você sabe de todos esses detalhes. É por isso que o carregador é criado no OnInit() e não pode haver nenhum erro aqui.

Se você quer dizer troca de funções, eu já tentei e o resultado é o mesmo. Somente as mensagens vão em uma seqüência diferente :)

public:  
  Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(Symbol(), Period())); 
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(symbol, timeframe)); 
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
  }

Resultado:

2020.06.24 23:10:48.568 Carregador::Símbolo do carregador: EURUSD Prazo: PERÍODO_H1

2020.06.24 23:10:48.568 Loader::Loader bars (2): 140435

2020.06.24 23:10:48.568 Loader::Barras Loader: 0

2020.06.24 23:10:48.568 Loader::Loader Error: 4401

Observe que isso só acontece se e somente se o terminal for reiniciado! Porque na primeira inicialização do terminal (após a inicialização do Windows), este exemplo funciona corretamente.
Запуск платформы - Для продвинутых пользователей - Справка по MetaTrader 5
Запуск платформы - Для продвинутых пользователей - Справка по MetaTrader 5
  • www.metatrader5.com
По завершении установки в меню "Пуск" создается группа программ торговой платформы, а на рабочем столе дополнительно помещается ярлык программы. Используйте их для запуска. Нельзя запускать одновременно две копии платформы из одной директории. Чтобы одновременно запустить несколько копий, установите соответствующее количество программ в разные...
 
Igor Makanu:

Você inventou uma história.

e depois decidiu transformá-la em uma reclamação.

Sem reivindicações! E qual é a história se eu forneci o código fonte e até descrevi a seqüência de ações para testar seu trabalho? Obviamente, você me entendeu mal...

Igor Makanu:

E você está pedindo dados na inicialização global do programa MQL (construtor de classes), que será executado antes do OnInit()


se foi, você está escrevendo mais rápido do que lendo,procure no fórum 4401 - todas as respostas


Não deve ser executado antes doOnInit(), escrevi em um post anterior. É você que não está lendo com atenção, tanto os posts quanto o código fonte que acrescentei para os testes.

 
Stanislav Korotky:

Isto é alguma antiguidade (outro servidor é mencionado). Mais de uma vez este ano, há um mês atrás, no MetaQuotes-Demo, uma nova conta demo foi criada normalmente.

Além disso, se o servidor for removido, por que ele é mostrado e pingado no assistente de abertura de conta? O congestionamento acontece apenas na última etapa.

Sim, algo não está sendo registrado, mesmo no terminal móvel. No início deste ano, tudo estava sendo registrado.
Razão: