Source_Code_Many_Orders

Author: BARS-Alligator
0 Views
0 Downloads
0 Favorites
Source_Code_Many_Orders
//+------------------------------------------------------------------+
//|                                                         ****.mq4 |
//|                                                             BARS |
//|                                                 www.*********.ru |
//+------------------------------------------------------------------+
#property copyright "BARS-Alligator"
#property link      "****"
// Ýêñïåðò ðàáîòàåò ïî "Öåíàì îòêðûòèÿ".
// Ýêïåðò ñïîñîáåí ðàáîòàòü ïðè îòêðûòèè ïîçèöèé â óñëîâèÿõ ðûíî÷íîãî 
// èñïîëíåíèÿ òîðãîâûõ çàÿâîê Market Watch , - WHÑ, BROCO è ò.ï.
// Äîáàâëåí âñòðîåííûé áëîê ÌÌ (êîððåêòíî ðàáîòàåò òîëüêî íà âàëþòàõ). 
// Ïðåäóñìîòðåí çàïðåò îäíîèìåííûõ ñäåëîê íà îäíîì áàðå áîëåå îäíîé - 
//  - ïðèìåíåíà  ô-ÿ È.Êèìà NumberOfBarOpenLastPos(). 
// Ýêñïåðò àäàïòèðîâàí ïîä óñëîâèÿ ×åìïèîíàòà Ðîáîòîâ 2008  ïî 
// êîëè÷åñòâó îðäåðîâ è ëîòîâ.

//---- input parameters

extern int     Magic=94754;
extern int     Magic1=95454;
extern int     Magic2=45764;
extern int     Magic3=567567;
extern int     Orders =1;
extern int     StopLoss=2816;
extern int     TakeProfit=5676;
extern int     StopLoss2=5735;
extern int     TakeProfit2=3549;
extern string   ___= "Ïàðàìåòðû èíä. Àëëèãàòîð";
extern string   ____= "Ïàðàìåòðû Òðåéëèíã ñòîïà";
extern bool     UseTrailing = true;//âûêëþ÷àòåëü òðåéëèíãà
extern int     lMinProfit         = 1811;//ïîðîã òðàëà äëèííûõ ïîç
extern int     lTrailingStop      = 3037;//ðàçìåð òðàëà äëèííûõ ïîç
extern int     lTrailingStep      = 5;// øàã òðàëà
extern int     sMinProfit              = 4279;//ïîðîã òðàëà êîðîòêèõ ïîç
extern int     sTrailingStop           = 2520;//ðàçìåð òðàëà êîðîòêèõ ïîç
extern int     sTrailingStep           = 5; //øàã òðàëà

extern string     ______= "Ïàðàìåòðû áëîêà MoneyManagement";
extern double    Lots = 0.01;
extern double    Lots2 = 0.01;
extern double    T1 = 0.0016;
extern double    T2 = 0.0014;
extern double    T3 = 650;
extern double    T33 = 140;
extern double    X = 260;
extern double    X1 = 540;
extern double    T333 = 0.0051;
extern double    T3333 = 0.0082;
extern double    X2 = 131;
extern double    X22 = 650;
extern double    T4 = 0.0002;
extern double    T5 = 0.0004;
extern double    A = 100;
extern double    B = 100;
extern double    C = 100;
extern double    D = 100;
extern bool      MoneyManagement=true;
extern int       MarginPercent=3;
extern double Limit_Lot1 = 0.01;
extern double Limit_Lot2 = 0.01;
extern int Limit_Dist1 = 100;
extern int Limit_Dist2 = 100;



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

int ticket;
int ticket1, S=0;
 double lots;
static int prevtime = 0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
 
if (Time[0] == prevtime) return(0); // Áàð ïðåæíèé, à ñëåäîâàòåëüíî âûõîäèì
   prevtime = Time[0]; // Ñâåæèé áàð, çàïîìèíàåì âðåìÿ
//----
   if (UseTrailing) TrailPositions(); //òðåéëèíã ñòîï
   // Îáúÿâëÿåì ïåðåìåííûå
   int total, cnt;
   double MA1,MA2;
   
   // double lots;
   // Âû÷èñëÿåì íà÷àëüíûå ïàðàìåòðû èíäèêàòîðîâ äëÿ ïîèñêà óñëîâèé âõîäà
   
   MA1 = iMA(NULL,0,T3,0,MODE_SMMA,PRICE_MEDIAN,0);  // çåë¸íàÿ
   MA2 = iMA(NULL,0,T33,0,MODE_SMMA,PRICE_MEDIAN,0);
   
   total=OrdersTotal();
   //Comment( LotsCounting() );
//=======================================================================
 
//============Îòêðûòèå ïîçèöèé  =======================================  
   if ( NumberOfPositions(NULL , -1, Magic )<Orders ) 
   { //åñëè  îòêðûòûõ ïîçèöèé ìåíåå Orders
      // Ïðîâåðêà óñëîâèé äëÿ ñîâåðøåíèÿ ñäåëêè áàé
      if (! NumberOfBarOpenLastPos(NULL, 0,OP_BUY, Magic)  ==0) 
     
      { //çàïðåò íåñê. ïîç íà îäíîì áàðå
         if((  MA1<MA2)&&(iATR(NULL,0,X,0)<T1)&&((MA2-MA1)<T4)&&(iStdDev(NULL,0,X1,0,MODE_EMA,PRICE_CLOSE,0)<T333))//ïîêóïàåì
         {  
            lots=LotsCounting();    
            
            ticket=OrderSend(Symbol(),OP_BUY,Limit_Lot1,Ask,3,Ask-Point*StopLoss2,Ask+Point*TakeProfit2,"Main_Order",Magic,0,Green);//âåäóùàÿ ñäåëêà
            ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1*2, Ask - Limit_Dist1*4*Point, 5, 0, 0, "Limit", Magic1, 0, Aqua );
               ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1*4, Ask - Limit_Dist1*8*Point, 5, 0, 0, "Limit", Magic1, 0, Aqua );
             ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1*8, Ask - Limit_Dist1*9*Point, 5, 0, 0, "Limit", Magic1, 0, Aqua );
               S=1;
               SendMail("from your expert", "Ñäåëêa îòêðûòà");
                
            if(ticket < 0) 
            {
               Print("Îøèáêà îòêðûòèÿ îðäåðà BUY #", GetLastError()); 
               Sleep(10000); 
               prevtime = Time[1]; 
               return (0); 
            } 
         }
      }
      //=================================================================
      // Ïðîâåðêà óñëîâèé äëÿ ñîâåðøåíèÿ ñäåëêè ñåëë 
      if (! NumberOfBarOpenLastPos(NULL, 0,OP_SELL, Magic)  ==0) 
     
      {//çàïðåò íåñê. ïîç íà îäíîì áàðå 
         if((MA1>MA2)&&(iATR(NULL,0,X2,0)<T2)&&((MA1-MA2)<T5)&&(iStdDev(NULL,0,X22,0,MODE_EMA,PRICE_CLOSE,0)<T3333))//ïðîäàåì
         {
            ticket=OrderSend(Symbol(),OP_SELL,Limit_Lot2,Bid,3,Bid+Point*StopLoss,Bid-Point*TakeProfit,"Main_Order",Magic,0,Red);//   âåäóùàÿ ñäåëêà
             S=1;
              SendMail("from your expert", "Ñäåëêà îòêðûòà");
           
           
           
            if(ticket < 0)
            {
               Print("Îøèáêà îòêðûòèÿ îðäåðà SELL #", GetLastError()); 
               Sleep(10000);  
               prevtime = Time[1]; 
               return (0); 
            } 
         }
      }
 }    
 //åñëè  îòêðûòûõ ïîçèöèé ìåíåå Orders 
//============ êîíåö áëîêà îòêðûòèÿ ïîçèöèé ===========================
 
//================Çàêðûòèå ïîçèöèé=====================================
//----------------------------------------------------------------------
   if( Orders_Total_by_comm( "Main_Order", Magic, Symbol()) == 0 )
   {
      Close_All_Order(Magic1, Symbol());
       Close_All_Order(Magic2, Symbol());
        Close_All_Order(Magic3, Symbol());
       S=0;
   }
   for ( int v = OrdersTotal() - 1; v >= 0; v -- )                  {       
      if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES))                {           
        if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)     { 
     //--------------------------------------------------------
if (OrderType() == OP_SELL) { 
      if((iStochastic(NULL,0,A,3,3,MODE_SMA,0,MODE_MAIN,0)>92)&&(S>=1)) {
              
         
           
             ticket1=OrderSend(Symbol(),OP_SELL,0.01,Bid,5 ,0 ,0 ,"Limit",Magic2, 0 , Yellow);     
             ticket1=OrderSend(Symbol(), OP_SELLLIMIT, Limit_Lot1, Bid + Limit_Dist1*4*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua );  
               ticket1=OrderSend(Symbol(), OP_SELLLIMIT, Limit_Lot1, Bid + Limit_Dist1*8*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua );   
                ticket1=OrderSend(Symbol(), OP_SELLLIMIT, Limit_Lot1, Bid + Limit_Dist1*10*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua );  
               ticket1=OrderSend(Symbol(), OP_SELLLIMIT, Limit_Lot1, Bid + Limit_Dist1*12*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua );    
               ticket1=OrderSend(Symbol(), OP_SELLLIMIT, Limit_Lot1, Bid + Limit_Dist1*14*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua );   
                
          S=0; 
           
                // return(0); // âûõîäèì
              }   }    
              
 //--------------------------------------------------------
if (OrderType() == OP_BUY) { 
      if((iStochastic(NULL,0,A,3,3,MODE_SMA,0,MODE_MAIN,0)<5)&&(S>=1)) {
              
         ticket1=OrderSend(Symbol(),OP_BUY,0.01,Ask,5 ,0 ,0 ,"Limit",Magic2, 0, Yellow);
           ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1, Ask - Limit_Dist1*5*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua );   
             ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1, Ask - Limit_Dist1*10*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua );   
                ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1, Ask - Limit_Dist1*15*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua );   
                 ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1, Ask - Limit_Dist1*20*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua );   
             ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1, Ask - Limit_Dist1*25*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua );   
                ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1, Ask - Limit_Dist1*30*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua );   
                
          S=0; 
           
                // return(0); // âûõîäèì
              }   }                          
//-------------------------------------------------------                       
    }  // Symbol()  
  } // select
} //total 
//================== Êîíåö áëîêà çàêðûòèÿ  =============================
   //----------------------------------------------------------------------
   for ( int i = OrdersTotal() - 1; i >= 0; i -- )                  {       
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))                {           
        if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic2)     { 
        
        if (OrderType() == OP_SELL) { 
      if((iStochastic(NULL,0,B,3,3,MODE_SMA,0,MODE_MAIN,0)<5)&&(OrderProfit( ) >=0))  {
        OrderClose(OrderTicket(),OrderLots(),Ask,3,Yellow); // çàêðûâàåì ïîçèöèþ
        Close_All_Order(Magic3, Symbol());
        S=1;
        
         
       
                // return(0); // âûõîäèì
                 
                // return(0); // âûõîäèì
                }}
                
             
            if (OrderType() == OP_BUY) { 
      if((iStochastic(NULL,0,B,3,3,MODE_SMA,0,MODE_MAIN,0)>92)&&(OrderProfit( ) >=0))  {
        OrderClose(OrderTicket(),OrderLots(),Bid,3,Yellow); // çàêðûâàåì ïîçèöèþ
        Close_All_Order(Magic3, Symbol());
        S=1;
         
                // return(0); // âûõîäèì
                }}
                          
        }}}
      
//================== Êîíåö áëîêà çàêðûòèÿ  =============================
   
  return(0);
  }
//ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ Êîíåö ôóíêöèè int start() ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ

//---- Çàêðûòèå îðäåðà ïî òèïó è êîììåíòàðèþ ----//
void Close_All_Order( int mn, string sym)
{
   for(int i= OrdersTotal()-1;i>=0;i--)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if( sym==OrderSymbol() && OrderMagicNumber() == mn )
         if(OrderType()<=1)OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3);
         else OrderDelete(OrderTicket());
   }
}

int Orders_Total_by_comm(string comm, int mn, string sym)
{
   int num_orders=0;
   for(int i= OrdersTotal()-1;i>=0;i--)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if( OrderMagicNumber() == mn && sym==OrderSymbol())
      {
         if( StringFind( OrderComment(), comm) >= 0 )
            num_orders++;
      }
   }
   return(num_orders);
}

double LotsCounting()
{
   return(Lots);
}

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void TrailPositions() {// ôóíêöèÿ òðåéëèíã ñòîï
  int Orders = OrdersTotal();
  for (int i=0; i<Orders; i++)                                      {
    if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderSymbol() != Symbol()) continue;    
     if (OrderType() == OP_BUY && OrderMagicNumber()==Magic)           {
      if (Bid-OrderOpenPrice() > lMinProfit*Point)                      {
        if (OrderStopLoss() < Bid-(lTrailingStop+lTrailingStep-1)*Point) {
          OrderModify(OrderTicket(), OrderOpenPrice(), Bid-lTrailingStop*Point,
                                                     OrderTakeProfit(), 0, Blue);
        }}}
    if (OrderType() == OP_SELL && OrderMagicNumber()==Magic)                 {
      if (OrderOpenPrice()-Ask > sMinProfit*Point)                            {
        if (OrderStopLoss() > Ask+(sTrailingStop+sTrailingStep-1)*Point 
                                                       || OrderStopLoss() == 0) {
          OrderModify(OrderTicket(), OrderOpenPrice(), Ask+sTrailingStop*Point,
                                                      OrderTakeProfit(), 0, Blue);
   
   
                                                                                                
        }}}}  }
//------------------------------------------------------------------------------+

//ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ

//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 19.02.2008                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò êîëè÷åñòâî ïîçèöèé.                                 |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáàÿ ïîçèöèÿ)                  |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) kp++;
          }
        }
      }
    }
  }
  return(kp);
}
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 19.02.2008                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò íîìåð áàðà îòêðûòèÿ ïîñëåäíåé ïîçèöèè èëè -1.       |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   ("" èëè NULL - òåêóùèé ñèìâîë)          |
//|    tf - òàéìôðåéì                  (    0       - òåêóùèé òàéìôðåéì)       |
//|    op - îïåðàöèÿ                   (   -1       - ëþáàÿ ïîçèöèÿ)           |
//|    mn - MagicNumber                (   -1       - ëþáîé ìàãèê)             |
//+----------------------------------------------------------------------------+
int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}

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