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.
Há algumas coisas que você fez errado. Presumo que você queira que este EA trabalhe em pares JPY em M1 no período de tempo. Você quer fazer pedidos somente em bar novo e fechar pedidos somente em bar novo ou você quer entrar em bar novo e sair se as condições forem cumpridas? Eis o que eu penso:
Primeiro você conta os pedidos com OrdersTotal().
Em seguida, calcule suas variáveis
Se houver ordens no mercado, verifique se elas têm de ser fechadas
Se não houver ordens no mercado, verificar se as condições de entrada são atendidas.
Informe-me se você tiver alguma dúvida.
//+------------------------------------------------------------------+//| chuale_test1.mq4 |//| Copyright 2014, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2014, MetaQuotes Software Corp."#property link"http://www.abc.com"#property version"1.00"#property strictexterndouble TakeProfit=500;
externdouble Lots=0.1;
externdouble StopLoss=300;
double bar1;
double bar2;
double bar3;
int total,ticket;
datetime previousTime;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int init()
{
//---//---return(0);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//---return(0);
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+int start()
{
total=OrdersTotal();
/*
counted_bars=IndicatorCounted();
if(counted_bars>0) counted_bars--;
IndicatorCounted() is actually for indicators not EA
*/
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;
/*
Comment("Bar1 = "+DoubleToString(bar1,Digits)+"\n"+
"Bar2 = "+DoubleToString(bar2,Digits)+"\n"+
"Bar3 = "+DoubleToString(bar3,Digits)+"\n"
);
*///Close any orders if conditions are metif(total>0)
{
if(bar3<-1) OrderClose(ticket,OrderLots(),Bid,3,Green);
if(bar3>1) OrderClose(ticket,OrderLots(),Ask,3,Red);
}
if(Time[0]==previousTime) return(0); //EA will not go past this point unless it is a new bar
previousTime=Time[0]; // If it was a new bar , it's old now but continue to the end// if no order open and new barif(total<1)
{
if(bar2>1)// if condition met
{
//place buy order
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"Chua EA",12345,0,Green);
if(ticket<0)Print("Error OP_BUY order failed. error : "+GetLastError()); // if returned ticket is -1 OrderSent failedreturn(0);
}
// or if conditions for sell metif(bar2<-1)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid+-TakeProfit*Point,"Chua EA",12345,0,Red);
if(ticket<0)Print("Error OP_SELL order failed. error : "+GetLastError());
return(0); //return to start
}
}
return(0);
}
//+------------------------------------------------------------------+
sim, pode fechar agora. obrigado GumRai. agora eu sei que o número do ticket continua mudando de acordo com os ticks, então como obter o número do ticket do pedido aberto? Eu tenho que.usar OrderTicket() certo?
chuale: sim, pode fechar agora. obrigado GumRai. agora eu sei que o número do ticket continua mudando de acordo com os ticks, então como obter o número do ticket do pedido aberto? Eu tenho que.usar OrderTicket() certo?
Se você usar OrderTicket(), certifique-se de usar OrderSelect() primeiro e certifique-se também de que é o comércio que você deseja fechar.
chuale: sim, pode fechar agora. obrigado GumRai. agora eu sei que o número do ticket continua mudando de acordo com os ticks, então como obter o número do ticket do pedido aberto? Eu tenho que.usar OrderTicket() certo?
Olá Chuale,
Esta é uma maneira fácil de selecionar seus pedidos e fechar os pedidos por símbolo e por número mágico :
//+------------------------------------------------------------------+//| chuale_test1.mq4 |//| Copyright 2014, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2014, MetaQuotes Software Corp."#property link"http://www.abc.com"#property version"1.00"#property strictexterndouble TakeProfit=500;
externdouble Lots=0.1;
externdouble StopLoss=300;
externint MagicNumber = 12345;
externint Slip = 3;
double bar1;
double bar2;
double bar3;
int myTrades,ticket;
datetime previousTime;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int init()
{
//---//---return(0);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//---return(0);
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+int start()
{
myTrades = CountTrades();//Count trades function counts this EA trades only//
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;
//Close any orders if conditions are metif(myTrades>0)
{
if(bar3<-1) CloseThisSymbolAll();
if(bar3>1) CloseThisSymbolAll();
}
if(Time[0]==previousTime) return(0); //EA will not go past this point unless it is a new bar
previousTime=Time[0]; // If it was a new bar , it's old now but continue to the end// if no order open and new barif(myTrades<1)
{
if(bar2>1)// if condition met
{
//place buy order
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"Chua EA",MagicNumber,0,Green);
if(ticket<0)Print("Error OP_BUY order failed. error : "+GetLastError()); // if returned ticket is -1 OrderSent failedreturn(0);
}
// or if conditions for sell metif(bar2<-1)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid+-TakeProfit*Point,"Chua EA",MagicNumber,0,Red);
if(ticket<0)Print("Error OP_SELL order failed. error : "+GetLastError());
return(0); //return to start
}
}
return(0);
}
//========================================================================int CountTrades()
{
int count=0;
int trade;
for(trade=OrdersTotal()-1;trade>=0;trade--)
{
OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol() || OrderMagicNumber() != MagicNumber)
continue;
if(OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)
if(OrderType()==OP_SELL || OrderType()==OP_BUY)
count++;
}
return(count);
}
//========================================================================void CloseThisSymbolAll()
{
int trade;
for(trade=OrdersTotal();trade>=0;trade--)
{
OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol()) continue;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Blue);
if(OrderType()==OP_SELL)OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);
}
//Sleep(1000);
}
}
//========================================================================
chuale: sim, pode fechar agora. obrigado GumRai. agora eu sei que o número do ticket continua mudando de acordo com os ticks, então como obter o número do ticket da ordem aberta? Eu tenho que.usar OrderTicket() certo?
Olá novamente Chuale,
Eu estava brincando com sua idéia sobre USDJPY e não consegui obter resultados positivos sem algumas mudanças. Aqui está uma amostra dos meus resultados sobre USDJPY no gráfico M1 :
Você pretendia usá-lo em um par diferente?
Saída em bar3 < -1 ou bar3 > 1 não retornou resultados positivos.
verifique corretamente quais os negócios que você tem
procurar o símbolo certo e o número mágico certo
com uma carteira de pedidos você pode então selecionar o comércio certo para fechar com
.
com seu método
você perde o valor do bilhete no momento em que reinicia seu pc, então
falha .....
Se você quer dizer que não é a melhor maneira de fechar uma ordem, concordo, mas se o cara não quer usar OrderSelect (ou não sabe como) e não deixa nenhuma ordem em aberto no mercado, ele funciona.
Tentamos nos ajudar aqui e sua resposta não ajudou um pouco, você não lhe mostrou como usar a função Order Select e sua EA não está funcionando melhor agora devido a seu comentário.
Da próxima vez que você quiser ajudar, faça-o da maneira correta, coloque o código certo para que outros possam realmente aprender alguma coisa .
Há algumas coisas que você fez de errado. Presumo que você queira que esta EA trabalhe em pares JPY em M1 no período de tempo. Você quer colocar ordens somente em novos bares e fechar ordens somente em novos bares ou você quer entrar em novos bares e sair se as condições forem atendidas? Eis o que eu penso:
Primeiro você conta as ordens com OrdersTotal().
Em seguida, calcule suas variáveis
Se houver ordens no mercado, verifique se elas têm de ser fechadas
Se não houver ordens no mercado, verifique se as condições de entrada são atendidas.
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.
Há algumas coisas que você fez errado. Presumo que você queira que este EA trabalhe em pares JPY em M1 no período de tempo. Você quer fazer pedidos somente em bar novo e fechar pedidos somente em bar novo ou você quer entrar em bar novo e sair se as condições forem cumpridas? Eis o que eu penso:
Primeiro você conta os pedidos com OrdersTotal().
Em seguida, calcule suas variáveis
Se houver ordens no mercado, verifique se elas têm de ser fechadas
Se não houver ordens no mercado, verificar se as condições de entrada são atendidas.
Informe-me se você tiver alguma dúvida.
bilhete é uma variável local, portanto, no próximo tick, não terá o mesmo valor
Colocado fora das funções para torná-lo Globalscope
total=OrdersTotal();?????? ..... inútil
verifique corretamente quais os negócios que você tem
procurar o símbolo certo e o número mágico certo
com uma carteira de pedidos você pode então selecionar o comércio certo para fechar com
.
com seu método
você perde o valor do bilhete no momento em que reinicia seu pc, então
falha .....
Por que você citou meu post e depois não acrescentou nenhum comentário?
sim, pode fechar agora. obrigado GumRai. agora eu sei que o número do ticket continua mudando de acordo com os ticks, então como obter o número do ticket do pedido aberto? Eu tenho que.usar OrderTicket() certo?
Se você usar OrderTicket(), certifique-se de usar OrderSelect() primeiro e certifique-se também de que é o comércio que você deseja fechar.
sim, pode fechar agora. obrigado GumRai. agora eu sei que o número do ticket continua mudando de acordo com os ticks, então como obter o número do ticket do pedido aberto? Eu tenho que.usar OrderTicket() certo?
Olá Chuale,
Esta é uma maneira fácil de selecionar seus pedidos e fechar os pedidos por símbolo e por número mágico :
sim, pode fechar agora. obrigado GumRai. agora eu sei que o número do ticket continua mudando de acordo com os ticks, então como obter o número do ticket da ordem aberta? Eu tenho que.usar OrderTicket() certo?
Olá novamente Chuale,
Eu estava brincando com sua idéia sobre USDJPY e não consegui obter resultados positivos sem algumas mudanças. Aqui está uma amostra dos meus resultados sobre USDJPY no gráfico M1 :
Você pretendia usá-lo em um par diferente?
Saída em bar3 < -1 ou bar3 > 1 não retornou resultados positivos.
?????? ..... inútil
verifique corretamente quais os negócios que você tem
procurar o símbolo certo e o número mágico certo
com uma carteira de pedidos você pode então selecionar o comércio certo para fechar com
.
com seu método
você perde o valor do bilhete no momento em que reinicia seu pc, então
falha .....
Se você quer dizer que não é a melhor maneira de fechar uma ordem, concordo, mas se o cara não quer usar OrderSelect (ou não sabe como) e não deixa nenhuma ordem em aberto no mercado, ele funciona.
Tentamos nos ajudar aqui e sua resposta não ajudou um pouco, você não lhe mostrou como usar a função Order Select e sua EA não está funcionando melhor agora devido a seu comentário.
Da próxima vez que você quiser ajudar, faça-o da maneira correta, coloque o código certo para que outros possam realmente aprender alguma coisa .
Há algumas coisas que você fez de errado. Presumo que você queira que esta EA trabalhe em pares JPY em M1 no período de tempo. Você quer colocar ordens somente em novos bares e fechar ordens somente em novos bares ou você quer entrar em novos bares e sair se as condições forem atendidas? Eis o que eu penso:
Primeiro você conta as ordens com OrdersTotal().
Em seguida, calcule suas variáveis
Se houver ordens no mercado, verifique se elas têm de ser fechadas
Se não houver ordens no mercado, verifique se as condições de entrada são atendidas.
Informe-me se você tiver alguma dúvida.