Author: genino.belaev@yandex.ru
Orders Execution
Checks for the total of closed ordersChecks for the total of open ordersIt automatically opens orders when conditions are reached
0 Views
0 Downloads
0 Favorites
SuperTake
//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright "genino.belaev@yandex.ru"
#property link      "https://www.mql5.com/ru/users/genino"
#property version   "1.00"
#property strict
extern double lots=0.1;// 
extern double STakeProfit=10;
extern double StopLoss=15;
extern int magic=123455;
extern double Martin=1.8;
int ticet=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(Digits==5 || Digits==3)
     {
      STakeProfit*=10;
      StopLoss*=10;
     }
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   Comment("LossPoslednei()= ",LossPoslednei());
     {
      if(OrdersTotal()==0 && OrdersHistoryTotal()==0)
        {
         ticet=OrderSend(Symbol(),OP_BUY,lots,Ask,3,Bid-StopLoss*Point,Ask+TP()*Point,"ïîêóïêà",magic,0,clrGreen);
        }
      if(OrdersTotal()==0 && GetTypeLastClosePos()==0)
        {
         ticet=OrderSend(Symbol(),OP_SELL,lots,Bid,3,Ask+StopLoss*Point,Bid-TP()*Point,"ïðîäàæà",magic,0,clrRed);
        }

      if(OrdersTotal()==0 && GetTypeLastClosePos()==1)
        {
         ticet=OrderSend(Symbol(),OP_BUY,lots,Ask,3,Bid-StopLoss*Point,Ask+TP()*Point,"ïîêóïêà",magic,0,clrGreen);
        }
     }
  }
//+------------------------------------------------------------------+
//| Ñ÷èòàåì ïîñëåäíèé îðäåð                                          |
//+------------------------------------------------------------------+
int GetTypeLastClosePos(string sy="",int mn=-1)
  {
   datetime t=0;
   int      i,k=OrdersHistoryTotal(),r=-1;
//---
   if(sy=="0") sy=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime())
                 {
                  t=OrderCloseTime();
                  r=OrderType();
                 }
              }
           }
        }
     }
   return(r);
  }
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 19.02.2008                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò ôëàã óáûòî÷íîñòè ïîñëåäíåé ïîçèöèè.                 |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáàÿ ïîçèöèÿ)                  |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//+----------------------------------------------------------------------------+
bool isLossLastPos(string sy="",int op=-1,int mn=-1)
  {
   datetime t=0;
   int      i,j=-1,k=OrdersHistoryTotal();
//---
   if(sy=="0") sy=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==sy || sy=="")
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(op<0 || OrderType()==op)
                 {
                  if(mn<0 || OrderMagicNumber()==mn)
                    {
                     if(t<OrderCloseTime())
                       {
                        t=OrderCloseTime();
                        j=i;
                       }
                    }
                 }
              }
           }
        }
     }
   if(OrderSelect(j,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderProfit()<0) return(True);
     }
   return(False);
  }
//+------------------------------------------------------------------+
//| Âîçâðàùàåì ñòîïëîññ ïîñëåäíåé óáûòî÷íîé ñäåëêè èç èñòîðèè        |
//| â ïóíêòàõ                                                        |
//| Â íàñòðîéêàõ ñòîï è òåéê äîëæíû áûòü òèïà double                 |  
//+------------------------------------------------------------------+
double LossPoslednei()
  {
   int k=OrdersHistoryTotal();
   int i;
   double Delta=0;
   if(isLossLastPos()==true)
     {
      for(i=0; i<k; i++)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
           {
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==OP_SELL)
              {
               Delta=(OrderOpenPrice()-OrderTakeProfit())/Point;
              }
           }
        }
      for(i=0; i<k; i++)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
           {
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==OP_BUY)
              {
               Delta=(OrderTakeProfit()-OrderOpenPrice())/Point;
              }
           }
        }
     }
   return(NormalizeDouble(Delta, Digits));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double TP()
  {
   double tec=0;
   if(isLossLastPos()==True)
     {
      tec=NormalizeDouble(LossPoslednei()*Martin,2);
     }
//---
   if(isLossLastPos()==False)
     {
      tec=STakeProfit;
     }
   return(tec);
  }
//+------------------------------------------------------------------+

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 ---