Ordens sendo cancelada pelo meta trader, algum tempo depois de serem abertas.

 

Bom dia

estou usando um EA que lança ordens de buystop e sellstop nos máximos e minimo do dia anterior.

ele lança as ordens as 09:01. Tudo ok até aqui, o lançamento é feito de maneira correta.

porem as 09:26, exatamente 25 minutos depois ele cancela todas as ordens.

Qual seria a solução para esse problema?



Mtrade.SellStop(1, mrate[0].low, _Symbol, mrate[0].low+0.5, mrate[0].low-1.5,   ORDER_TIME_DAY,0,0);
Mtrade.BuyStop(1, mrate[0].high, _Symbol, mrate[0].high-0.5, mrate[0].high+1.5, ORDER_TIME_DAY,0,0);
 
Lucas Lucavei:

Bom dia

estou usando um EA que lança ordens de buystop e sellstop nos máximos e minimo do dia anterior.

ele lança as ordens as 09:01. Tudo ok até aqui, o lançamento é feito de maneira correta.

porem as 09:26, exatamente 25 minutos depois ele cancela todas as ordens.

Qual seria a solução para esse problema?



Boa noite,

Olhando apenas este trecho de código e com as informações que colocou eh bem difícil ajudar. 

Pode ser que haja em seu algoritmo alguma codificação para encerrar posições nos 25min, ou mesmo algum erro que leva ao ExpertRemove(). De qualquer maneira estou especulando diante de poucas informações.

Sugiro que consulte a documentação ou poste mais detalhes do código.

[]'s

 
Joscelino Celso de Oliveira:

Boa noite,

Olhando apenas este trecho de código e com as informações que colocou eh bem difícil ajudar. 

Pode ser que haja em seu algoritmo alguma codificação para encerrar posições nos 25min, ou mesmo algum erro que leva ao ExpertRemove(). De qualquer maneira estou especulando diante de poucas informações.

Sugiro que consulte a documentação ou poste mais detalhes do código.

[]'s

Segue o codigo completo.


//+------------------------------------------------------------------+
//|                                               0_Diario_dolar.mq5 |
//|                                                    Lucas Lucavei |
//|                                                                1 |
//+------------------------------------------------------------------+
#property copyright "Lucas Lucavei"
#property link      "1"
#property version   "1.00"

#property script_show_inputs 
#include <Trade/Trade.mqh>
#include <Trade/PositionInfo.mqh>
#include <Trade/AccountInfo.mqh>
#include <Trade/SymbolInfo.mqh>

CTrade Mtrade;
CPositionInfo Mposicao;
CAccountInfo Mconta;
CSymbolInfo Msimbolo;
double ask , bid, last;
MqlRates mrate[2];
bool autorizado;

int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  int candlesmovimento;
datetime    tm= TimeCurrent();
MqlDateTime stm;
TimeToStruct(tm,stm);
MqlTradeResult trade_result;

CopyRates(_Symbol, _Period, 0, 2, mrate);



//Comment(mrate[0].high, " ", mrate[0].low);




if ((stm.hour ==  09) && (stm.min ==  01) && (stm.sec ==  0) && (autorizado == true)) {


Mtrade.SellStop(1, mrate[0].low, _Symbol, mrate[0].low+0.5, mrate[0].low-1.5,   ORDER_TIME_DAY,0,0);
Mtrade.BuyStop(1, mrate[0].high, _Symbol, mrate[0].high-0.5, mrate[0].high+1.5, ORDER_TIME_DAY,0,0);



autorizado = false;



}



if ((stm.hour ==  17) && (stm.min ==  50) && (stm.sec ==  0)) {


zerarOrdem();
zerarOrdem();
zerarOrdem();
zerarOrdem();

autorizado = true;



}

   
  }
//+------------------------------------------------------------------+
//| Trade function                                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double OnTester()
  {
//---
   double ret=0.0;
//---

//---
   return(ret);
  }
//+------------------------------------------------------------------+





     void zerarOrdem() {
      if (Mposicao.Select(_Symbol) == true) {
     int i=PositionsTotal()-1;
   while (i>=0)
     {
      if (Mtrade.PositionClose(PositionGetSymbol(i))) i--;
     }
   }
   
     for(uint i=0;i< OrdersTotal();i++) {
 Mtrade.OrderDelete(OrderGetTicket(i));}
 
       
      }
Razão: