Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It automatically opens orders when conditions are reached
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
Split_f2k
//+------------------------------------------------------------------+
//|                               Copyright © 2011, Vladimir Hlystov |
//|    Çàêðûâàåò âñå îðäåðà ïðè îïðåäåëåííîì ïðîôèòå                 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, http://cmillion.narod.ru"
#property link      "cmillion@narod.ru"

extern string b       = "Ïàðàìåòðû ñêðèïòà";

#property show_inputs
//--------------------------------------------------------------------
extern datetime TimeSet        = D'2011.12.10 17:47'; //Âðåìÿ âûñòàâëåíèÿ îðäåðîâ, åñëè òåêóùåå âðåìÿ áîëüøå óñòàíîâëåííîãî, òî âûñòàâëÿþòñÿ ñðàçó
extern bool     Stop           = true;     //îòêðûòü ñòîï îðäåðà
extern bool     Limit          = false;     //îòêðûòü ëèìèòíûå îðäåðà
extern bool     SELL           = true;     //îòêðûòü îðäåðà SELL
extern bool     BUY            = true;     //îòêðûòü îðäåðà BUY
extern string   __             = "";
extern double   FirstBuyStop   = 0;        //öåíà âûñòàâëåíèÿ ïåðâîãî BuyStop îðäåðà, åñëè 0 òî ïåðâûé BuyStop áóäåò âûñòàâëåí ïî öåíå Ask+delta
extern double   FirstSellStop  = 0;        //öåíà âûñòàâëåíèÿ ïåðâîãî SellStop îðäåðà, åñëè 0 òî ïåðâûé SellStop áóäåò âûñòàâëåí ïî öåíå Bid-delta
extern double   FirstBuyLimit  = 0;        //öåíà âûñòàâëåíèÿ ïåðâîãî BuyLimit îðäåðà, åñëè 0 òî ïåðâûé BuyLimit áóäåò âûñòàâëåí ïî öåíå Bid-delta
extern double   FirstSellLimit = 0;        //öåíà âûñòàâëåíèÿ ïåðâîãî SellLimit îðäåðà, åñëè 0 òî ïåðâûé SellLimit áóäåò âûñòàâëåí ïî öåíå Ask+delta
extern int      FirstStop      = 50;      //ðàññòîÿíèå (â ïóíêòàõ) îò òåêóùåé öåíû äî ïåðâîãî Stop îðäåðà â ñëó÷àå First..Stop=0 
extern int      FirstLimit     = 0;       //ðàññòîÿíèå (â ïóíêòàõ) îò òåêóùåé öåíû äî ïåðâîãî Limit îðäåðà â ñëó÷àå First..Limit=0
extern int      StepStop       = 50;       //ðàññòîÿíèå (â ïóíêòàõ) ìåæäó Stop îðäåðàìè
extern int      StepLimit      = 0;       //ðàññòîÿíèå (â ïóíêòàõ) ìåæäó Limit îðäåðàìè
extern string   _              = "";
extern int      Orders         = 15;        //êîë-âî îðäåðîâ ñåòêè
extern double   LotStop        = 0.01;      //îáúåì ïåðâîãî Stop îðäåðà
extern double   K_LotStop      = 1.2;        //óìíîæåíèå ëîòà Stop îðäåðîâ 
extern double   LotLimit       = 0.01;      //îáúåì ïåðâîãî Limit îðäåðà
extern double   K_LotLimit     = 1.2;        //óìíîæåíèå ëîòà Limit îðäåðîâ
extern int      stoploss       = 0;       //óðîâåíü âûñòàâëåíèÿ SL, åñëè 0, òî SL íå âûñòàâëÿåòñÿ
extern int      takeprofit     = 0;      //óðîâåíü âûñòàâëåíèÿ TP, åñëè 0, òî TP íå âûñòàâëÿåòñÿ
extern int      Expiration     = 1440;     //Ñðîê èñòå÷åíèÿ îòëîæåííîãî îðäåðà â ìèíóòàõ, åñëè 0, òî ñðîê íå îãðàíè÷åí (1440 - ñóòêè)
extern int      attempts       = 10;       //êîë-âî ïîïûòîê îòêðûòèÿ îðäåðà 
extern int      Magic          = 0;        //óíèêàëüíûé íîìåð îðäåðà
//--------------------------------------------------------------------
string txt;
int n,slippage=3,STOPLEVEL;
datetime expiration;

extern string a       = "Ïàðàìåòðû ñîâåòíèêà";
//-------------------------------------------------------------------
extern double ProfitClose     = 10;   //çàêðûâàòü âñå îðäåðà ïðè ïîëó÷åíèè ïðîôèòà
extern double LossClose       = 1000; //çàêðûâàòü âñå îðäåðà ïðè ïîëó÷åíèè óáûòêà
extern bool   AllSymbol       = false;//ó÷èòûâàòü âñå èíñòðóìåíòû èëè òîëüêî òîò, íà êîòîðîì ñòîèò ñîâåòíèê
//-------------------------------------------------------------------
string _txt;
int init()
{
   ObjectCreate("Balance", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Balance", OBJPROP_CORNER, 1);
   ObjectSet("Balance", OBJPROP_XDISTANCE, 5);
   ObjectSet("Balance", OBJPROP_YDISTANCE, 15);
   ObjectCreate("Equity", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Equity", OBJPROP_CORNER, 1);
   ObjectSet("Equity", OBJPROP_XDISTANCE, 5);
   ObjectSet("Equity", OBJPROP_YDISTANCE, 25);
   ObjectCreate("Profit", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Profit", OBJPROP_CORNER, 1);
   ObjectSet("Profit", OBJPROP_XDISTANCE, 5);
   ObjectSet("Profit", OBJPROP_YDISTANCE, 35);
   ObjectCreate("Copyright", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Copyright", OBJPROP_CORNER, 3);
   ObjectSet("Copyright", OBJPROP_XDISTANCE, 5);
   ObjectSet("Copyright", OBJPROP_YDISTANCE, 5);
   ObjectSetText("Copyright","CloseProfit Copyright © 2011, http://cmillion.narod.ru\n",8,"Arial",Gold);
   if (AllSymbol) _txt = "Ïî âñåì èíñòðóìåíòàì ñ÷åòà";
   return(0);
}
//-------------------------------------------------------------------
int deinit()
{
   ObjectDelete("Balance");
   ObjectDelete("Equity");
   ObjectDelete("Profit");
   ObjectDelete("Copyright");
   return(0);
}
//-------------------------------------------------------------------
int start()
{
   if(OrdersTotal()==0)
   {
      script();
   }
   
   double Profit;
   int b,s,OT;
   for (int i=OrdersTotal()-1; i>=0; i--)
   {                                               
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() || AllSymbol)
         {
            OT = OrderType();
            if (OT==OP_BUY)
            {
               b++;
               Profit+=OrderProfit();
            }
            if (OT==OP_SELL)
            {
               s++;
               Profit+=OrderProfit();
            }
         }
      }
   }
   Comment(_txt,"\nBuy ",b,"\nSell ",s);
   //--- 
   if (Profit>=ProfitClose) 
   {
      Alert("Äîñòèãíóò óðîâåíü ïðîôèòà = "+DoubleToStr(Profit,2));
      CloseAll();
   }
   if (Profit<=-LossClose)
   {
      Alert("Äîñòèãíóò óðîâåíü ìàêñèìàëüíîãî óáûòêà "+DoubleToStr(Profit,2));
      CloseAll();
   }
   ObjectSetText("Balance",StringConcatenate("Balance ",DoubleToStr(AccountBalance(),2)),12,"Arial",Gold);
   ObjectSetText("Equity",StringConcatenate("Equity ",DoubleToStr(AccountEquity(),2)),12,"Arial",Gold);
   if (AllSymbol) ObjectSetText("Profit",StringConcatenate("Profit All Symbol ",DoubleToStr(Profit,2)),12,"Arial",Color(Profit));
   else ObjectSetText("Profit",StringConcatenate("Profit ",DoubleToStr(Profit,2)),12,"Arial",Color(Profit));
return;
}
//------------------------------------------------------------------
color Color(double P)
{
   if (P>0) return(Gold);
   if (P<0) return(Red);
   if (P==0) return(Green);
}
//------------------------------------------------------------------
bool CloseAll()
{
   bool error=true;
   int err,nn,OT;
   string Symb;
   while(true)
   {
      for (int j = OrdersTotal()-1; j >= 0; j--)
      {
         if (OrderSelect(j, SELECT_BY_POS))
         {
            Symb = OrderSymbol();
            if (Symb == Symbol() || AllSymbol)
            {
               OT = OrderType();
               if (OT>1) 
               {
                  OrderDelete(OrderTicket());
               }
               if (OT==OP_BUY) 
               {
                  error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(Symb,MODE_BID),MarketInfo(Symb,MODE_DIGITS)),3,Blue);
                  if (error) Alert(Symb,"  Çàêðûò îðäåð N ",OrderTicket(),"  ïðèáûëü ",OrderProfit(),
                                     "     ",TimeToStr(TimeCurrent(),TIME_SECONDS));
               }
               if (OT==OP_SELL) 
               {
                  error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(Symb,MODE_ASK),MarketInfo(Symb,MODE_DIGITS)),3,Red);
                  if (error) Alert(Symb,"  Çàêðûò îðäåð N ",OrderTicket(),"  ïðèáûëü ",OrderProfit(),
                                     "     ",TimeToStr(TimeCurrent(),TIME_SECONDS));
               }
               if (!error) 
               {
                  err = GetLastError();
                  if (err<2) continue;
                  if (err==129) 
                  {  Comment("Íåïðàâèëüíàÿ öåíà ",TimeToStr(TimeCurrent(),TIME_MINUTES));
                     Sleep(5000);
                     RefreshRates();
                     continue;
                  }
                  if (err==146) 
                  {
                     if (IsTradeContextBusy()) Sleep(2000);
                     continue;
                  }
                  Comment("Îøèáêà ",err," çàêðûòèÿ îðäåðà N ",OrderTicket(),
                          "     ",TimeToStr(TimeCurrent(),TIME_MINUTES));
               }
            }
         }
      }
      int n=0;
      for (j = 0; j < OrdersTotal(); j++)
      {
         if (OrderSelect(j, SELECT_BY_POS))
         {
            if (OrderSymbol() == Symbol() || AllSymbol)
            {
               OT = OrderType();
               if (OT==OP_BUY || OT==OP_SELL) n++;
            }
         }  
      }
      if (n==0) break;
      nn++;
      if (nn>10) {Alert(Symb,"  Íå óäàëîñü çàêðûòü âñå ñäåëêè, îñòàëîñü åùå ",n);return(0);}
      Sleep(1000);
      RefreshRates();
   }
   return(1);
}
//--------------------------------------------------------------------

int script()
{
//===========================================================================================================================================   
//===========================================================================================================================================   
//===========================================================================================================================================   
/*============================================*/if (IsTesting() && OrdersTotal()>0) return;/*===============================================*/
//===========================================================================================================================================   
//===========================================================================================================================================   
//===========================================================================================================================================   
   if (Expiration>0) expiration=TimeCurrent()+Expiration*60; else expiration=0;
   Comment("Çàïóñê ñêðèïòà OpenStopOrderNetTime ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
   STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
   if (Digits==3 || Digits==5) slippage=30;
   while (TimeCurrent()<TimeSet)
   {
      Sleep(1000);
      Comment("Ñêðèïò âûñòàâëåíèÿ ñåòêè îòëîæåííûõ îðäåðîâ Copyright © 2011 cmillion@narod.ru\n",
      TimeToStr(TimeCurrent(),TIME_SECONDS)," Äî âûñòàâëåíèÿ ñåòêè îñòàëîñü ",TimeToStr(TimeSet-TimeCurrent(),TIME_SECONDS));
      RefreshRates();
   }
   double PriceBS,PriceBL,PriceSS,PriceSL;
   double LOTs=LotStop;
   double LOTl=LotLimit;
   if (FirstBuyStop==0) PriceBS = NormalizeDouble(Ask+FirstStop*Point,Digits);
   else PriceBS = NormalizeDouble(FirstBuyStop,Digits);
   if ((PriceBS-Ask)/Point<STOPLEVEL) {Alert("Ïåðâûé îðäåð BuyStop íå ìîæåò áûòü óñòàíîâëåí áëèæå ÷åì ",STOPLEVEL," ï");return;}
   
   if (FirstSellStop==0) PriceSS = NormalizeDouble(Bid-FirstStop*Point,Digits);
   else PriceSS = NormalizeDouble(FirstSellStop,Digits);
   if ((Bid-PriceSS)/Point<STOPLEVEL) {Alert("Ïåðâûé îðäåð SellStop íå ìîæåò áûòü óñòàíîâëåí áëèæå ÷åì ",STOPLEVEL," ï");return;}
   
   if (FirstBuyLimit==0) PriceBL = NormalizeDouble(Bid-FirstLimit*Point,Digits);
   else PriceBL = NormalizeDouble(FirstBuyLimit,Digits);
   if ((Bid-PriceBL)/Point<STOPLEVEL) {Alert("Ïåðâûé îðäåð BuyLimit íå ìîæåò áûòü óñòàíîâëåí áëèæå ÷åì ",STOPLEVEL," ï");return;}
   
   if (FirstSellLimit==0) PriceSL = NormalizeDouble(Ask+FirstLimit*Point,Digits);
   else PriceSL = NormalizeDouble(FirstSellLimit,Digits);
   if ((PriceSL-Ask)/Point<STOPLEVEL) {Alert("Ïåðâûé îðäåð SellLimit íå ìîæåò áûòü óñòàíîâëåí áëèæå ÷åì ",STOPLEVEL," ï");return;}
   
   for (int i=1; i<=Orders; i++)
   {
      if (Stop)
      {
         if (BUY)
         {
            OPENORDER (OP_BUYSTOP,PriceBS,LOTs,i);
            PriceBS = NormalizeDouble(PriceBS+StepStop*Point,Digits);
         }
         if (SELL)
         {  
            OPENORDER (OP_SELLSTOP,PriceSS,LOTs,i);
            PriceSS = NormalizeDouble(PriceSS-StepStop*Point,Digits);
         }
      }
      LOTs=LOTs*K_LotStop;
      if (Limit)
      {
         if (BUY)
         {
            OPENORDER (OP_BUYLIMIT,PriceBL,LOTl,i);
            PriceBL = NormalizeDouble(PriceBL-StepLimit*Point,Digits);
         }
         if (SELL)
         {  
            OPENORDER (OP_SELLLIMIT,PriceSL,LOTl,i);
            PriceSL = NormalizeDouble(PriceSL+StepLimit*Point,Digits);
         }
      }
      LOTl=LOTl*K_LotLimit;
   }
   Comment("Ñêðèïò çàêîí÷èë ñâîþ ðàáîòó, âûñòàâëåíî ",n," îðäåðîâ  ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
return(0);
}
//--------------------------------------------------------------------
void OPENORDER(int ord,double Price,double LOT,int i)
{
   int error,err;
   double SL,TP;
   while (true)
   {  error=true;
      if (ord==OP_BUYSTOP) 
      {
         if (takeprofit!=0) TP  = NormalizeDouble(Price + takeprofit*Point,Digits); else TP=0;
         if (stoploss!=0)   SL  = NormalizeDouble(Price - stoploss*Point,Digits); else SL=0;     
         error=OrderSend(Symbol(),ord, LOT,Price,slippage,SL,TP,"setka_eurusd",Magic,expiration,Blue);
      }
      if (ord==OP_SELLSTOP) 
      {
         if (takeprofit!=0) TP = NormalizeDouble(Price - takeprofit*Point,Digits); else TP=0;
         if (stoploss!=0)   SL = NormalizeDouble(Price + stoploss*Point,Digits);  else SL=0;              
         error=OrderSend(Symbol(),ord,LOT,Price,slippage,SL,TP,"setka_eurusd",Magic,expiration,Red);
      }
      if (ord==OP_SELLLIMIT) 
      {
         if (takeprofit!=0) TP = NormalizeDouble(Price - takeprofit*Point,Digits); else TP=0;
         if (stoploss!=0)   SL = NormalizeDouble(Price + stoploss*Point,Digits);  else SL=0;              
         error=OrderSend(Symbol(),ord, LOT,Price,slippage,SL,TP,"setka_eurusd",Magic,expiration,Blue);
      }
      if (ord==OP_BUYLIMIT) 
      {
         if (takeprofit!=0) TP  = NormalizeDouble(Price + takeprofit*Point,Digits); else TP=0;
         if (stoploss!=0)   SL  = NormalizeDouble(Price - stoploss*Point,Digits); else SL=0;     
         error=OrderSend(Symbol(),ord,LOT,Price,slippage,SL,TP,"setka_eurusd",Magic,expiration,Red);
      }
      if (error==-1)
      {  
         txt=StringConcatenate(txt,"\nError ",GetLastError());
         if (ord==OP_BUYSTOP)   txt = StringConcatenate(txt,"  OPENORDER BUYSTOP ",  i,"   Ask =",DoubleToStr(Ask,Digits),"   Price =",DoubleToStr(Price,Digits)," (",NormalizeDouble((Price-Ask)/Point,0),")  SL =",DoubleToStr(SL,Digits)," (",NormalizeDouble((Price-SL)/Point,0),")  TP=",DoubleToStr(TP,Digits)," (",NormalizeDouble((TP-Price)/Point,0),")  STOPLEVEL=",STOPLEVEL);
         if (ord==OP_SELLSTOP)  txt = StringConcatenate(txt,"  OPENORDER SELLSTOP ", i,"   Bid =",DoubleToStr(Bid,Digits),"   Price =",DoubleToStr(Price,Digits)," (",NormalizeDouble((Bid-Price)/Point,0),")  SL =",DoubleToStr(SL,Digits)," (",NormalizeDouble((SL-Price)/Point,0),")  TP=",DoubleToStr(TP,Digits)," (",NormalizeDouble((Price-TP)/Point,0),")  STOPLEVEL=",STOPLEVEL);
         if (ord==OP_SELLLIMIT) txt = StringConcatenate(txt,"  OPENORDER SELLLIMIT ",i,"   Ask =",DoubleToStr(Ask,Digits),"   Price =",DoubleToStr(Price,Digits)," (",NormalizeDouble((Price-Ask)/Point,0),")  SL =",DoubleToStr(SL,Digits)," (",NormalizeDouble((Price-SL)/Point,0),")  TP=",DoubleToStr(TP,Digits)," (",NormalizeDouble((TP-Price)/Point,0),")  STOPLEVEL=",STOPLEVEL);
         if (ord==OP_BUYLIMIT)  txt = StringConcatenate(txt,"  OPENORDER BUYLIMIT ", i,"   Bid =",DoubleToStr(Bid,Digits),"   Price =",DoubleToStr(Price,Digits)," (",NormalizeDouble((Bid-Price)/Point,0),")  SL =",DoubleToStr(SL,Digits)," (",NormalizeDouble((SL-Price)/Point,0),")  TP=",DoubleToStr(TP,Digits)," (",NormalizeDouble((Price-TP)/Point,0),")  STOPLEVEL=",STOPLEVEL);
         //Print(txt);
         //Comment(txt,"  ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
         err++;Sleep(1000);RefreshRates();
      }
      else 
      {
         Comment("Îðäåð ",error," óñïåøíî âûñòàâëåí ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
         n++;
         return;
      }
      if (err>attempts) return;
   }
return;
}                  
//--------------------------------------------------------------------


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