Fechar o pedido automaticamente após um determinado período e/ou SL

 

Oi juntos,

Gostaria de saber se é possível fechar um pedido automaticamente após um período e/ou SL é alcançado...

Por exemplo:

Abri uma negociação às 13h e quero deixar esta ordem fechar quando a cotação for atingida, ou quando tiver decorrido um período de 2 horas.

Aqui está o código real:

// Critérios de compra
if ((TradeHour3===Hour())|||(TradeHour4===Hour())|||(TradeHour7===Hour())|||(TradeHour10==Hour())|||(TradeHour17===Hour())|||(TradeHour18==Hour())|||(TradeHour20===Hour())) //Sinal Comprar
{
int openbuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,slb,tpb, "time trader buy order ",BuyMagicNumber,0,Blue);
if(openbuy<1){int buyfail=1;}
}

}// halt1

if((halt2!=1)&&(AllowSell===true)){// halt2
RefreshRates();
// Critérios de venda
if ((TradeHour12==Hour())|||(TradeHour23==Hour())) //Venda de Sinal
{
int opensell=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,sls,tps, "time trader sell order ",SellMagicNumber,0,Green);
if(opensell<1){int sellfail=1;}
}

}// halt2

Obrigado com antecedência.

Marc

 

Por favor, use isto para postar o código . . torna a leitura mais fácil.

 
Faça um loop através da verificação das ordens abertas quando elas foram abertas usando OrderOpenTime ( não se esqueça de usar OrderSelect primeiro ), depois verifique esse tempo vs TimeCurrent para ver se já decorreram 2hrs ... se elas fecharam a ordem.
 
nirvanamac:

Oi juntos,

Gostaria de saber se é possível fechar um pedido automaticamente após um período e/ou SL é alcançado...

Por exemplo:

Abri um negócio às 13h e quero deixar este pedido fechar quando a cotação chegar a seu fim ou quando decorrer um período de 2 horas.

Aqui está o código real:

// Critérios de compra
if ((TradeHour3===Hour())|||(TradeHour4===Hour())|||(TradeHour7===Hour())|||(TradeHour10==Hour())|||(TradeHour17===Hour())|||(TradeHour18==Hour())|||(TradeHour20===Hour())) //Sinal Comprar
{
int openbuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,slb,tpb, "time trader buy order ",BuyMagicNumber,0,Blue);
if(openbuy<1){int buyfail=1;}
}

}// halt1

if((halt2!=1)&&(AllowSell===true)){// halt2
RefreshRates();
// Critérios de venda
if ((TradeHour12==Hour())|||(TradeHour23==Hour())) //Venda de Sinal
{
int opensell=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,sls,tps, "time trader sell order ",SellMagicNumber,0,Green);
if(opensell<1){int sellfail=1;}
}

}// halt2

Obrigado com antecedência.

Marc


// Buy criteria
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,slb,tpb,"time trader buy order ",BuyMagicNumber,0,Blue);
if(openbuy<1){int buyfail=1;}
}

}// halt1

if((halt2!=1)&&(AllowSell==true)){// halt2
RefreshRates();
// Sell criteria
if ((TradeHour12==Hour())||(TradeHour23==Hour())) //Signal Sell
{
int opensell=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,sls,tps,"time trader sell order ",SellMagicNumber,0,Green);
if(opensell<1){int sellfail=1;}
}

}// halt2
 
nirvanamac:
Eu gostaria de saber se é possível fechar um pedido automaticamente após um período e/ou SL é alcançado...
  1. Se o SL for alcançado, ele se fecha sozinho.
  2. Caso contrário, basta codificá-lo. Onde está seu OrderClose() e seu teste de tempo?
 
WHRoeder:
  1. Se o SL for alcançado, ele se fecha sozinho.
  2. Caso contrário, basta codificá-lo. Onde está seu OrderClose() e seu teste de tempo?


HI WHRoeder,

Acho que você quer dizer o código do buraco ou?

//---- input parameters
extern double    Lots=0.01;
extern int       TakeProfit=200;
extern int       StopLoss=200;
extern int       Slip=50;
extern int BuyMagicNumber =1;
extern int SellMagicNumber =2;
extern bool AllowBuy=true;
extern bool AllowSell=true;
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;
 
//+------------------------------------------------------------------+
//| expert starts                                  |
//+------------------------------------------------------------------+
int start()
  {
//----
int StopMultd,Sleeper=1;
 
 
 
int digits=MarketInfo("EURUSD",MODE_DIGITS);
if(digits==5){StopMultd=10;} else{StopMultd=1;}
double TP=NormalizeDouble(TakeProfit*StopMultd,Digits);
double SL=NormalizeDouble(StopLoss*StopMultd,Digits);
double Slippage=NormalizeDouble(Slip*StopMultd,Digits);
 
// Calculate stop loss
double slb=NormalizeDouble(Ask-SL*Point,Digits);
double sls=NormalizeDouble(Bid+SL*Point,Digits);
 
// Calculate take profit
double tpb=NormalizeDouble(Ask+TP*Point,Digits);
double tps=NormalizeDouble(Bid-TP*Point,Digits);
 
//-------------------------------------------------------------------+
//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;}
        }
     }
}
//-------------------------------------------------------------------+
 
 
if((halt1!=1)&&(AllowBuy==true)){// halt1
 
// Buy criteria
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,slb,tpb,"time trader buy order ",BuyMagicNumber,0,Blue);
   if(openbuy<1){int buyfail=1;}
 }
 
}// halt1
 
if((halt2!=1)&&(AllowSell==true)){// halt2
RefreshRates();
 // Sell criteria
 if ((TradeHour12==Hour())||(TradeHour23==Hour())) //Signal Sell
 {
   int opensell=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,sls,tps,"time trader sell order ",SellMagicNumber,0,Green);
   if(opensell<1){int sellfail=1;}
 }
 
}// halt2
 
 
//-------------------------------------------------------------------+
// Error processing
//-------------------------------------------------------------------+
if(buyfail==1||sellfail==1){
int Error=GetLastError();
  if(Error==130){Alert("Wrong stops. Retrying."); RefreshRates();}
  if(Error==133){Alert("Trading prohibited.");}
  if(Error==2){Alert("Common error.");}
  if(Error==146){Alert("Trading subsystem is busy. Retrying."); Sleep(500); RefreshRates();}
 
}
 
// if(openbuy==true||opensell==true)Sleep(1*60*1000*Sleeper);
//-------------------------------------------------------------------
   return(0);
  }
//+-----------------------------------
 

na verdade, há apenas um stopploss. Eu só quero fechar o pedido 2 horas depois que um novo bar foi aberto ou no último segundo da 1:59:59...Meu problema é preencher o código no meu atual...

 
RaptorUK:
Faça um loop através da verificação das ordens abertas quando elas foram abertas usando OrderOpenTime ( não se esqueça de usar OrderSelect primeiro ), depois verifique esse tempo vs TimeCurrent para ver se já decorreram 2hrs ... se elas fecharam a ordem.
Apenas codifique que . . . realmente não é difícil.
 
RaptorUK:
Apenas codifique que . . . realmente não é difícil.

Espero que você possa me dar dicas se eu falhar ;-)
 
AFAIK todos aqui querem ajudar mas não ser um escravo para ninguém
 
qjol:
AFAIK todos aqui querem ajudar mas não ser um escravo para ninguém


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)