Author: Sergey
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It can change open orders parameters, due to possible stepping strategyIt automatically opens orders when conditions are reached
0 Views
0 Downloads
0 Favorites
SuperAgent
//+------------------------------------------------------------------+
//|                                                   SuperAgent.mq4 |
//|                                                           Sergey |
//|                                                mserega@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Sergey"
#property link      "mserega@yandex.ru"
//+------------------------------------------------------------------+
//ñòàâèòü íà GBP/USD 15 ìèí

extern int       StopLos= 80;  //ñòîï ëîññ   (åñëè ïàðàìåòð áîëüøå 9)
extern int       TeikPro=  0;  //òåéê ïðîôèò (åñëè ïàðàìåòð áîëüøå 4)

extern int         SlMin= 52;  //ìèí ñòîï ëîññ ïðè ïåðåâîäå â áó (åñëè ïàðàìåòð áîëüøå 9)
extern int         PriBy=  4;  //ïðèáûëü       ïðè ïåðåâîäå â áó 

extern int         SiPer=211;  //ïåðèîä èíäèêàòîðà Silver trend
extern int        SiProc= 33;  //ïðîöåíò îòêëîíåíèÿ îò âåðõà è íèçà
extern int         SiDal=  3;  //ìàêñèìàëüíàÿ óäàëåííîñòü ñòðåëêè îò áàðà 1 ïðè îòêðûòèè

//ëîòû îòêðûòûõ ïîçèöèé
double lb, ls;

//ïåðåìåííûå silver trend
int si_trend, si_bar;

//ñèãíàëû óïðàâëåíèÿ îðäåðàìè
int zakr_buy, zakr_sel, otkr_buy, otkr_sel;

//âðåìÿ îòêðûòèÿ áàðà 1 íà òåêóùåì è ïðåäûäóùåì òèêå
datetime vrem1_cur, vrem1_prev;

//öâåò ñòðåëêè ïðè îòêðûòèè îðäåðà
color cvet_otkr=CLR_NONE;

//ñèãíàëüíàÿ ñòðîêà êîììåíòàðèÿ
string sigstr, trstr;

//ïîÿâèëñÿ ëè íîâûé áàð
bool new_bar;

//================================================================
int init() 
{
   new_bar=true;
   sigstr="ÑÈÃÍÀËÎÂ ÍÅ ÁÛËÎ";
   return(0);
}
//================================================================
int deinit() 
{
   return(0);
}
//================================================================
//+--------------------------------------------------------------+
int start()
{      
   vrem1_cur=Time[1];
   
   if(vrem1_cur!=vrem1_prev) {new_bar=true;}
   
   if(new_bar)
   {   
      //îáíóëÿåì ñèãíàëû
      zakr_buy=0; zakr_sel=0; otkr_buy=0; otkr_sel=0; cvet_otkr=CLR_NONE; trstr="";
            
      //îïðåäåëåíèå íàïðàâëåíèÿ ïîñëåäíåé ñòðåëêè Silver trend è áàðà íà êîòîðîì îíà áûëà
      opr_strel(si_trend, si_bar);         
          
      //ÑÈÃÍÀË Ê ÎÒÊÐÛÒÈÞ
      //-------------------------------------------------------
      if((si_trend== 1)&&(si_bar<=SiDal))
      {
         otkr_buy=1;
         cvet_otkr=Green;
         sigstr="ÑÒÐÅËÊÀ ÂÂÅÐÕ ÍÀ ÈÍÄÈÊÀÒÎÐÅ SILVER TREND";
      }
      //-------------------------------------------------------
      if((si_trend==-1)&&(si_bar<=SiDal))
      {
         otkr_sel=1;
         cvet_otkr=Green;
         sigstr="ÑÒÐÅËÊÀ ÂÍÈÇ ÍÀ ÈÍÄÈÊÀÒÎÐÅ SILVER TREND";
      }
      //-------------------------------------------------------
           
      //åñëè åñòü ïîçèöèÿ ïðîòèâ òðåíäà, çàêðûâàåì åå
      if(si_trend== 1) {zakr_sel=2;}
      if(si_trend==-1) {zakr_buy=2;}
      
      //åñëè îòêðûâàåì ïîçèöèþ, òî çàêðûâàåì ïðîòèâîïîëîæíóþ
      if(otkr_buy==1) {zakr_sel=2;}
      if(otkr_sel==1) {zakr_buy=2;}
      
      //åñëè çàêðûâàåì ïîçèöèþ, òî åå íåëüçÿ òóò æå îòêðûòü
      if(zakr_buy==2) {otkr_buy=0;}
      if(zakr_sel==2) {otkr_sel=0;}
           
      //òåïåðü ýòî íå íîâûé áàð, ðàñ÷åòû äåëàåì îäèí ðàç äëÿ êàæäîé íîâîé ñâå÷è
      new_bar=false;                             
   }                              
   
   //ïîäñ÷èòûâàåì îòêðûòûå ïîçèöèè
   podschet_orderov(lb,ls);
   
   //ïðîâåðÿåì, ÷òî ó íàñ ïîëó÷èëîñü
   if(si_trend>0) {trstr="BULL";}
   if(si_trend<0) {trstr="BEAR";}
   
   Comment("\nSI_TREND =  ",trstr,"     SI_BAR = ",si_bar,
   "\n\nLOT_BUY = ",lb,
   "\n\nLOT_SEL = ",ls,
   "\n\nSIGNAL  = ",sigstr); 
        
   //çàêðûâàåì è ìîäèôèöèðóåì èìåþùèåñÿ îðäåðà
   perebor_orderov();
   
   //çàíîâî ïîäñ÷èòûâàåì îòêðûòûå ïîçèöèè
   podschet_orderov(lb,ls);
   lb=NormalizeDouble(lb,2);
   ls=NormalizeDouble(ls,2);
      
   //ñòàâèì íîâûé îðäåð åñëè íóæíî
   ystanovka_ordera(lb,ls);
   
   //çàïîìèíàåì òåêóùåå âðåìÿ îòêðûòèÿ áàðà 1
   vrem1_prev=vrem1_cur;
  
   return(0);
}
//+--------------------------------------------------------------+
//================================================================
//ïîäñ÷åò ëîòîâ áàåâ è ñåëîâ íàøåé âàëþòû
void podschet_orderov(double &ob,double &os)
{
   int i=0,kol=0;
   
   //â íà÷àëå îáíóëÿåì ëîòû
   ob=0; os=0;
   
   kol=OrdersTotal();
   
   if(kol>0)
   {
      for(i=0;i<kol;i++) 
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
            if(OrderSymbol()==Symbol())
            {
               if(OrderType()==OP_BUY)   
               {
                  ob=ob+OrderLots();
                  continue;
               }
            
               if(OrderType()==OP_SELL)  
               {
                  os=os+OrderLots();
                  continue;
               }                      
            }
         }      
      }
   }
   
   return;
}
//================================================================
//îïðåäåëåíèå çàêðûòèÿ áàðà ââåðõó èëè âíèçó äèàïàçîíà Silver Trend
int silv_cl(int b)
{
   int i;
   double pik, dno, lev_up, lev_dn, otkl, cur;
   
   //íàõîäèì âåðõ è íèç äèàïàçîíà
   pik=High[b];
   dno=Low[b];
   
   for(i=b;i<b+SiPer;i++)
   {
      cur=High[i];
      if(cur>pik) {pik=cur;}
      
      cur=Low[i];
      if(cur<dno) {dno=cur;} 
   }

   //îòêëîíåíèå âíóòðü äèàïàçîíà íà çàäàííûé ïðîöåíò
   otkl=((pik-dno)*SiProc)/100;
   
   //êðèòè÷åñêèå óðîâíè
   lev_up=NormalizeDouble((pik-otkl),Digits);
   lev_dn=NormalizeDouble((dno+otkl),Digits);
   
   //öåíà ðàñòåò è çàêðûëàñü âûøå óðîâíÿ
   if((Close[b]>Open[b])&&(Close[b]>lev_up)) {return( 1);}
   
   //öåíà ïàäàåò è çàêðûëàñü íèæå óðîâíÿ
   if((Close[b]<Open[b])&&(Close[b]<lev_dn)) {return(-1);}
   
   return(0);
}
//================================================================
//îïðåäåëåíèå íàïðàâëåíèÿ ñòðåëêè è áàðà íà êîòîðîì îíà áûëà
void opr_strel(int &s_trend, int &s_bar)
{
   int i, bv, bn, cur_zakr;
   
   //îáíóëÿåì îòâåòû
   s_trend=0; s_bar=0; bv=0; bn=0;
   
   //èùåì äâå òî÷êè ñëåâà îò áàðà 1 (òàì, ãäå öåíà çàêðûëàñü ââåðõó è âíèçó äèàïàçîíà)
   for(i=1;i<Bars;i++)
   {
      cur_zakr=silv_cl(i);
      
      if((cur_zakr>0)&&(i>bv)) {bv=i;}
      
      if((cur_zakr<0)&&(i>bn)) {bn=i;}      

      //íàéäåíû îáå òî÷êè - ñòîï
      if((bv>0)&&(bn>0)) {break;}      
   }
   
   //òðåíä ñíà÷àëà áûë âíèç, à ïîòîì ðàçâåðíóëñÿ ââåðõ
   if(bn>bv) {s_trend= 1; s_bar=bv;}
   
   //òðåíä ñíà÷àëà áûë ââåðõ, à ïîòîì ðàçâåðíóëñÿ âíèç
   if(bv>bn) {s_trend=-1; s_bar=bn;}   
   
   return;   
}
//================================================================
//äåéñòâèÿ ñ îðäåðîì OP_BUY
void obr_open_buy()
{       
   //çàêðûòèå åñëè êðèòè÷åñêèé ñèãíàë
   if(zakr_buy==2)
   {
      OrderClose(OrderTicket(),OrderLots(),Bid,3,Purple); 
      return;
   }
   
   //ïåðåâîä ïîçèöèè â áåçóáûòîê      
   if(SlMin>9)
   {
      if((OrderStopLoss()<OrderOpenPrice())||(OrderStopLoss()==0))
      {
         if(Bid>(OrderOpenPrice()+SlMin*Point+PriBy*Point))
         {
            OrderModify(OrderTicket(),OrderOpenPrice(),(OrderOpenPrice()+PriBy*Point),OrderTakeProfit(),0,Aqua);
            return;
         }
      }
   }            
    
   return;
}
//================================================================
//äåéñòâèÿ ñ îðäåðîì OP_SELL
void obr_open_sell()
{          
   //çàêðûòèå åñëè êðèòè÷åñêèé ñèãíàë
   if(zakr_sel==2)
   {
      OrderClose(OrderTicket(),OrderLots(),Ask,3,Purple); 
      return;
   }
   
   //ïåðåâîä ïîçèöèè â áåçóáûòîê
   if(SlMin>9)
   {
      if((OrderStopLoss()==0)||(OrderStopLoss()>OrderOpenPrice()))
      {
         if(Ask<(OrderOpenPrice()-SlMin*Point-PriBy*Point))
         {
            OrderModify(OrderTicket(),OrderOpenPrice(),(OrderOpenPrice()-PriBy*Point),OrderTakeProfit(),0,Aqua);
            return;
         }
      }
   }           
                     
   return;
}
//================================================================
//Çàêðûòèå è ìîäèôèêàöèÿ îðäåðîâ íàøåé âàëþòû
void perebor_orderov()
{
   int type=0,kol=0,i=0;
   
   kol=OrdersTotal();
   
   if(kol>0)
   {
      for(i=(kol-1);i>=0;i--)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
            if(OrderSymbol()==Symbol())
            {
               type=OrderType();
            
               if(type==OP_BUY)        
               {
                  obr_open_buy();
                  continue;
               }
            
            
               if(type==OP_SELL)        
               {
                  obr_open_sell();
                  continue;
               }             
            }
         }
      }
   }
      
   return;
}
//================================================================
//óñòàíîâêà íîâîãî îðäåðà
void ystanovka_ordera(double b, double s)
{
   int i;
   double sl, tp;
   sl=0; tp=0;
   
   if(otkr_buy>0)
   {
      if(b<0.01)
      {
         if(StopLos>9) {sl=Bid-StopLos*Point;}
         
         if(TeikPro>4) {tp=Ask+TeikPro*Point;}
         
         OrderSend(Symbol(),OP_BUY,0.01,Ask,3,sl,tp,"",0,0,cvet_otkr);
      }
   }
   
   //-------------------------------------------------------------
   
   if(otkr_sel>0)
   { 
      if(s<0.01)
      {
         if(StopLos>9) {sl=Ask+StopLos*Point;}     
         
         if(TeikPro>4) {tp=Bid-TeikPro*Point;}      
         
         OrderSend(Symbol(),OP_SELL,0.01,Bid,3,sl,tp,"",0,0,cvet_otkr);
      }
   }
   
   return;
}
//================================================================
//THE END :))

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