E-Skoch-Open_Ordera

Author: Copyright � 2010, ������� ��������
Orders Execution
It automatically opens orders when conditions are reachedChecks for the total of closed ordersIt Closes Orders by itself Checks for the total of open orders
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
E-Skoch-Open_Ordera
#property copyright "Copyright © 2010, Õëûñòîâ Âëàäèìèð"
#property link      "cmillion@narod.ru"
#property show_inputs
//--------------------------------------------------------------------
extern int     stoploss    = 1300,        //óðîâåíü âûñòàâëåíèÿ SL, åñëè 0, òî SL íå âûñòàâëÿåòñÿ
               takeprofit  = 20000,        //óðîâåíü âûñòàâëåíèÿ TP, åñëè 0, òî TP íå âûñòàâëÿåòñÿ
               key       = 0;   //óíèêàëüíûé íîìåð îðäåðà
extern bool    SELL        = false,    //îòêðûòü îðäåð SELL
               BUY         = false;    //îòêðûòü îðäåð BUY
extern double  lot         = 0.01;      //îáúåì îðäåðà
extern int     slippage    = 30;        //Ìàêñèìàëüíî äîïóñòèìîå îòêëîíåíèå öåíû äëÿ ðûíî÷íûõ îðäåðîâ
extern double _percentProfit=1.2;///// - Ïðîôåöèò
//----------- Alen_T 2011 http://fxgeneral.com
extern bool Close_ON = false;      //çàêðûòèå ïîçèöèè ïî îáðàòíîìó ñèãíàëó
extern int MaxBuyCount  =  1;    // Ìàêñ äîïóñòèìîå êîë. îòêðûòûõ îðäåðîâ áàé, -1 - íå íîãðàíè÷åíî 
extern int MaxSellCount  =  1;   // Ìàêñ äîïóñòèìîå êîë. îòêðûòûõ îðäåðîâ ñåëë, -1 - íå îãðàíè÷åíî
//-----------
datetime   BARflag  = 0; //--Äëÿ ïîáàðîâîãî ðåæèìà
//--------------------------------------------------------------------
double SL,TP;
//--------------------------------------------------------------------
int start()
{
 datetime now = Time[0];//--Äëÿ ïîáàðîâîãî ðåæèìà
  if(BARflag >= now) return(0);//--Äëÿ ïîáàðîâîãî ðåæèìà
   BARflag = now;//--Äëÿ ïîáàðîâîãî ðåæèìà
 
  int nLots; //--Ìàê.îòê.îðäåðîâ
   if(totalO(-1,key)==0) GlobalVariableSet(StringConcatenate(key," eq"),AccountEquity());//- % ïî "Òåêóùåå ýêâèòè "
   Comment("Êîíòðîëüíîå ýêâèòè ",GlobalVariableGet(StringConcatenate(key," eq")),"\n",//- % ïî "Òåêóùåå ýêâèòè "
           "Òåêóùåå ýêâèòè ",AccountEquity(),"\n",  //- % ïî "Òåêóùåå ýêâèòè "
   "Òåêóùèé ïðîöåíò ðîñòà Ýêâèòè ",100*(AccountEquity()-GlobalVariableGet(StringConcatenate(key," eq")))/GlobalVariableGet(StringConcatenate(key," eq"))," %");//- % ïî "Òåêóùåå ýêâèòè "
   _CheckProfit();///// - Ïðîôåöèò- % ïî "Òåêóùåå ýêâèòè "  
   if ((Close[3]>Close[2]) && (Close[1]<Close[2])){
   {
   if(Close_ON) CloseOrders(OP_SELL, Ask, key);// --Ìàê.îòê.îðäåðîâ
   nLots = ExistPositionsN(NULL,OP_BUY, key);// --Ìàê.îòê.îðäåðîâ
   if(MaxSellCount != -1 && nLots >= MaxSellCount) return(0); //--Ìàê.îòê.îðäåðîâ

   if (BUY)
   
      if (takeprofit!=0) TP  = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0)   SL  = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;     
      OPENORDER ("Buy");
      }
   }
   if ((Close[3]>Close[2]) && (Close[2]<Close[1])){
   {
   if(Close_ON) CloseOrders(OP_BUY, Bid, key);// --Ìàê.îòê.îðäåðîâ
   nLots = ExistPositionsN(NULL,OP_SELL, key);// --Ìàê.îòê.îðäåðîâ
   if(MaxSellCount != -1 && nLots >= MaxSellCount) return(0);// --Ìàê.îòê.îðäåðîâ

   if (SELL)
     
      if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0)   SL = NormalizeDouble(Bid + stoploss*Point,Digits);  else SL=0;              
      OPENORDER ("Sell");
      }
   }
return(0);
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
   int error,err;
   while (true)
   {  error=true;
      if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, getlotlast(key),NormalizeDouble(Ask,Digits),slippage,SL,TP,"BUY",key,0,Blue);
      if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,getlotlast(key),NormalizeDouble(Bid,Digits),slippage,SL,TP,"SELL",key,0,Red);
      if (error==-1) //íåóäà÷íàÿ ïîêóïêà OK
      {  
         ShowERROR();
         err++;Sleep(2000);RefreshRates();
      }
      if (error || err >10) return;
   }
return;
}                  
//--------------------------------------------------------------------
void ShowERROR()
{
   int err=GetLastError();
   switch ( err )
   {                  
      case 1:   return;
      case 2:   Alert("Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì ",Symbol());return;
      case 3:   Alert("Error íåïðàâèëüíûå ïàðàìåòðû ",Symbol());return;
      case 130: Alert("Error áëèçêèå ñòîïû   Ticket ",Symbol());return;
      case 134: Alert("Íåäîñòàòî÷íî äåíåã   ",Symbol());return;
      case 146: Alert("Error Ïîäñèñòåìà òîðãîâëè çàíÿòà ",Symbol());return;
      case 129: Alert("Error Íåïðàâèëüíàÿ öåíà ",Symbol());return;
      case 131: Alert("Error Íåïðàâèëüíûé îáúåì ",Symbol());return;
      case 4200:Alert("Error Îáúåêò óæå ñóùåñòâóåò ",Symbol());return;
      default:  Alert("Error  " ,err," ",Symbol());return;
   }
}
//----------------------------------------++++
//------ Åñëè ,, ëîñü,, òî + Ëîò ---------------------
//èùåì ïîñëåäíèé çàêðûòûé îáúåì 
double  getlotlast(int _key)
 {
   double _lot = lot ;  
   for(int i=OrdersHistoryTotal(); i>=0; i--) {
      if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)&&OrderSymbol()==Symbol()) {
         if((OrderMagicNumber()==_key || _key == 0) && OrderType()<=1){
            if(OrderProfit()<0){
               int kol=getLastType(_key)*(-1);
               _lot=((kol-MathMod(kol,2))/2+1)*lot;       // -- +1 ýòî + ËÎÒ
               break;
            }
            if(OrderProfit()>=0) break;
         }
      }
   }
   return(_lot); 
}
//êàêîé òèï îðäåðà çàêðûëñÿ ïîñëåäíèé è ñêîëüêî îðäåðîâ â ñåðèè
int getLastType(int _key)
{
 int KolType=0;
 int j=1;       
   for(int i=OrdersHistoryTotal() ; i>=0; i--) {
      if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY ) && OrderSymbol()==Symbol()) {
         if((OrderMagicNumber()==_key || _key == 0) && OrderType()<=1) {
            if(j==1 && OrderProfit()>=0)KolType++;
            if(j==1 && OrderProfit()<0)KolType--;
            if(j!=1 && OrderProfit()>=0 && KolType>0)KolType++;
            if(j!=1 && OrderProfit()>=0 && KolType<0)break;
            if(j!=1 && OrderProfit()<0 && KolType<0)KolType--;
            if(j!=1 && OrderProfit()<0 && KolType>0)break;
            j++;                 
         }
      }
   } 
   return(KolType); 
}

//+-------------------------- Ïðîôåöèò    ---------------------------+
void _CheckProfit(){//- % ïî "Òåêóùåå ýêâèòè "
   
   if (100*(AccountEquity()-GlobalVariableGet(StringConcatenate(key," eq")))/GlobalVariableGet(StringConcatenate(key," eq"))>=_percentProfit)
   
   _OrderClose();//- % ïî "Òåêóùåå ýêâèòè "
   return;//- % ïî "Òåêóùåå ýêâèòè "
}
//+--------------------------------+//- % ïî "Òåêóùåå ýêâèòè "
void _OrderClose(){
   int i;
   double _price=0.0;
   _OrderDelete();
   if (OrdersTotal()>0){
      for (i=OrdersTotal()-1; i>=0; i--){
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
            if (OrderSymbol()==Symbol()){
               RefreshRates();
               if (OrderType()==OP_SELL) _price=Ask;
               if (OrderType()==OP_BUY) _price=Bid;
               OrderClose(OrderTicket(),OrderLots(),_price,5,0);
            }
         }
      }
   }
   return;
}
//+--------------------------------+//- % ïî "Òåêóùåå ýêâèòè "
void _OrderDelete(){//- % ïî "Òåêóùåå ýêâèòè "
   int i;
   if (OrdersTotal()>0){
      for (i=OrdersTotal()-1; i>=0; i--){
         if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
            if (OrderSymbol()==Symbol()){
               if (OrderType()>1 && OrderType()<6) OrderDelete(OrderTicket());
            }
         }
      }
   }
   return;
}//- % ïî "Òåêóùåå ýêâèòè "
//+-----------------//- % ïî "Òåêóùåå ýêâèòè "------------------------+++
/*Ñ÷èòàåì êîëè÷åñòâî îðäåðîâ
âõîäÿùèå 
int type (if -1 all type)
OP_BUY 0 Ïîêóïêà 
OP_SELL 1 Ïðîäàæà 
OP_BUYLIMIT 2 Îòëîæåííûé îðäåð BUY LIMIT 
OP_SELLLIMIT 3 Îòëîæåííûé îðäåð SELL LIMIT 
OP_BUYSTOP 4 Îòëîæåííûé îðäåð BUY STOP 
OP_SELLSTOP 5 Îòëîæåííûé îðäåð SELL STOP 
int _key MagicNumber

*/
int totalO(int type,int _key)
 {
       int TotalNumber = 0;  
              for(int i=0; i<OrdersTotal(); i++)
                {  
                  if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)||OrderSymbol() !=Symbol()|| OrderMagicNumber()!=_key) continue; 
                  if (OrderType()==type||type==-1){
                  TotalNumber++;}
                } 
              return(TotalNumber); 
 }
//+------------------- Êîíåö ôóíêöèè ----------------------------------+++
// ------- Îãðàíå÷åíèè îòêðûòûõ îðäåðîâ ----------

//+----------------------------------------------------------------------------+
//|  Îïèñàíèå : Çàêðûòèå îòêðûòûõ îðäåðîâ                                   |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    TipOrder - òèï îðäåðà ( OP_BUY || OP_SELL )                             |
//|    Price    - óñòàíàâëèâàåìûé TP                                           |
//|    Magic    - MagicNumber      (-1   - ëþáîé ìàãèê)                        |
//+----------------------------------------------------------------------------+
bool CloseOrders(int TipOrder, double Price, int mn=-1)
{
int Norder;
int total = OrdersTotal(); 
            
   //---- ïîèñê äëèííîé îòêðûòîé ïîçèöèè
   for(int cnt = total - 1; cnt >= 0; cnt--)      // Ïåðåáèðàåì âñå îðäåðà
   {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);//îðäåð âûáèðàåòñÿ ñðåäè îòêðûòûõ è îòëîæåííûõ îðäåðîâ
      if( OrderSymbol()==Symbol())// Ñîâïàäàåò ëè ñèìâîë îðäåðà( Çäåñü ïî íàäîáíîñòè åù¸ ìàãèê ìîæíî ïðîâåðèòü)
      {
         if(OrderType()==TipOrder)//Îòáèðàåì ïîçèöèþ áàé/ñåë
         {
            if (mn<0 || OrderMagicNumber()==mn) 
            {
               if(TipOrder == OP_BUY) Price = NormalizeDouble(Bid,Digits);
               if(TipOrder == OP_SELL) Price = NormalizeDouble(Ask,Digits);
               Norder = OrderTicket();
               OrderClose(OrderTicket(),OrderLots(),Price,3,Violet); //çàêðûâàåì îðäåð
               Print("======= Óäàëåí îðäåð=",Norder);
               //âðåìÿ çàäåðæêè
            }
         }
      }
   }
   
}
// ------- Îãðàíå÷åíèè îòêðûòûõ îðäåðîâ ----------
//+----------------------------------------------------------------------------+
//|  Îïèñàíèå : Âîçâðàùàåò êîëè÷åñòâî îðäåðîâ                                  |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáàÿ ïîçèöèÿ)                  |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//|    ot - âðåìÿ îòêðûòèÿ             ( 0   - ëþáîå âðåìÿ îòêðûòèÿ)           |
//+----------------------------------------------------------------------------+
int ExistPositionsN(string sy="", int op=-1, int mn=-1, datetime ot=0) 
{
  int i, k=OrdersTotal(), rez=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)
            {
              if (ot<=OrderOpenTime()) rez = rez+1;
            }
          }
        }
      }
    }
  }
  
  return(rez);
}
//------------------------------------------------------------------------------------------------------+


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