CloseAllProfitPositions

Author: Copyright 2020, CMILLION.RU
Orders Execution
It automatically opens orders when conditions are reached
0 Views
0 Downloads
0 Favorites
CloseAllProfitPositions
ÿþ//+------------------------------------------------------------------+

//|                                      CloseAllProfitPositions.mq5 |

//|                                      Copyright 2020, CMILLION.RU |

//|                                               https:/cmillion.ru |

//+------------------------------------------------------------------+

#property copyright "Copyright 2020, CMILLION.RU"

#property link      "https:/cmillion.ru"

#property version   "1.00"

//+------------------------------------------------------------------+

MqlTick tick;             // B5:CI0O :>B8@>2:0

MqlTradeRequest request;  // ?0@0<5B@K B>@3>2>3> 70?@>A0

MqlTradeResult result;    // @57C;LB0B B>@3>2>3> 70?@>A0

MqlTradeCheckResult check;

ENUM_ORDER_TYPE_FILLING FillingMode=ORDER_FILLING_RETURN;

//+------------------------------------------------------------------+

void OnStart()

{

   int FILLING_MODE=(int)SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE);

   if ((SYMBOL_FILLING_IOC & FILLING_MODE)==SYMBOL_FILLING_IOC) FillingMode=ORDER_FILLING_IOC;// A5 8;8 G0AB8G=>

   if ((SYMBOL_FILLING_FOK & FILLING_MODE)==SYMBOL_FILLING_FOK) FillingMode=ORDER_FILLING_FOK;//<>65B 1KBL 8A?>;=5= 8A:;NG8B5;L=> 2 C:070==>< >1J5<5

   long OT;

   int total=PositionsTotal();

   string txt=NULL;

   double Profit=0;

   for(int i=total-1; i>=0; i--)

   {

      ulong  position_ticket=PositionGetTicket(i);

      string position_symbol=PositionGetString(POSITION_SYMBOL);

      double volume=PositionGetDouble(POSITION_VOLUME);

      OT=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);

      Profit=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP)+GetPositionCommission()*2;

      if (Profit<0) 

      {

         StringConcatenate(txt,txt,"\nLoss positions ",position_ticket," ",DoubleToString(Profit,2));

         continue;

      }

      ZeroMemory(request);

      ZeroMemory(result);

      request.type_filling = FillingMode;

      request.action   =TRADE_ACTION_DEAL;

      request.position =position_ticket;

      request.symbol   =position_symbol;

      request.volume   =volume;

      request.deviation=1000;

      //request.magic    =Magic;

      //---

      if(OT==POSITION_TYPE_BUY)

        {

         request.price=SymbolInfoDouble(position_symbol,SYMBOL_BID);

         request.type =ORDER_TYPE_SELL;

        }

      else

        {

         request.price=SymbolInfoDouble(position_symbol,SYMBOL_ASK);

         request.type =ORDER_TYPE_BUY;

        }

      if(OrderSend(request,result)) StringConcatenate(txt,txt,"\nClose positions ",position_ticket," ",DoubleToString(Profit,2));

      else PrintFormat("Order Close error %d",GetLastError());

   }

   Comment(txt);

}

//+------------------------------------------------------------------+

double GetPositionCommission(void)

  {

   double Commission=::PositionGetDouble(POSITION_COMMISSION);

   if(Commission==0)

     {

      ulong Ticket=GetPositionDealIn();



      if(Ticket>0)

        {

         const double LotsIn=::HistoryDealGetDouble(Ticket,DEAL_VOLUME);

         if(LotsIn>0)

            Commission=::HistoryDealGetDouble(Ticket,DEAL_COMMISSION)*::PositionGetDouble(POSITION_VOLUME)/LotsIn;

        }

     }

   return(Commission);

  }

//--------------------------------------------------------------------

ulong GetPositionDealIn(const ulong HistoryTicket=0)

  {

   ulong Ticket=0;



   if((HistoryTicket==0) ? ::HistorySelectByPosition(::PositionGetInteger(POSITION_TICKET)) : ::HistorySelectByPosition(HistoryTicket))

     {

      const int Total=::HistoryDealsTotal();



      for(int i=0; i<Total; i++)

        {

         const ulong TicketDeal=::HistoryDealGetTicket(i);



         if(TicketDeal>0)

            if((ENUM_DEAL_ENTRY)::HistoryDealGetInteger(TicketDeal,DEAL_ENTRY)==DEAL_ENTRY_IN)

              {

               Ticket=TicketDeal;

               break;

              }

        }

     }

   return(Ticket);

  }

//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---