Fechar o pedido automaticamente após um determinado período e/ou SL - página 2

 
não se preocupe, acostume-se com isso.
 
nirvanamac:


Sim, claro que entendo...não quero ter escravos para a minha EA.... a única coisa que preciso saber é como entender de que forma um programa funciona...

Se você tem uma simples EA como a SMA Cross...isto não é um grande problema...mas quanto mais você quer alcançar mais difícil fica...(pelo menos para mim)


//-------------------------------------------------------------------+
//Check open orders
//-------------------------------------------------------------------+
if(OrdersTotal()>0){
  for(int i=1; i<=OrdersTotal(); i++)          // Cycle searching in orders
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // If the next is available
        {
          if(OrderMagicNumber()==BuyMagicNumber) {int halt1=1;}
          if(OrderMagicNumber()==SellMagicNumber) {int halt2=1;}
        }
     }
}

Parece que a maior parte do código que você usou é deste https://www.mql5.com/en/code

O que as linhas de progam acima de você têm feito de acordo com você ??

 
nirvanamac:
Acho que você quer dizer o código do buraco ou?
Repito
basta codificá-lo. Onde está seu OrderClose() e seu teste de tempo?
nirvanamac:
Meu problema é preencher o código em minha atual
Nenhum escravo aqui, aprenda a codificar ou pagar alguém. Nós não vamos codificá-lo para você. Estamos dispostos a lhe AJUDAR.
 

Oi juntos, acho que encontrei o caminho certo, mas ainda assim é errado. O código é parecido com este:

//+------------------------------------------------------------------+
//|                                            Der Stundentrader.mq4 |
//|                                                         Der Marc |
//|                                  Es gibt gar keine Internetseite |
//+------------------------------------------------------------------+
#property copyright "Der Marc"
#property link      "Es gibt gar keine Internetseite"

//Wichtige Variablen
extern double    Lots=0.01;
extern int       Slippage=5;
extern int MagicNumber =1;
extern int  TradeHour3=3;
extern int  TradeHour4=4;
extern int  TradeHour7=7;
extern int  TradeHour10=10;
extern int  TradeHour17=17;
extern int  TradeHour18=18;
extern int  TradeHour20=20;
extern int  TradeHour12=12;
extern int  TradeHour23=23;

//Globale Variablen
int BuyTicket;
int SellTicket;
double UsePoint;
int UseSlippage;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   UsePoint = PipPoint(Symbol());
   UseSlippage = GetSlippage(Symbol(), Slippage);
  }

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
// Buy criteria
OrderSelect(SellTicket || BuyTicket, SELECT_BY_TICKET);
       //Close Order
       if(OrderCloseTime() == 0 && SellTicket > 0 || BuyTicket > 0)
         {
          double CloseLots = OrderLots();
          double ClosePrice = Ask;
          bool Closed = OrderClose(SellTicket ,CloseLots, ClosePrice, UseSlippage, Red);
         }
         double OpenPrice = Ask;
//BuyOrder         
if ((TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour7==Hour())||(TradeHour10==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour20==Hour())) //Signal Buy
 {
   int openbuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"time trader buy order ",MagicNumber,0,Blue);
    }
SellTicket = 0; 
BuyTicket = 0;
 
// Sell criteria
OrderSelect(BuyTicket || SellTicket, SELECT_BY_TICKET);
       //Close Order
      if(OrderCloseTime() == 0 && BuyTicket > 0 || BuyTicket > 0)
      {
       CloseLots = OrderLots();
       ClosePrice = Bid;
       Closed = OrderClose(BuyTicket, CloseLots, ClosePrice, UseSlippage, Red);
      }
               OpenPrice = Bid;
 //SellOrder
 if ((TradeHour12==Hour())||(TradeHour23==Hour())) //Signal Sell
 {
   int opensell=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"time trader sell order ",MagicNumber,0,Green);
    }  
SellTicket = 0;
BuyTicket = 0; 
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//Pip Point Function
  double PipPoint (string Currency)
  {
   int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
   if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01;
   else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001;
   return (CalcPoint);
  }

//Get Slippage Function
int GetSlippage(string Currency, int SlippagePips)
 {
  int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
  if(CalcDigits == 2 || CalcDigits == 3) double CalcSlippage = SlippagePips;
  else if(CalcDigits == 4 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
  return (CalcSlippage);
  }

Tenho o problema de que meu EA fecha todos os pedidos depois de abertos. Como você pode ver, eu preenchi o OrderClosetime para todos os Buy & SellTickets. Não consigo encontrar a função de dizer ao EA que ele deve ser fechado após 1 hora.

 
nirvanamac:


Sim, claro que entendo...não quero ter escravos para a minha EA.... a única coisa que preciso saber é como entender de que forma um programa funciona...

Se você tem uma simples EA como a SMA Cross...isto não é um grande problema...mas quanto mais você quer alcançar mais difícil fica...(pelo menos para mim)

Minha EA atual é bastante simples . . . Tenho mais de 2000 linhas de código nele . . . a maior parte disso não tem nada a ver com o método, mas é manutenção da casa e funções padrão que precisam estar em qualquer EA que eu venha a escrever . . como calcular tamanhos de posição, colocar ordens, contar ordens, verificar ordens fechadas quando atingem TP ou SL, relatar erros, etc., etc. . Eu passei meses escrevendo, testando, modificando, testando . . meu código.
 
RaptorUK:
Minha EA atual é bastante simples . . . Tenho mais de 2000 linhas de código nele . . . a maior parte disso não tem nada a ver com o método, mas é manutenção da casa e funções padrão que precisam estar em qualquer EA que eu venha a escrever . . como calcular tamanhos de posição, colocar ordens, contar ordens, verificar ordens fechadas quando atingem TP ou SL, relatar erros, etc., etc. . Eu passei meses escrevendo, testando, modificando, testando . . meu código.


Você o carregou aqui?

 
nirvanamac:


Você fez o upload aqui?

Não, por que eu faria isso?
 
Meu código (sem a lógica comercial) é mais de 1500 linhas de código e eu fiz o upload dele.
 

Oi juntos,

depois de alguns dias passando tempo com a programação e olhando através de outras EA's aqui, você pode obter o resultado atual:

//+------------------------------------------------------------------+
//|                                            Der Stundentrader.mq4 |
//|                                                         Der Marc |
//|                                  Es gibt gar keine Internetseite |
//+------------------------------------------------------------------+
#property copyright "Der Marc"
#property link      "Es gibt gar keine Internetseite"

//Wichtige Variablen
extern double    Minlot=0.01;
extern int       Digits2Round=2;
extern int       PercentOfFreeDepo=1;
extern int       Slippage=5;
extern int       MagicNumber =1;
extern int       TradeHour3=3;
extern int       TradeHour4=4;
extern int       TradeHour7=7;
extern int       TradeHour10=10;
extern int       TradeHour17=17;
extern int       TradeHour18=18;
extern int       TradeHour20=20;
extern int       TradeHour12=12;
extern int       TradeHour23=23;
extern int       StopLoss=40;

//Globale Variablen
int BuyTicket;
int SellTicket;
double UsePoint;
int UseSlippage;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   UsePoint = PipPoint(Symbol());
   UseSlippage = GetSlippage(Symbol(), Slippage);
  }

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   double FreeDepo=NormalizeDouble(AccountBalance()-AccountMargin(),Digits2Round);
   double Risk=NormalizeDouble((FreeDepo*PercentOfFreeDepo/100),Digits2Round);
   double Lot=NormalizeDouble(Risk/(StopLoss/0.0001)*0.1,Digits2Round);
//===================== Lets determine lot size and risk ===================================
if ( Lot<Minlot )
 {
   Lot=Minlot;
 }
Comment( "\n","Acceptable risk is ",PercentOfFreeDepo, "% = ",Risk," of the free money ",FreeDepo," in lots = ",Lot);
// Buy criteria
OrderSelect(SellTicket || BuyTicket, SELECT_BY_TICKET);
       //Close Order
       if((OrderOpenTime()+3600) > TimeCurrent() && SellTicket > 0 || BuyTicket > 0)
         {
          double CloseLots = OrderLots();
          double ClosePrice = Ask;
          bool Closed = OrderClose(SellTicket ,CloseLots, ClosePrice, UseSlippage, Red);
         }
         double OpenPrice = Ask;
//BuyOrder         
if ((TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour7==Hour())||(TradeHour10==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour20==Hour())) //Signal Buy
 {
   int openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,StopLoss,0,"time trader buy order ",MagicNumber,0,Blue);
    }
SellTicket = 0; 
BuyTicket = 0;
 // Sell criteria
OrderSelect(BuyTicket || SellTicket, SELECT_BY_TICKET);
       //Close Order
      if((OrderOpenTime()+3600) > TimeCurrent() && SellTicket > 0 || BuyTicket > 0)
      {
       CloseLots = OrderLots();
       ClosePrice = Bid;
       Closed = OrderClose(BuyTicket, CloseLots, ClosePrice, UseSlippage, Red);
      }
               OpenPrice = Bid;
 //SellOrder
 if ((TradeHour12==Hour())||(TradeHour23==Hour())) //Signal Sell
 {
   int opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,StopLoss,0,"time trader sell order ",MagicNumber,0,Green);
    }  
SellTicket = 0;
BuyTicket = 0; 
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//Pip Point Function
  double PipPoint (string Currency)
  {
   int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
   if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01;
   else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001;
   return (CalcPoint);
  }

//Get Slippage Function
int GetSlippage(string Currency, int SlippagePips)
 {
  int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
  if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips;
  else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
  return (CalcSlippage);
  }

Agora eu tenho o problema, que durante a vigência há mais pedidos abertos do que 1. Também recebo a mensagem de erro "130"...