você não precisa usar OrderSelect 4 OrderClose, mas você tem 2 para OrderTicket(), OrderLots()
Prezado qjol,
Eu não entendo muito bem o que você quer dizer. Poderia explicar-me, por favor? Obrigado, por favor.
em nosso código
if (bar3>1) OrderClose(OrderTicket(), OrderLots(),Ask,3,Red);
u usando OrderTicket() & OrderLots() & 4 estas funções u deve usar OrderSelect()
Como você pode ver na documentação:
Nota
O parâmetro do pool é ignorado se o pedido for selecionado pelo número do bilhete. O número do bilhete é um identificador de pedido único.
Para descobrir a partir de que lista a ordem foi selecionada, seu horário de fechamento deve ser analisado. Se o tempo de fechamento da ordem for igual a 0, a ordem é aberta ou pendente e retirada da lista de posições abertas do terminal.
É possível distinguir uma posição aberta de uma ordem pendente pelo tipo de ordem. Se o tempo de fechamento da ordem não for igual a 0, a ordem é uma ordem fechada ou uma ordem pendente excluída e foi selecionada a partir do histórico do terminal. Eles também diferem uns dos outros por seus tipos de ordem.
A função OrderSelect() copia os dados do pedido para o ambiente do programa e todas as outras chamadas de OrderClosePrice(), OrderCloseTime(), OrderComment(), OrderComission(), OrderExpiration(), OrderLots(), OrderMagicNumber(), OrderOpenPrice(), OrderOpenTime(), OrderPrint(), OrderProfit(), OrderStopLoss(), OrderSwap(), OrderSymbol(), OrderTakeProfit(), OrderTicket(), OrderType() devolvem os dados, copiados anteriormente. Isso significa que em alguns casos os detalhes do pedido (preço aberto, níveis SL/TP ou data de vencimento) podem mudar e os dados se tornam não reais. É altamente recomendável chamar a função OrderSelect() antes de solicitar os dados do pedido.
Então se eu usar o número real do bilhete e Lots, então não há necessidade de usar OrderSelect, certo? Eu só abro um pedido de cada vez, posso saber como obter o número do bilhete do pedido aberto?
Obrigado novamente
Então se eu usar o número real do bilhete e Lots, então não há necessidade de usar OrderSelect, certo? Eu só abro um pedido de cada vez, posso saber como obter o número do bilhete do pedido aberto?
Obrigado novamente
A função OrderSend() devolve o número do bilhete se for bem sucedida. Sugiro que você leia a seção Livro neste site do início ao fim para entender melhor como usar o MQL, bem como consulte a documentação de referência para cada função que você usa, de modo a entender melhor quais parâmetros usar e quais são os valores de retorno.
Prezados todos,
Eu inseri OrderSelect(), mas o OrderClose ainda não está funcionando, por favor, ajude-me. Muito obrigado
//+------------------------------------------------------------------+ //| chuale.mq4 | //| Copyright 2014, MetaQuotes Software Corp. | //| http://www.abc.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2014, MetaQuotes Software Corp." #property link "http://www.abc.com" #property version "1.00" #property strict extern double TakeProfit=500; extern double Lots=0.1; extern double StopLoss=300; double bar1; double bar2; double bar3; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int init() { //--- //--- return(0); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //--- return(0); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ int start() { int ticket; int total=OrdersTotal(); int counted_bars=IndicatorCounted(); if(counted_bars>0) counted_bars--; { bar1=(iClose(Symbol(),PERIOD_M1,2)-iClose(Symbol(),PERIOD_M1,3))*100; bar2=(iClose(Symbol(),PERIOD_M1,1)-iClose(Symbol(),PERIOD_M1,2))*100; bar3=(iClose(Symbol(),PERIOD_M1,0)-iClose(Symbol(),PERIOD_M1,1))*100; if (bar2>1) { if(total<1) ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"Chua EA",12345,0,Green); OrderSelect(1,SELECT_BY_POS); if (bar3 <-1) OrderClose(OrderTicket(),Lots,Bid,3,Green); } if (bar2<-1) { if(total<1) ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid+-TakeProfit*Point,"Chua EA",12345,0,Red); if ( bar3>1) OrderClose(OrderTicket(), Lots,Ask,3,Red); } } return(0); //--- return(0); } //+------------------------------------------------------------------+
Olá a todos,
Agora eu inseri bilhete e Lotes no OrderClose sem usar OrderTicket() e OrderLots() mas não fechou o pedido também. Por favor, ajude-me.
//+------------------------------------------------------------------+ //| chuale.mq4 | //| Copyright 2014, MetaQuotes Software Corp. | //| http://www.abc.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2014, MetaQuotes Software Corp." #property link "http://www.abc.com" #property version "1.00" #property strict extern double TakeProfit=500; extern double Lots=0.1; extern double StopLoss=300; double bar1; double bar2; double bar3; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int init() { //--- //--- return(0); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //--- return(0); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ int start() { int ticket; int total=OrdersTotal(); int counted_bars=IndicatorCounted(); if(counted_bars>0) counted_bars--; { bar1=(iClose(Symbol(),PERIOD_M1,2)-iClose(Symbol(),PERIOD_M1,3))*100; bar2=(iClose(Symbol(),PERIOD_M1,1)-iClose(Symbol(),PERIOD_M1,2))*100; bar3=(iClose(Symbol(),PERIOD_M1,0)-iClose(Symbol(),PERIOD_M1,1))*100; if (bar2>1) { if(total<1) ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"Chua EA",12345,0,Green); if (bar3 <-1) OrderClose(ticket,Lots,Bid,3,Green); } if (bar2<-1) { if(total<1) ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid+-TakeProfit*Point,"Chua EA",12345,0,Red); if ( bar3>1) OrderClose(ticket, Lots,Ask,3,Red); } } return(0); //--- return(0); } //+------------------------------------------------------------------+
Olá a todos,
Agora eu inseri bilhete e Lotes no OrderClose sem usar OrderTicket() e OrderLots() mas não fechou o pedido também. Por favor, ajude-me.
O ticket é uma variável local, portanto, no próximo tick, ele não terá o mesmo valor
Colocado fora das funções para torná-lo Globalscope
double bar1; double bar2; double bar3; int ticket;
- 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
Hi,
Eu tenho a seguinte codificação para minha EA, por favor me ajude por que o OrderClose não é acionado? Eu preciso usar OrderSelect()? Qual é a finalidade da OrderSelect()? Obrigado.