Limitar Ordens de BUY e SELL , AJUDA ...

 

Ola pessoal , estou precisando de uma ajuda , preciso LIMITAR as COMPRAS ou VENDAS somente quando a VELA bater na media central de Keltner Channels, ou seja cada vez que as velas de alta ou de baixa bater na media central efetua uma compra ou venda apenas 1 (uma) única vez.

acredito que como um { for } eu consiga , mas não sei !

isso em MQL5.


Obrigado pela ajuda de todos.


 
PROla pessoal , estou precisando de uma ajuda , preciso LIMITAR as COMPRAS ou VENDAS somente quando a VELA bater na media central de Keltner Channels, ou seja cada vez que as velas de alta ou de baixa bater na media central efetua uma compra ou venda apenas 1 (uma) única vez. acredito que como um { for } eu consiga , mas não sei ! isso em MQL5. Obrigado pela ajuda de todos.

Bom dia!!


1. O exemplo abaixo mostra uma forma de abrir apenas uma posição por candle:

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Como garantir que o EA não fará mais de uma operação no mesmo Candle operando no M1

Vinicius de Oliveira, 2022.09.28 22:58


Boa tarde!!


Pra esse caso em que o sinal pode ocorrer a qualquer momento (e não apenas na abertura de nova barra), uma forma bem simples de saber se já foi aberta posição na barra atual seria armazenando iTime(0) sempre que uma posição for aberta, e verificando essa informação antes de abrir nova posição...

//--- Global
   datetime open_time = 0;

   . . .

//--- Open position
   if(open_time != iTime(_Symbol, PERIOD_CURRENT, 0))
     {
      if(!m_trade.Buy(Lot, _Symbol, ASK, SL, TP, COMMENT))
        {
         Print(m_trade.ResultRetcode(), " ", m_trade.ResultRetcodeDescription());
         return;
        }
      open_time = iTime(_Symbol, PERIOD_CURRENT, 0);
     }


Acho que essa solução deve funcionar se o EA não for encerrado e reiniciado durante a execução da mesma barra... Para um maior controle (independente de encerramento/reinício do EA), verifique o horário de abertura da última posição no histórico de operações (por exemplo).


. . .


Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

[Dúvida] Como realizar apenas uma operação a cada candle

Eduardo Oliveira, 2022.12.01 18:22

O que nosso amigo Vinicius colocou funcionará e precisa ter os seguintes objetivos em mente:

1 Caso abra uma ordem precisa salvar o horario de abertura da vela, Vinicius chamou de open_time;

2 Se essa ordem continuar aberta mesmo apos uma vela nova, então salvar o horario de abertura desta vela nova no open_time novamente

3 No momento de abrir uma nova ordem, o horario da vela atual deverá ser diferente da variavel open_time

4 voltar para o 1º passo 


Na sua estrutura acima faltou nos if's de compra e venda as comparações deste open_time, por isso que o seu EA faz compra/venda e nao respeita a mesma vela


Espero que ajude




2. O exemplo abaixo pode ser utilizado também para verificar se já existe posição aberta. Se existir, não abre nova posição:

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

[Dúvida] Como realizar operações em diferentes EA's, em diferentes ativos, no mesmo tempo?

Vinicius de Oliveira, 2022.10.20 16:21


Bom dia, Christian!!


Que pena que AINDA não deu certo, mas vai dar... 😊


Esse exemplo que eu postei acima seria um modelo um pouco mais completo para gerenciamento de ordens e posições. As funções CheckCloseLongCheckCloseShort você teria que criar, e nelas você verificaria, de acordo com os seus critérios, se pelas condições atuais do mercado a posição deveria ser encerrada (CheckCloseLong analisa se encerra posições de compra; CheckCloseShort analisa se encerra posições de venda).


Mas, focando apenas no tema em questão (deixando a parte de gerenciamento mais pra frente), talvez você precise apenas do código abaixo:

//=== Classes
#include <Trade\Trade.mqh> CTrade m_trade;    //--- Funções de negociação

//=== Define constants
#define MAGIC 11


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Set Magic Number
   m_trade.SetExpertMagicNumber(MAGIC);

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Local variables
   int   Cnt, pos_nr = 0, ord_nr = 0;
   ulong TICKET;


// . . .


//--- Checks orders
   for(Cnt = OrdersTotal() - 1; Cnt >= 0; Cnt --)
     {
      TICKET = OrderGetTicket(Cnt);
      if(TICKET == 0)
        {
         Print("Failed to get order ticket...");
         return;
        }
      if(OrderGetString(ORDER_SYMBOL) == _Symbol && OrderGetInteger(ORDER_MAGIC) == MAGIC)
        {
         //--- Increase the orders number
         ord_nr ++;
         break;
        }
     }


// . . .


//--- Checks positions
   for(Cnt = PositionsTotal() - 1; Cnt >= 0; Cnt --)
     {
      //--- Gets the ticket and selects the position
      TICKET = PositionGetTicket(Cnt);
      if(TICKET == 0)
        {
         Print("Failed to get position ticket...");
         return;
        }
      if(PositionGetString(POSITION_SYMBOL) == _Symbol && PositionGetInteger(POSITION_MAGIC) == MAGIC)
        {
         //--- Increase the positions number
         pos_nr ++;
         break;
        }
     }


// . . .


//--- Open position - Buy
   if(pos_nr == 0)
     {
      if(!m_trade.Buy(Lot, _Symbol, ASK, SL, TP, COMMENT))
        {
         Print(m_trade.ResultRetcode(), " ", m_trade.ResultRetcodeDescription());
         return;
        }
     }


// . . .


//--- Open position - Sell
   if(pos_nr == 0)
     {
      if(!m_trade.Sell(Lot, _Symbol, BID, SL, TP, COMMENT))
        {
         Print(m_trade.ResultRetcode(), " ", m_trade.ResultRetcodeDescription());
         return;
        }
     }
  }


No caso, claro, pra cada EA você define um valor diferente pro MAGIC...


Qualquer dúvida, poste aí... 😊👍




EDIT.: se pos_nr > 0, já existe posição aberta; se ord_nr > 0, já existe ordem colocada.


 
Vinicius de Oliveira #:

Bom dia!!


1. O exemplo abaixo mostra uma forma de abrir apenas uma posição por candle:





2. O exemplo abaixo pode ser utilizado também para verificar se já existe posição aberta. Se existir, não abre nova posição:


Preciso uma ajuda referente a ...



Ola pessoal , estou precisando de uma ajuda , preciso LIMITAR as COMPRAS ou VENDAS somente quando a VELA bater na media central de Keltner Channels, ou seja cada vez que as velas de alta ou de baixa bater na media central efetua uma compra ou venda apenas 1 (uma) única vez.

acredito que como um { for } eu consiga , mas não sei !

isso em MQL5.


Obrigado pela ajuda de todos.



OBS: um delimitador que quando atinja a determinada linha ele compra ou venda , apos isso não faça mais operações até voltar a bater nesta linha . obrigado a quem puder ajudar.

 
PR #:

Preciso uma ajuda referente a ...



Ola pessoal , estou precisando de uma ajuda , preciso LIMITAR as COMPRAS ou VENDAS somente quando a VELA bater na media central de Keltner Channels, ou seja cada vez que as velas de alta ou de baixa bater na media central efetua uma compra ou venda apenas 1 (uma) única vez.

acredito que como um { for } eu consiga , mas não sei !

isso em MQL5.


Obrigado pela ajuda de todos.



OBS: um delimitador que quando atinja a determinada linha ele compra ou venda , apos isso não faça mais operações até voltar a bater nesta linha . obrigado a quem puder ajudar.

Se quiser feito gratuitamente, tinha um cara no forum em ingles com uma thread sobre isso. Se nao quiser aprender a programar em mql ou a programar em geral usa o servico de freelancer.
 
Ricardo Rodrigues Lucca #:
Se quiser feito gratuitamente, tinha um cara no forum em ingles com uma thread sobre isso. Se nao quiser aprender a programar em mql ou a programar em geral usa o servico de freelancer.


Você teria o link do qual se refere em inglês ?

 
PR #Preciso uma ajuda referente a ... Ola pessoal , estou precisando de uma ajuda , preciso LIMITAR as COMPRAS ou VENDAS somente quando a VELA bater na media central de Keltner Channels, ou seja cada vez que as velas de alta ou de baixa bater na media central efetua uma compra ou venda apenas 1 (uma) única vez. acredito que como um { for } eu consiga , mas não sei ! isso em MQL5. Obrigado pela ajuda de todos. OBS: um delimitador que quando atinja a determinada linha ele compra ou venda , apos isso não faça mais operações até voltar a bater nesta linha . obrigado a quem puder ajudar.

Ah, você repetir exatamente o mesmo texto inicial após a minha tentativa de ajuda foi realmente muito esclarecedor: eu havia entendido que você PRECISAVA de uma ajuda com o seu código para limitar as ordens de compra/venda, agora entendi que na verdade você DESEJA que alguém programe um EA para você. Então, a minha sugestão é a mesma que o Ricardo Lucca fez acima: crie uma encomenda do seu EA no serviço Freelance...

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Regras e recomendações do fórum

Miguel Angel Vico Alba, 2020.04.30 23:17

Regras e recomendações do fórum

  • Cada idioma tem seu respectivo fórum, e é por isso que é proibido se comunicar em um idioma diferente daquele do fórum em questão.
  • Os tópicos em maiúsculas serão removidos.
  • Nenhuma discussão ou publicidade, direta ou indireta, de qualquer corretor, sinal ou produto é permitida.
  • Linguagem rude, mensagens publicitárias, spam e inundações são proibidas.
  • Você deve compartilhar o código usando o botão 'Código'.



  • Por favor, não peça recomendações como "Por favor, recomende um EA lucrativo" ou "Qual é o melhor sinal?". Tais discussões são proibidas. Você pode ir para a seção Mercado ou Sinais e ler os comentários.
  • Se você tiver um problema para expor, evite nomear o broker com o qual trabalha. Saber o nome do corretor não é relevante.
  • A publicidade não é permitida no fórum e qualquer "recomendação" invariavelmente seria publicidade.
  • As pessoas que não conseguem codificar geralmente não recebem ajuda gratuita neste fórum, embora isso possa acontecer se você tiver sorte. Seja paciente.
  • Se você mostrar suas tentativas e descrever seu problema claramente, provavelmente receberá uma resposta da comunidade.
  • Se você não quer aprender a codificar, isso não é um problema. Você pode consultar a seção CodeBase, onde encontrará códigos gratuitos, ou no Market para produtos pagos (às vezes também gratuitos). Por fim, você também tem a opção de contratar um programador na seção Freelance.
  • Observe que um problema não reproduzível não é um problema. Para receber ajuda, ela deve sempre ser reproduzível e poder discuti-la com testes (logs, capturas de tela etc.).
  • Muitos dos problemas já foram resolvidos no fórum (alguns há anos). Use o mecanismo de pesquisa para encontrar tópicos relacionados ao tópico em questão que você está procurando.


  • Se você comprou um produto em outro lugar e está tendo problemas com ele, não podemos ajudá-lo.
  • Se você está tendo problemas e seu produto utiliza qualquer forma de licença incorporada fora do MQL Market, não podemos ajudá-lo.
  • Não fornecemos suporte para serviços de sinal externo fora do MQL5.com.
  • Não podemos ajudá-lo se você tiver problemas com seu corretor.
  • Não fornecemos suporte para serviços VPS externos.
  • Não fornecemos suporte para sistemas operacionais (Windows, Mac, Android ...).
  • Para resolver um problema mencionado acima, você deve entrar em contato com a parte externa.

Regras das diferentes seções


 
PR #:


Você teria o link do qual se refere em inglês ?

Acho que eles apagaram que lembro um dos pedidos dos moderadores pra manter o topico era divulgar o codigo fonte ali como uma resposta e nao um compilado.
 
     
     mediarapida = iMA (_Symbol,mm_tempo_grafico,mm_Rapida_periodo,deslocmm,mm_metodo,mm_preco);



     double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
     if(PositionsTotal()==0)
     if(rates[0].high>handlerapida[0]) 
     
     trade.Buy(lote,NULL,Ask,(Ask-150*_Point),0,"Compra +++");
     CheckTrailingStop0(Ask);
       
     double Bid=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
     if(PositionsTotal()==0)
     if(rates[0].low<handlerapida[0])   
      
     trade.Sell(lote,NULL,Bid,(Bid+150*_Point),0,"Venda ---");
     CheckTrailingStop1(Bid);



Coloquei PARTE  do código com trailing stop ativo , porem vou deixar o TK e SL fixo , este código executa a compra e venda porem preciso
limitar ela a uma vez apenas para compra e venda e só efetua a próxima operação quando bater na media de 20 períodos.