Preciso saber qual é o código de tratamento de erro ORDER CLOSE com MAGIC NUMBER.
Eu sou capaz de fazer isso com o tratamento de erros Order OPEN.
Mas preciso confirmar se meu código está correto com o tratamento de erros Order CLOSE.
Este é o meu código de tratamento de erro Order OPEN para Buy Order, que funciona bem:
//Comprar
if (Order == SIGNAL_BUY ((EachTickMode !TickCheck) || (!EachTickMode (Bars != BarCount)))) {
if(!IsTrade) {
//Verifica margem livre
if (AccountFreeMargin() lt; (1000 * Lotes)) {
Print(Não temos dinheiro. Margem Livre = , AccountFreeMargin());
retornar(0);
}
if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; senão StopLossLevel = 0,0;
if (UseTakeProfit) TakeProfitLevel = Ask TakeProfit * Point; senão TakeProfitLevel = 0,0;
Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, Buy(# MagicNumber ), MagicNumber, 0, DodgerBlue);
if(Ticket gt; 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print(ordem de COMPRA aberta: , OrderOpenPrice());
if (SignalMail) SendMail([Signal Alert], [ Symbol() ] DoubleToStr(Ask, Digits) Open Buy);
} outro {
Print(Erro ao abrir ordem de COMPRA: , GetLastError());
InTrade = falso;
buyFlag = false;
}
}
else/*** ADICIONADO ELSE a if (Ticket gt;0)
{
//Ocorreu um erro ao abrir a negociação, então lide com isso
Print(Erro ao abrir ordem de COMPRA: , GetLastError());
InTrade = falso;
buyFlag = false;
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Barras;
retornar(0);
}
}
Este é o código de tratamento de erro do meu pedido CLOSE para o pedido de compra:
// ---------------------------------------------------- -------------------
//| Fim do Sinal(Sair da Compra) |
// ---------------------------------------------------- -------------------
if (Order == SIGNAL_CLOSEBUY ((EachTickMode !TickCheck) || (!EachTickMode (Bars != BarCount)))) {
for (cnt = Total; cnt gt;=0; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
{
if (OrderMagicNumber() == MagicNumber)
{
nomoretrades = verdadeiro;
InTrade = falso;
Ticket = OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if(Ticket gt; 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print(ordem de VENDA fechada: , OrderClosePrice());
if (SignalMail) SendMail([Signal Alert], [ Symbol() ] DoubleToStr(Bid, Digits) Open Sell);
} outro {
Print(Erro ao fechar ordem de COMPRA: , GetLastError());
nomoretrades = false;
InTrade = verdadeiro;
}
}
else/*** ADICIONADO ELSE a if (Ticket gt;0)
{
//Ocorreu um erro ao fechar a negociação, então lide com isso
Print(Erro ao fechar ordem de COMPRA: , GetLastError());
nomoretrades = false;
InTrade = verdadeiro;
}
}
}
}
if (SignalMail) SendMail([Signal Alert], [ Symbol() ] DoubleToStr(Bid, Digits) Close Buy);
if (!EachTickMode) BarCount = Barras;
IsTrade = Falso;
Prosseguir;
}
//Trailing stop
if(UseTrailingStop TrailingStop gt; 0) {
if(Bid - OrderOpenPrice() gt; Point * TrailingStop) {
if(OrderStopLoss() lt; Lance - Ponto * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Barras;
Prosseguir;
}
}
}
} outro {
Alguém pode me dizer se meu código de tratamento de erro ORDER CLOSE está correto?
Além disso, parece que tenho um problema ao imprimir o OrderClosePrice() porque o preço impresso está errado. Não tenho problemas em imprimir o OrderOpenPrice() para o Código de Abertura do Pedido.