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

 

Olá,

Estou tentando fazer uma EA muito simples que compare dois preços de fechamento e com base nisso, ou abre uma ordem de compra ou venda.

Tudo vai bem na primeira ordem, mas assim que a condição muda de venda para compra, ela coloca várias ordens de uma só vez.

O m_trade é um objeto Ctrade.

// Current position information

bool Buy_openend = false;
bool Sell_openend = false;

double currentVolume = 0;

if(PositionSelect(_Symbol) == true)
  {
   if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
     {
      Buy_openend = true;
     }
      if (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
     {
      Sell_openend = true;
      }   
        currentVolume = PositionGetDouble(POSITION_VOLUME);   
  } 

// Check for trade conditions

bool SellCondition = close <= closeprev && bar[1].time == startTime;
bool BuyCondition = close >= closeprev && bar[1].time == startTime;


// Entering trade

if(SellCondition)
  {
   if(Sell_openend)
   {
   Print("We already have a sell open");
   return;
   }
   m_trade.Sell(TradeVolume+currentVolume,_Symbol,m_symbol.Ask(),NULL,NULL,NULL);
  }
if(BuyCondition)
  {
   if(Buy_openend)
     {
      Print("We already have a buy open");
   return;
     }
     m_trade.Buy(TradeVolume+currentVolume,_Symbol,m_symbol.Bid(),NULL,NULL,NULL);
  }
 
Divania111 objeto Ctrade.

Você esqueceu que o tempo de 'startTime' precisa ser reiniciado.

 
Vladimir Karputov #:

Você esqueceu que o tempo de 'startTime' precisa ser reiniciado.

Obrigado Vladimir, vou tentar consertá-lo com base em sua dica.

No entanto, ainda estou surpreso. Porque na declaração para entrar em uma profissão, verificamos a colocação de um pedido existente do mesmo tipo. Se isto for verdade, então o pedido não deve ser feito. Assim, pensei que com esta declaração apenas 1 tipo de ordem pode ser inserida ao mesmo tempo.

Este pensamento é incorreto?

 
Divania111 # :

Obrigado Vladimir, vou tentar consertá-lo com base em sua dica.

No entanto, ainda estou surpreso. Porque na declaração para entrar em uma profissão, verificamos a colocação de um pedido existente do mesmo tipo. Se isto for verdade, então o pedido não deve ser feito. Assim, pensei que com esta declaração apenas 1 tipo de ordem pode ser inserida ao mesmo tempo.

Este pensamento é incorreto?

Você não controla os pedidos de forma alguma, você verifica o número e o tipo da POSIÇÃO no código. Além disso - você trabalha incorretamente com POSIÇÕES (erro para usar 'PositionSelect(_Symbol)' se seu tipo de conta for hedging). Seu algoritmo tem sérios erros de projeto.

O que você deve fazer:

1. Trabalhar EXCLUSIVAMENTE no momento do nascimento de um novo bar. Se não houver uma nova barra - não faça nada, não faça movimentos desnecessários.

2. Este item será divulgado depois que o item 1 for concluído.

 
Olá. Você pode me dizer se o Comentário in void OnTick() está desacelerando a EA. Colocá-lo no OnInit() funciona muito mais rápido.
 
Marco Nicholas o comentário no vazio OnTick() está atrasando a EA. Colocá-lo no OnInit() funciona muito mais rápido.

Sim, no MT5, isso torna a operação consideravelmente mais lenta.

No OnInit só funciona uma vez durante a inicialização e não mais.

 
Marco Nicholas o Comentário in void OnTick() está desacelerando a EA. Coloque-o no OnInit() funciona muito mais rápido.

Você está falando sobre a função Comentário()?

Se sim, então isso é óbvio. No OnInit(), o comentário só será atualizado uma vez, enquanto no OnTick() o comentário pode acabar sendo atualizado a cada tick.

A solução é atualizar o comentário somente quando necessário. Se for estático, então atualizado somente em OnInit() e limpo em OnDeinit(), mas se for dinâmico, então em OnTick() somente atualizará o comentário quando precisar ser alterado.

EDIT: Este post foi originalmente feito no fórum inglês.

 
Olá professores, quando uso a função SocketConnect() do lado do cliente , não consigo estabelecer uma conexão com o servidor mesmo depois de preencher corretamente os parâmetros de acordo com as instruções do usuário, mas o servidor está normalmente disponível após o teste.
 

Bom dia a todos.

Eu tenho uma pergunta

como fazer uma consulta ao sqlite para selecionar uma fila a partir de um bilhete.

A estrutura do banco de dados é a seguinte:

simbólogo-texto

bilhete - texto

pirataria - real

s_l - real

t_p - real

necessidade de colocar toda a cadeia de bilhetes na estrutura

 
Olá, você pode usar Comentário() no switch() em vez de Imprimir.
Razão: