Por favor, use isto para postar o código . . torna a leitura mais fácil.
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
Eu gostaria de saber se é possível fechar um pedido automaticamente após um período e/ou SL é alcançado...
- Se o SL for alcançado, ele se fecha sozinho.
- Caso contrário, basta codificá-lo. Onde está seu OrderClose() e seu teste de tempo?
- Se o SL for alcançado, ele se fecha sozinho.
- 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...
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.
Espero que você possa me dar dicas se eu falhar ;-)
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)
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
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