Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 363

 
Tapochun:
Não me parece que esteja a fazer a pergunta aqui. Criar um fio separado, anexar aí o código do indicador e esperar que alguém ajude. Sem o código... é pouco provável que alguém o ajude.
O indicador não compra nem vende).
 
Ao escrever os ToR, deparei-me com uma situação em que não compreendo como descrever correctamente o algoritmo. Pode dizer-me se é possível encerrar parcialmente uma posição no trabalho da EA?
 
Nikolay Lampickiy:
Ao escrever os ToR, deparei-me com uma situação em que não compreendo como descrever correctamente o algoritmo. Pode aconselhar sobre a possibilidade de encerramento parcial de uma posição no trabalho da EA?
Para o fazer, para fechar uma posição, especificar um lote mais pequeno do que o lote da posição (isto se MT4, em MT5 pode abrir uma posição oposta com um lote mais pequeno, e eles sobrepor-se-ão no final). A posição com o lote restante permanecerá no mercado.
 
Nikolay Lampickiy:
Ao escrever os ToR, deparei-me com uma situação em que não compreendo como descrever correctamente o algoritmo. Pode dizer-me se é possível um encerramento parcial de uma posição no trabalho de uma EA?
O que há de tão complicado nisso? Se a posição não for dividida uniformemente (ex. 0,09), então feche a maior parte (0,05) e pare para atingir o ponto de equilíbrio, depois outra metade da posição fechada (0,02) e ponha em lucro e vice versa até que toda a posição seja fechada ou quebrada uniformemente. O passo pode ser fixado ou calculado a partir de qualquer intervalo, depende do sistema de negociação.
 
Vladimir Zubov:
O que há de tão complicado nisso? Se a posição não for dividida uniformemente (ex. 0,09), então feche a maior parte (0,05) e mova a paragem para o ponto de equilíbrio, depois outra distância de fecho e novamente metade da distância restante (0,02) e mova a paragem para o próximo passo de fecho no positivo e assim sucessivamente até que toda a posição seja fechada ou chegue à paragem. O passo pode ser fixado ou calculado a partir de qualquer intervalo, depende do sistema de negociação.

Será que percebo bem? A linguagem de programação MQL4 permite formalizar o encerramento de apenas metade do volume de encomendas do mercado... como o lote 10 e fechar 5 lotes quando o preço atinge um certo nível.

Ou é possível fechar 1/3?

Ou, seria mais fácil implementar esta ideia numa EA, fazendo diferentes encomendas. Quando o preço atinge um nível requerido, uma ordem é fechada e a outra permanece no lugar do fecho parcial do volume de ordens do mercado. O que pensa?

 
Vitalie Postolache:
Para o fazer, é necessário especificar um lote mais pequeno do que o lote da posição na ordem fechada (isto se MT4, em MT5 pode abrir a posição oposta com um lote mais pequeno, e eles sobrepor-se-ão no final). A posição com o lote restante permanecerá no mercado.
Não estou satisfeito com a posição oposta... obrigado pela sua resposta.
 
Nikolay Lampickiy:

Será que percebo bem? A linguagem de programação MQL4 permite formalizar o encerramento de apenas metade do volume de encomendas do mercado... como o lote 10 e fechar 5 lotes quando o preço atinge um certo nível.

Ou é possível fechar 1/3?

Ou, seria mais fácil implementar esta ideia numa EA através de encomendas diferentes. Quando o preço atinge um nível requerido, uma ordem é fechada e a outra permanece no lugar do fecho parcial do volume de ordens do mercado. O que pensa?

Podemos fazer as duas coisas. OrderClose permite-lhe fechar o volume que lhe é indicado. https://docs.mql4.com/ru/trading/orderclose

É claro que pode abrir várias encomendas com diferentes níveis de lucro. Em caso de falha de ligação será ainda mais fiável, porque os níveis de TP são armazenados no servidor e serão executados se o preço os intersectar.

OrderClose - Документация на MQL4
  • docs.mql4.com
OrderClose - Документация на MQL4
 
Vladimir Zubov:

Pode fazer ambas as coisas. OrderClose permite fechar o volume, que lhe é indicado. https://docs.mql4.com/ru/trading/orderclose

É claro que também pode abrir várias encomendas com diferentes níveis de lucro. No caso de uma falha de ligação isto será ainda mais fiável, porque os níveis de TP são armazenados no servidor e serão executados se o preço os cruzar.

Obrigado pela resposta))))
 

Olá a todos, estou a enfrentar um problema, gostaria de ouvir a opinião de profissionais ou utilizadores mais experientes do MT5. Escrevi um indicador e uma classe CEventBase, o que permite que o indicador gere eventos. Ao correr Expert Advisors que processam estes eventos mais cedo ou mais tarde, ao correr em tempo real, recebo erros: 4001, 4102, 4104. Quando começam a "acumular-se", não param de o fazer) anexo o código da função Gerar, que na realidade é a fonte de todos estes problemas. Terei muito prazer em ouvir a sua opinião)...

Bom dia a todos!


bool CEventBase::Generate(long _chart_id, int _id_ind, SEventData &_data,
                          const bool _is_custom=true)
  {
   bool is_generated = true;
   // если индекс id события в массиве не верен
   if (_id_ind < 0 || _id_ind >= aEvents.Total())
    {
     Print("Не верно задан индекс ID события");
     return (false);
    }
   // заполняем поля 
   CEvent *event = aEvents.At(_id_ind);
   this._id = (ushort)(CHARTEVENT_CUSTOM+event.id);
   this._data = _data;
   this._data.sparam = event.name; // сохраняем имя события
   
   if(_is_custom)
     {
      ResetLastError();
      is_generated = EventChartCustom(_chart_id, event.id, this._data.lparam,
                                      this._data.dparam, this._data.sparam);
      if(!is_generated && _LastError != 4104)
         {
          Print("is_generated = ", is_generated);
          PrintFormat("%s Error while generating a custom event: %d", __FUNCTION__,_LastError);
          Print( ChartSymbol(_chart_id)," ",PeriodToString(ChartPeriod(_chart_id)), "Ошибка! _chart_id =", _chart_id, " event.id = ", event.id, " data.dparam = " ,this._data.dparam, " data.sparam = ", this._data.sparam);
          
         }
     }
   return is_generated;
  }


 
dariamap:

Olá a todos, estou a enfrentar um problema, gostaria de ouvir a opinião de profissionais ou utilizadores mais experientes do MT5. Escrevi um indicador e uma classe CEventBase, o que permite que o indicador gere eventos. Ao correr Expert Advisors que processam estes eventos mais cedo ou mais tarde, ao correr em tempo real, recebo erros: 4001, 4102, 4104. Quando começam a "acumular-se", não param de o fazer) anexo o código da função Gerar, que na realidade é a fonte de todos estes problemas. Terei muito prazer em ouvir a sua opinião sobre o assunto ...)

Tenham um bom dia a todos!

Obviamente, o método que apresentou é um método de trânsito. É muito provável que o erro não esteja nele. Não é claro, a partir dos dados que apresentou, o que se está a passar. Pode haver várias variantes:

  • Identificador de gráfico incorrecto (que é o que diz o erro 4101).
  • Consultas demasiado frequentes;
  • Outros parâmetros incorrectos (IDs de eventos, por exemplo).

A julgar pelo nível de código que escreveu, podemos dizer que o erro pode ser em qualquer lugar e em qualquer altura.