Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void LimpaOrdens(){
- int i=0, count=0, total=0;
- int ticketp=0; // ticketp = ticket da ordem pendente que vamos analizar
- int typep=0; // typep = Typo da ordem pendente que vamos analizar
- bool sucesso=false; // Sucesso em encerrar a ordem pendente
- // 1 - Verifica se tem somente uma ordem pendente, sem mais ordens abertas
- // percorre Histórico de ordens abertas ( MODE_TRADES )
- for( i=OrdersTotal()-1; i>=0; i++){
- if( !OrderSelect(i, SELECT_BY_POS, MODE_TRADES ) ) continue;
- if( OrderMagicNumber() != MagicNumer ) continue;
- if( OrderType() != OP_BUY && OrderType() != OP_SELL ){
- count++;
- total++;
- ticketp=OrderTicket();
- typep=OrderType();
- }
- }
- // Total de ordens pendentes abertas deve ser 1
- // Total de ordens abertas também deve ser somente 1
- // Se um dos do contadores for diferente de 1, aborta
- if( count!=1 || total!=1) return ;
- // Localiza a Ordem ATIVA Contrária mais recente ( se fechou no TP )
- if( !OrderSelect(ticketp, SELECT_BY_TICKET) ) return;
- // Percorre histórico de ordens ( MODE_HISTORY ), da mais e recente para a mais antiga
- // Comno iremos filtrar as ordens, a priemira ordem encontrada que satisfizer as condições
- // Será a orden que precisamos
- for( i=OrdersTotal()-1; i>=0; i++){
- if( !OrderSelect(i, SELECT_BY_POS, MODE_HISTORY ) ) continue;
- if( OrderMagicNumber() != MagicNumer ) continue;
- // Ordem em questão não pode ser pendente, somente ativa OP_BUY ou OP_SELL
- if( OrderType() != OP_BUY && OrderType() != OP_SELL ) continue;
- // Ordem de compra OP_BUY NÃO fechou no Take Profit ? Então não serve
- if( OrderType() == OP_BUY && OrderClosePrice() < OrderTakeProfit() ) continue;
- // Ordem de venda OP_SELL NÃO fechou no Take Profit ? Então não serve
- if( OrderType() == OP_SELL && OrderClosePrice() > OrderTakeProfit() ) continue;
- // Bem... ao chegar aqui a ordem deve ser :
- // 1 - Do tipo ativa OP_BUY ou OP_SELL
- // 2 - Deve ter fechado no Take Profit
- // Agora basta verificar se é a ordem ativa contrária à ordem pendente
- if( (typep==OP_BUYSTOP && OrderType()==OP_SELL) || (typep==OP_SELLSTOP && OrderType()==OP_BUY) ){
- // Achamos nossa danadinha... vamos fechá-la
- while(IsTradeContextBusy()) Sleep(100);
- sucesso=OrderDelete(ticketp);
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment