Metatrader no Brasil - BMF Bovespa - página 18

 
matheus3254:

Boa noite, eu estou com uma dúvida, como que faço para pegar o valor de um segundo candle?

exemplo:

Se o 2° Candle tiver o Close maior que o close do 1° candle anterior  [ele vai fazer ... desconsidere isso]

a montagem do calculo que usei de exemplo seria isso?  close[i+1] > close[i] ??

Use a função ArraySetAsSeries. Veja na documentação.


[ ]'s

Documentação sobre MQL5: Funções para Array / ArraySetAsSeries
Documentação sobre MQL5: Funções para Array / ArraySetAsSeries
  • www.mql5.com
//| Função de inicialização do indicador customizado                 | //| Função de iteração do indicador customizado                      | //
 
Boa tarde! Tem como usar outro timeframe além dos pré-programados no MT5 para iOS?
 

Oi Carlos,

eu baixei o DEMO mas nao consigo colocar os ativos da Bovespa e nem os derivativos, pode me ajudar?

 
tzaravopoulos:

Oi Carlos,

eu baixei o DEMO mas nao consigo colocar os ativos da Bovespa e nem os derivativos, pode me ajudar?

Você pesquisou como funciona isso? Ao visto não.

Você pesquisou as milhares de resposta desta mesma pergunta no Fórum? Ao visto não.

Você contratou a plataforma MT5 em sua corretora? Ao visto não.

Se contratou (duvido), você leu o manual enviado pela corretora? Ao visto não.

Para colocar os ativos Bovespa você deve entrar em contato com  sua corretora no Brasil, eles irão orientá-lo.

 
Boa Tarde! Estou com um problema a 4 dias e não consegui resolver. Baixei a meta trader 5 e configurei, mas não aparece BM&F BOVESPA, só aparece Forex e mercado estrangeiro! Já vi todos os vídeos de como colocar mini índice, mas não funcionam! Pode me ajudar, por favor?
 
ellen.dallety:
Boa Tarde! Estou com um problema a 4 dias e não consegui resolver. Baixei a meta trader 5 e configurei, mas não aparece BM&F BOVESPA, só aparece Forex e mercado estrangeiro! Já vi todos os vídeos de como colocar mini índice, mas não funcionam! Pode me ajudar, por favor?

Seu problema é não ter buscado informações prévias.

Entre em contato com o suporte de sua corretora. Eles irão orientá-lo a contratar a plataforma MT5 e configurar adequadamente.

 

Bom dia a todos! Estou com dificuldades de acionar o BE nas ordens do mini dolar. A inserção de stop e take são feitas sem problemas, mas o BE ta complicado sempre recebo uma mensagem dizendo [Invalid Stop]. Se alguém tiver um método que faça BreakEven e TrailingStop, será muito bem vindo.


//------------------------------------------------------------------------
// BreakEven
//------------------------------------------------------------------------
void BreakEven(double prc) {
  for(int i = PositionsTotal() -1; i >= 0; i--) {
      ulong  position_ticket = PositionGetTicket(i);                                    // ticket of the position
      string position_symbol = PositionGetString(POSITION_SYMBOL);                      // symbol 
      string position_comm   = PositionGetString(POSITION_COMMENT);                       // comment of position
      int    digits          = (int)SymbolInfoInteger(position_symbol, SYMBOL_DIGITS);  // number of decimal places
      double open_price      = PositionGetDouble(POSITION_PRICE_OPEN);                  // Position OpenPrice
      ulong  magic           = PositionGetInteger(POSITION_MAGIC);                      // MagicNumber of the position
      double volume          = PositionGetDouble(POSITION_VOLUME);                      // volume of the position
      double sl              = PositionGetDouble(POSITION_SL);                          // Stop Loss of the position
      double tp              = PositionGetDouble(POSITION_TP);                          // Take Profit of the position
      int    stop_level      = (int)SymbolInfoInteger(position_symbol, SYMBOL_TRADE_STOPS_LEVEL);
      double price_level;
      ENUM_POSITION_TYPE type= (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);   // Type of the position
    
    if(position_symbol == _Symbol && magic == magic_n) { 
      if(stop_level <= 0) stop_level = 150; else stop_level += 50;    
      price_level = stop_level * SymbolInfoDouble(position_symbol, SYMBOL_POINT);
      
      double lvlb = NormalizeDouble((open_price + ((trigger_be) * _Point)), _Digits); 
      double lvls = NormalizeDouble((open_price - ((trigger_be) * _Point)), _Digits);
      
      if(type == POSITION_TYPE_BUY && prc >= lvlb) {
          sl = NormalizeDouble(open_price, digits);
          //tp = NormalizeDouble(ask + price_level, digits);            
          Print("PRC: ", prc, " LEVEL BUY: ", NormalizeDouble((open_price + ((trigger_be) * _Point)), _Digits));
           //if(trade.PositionModify(position_ticket, sl, tp)) {
            //Print("BreakEven Order Buy! ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());
          //}
          //else Print("BreakEven NOT Order Buy! ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());
      }
      if(type == POSITION_TYPE_SELL && prc <= lvls) {
           sl = NormalizeDouble(open_price, digits);
           //tp = NormalizeDouble(bid - price_level, digits);
           Print("PRC: ", prc, " LEVEL SELL: ", NormalizeDouble((open_price - ((trigger_be) * _Point)), _Digits));
           //if(trade.PositionModify(position_ticket, sl, tp)) {
            // Print("BreakEven Order Sell! ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());
           //}
           //else Print("BreakEven NOT Order Sell! ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());
      }
      ZeroMemory(request);
      ZeroMemory(result);
      request.action   = TRADE_ACTION_SLTP; // type of trade operation
      request.position = position_ticket;   // ticket of the position
      request.symbol   = position_symbol;   // symbol 
      request.sl       = sl;                // Stop Loss of the position
      request.tp       = tp;                // Take Profit of the position
      request.magic    = magic_n;           // MagicNumber of the position
      PrintFormat("Modify #%I64d %s %s", position_ticket, position_symbol, EnumToString(type));
          
      if(!OrderSend(request, result)) { PrintFormat("OrderSend error %d", GetLastError()); be_active = false; }
      else be_active = true;
  
      PrintFormat("retcode=%u  deal=%I64u  order=%I64u", result.retcode, result.deal, result.order);        
     
    }
  }
  return;
}
 
casamianaghi:

Boa tarde. Baixei um robô gratuito da algotrading que condiz com a estratégia que executo diariamente, porém claro ele vai ser mais rápido e não vai deixar de fazer operações como eu na mão.

A questão é: a corretora que pretendo operar ele é na rico, pois as que tem corretagem mais barata não rodam robos deste tipo.

Alguem aqui ja adicionou um robô para o mt5 da rico? funciona? será que vai ser compatível com o robô?

Nunca utilizei e vou testar na demo, mas como baixei hj ja estou atrás de informações.

Olá, qual o Robô que vc tem?

 
Jonatan Allan Oliveira Souza:

Bom dia a todos! Estou com dificuldades de acionar o BE nas ordens do mini dolar. A inserção de stop e take são feitas sem problemas, mas o BE ta complicado sempre recebo uma mensagem dizendo [Invalid Stop].


Oi Jonatan.

Não cheguei a analisar muito a fundo o seu código pq estou na correria, mas, se vc recebeu a mensagem [Invalid Stop], é certo que vc está tentando alterar o SL para um preço inválido. 

Uma possibilidade seria o seu SL estar acima (abaixo) do preço do último negócio para uma posição comprada (vendida), já que SYMBOL_TRADE_STOPS_LEVEL  vale 0 para o mini-dolar. Mas pelo que entendi do seu código, isso só poderia acontecer se a variável trigger_be tiver um valor negativo, ou se tiver um valor muito próximo de zero e o preço de mercado variar entre o momento em que vc avalia o trigger e o momento em que modifica o SL. Não dá pra ver no código que valor vc gravou em trigger_be, mas eu imagino que tenha sido um valor positivo e distante de zero, de modo que essa possibilidade me parece pouco provável.  

Uma outra possibilidade de preço inválido seria o open_price ter um valor na faixa válida, mas que não seja múltiplo de 0.5 . Isso jamais aconteceria no Forex (conta hedging), mas pode acontecer na B3 (conta netting) se a sua posição contiver volumes comprados a preços diferentes. Por exemplo, se vc tiver comprado em 2 mini-contratos e 1 tiver sido adquirido a 3978.0 e o outro a 3978.5, o seu open_price vai estar valendo 3978.25 e vai ser arredondado pela NormalizeDouble() para 3978.2, que é um valor inválido e explicaria a mensagem de erro na tentativa de modificar o SL.

Verifique se pode ser isso.

Abraços

EDIT: Só agora que prestei atenção na imagem da tela que vc postou. O que está acontecendo é que vc está enviando uma ordem para modificar o SL e o TP para os mesmos valores que estavam antes. Nesse caso vai dar esse erro mesmo. Para evitar isso vc deve memorizar em alguma variável os últimos valores que foi configurados como SL e TP e inserir um "if" inibindo o envio da ordem de modificação do SL/TP caso nenhum dos 2 valores esteja sendo realmente modificado.

Obs: não apaguei o texto anterior que eu já tinha escrito acima pq pode ser instrutivo pra alguém, mas nenhuma daquelas duas possibilidades é o seu caso.

 
Trader_Patinhas:

Oi Jonatan.

Não cheguei a analisar muito a fundo o seu código pq estou na correria, mas, se vc recebeu a mensagem [Invalid Stop], é certo que vc está tentando alterar o SL para um preço inválido. 

Uma possibilidade seria o seu SL estar acima (abaixo) do preço do último negócio para uma posição comprada (vendida), já que SYMBOL_TRADE_STOPS_LEVEL  vale 0 para o mini-dolar. Mas pelo que entendi do seu código, isso só poderia acontecer se a variável trigger_be tiver um valor negativo, ou se tiver um valor muito próximo de zero e o preço de mercado variar entre o momento em que vc avalia o trigger e o momento em que modifica o SL. Não dá pra ver no código que valor vc gravou em trigger_be, mas eu imagino que tenha sido um valor positivo e distante de zero, de modo que essa possibilidade me parece pouco provável.  

Uma outra possibilidade de preço inválido seria o open_price ter um valor na faixa válida, mas que não seja múltiplo de 0.5 . Isso jamais aconteceria no Forex (conta hedging), mas pode acontecer na B3 (conta netting) se a sua posição contiver volumes comprados a preços diferentes. Por exemplo, se vc tiver comprado em 2 mini-contratos e 1 tiver sido adquirido a 3978.0 e o outro a 3978.5, o seu open_price vai estar valendo 3978.25 e vai ser arredondado pela NormalizeDouble() para 3978.2, que é um valor inválido e explicaria a mensagem de erro na tentativa de modificar o SL.

Verifique se pode ser isso.

Abraços

EDIT: Só agora que prestei atenção na imagem da tela que vc postou. O que está acontecendo é que vc está enviando uma ordem para modificar o SL e o TP para os mesmos valores que estavam antes. Nesse caso vai dar esse erro mesmo. Para evitar isso vc deve memorizar em alguma variável os últimos valores que foi configurados como SL e TP e inserir um "if" inibindo o envio da ordem de modificação do SL/TP caso nenhum dos 2 valores esteja sendo realmente modificado.

Obs: não apaguei o texto anterior que eu já tinha escrito acima pq pode ser instrutivo pra alguém, mas nenhuma daquelas duas possibilidades é o seu caso.

Antes de mais nada, obrigado pelo feed. Estou analisando se há posições abertas e em seguida entrando no método BE.

if(!order_buy_opend && !order_sell_opend) be_active = false;         
if((order_buy_opend || order_sell_opend) && !be_active && trigger_be > 0 )   BreakEven(last_prc);      

Mas como posso alterar o sl para o nível de abertura da posição? tentei fazer isso, mas sem sucesso :/

   request.sl       = open_price;     
Razão: