Exp - Templates #1 light

Author: Copyright © 2012, templates from expforex
Profit factor:
0.00
Orders Execution
Checks for the total of open ordersIt can change open orders parameters, due to possible stepping strategyIt automatically opens orders when conditions are reachedIt Closes Orders by itself
1 Views
0 Downloads
0 Favorites
Exp - Templates #1 light
ÿþ//+------------------------------------------------------------------+

//|                                      Exp - Templates #1LIGHT.mq4 |

//|                                       Copyright © 2010, expforex |

//|                                        http://www.expforex.com |

//+------------------------------------------------------------------+

#property copyright "Copyright © 2012, templates from expforex"

#property link      "http://www.expforex.com"

/* B45;L=0O 1;03>40@=>ABL <>5<C B09=><C CG8B5;N : KimIV 2 A0<>AB>OB5;L=>8 >1CG5=88 O7K:C ?@>3@0<<8@>20=8O  */





// ==========================================================================================================================================================================================================

// 

// 

//                                (                + 

// 

// 

// ==========================================================================================================================================================================================================



extern string Indicator_=" 0AB@>9:8 8=48:0B>@0";

extern bool FirstBUY=true; // true- >B:@K20BL ?5@2CN A45;:C 109, 5A;8 false  - >B:@K20BL ?5@2CN A45;:C sell 



extern int Magic=777;                     // 038G5A:89 =><5@

extern int StopLoss=0;                    // !B>?;>AA, 0 - =5 8A?>;L7C5BAO

extern int TakeProfit=0;                  // "59:?@>D8B , 0 - =5 8A?>;L7C5BAO

extern int Slippage=0;                    // @>A:0;L7K20=85

extern bool MarketWatch=false;            //  568< B>@3>2;8 ?> MarketWatch true  = A=0G0;0 2KAB02;ONBAO ?>78F88/>@45@0 157 AB>?>2, ?>B>< ?@>8AE>48B <>48D8:0F8O - 4;O =5:>B>@KE 1@>:5@>2

extern int StopOrderDeltaifUSE=0;         // 8AB0=F8O 4;O >B;>65==KE >@45@>2

extern bool ClosePosifChange=true;        // 0:@K20BL ?>78F88 ?@8 >1@0B=>< A83=0;5

extern double Lots=0.1;                   // $8:A8@2>0==K9 ;>B 

extern string Trailing_="0AB@>9:8 B@59;8=3AB>?0";

extern bool TrailingStopUSE=false;        // A?>;L7>20BL B@59;8=3AB>? 

 bool IfProfTrail=false;            // A?>;L7>20BL B>;L:> 4O; ?@>D8B=KE ?>78F89 - @568< 157C1KB:0

 int TrailingStop=0;                // 8AB0=F8O B@59;8=30 = 0 - <8=8<0;L=> 4>?CAB8<K9

 int TrailingStep=1;                // (03 48AB0=F88







int timeCheckSignal; // @5<O >B:@KB8O ?>78F88

double sl,tp; // ;O 2KG8A;5=8O AB>?>2 

bool ONlyOnePosbySignal=true;      // 3@0BL B>;L:> 8;8 109 8 / 8;8 A5;; 1 ?>78F859



//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

 bool CorectStopLevelwServers=false; // >@@5:B8@>2:0 7=0G5=89 AB>?>2 StopLoss TakeProfit StopOrderDeltaifUSE TrailingStop =0 <8=8<0;L=> 2>7<>6=K9 C@>25=L, ?@8 MB>< ?0@0<5B@K A;54C5B CAB0=>28BL =0 -1





// ==========================================================================================================================================================================================================

// 

// 

//                             $ #   &  /      S T A R T ( )   

// 

// 

// ==========================================================================================================================================================================================================



int start()

  {

   int Signal; // !83=0; : >B:@KB8N

//+------------------------------------------------------------------+

// >@@5:F8O AB>? C@>2=59 7040==KE ?>;L7>20B5;5<, =0 <8=8<0;L=> 2>7<>6=K5 C@>2=8 CAB0=>2;5==K5 A5@25@><.:  

//+------------------------------------------------------------------+

   if(CorectStopLevelwServers)

     {

      if(StopOrderDeltaifUSE!=0 && StopOrderDeltaifUSE<MarketInfo(Symbol(),MODE_STOPLEVEL))StopOrderDeltaifUSE=MarketInfo(Symbol(),MODE_STOPLEVEL);

      if(StopLoss!=0 && StopLoss<MarketInfo(Symbol(),MODE_STOPLEVEL))StopLoss=MarketInfo(Symbol(),MODE_STOPLEVEL);

      if(TakeProfit!=0 && TakeProfit<MarketInfo(Symbol(),MODE_STOPLEVEL))TakeProfit=MarketInfo(Symbol(),MODE_STOPLEVEL);

     }



// ==========================================================================================================================================================================================================

// 

// 

//                             !" " ---      +           !    ,       /    (        

// 

// 

// ==========================================================================================================================================================================================================





//+------------------------------------------------------------------+

// @8<5@: (-B> ;8HL ?>:070B5;L=K9 ?@8<5@ 8A?>;L7>20=8O ?>;L7>20B5;LA:>3> 8=48:0B>@0)  

//+------------------------------------------------------------------+



// ;O MB>3> '"+  MB8 ?0@0<5B@K 1K;8 4>ABC?=K 4;O >?B8<870F88, 8E A;54C5B 2K25AB8 2 1;>: extern string Indicator_=" 0AB@>9:8 8=48:0B>@0";

// (?@8<5@ ?>:070= 2 2=5H=8E ?5@5<5==KE)

   int FastEMA=12;

   int SlowEMA=26;

   int SignalSMA=9;



   double ind1=iCustom(NULL, 0, "MACD",FastEMA,SlowEMA,SignalSMA,0,0);

   double ind2=iCustom(NULL, 0, "MACD",FastEMA,SlowEMA,SignalSMA,0,1);





   if(/* 45AL C:07K205< CA;>285 4;O 8=48:0B>@0, ?@8 :>B>@>< <K 1C45< ?>:C?0BL*/     ind1>0 && ind2>0  )Signal=1;

   if(/* 45AL C:07K205< CA;>285 4;O 8=48:0B>@0, ?@8 :>B>@>< <K 1C45< ?@>4020BL*/    ind1<0 && ind2<0  )Signal=2;







// ==========================================================================================================================================================================================================

// 

// 

//                             $( ---      +           !    ,       /    (      

// 

// 

// ==========================================================================================================================================================================================================









// ==========================================================================================================================================================================================================

// 

// 

//                                   !      (    /          &   

// 

// 

// ==========================================================================================================================================================================================================







//+------------------------------------------------------------------+

// A;8 2@5<O B>@3>2;8 =5 8AB5:;> 8 <K =5 >B:@K20;8 ?>78F8N =0 MB>< 10@5: 

//+------------------------------------------------------------------+



   if( timeCheckSignal!=Time[0])



     {

      //+------------------------------------------------------------------+

      // A;8 A83=0; =0 109:

      //+------------------------------------------------------------------+

      if(Signal==1)// buy

        {

        

            //KG8A;O5< AB>?;>AA

            if(StopLoss!=0)sl=Bid-StopLoss*Point; else sl=0;

            // +G8A;O5< B59:?@>D8B

            if(TakeProfit!=0)tp=Ask+TakeProfit*Point; else tp=0;

            //+------------------------------------------------------------------+

            //0:@K205< ?@>B82>?>;>6=CN ?>78F8N

            //+------------------------------------------------------------------+

            if(ClosePosifChange)CPD(Symbol(),OP_SELL,Magic);

            //+------------------------------------------------------------------+

            //B:@K205< ?>78F8N

            //+------------------------------------------------------------------+

            if ((ONlyOnePosbySignal&&!EPs(Symbol(),OP_BUY,Magic)) || !ONlyOnePosbySignal){OPs(Symbol(),OP_BUY,GetSizeLot(),sl,tp,Magic,"Templates www.expforex.com");

                  timeCheckSignal=Time[0];

           }

        



        }



      //+------------------------------------------------------------------+

      // A;8 A83=0; =0 A5;;:

      //+------------------------------------------------------------------+

      if(Signal==2)// A5;;

        {

        

            //KG8A;O5< AB>?;>AA

            if(StopLoss!=0)sl=Ask+StopLoss*Point; else sl=0;

            // +G8A;O5< B59:?@>D8B

            if(TakeProfit!=0)tp=Bid-TakeProfit*Point; else tp=0;

            //0:@K205< ?@>B82>?>;>6=CN ?>78F8N

            if(ClosePosifChange)CPD(Symbol(),OP_BUY,Magic);

            //+------------------------------------------------------------------+

            //B:@K205< ?>78F8N

            //+------------------------------------------------------------------+

            if ((ONlyOnePosbySignal&&!EPs(Symbol(),OP_SELL,Magic)) || !ONlyOnePosbySignal){OPs(Symbol(),OP_SELL,GetSizeLot(),sl,tp,Magic,"Templates www.expforex.com");

                  timeCheckSignal=Time[0];

           }

        



        }



      //+------------------------------------------------------------------+

      //+------------------------------------------------------------------+



     }



   return(0);

  }

// ==========================================================================================================================================================================================================

// 

// 

//                             $ #   &      -  !     "   

// 

// 

// ==========================================================================================================================================================================================================



//+------------------------------------------------------------------+

//|                           #40;5=85 >B;>65==KE >@45@>2            |

//+------------------------------------------------------------------+

//+----------------------------------------------------------------------------+

//|  0@0<5B@K:                                                                |

//|    sy - =08<5=>20=85 8=AB@C<5=B0   ( ""  - ;N1>9 A8<2>;,                   |

//|                                     NULL - B5:CI89 A8<2>;)                 |

//|    op - >?5@0F8O                   ( -1  - ;N10O ?>78F8O)                  |

//|    mn - MagicNumber                ( -1  - ;N1>9 <038:)                    |

//+----------------------------------------------------------------------------+



bool DxO(string sy="",int op=-1,int mn=-1,datetime ot=0)

  {

   int i,k=OrdersTotal(),ty;

   string Autor=" 2B>@ DC=:F88 4;O H01;>=0 : KimiV";



   if(sy=="0") sy=Symbol();

   for(i=k-1;i>=0;i--)

     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

        {

         ty=OrderType();

         if(ty>1 && ty<6)

           {

            if((OrderSymbol()==sy || sy=="") && (op<0 || ty==op))

              {

               if(mn<0 || OrderMagicNumber()==mn)

                 {

                  if(ot<=OrderOpenTime()) {OrderDelete(OrderTicket(),0);}

                 }

              }

           }

        }

     }

   return(False);

  }

//+------------------------------------------------------------------+

//|                              >48D8:0F8O ?>78F89/>@45@>2         |

//+------------------------------------------------------------------+

//+----------------------------------------------------------------------------+

//|  0@0<5B@K:                                                                

//|    pp - &5=0 <>48D8:0F8O (4;O >B;>65==KE >@45@>2)  

//|                                                    

//|    sl - !B>?;>AA - 8;8 0                                     

//|    tp - "59:?@>D8B - 8;8 0               

//|    ex - 0B0 8AB5G5=8O >B;>65==>3> >@45@0 8;8 0

//+----------------------------------------------------------------------------+



void ModifyOrder(double pp=-1,double sl=0,double tp=0,datetime ex=0)

  {

   bool   fm;

   double op,pa,pb,os,ot;

   int    dg=MarketInfo(OrderSymbol(),MODE_DIGITS),er,it;

   string Autor=" 2B>@ DC=:F88 4;O H01;>=0 : KimiV";



   if(pp<=0) pp=OrderOpenPrice();

   if(sl<0 ) sl=OrderStopLoss();

   if(tp<0 ) tp=OrderTakeProfit();



   pp=NormalizeDouble(pp, dg);

   sl=NormalizeDouble(sl, dg);

   tp=NormalizeDouble(tp, dg);

   op=NormalizeDouble(OrderOpenPrice() , dg);

   os=NormalizeDouble(OrderStopLoss()  , dg);

   ot=NormalizeDouble(OrderTakeProfit(), dg);



   if(pp!=op || sl!=os || tp!=ot)

     {

      for(it=1; it<=5; it++)

        {

         if(!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;

         while(!IsTradeAllowed()) Sleep(5000);

         RefreshRates();

         fm=OrderModify(OrderTicket(),pp,sl,tp,ex);

         if(fm)

           {

            break;

              } else {

            er=GetLastError();

            pa=MarketInfo(OrderSymbol(), MODE_ASK);

            pb=MarketInfo(OrderSymbol(), MODE_BID);

            //Alert("Error(",er,") modifying order: ",ErrorDescription(er),", try ",it);

            //Alert("Ask=",pa,"  Bid=",pb,"  sy=",OrderSymbol(),

            //       "  op="+OrderType(),"  pp=",pp,"  sl=",sl,"  tp=",tp);

            Sleep(1000*10);

           }

        }

     }

  }

//+------------------------------------------------------------------+

//|                         0;8G85 >B;>65==KE >@45@>2               |

//+------------------------------------------------------------------+

//+----------------------------------------------------------------------------+

//|  0@0<5B@K:                                                                |

//|    sy - =08<5=>20=85 8=AB@C<5=B0   ( ""  - ;N1>9 A8<2>;,                   |

//|                                     NULL - B5:CI89 A8<2>;)                 |

//|    op - >?5@0F8O                   ( -1  - ;N10O ?>78F8O)                  |

//|    mn - MagicNumber                ( -1  - ;N1>9 <038:)                    |

//+----------------------------------------------------------------------------+



bool ExO(string sy="",int op=-1,int mn=-1,datetime ot=0)

  {

   int i,k=OrdersTotal(),ty;

   string Autor=" 2B>@ DC=:F88 4;O H01;>=0 : KimiV";



   if(sy=="0") sy=Symbol();

   for(i=0;i<k;i++)

     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

        {

         ty=OrderType();

         if(ty>1 && ty<6)

           {

            if((OrderSymbol()==sy || sy=="") && (op<0 || ty==op))

              {

               if(mn<0 || OrderMagicNumber()==mn)

                 {

                  if(ot<=OrderOpenTime()) return(True);

                 }

              }

           }

        }

     }

   return(False);

  }

//+------------------------------------------------------------------+

//|              #AB0=>2:0 >B;>65==>3> >@45@0                        |

//+------------------------------------------------------------------+

//+----------------------------------------------------------------------------+

//|  0@0<5B@K:                                                                |

//|    sy - =08<5=>20=85 8=AB@C<5=B0   (NULL 8;8 "" - B5:CI89 A8<2>;)          |

//|    op - >?5@0F8O                                                           |

//|    ll - ;>B                                                                |

//|    pp - F5=0                                                               |

//|    sl - C@>25=L AB>?                                                       |

//|    tp - C@>25=L B59:                                                       |

//|    mn - Magic Number                                                       |

//|    ex - !@>: 8AB5G5=8O                                                     |

//+----------------------------------------------------------------------------+

int SetOrder(string sy,int op,double ll,double pp,

             double sl=0,double tp=0,int mn=0,datetime ex=0,string lsComm="")

  {

   color    clOpen;

   datetime ot;

   double   pa,pb,mp;

   int      err,it,ticket,msl;

   string Autor=" 2B>@ DC=:F88 4;O H01;>=0 : KimiV";



   if(sy=="" || sy=="0") sy=Symbol();

   msl=MarketInfo(sy,MODE_STOPLEVEL);

   if(ex>0 && ex<TimeCurrent()) ex=0;

   for(it=1; it<=5; it++)

     {

      if(!IsTesting() && (!IsExpertEnabled() || IsStopped()))

        {

         Print("SetOrder(): AB0=>2:0 @01>BK DC=:F88");

         break;

        }

      while(!IsTradeAllowed()) Sleep(5000);

      RefreshRates();

      ot=TimeCurrent();

      if(!MarketWatch)ticket=OrderSend(sy,op,ll,NormalizeDouble(pp,MarketInfo(sy,MODE_DIGITS)),Slippage,NormalizeDouble(sl,MarketInfo(sy,MODE_DIGITS)),NormalizeDouble(tp,MarketInfo(sy,MODE_DIGITS)),lsComm,mn,ex,clOpen);

      if(MarketWatch)



        {

         ticket=OrderSend(sy,op,ll,NormalizeDouble(pp,MarketInfo(sy,MODE_DIGITS)),Slippage,0,0,lsComm,mn,ex,clOpen);

         if(SBT(ticket)) ModifyOrder(-1,sl,tp);

        }



      if(ticket>0)

        {



         return(ticket);

         break;

           } else {

         err=GetLastError();

         if(err==128 || err==142 || err==143)

           {

            Sleep(1000*66);



            continue;

           }

         mp=MarketInfo(sy, MODE_POINT);

         pa=MarketInfo(sy, MODE_ASK);

         pb=MarketInfo(sy, MODE_BID);

         if(pa==0 && pb==0) Comment("SetOrder(): @>25@LB5 2 >17>@5 @K=:0 =0;8G85 A8<2>;0 "+sy);

         // 5?@028;L=K5 AB>?K

         if(err==130)

           {

            switch(op)

              {

               case OP_BUYLIMIT:

                  if(pp>pa-msl*mp) pp=pa-msl*mp;

                  if(sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;

                  if(tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;

                  break;

               case OP_BUYSTOP:

                  if(pp<pa+(msl+1)*mp) pp=pa+(msl+1)*mp;

                  if(sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;

                  if(tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;

                  break;

               case OP_SELLLIMIT:

                  if(pp<pb+msl*mp) pp=pb+msl*mp;

                  if(sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;

                  if(tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;

                  break;

               case OP_SELLSTOP:

                  if(pp>pb-msl*mp) pp=pb-msl*mp;

                  if(sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;

                  if(tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;

                  break;

              }

            Print("SetOrder(): !:>@@5:B8@>20=K F5=>2K5 C@>2=8"+sy+"--op-"+op+"--ll-"+ll+"--pp-"+pp+"---"+Slippage+"--sl-"+sl+"--tp-"+tp+"---"+lsComm+"---"+mn+"---"+ex+"---"+clOpen);

           }

         // ;>:8@>2:0 @01>BK A>25B=8:0

         if(err==2 || err==64 || err==65 || err==133)

           {

            break;

           }

         // ;8B5;L=0O ?0C70

         if(err==4 || err==131 || err==132)

           {

            Sleep(1000*300); break;

           }

         // !;8H:>< G0ABK5 70?@>AK (8) 8;8 A;8H:>< <=>3> 70?@>A>2 (141)

         if(err==8 || err==141) Sleep(1000*100);

         if(err==139 || err==140 || err==148) break;

         // 6840=85 >A2>1>645=8O ?>4A8AB5<K B>@3>2;8

         if(err==146) while(IsTradeContextBusy()) Sleep(1000*11);

         // 1=C;5=85 40BK 8AB5G5=8O

         if(err==147)

           {

            ex=0; continue;

           }

         if(err!=135 && err!=138) Sleep(1000*7.7);

        }

     }

  }

//+------------------------------------------------------------------+

//|               >72@0I05B D;03 C40G=>3> 2K1>@0 ?>78F88 ?> B8:5BC  |

//+------------------------------------------------------------------+

//+----------------------------------------------------------------------------+

//|  0@0<5B@K:                                                                |

//|    ti - =08<5=>20=85 B8:5B0                                                |

//|    sy - =08<5=>20=85 8=AB@C<5=B0   ( ""  - ;N1>9 A8<2>;,                   |

//|                                     NULL - B5:CI89 A8<2>;)                 |

//|    op - >?5@0F8O                   ( -1  - ;N10O ?>78F8O)                  |

//|    mn - MagicNumber                ( -1  - ;N1>9 <038:)                    |

//+----------------------------------------------------------------------------+





bool SBT(int ti,string sy="",int op=-1,int mn=-1)

  {

   int i,k=OrdersTotal();

   string Autor=" 2B>@ DC=:F88 4;O H01;>=0 : KimiV";



   if(sy=="0") sy=Symbol();

   for(i=0;i<k;i++)

     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

        {

         if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))

           {

            if((mn<0 || OrderMagicNumber()==mn) && OrderTicket()==ti) return(True);

           }

        }

     }

   return(False);

  }

//+------------------------------------------------------------------+

//|               B:@KB85 ?>78F88 ?> @K=:C                          |

//+------------------------------------------------------------------+

//+----------------------------------------------------------------------------+

//|  0@0<5B@K:                                                                |

//|    sy - =08<5=>20=85 8=AB@C<5=B0   ("" 8;8 NULL - B5:CI89 A8<2>;)          |

//|    op - >?5@0F8O                                                           |

//|    ll - ;>B                                                                |

//|    sl - C@>25=L AB>?                                                       |

//|    tp - C@>25=L B59:                                                       |

//|    mn - MagicNumber                                                        |

//+----------------------------------------------------------------------------+

int OPs(string sy,int op,double ll,double sl=0,double tp=0,int mn=0,string coomment="")

  {

   color    clOpen;

   datetime ot;

   double   pp,pa,pb;

   int      dg,err,it,ticket=0;

   string   lsComm="";

   if(sy=="" || sy=="0") sy=Symbol();

   if(op==OP_BUY) clOpen=Green; else clOpen=Red;

   string Autor=" 2B>@ DC=:F88 4;O H01;>=0 : KimiV";



   for(it=1;it<=5;it++)

     {

      if(!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;

      while(!IsTradeAllowed()) Sleep(5000);

      RefreshRates();

      dg=MarketInfo(sy, MODE_DIGITS);

      pa=MarketInfo(sy, MODE_ASK);

      pb=MarketInfo(sy, MODE_BID);

      if(op==OP_BUY) pp=pa; else pp=pb;

      pp=NormalizeDouble(pp, dg);

      ot=TimeCurrent();

      if(!MarketWatch) ticket=OrderSend(sy,op,ll,pp,1,sl,tp,lsComm,mn,0,clOpen);

      if(MarketWatch)



        {

         ticket=OrderSend(sy,op,ll,pp,1,0,0,lsComm,mn,0,clOpen);

         if(SBT(ticket)) ModifyOrder(-1,sl,tp);

        }



      if(ticket>0)

        {

         break;

           } else {

         err=GetLastError();

         if(err==128 || err==142 || err==143)

           {

            Sleep(1000*66.666);

           }

         // K2>4 A>>1I5=8O >1 >H81:5

         Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);

         Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",op,

               " pp=",pp," sl=",sl," tp=",tp," mn=",mn);

         if(pa==0 && pb==0) Print("@>25@LB5 2 17>@5 @K=:0 =0;8G85 A8<2>;0 "+sy);

         // ;>:8@>2:0 @01>BK A>25B=8:0

         if(err==2 || err==64 || err==65 || err==133)

           {

            break;

           }

         // ;8B5;L=0O ?0C70

         if(err==4 || err==131 || err==132)

           {

            Sleep(1000*300); break;

           }

         if(err==140 || err==148 || err==4110 || err==4111) break;

         if(err==141) Sleep(1000*100);

         if(err==145) Sleep(1000*17);

         if(err==146) while(IsTradeContextBusy()) Sleep(1000*11);

         if(err!=135) Sleep(1000*7.7);

        }

     }

   return(ticket);

  }

//+------------------------------------------------------------------+

//|                0;8G85 ?>78F89 ?> @K=:C                          |

//+------------------------------------------------------------------+

//+----------------------------------------------------------------------------+

//|  0@0<5B@K:                                                                |

//|    sy - =08<5=>20=85 8=AB@C<5=B0   ( ""  - ;N1>9 A8<2>;,                   |

//|                                     NULL - B5:CI89 A8<2>;)                 |

//|    op - >?5@0F8O                   ( -1  - ;N10O ?>78F8O)                  |

//|    mn - MagicNumber                ( -1  - ;N1>9 <038:)                    |

//+----------------------------------------------------------------------------+



bool EPs(string sy="",int op=-1,int mn=-1,int ticket=0)

  {

   string Autor=" 2B>@ DC=:F88 4;O H01;>=0 : KimiV";



   int i,k=OrdersTotal();



   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(ticket==OrderTicket() || ticket==0) return(True);

                    }

                 }

              }

           }

        }

     }

   return(False);

  }

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//|                 2B>;>B                                          |

//+------------------------------------------------------------------+

double GetSizeLot(double ll=1) //$C=:F8O 2>72@0I05B 7=0G5=85 ;>B>2, 

  {

  

   double MinLots=MarketInfo(Symbol(),MODE_MINLOT);

   double MaxLots=MarketInfo(Symbol(),MODE_MAXLOT);

   double Lot2=Lots;

   if(Lot2 < MinLots) Lot2 = MinLots;

   if(Lot2 > MaxLots) Lot2 = MaxLots;

   return(NormalizeDouble(Lot2,2));

  }

//+------------------------------------------------------------------+



//+------------------------------------------------------------------+

//|                    #40;5=85 1 ?@5420@8B5;L=> 2K1@0==>9 ?>78F88   |

//+------------------------------------------------------------------+



void CPBS()

  {

   bool   fc;

   color  clClose;

   double ll,pa,pb,pp;

   int    err,it;

   string Autor=" 2B>@ DC=:F88 4;O H01;>=0 : KimiV";



   if(OrderType()==OP_BUY || OrderType()==OP_SELL)

     {

      for(it=1; it<=5; it++)

        {

         if(!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;

         while(!IsTradeAllowed()) Sleep(5000);

         RefreshRates();

         pa=MarketInfo(OrderSymbol(), MODE_ASK);

         pb=MarketInfo(OrderSymbol(), MODE_BID);

         if(OrderType()==OP_BUY)

           {

            pp=pb;

              } else {

            pp=pa;

           }

         ll=OrderLots();

         fc=OrderClose(OrderTicket(), ll, pp, 1, clClose);

         if(fc)

           {

            break;

              } else {

            err=GetLastError();

            if(err==146) while(IsTradeContextBusy()) Sleep(1000*11);

            Sleep(1000*5);

           }

        }

     }

  }

//+------------------------------------------------------------------+

//|              #40;5=85 ?>78F89 ?> @K=:C                           |

//+------------------------------------------------------------------+

//+----------------------------------------------------------------------------+

//|  0@0<5B@K:                                                                |

//|    sy - =08<5=>20=85 8=AB@C<5=B0   ( ""  - ;N1>9 A8<2>;,                   |

//|                                     NULL - B5:CI89 A8<2>;)                 |

//|    op - >?5@0F8O                   ( -1  - ;N10O ?>78F8O)                  |

//|    mn - MagicNumber                ( -1  - ;N1>9 <038:)                    |

//+----------------------------------------------------------------------------+



void CPD(string sy="",int op=-1,int mn=-1)

  {

   int i,k=OrdersTotal();

   string Autor=" 2B>@ DC=:F88 4;O H01;>=0 : KimiV";



   if(sy=="0") sy=Symbol();

   for(i=k-1; i>=0; i--)

     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

        {

         if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))

           {

            if(OrderType()==OP_BUY || OrderType()==OP_SELL)

              {

               if(mn<0 || OrderMagicNumber()==mn) CPBS();

              }

           }

        }

     }

  }

//+------------------------------------------------------------------+

//| expert initialization function                                   |

//+------------------------------------------------------------------+

int init()

  {

//----

   Stamp();

//----

   return(0); 

  }

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void Stamp()

  {

   ObjectCreate("Original",OBJ_LABEL,0,0,0);

   ObjectSetText("Original"," !45;0=> ?@8 ?><>I8 H01;>=0 : www.expforex.com ",12,"Arial Bold",Chartreuse);

   ObjectSet("Original",OBJPROP_CORNER,0);

   ObjectSet("Original",OBJPROP_XDISTANCE,0);

   ObjectSet("Original",OBJPROP_YDISTANCE,10);



  }

//+------------------------------------------------------------------+

//+----------------------------------------------------------------------------+

//|  ?8A0=85 : !>?@>2>645=85 ?>78F89 ?@>ABK< B@0;><                           |

//+----------------------------------------------------------------------------+

//|  0@0<5B@K:                                                                |

//|    sy - =08<5=>20=85 8=AB@C<5=B0   ( ""  - ;N1>9 A8<2>;,                   |

//|                                     NULL - B5:CI89 A8<2>;)                 |

//|    op - >?5@0F8O                   ( -1  - ;N10O ?>78F8O)                  |

//|    mn - MagicNumber                ( -1  - ;N1>9 <038:)                    |

//+----------------------------------------------------------------------------+

void SimpleTrailing(string sy="",int op=-1,int mn=-1)

  {

   double po,pp;

   int    i,k=OrdersTotal();

   string Autor=" 2B>@ DC=:F88 4;O H01;>=0 : KimiV";



   if(sy=="0") sy=Symbol();

   if(TrailingStop==0)TrailingStop=MarketInfo(Symbol(),MODE_STOPLEVEL);

   for(i=0;i<k;i++)

     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

        {

         if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))

           {

            po=MarketInfo(OrderSymbol(),MODE_POINT);

            if(mn<0 || OrderMagicNumber()==mn)

              {

               if(OrderType()==OP_BUY)

                 {

                  pp=MarketInfo(OrderSymbol(),MODE_BID);

                  if((!IfProfTrail && OrderProfit()>0) || pp-OrderOpenPrice()>TrailingStop*po)

                    {

                     if(OrderStopLoss()<pp-(TrailingStop+TrailingStep-1)*po)

                       {

                        ModifyOrder(-1,pp-TrailingStop*po,-1);

                       }

                    }

                 }

               if(OrderType()==OP_SELL)

                 {

                  pp=MarketInfo(OrderSymbol(),MODE_ASK);

                  if((!IfProfTrail && OrderProfit()>0) || OrderOpenPrice()-pp>TrailingStop*po)

                    {

                     if(OrderStopLoss()>pp+(TrailingStop+TrailingStep-1)*po || OrderStopLoss()==0)

                       {

                        ModifyOrder(-1,pp+TrailingStop*po,-1);

                       }

                    }

                 }

              }

           }

        }

     }

  }

  

  

  

  

  string ErrorDescription(int error_code)

  {

   string error_string;

//----

   switch(error_code)

     {

      //---- codes returned from trade server

      case 0:

      case 1:   error_string="no error";                                                  break;

      case 2:   error_string="common error";                                              break;

      case 3:   error_string="invalid trade parameters";                                  break;

      case 4:   error_string="trade server is busy";                                      break;

      case 5:   error_string="old version of the client terminal";                        break;

      case 6:   error_string="no connection with trade server";                           break;

      case 7:   error_string="not enough rights";                                         break;

      case 8:   error_string="too frequent requests";                                     break;

      case 9:   error_string="malfunctional trade operation (never returned error)";      break;

      case 64:  error_string="account disabled";                                          break;

      case 65:  error_string="invalid account";                                           break;

      case 128: error_string="trade timeout";                                             break;

      case 129: error_string="invalid price";                                             break;

      case 130: error_string="invalid stops";                                             break;

      case 131: error_string="invalid trade volume";                                      break;

      case 132: error_string="market is closed";                                          break;

      case 133: error_string="trade is disabled";                                         break;

      case 134: error_string="not enough money";                                          break;

      case 135: error_string="price changed";                                             break;

      case 136: error_string="off quotes";                                                break;

      case 137: error_string="broker is busy (never returned error)";                     break;

      case 138: error_string="requote";                                                   break;

      case 139: error_string="order is locked";                                           break;

      case 140: error_string="long positions only allowed";                               break;

      case 141: error_string="too many requests";                                         break;

      case 145: error_string="modification denied because order too close to market";     break;

      case 146: error_string="trade context is busy";                                     break;

      case 147: error_string="expirations are denied by broker";                          break;

      case 148: error_string="amount of open and pending orders has reached the limit";   break;

      case 149: error_string="hedging is prohibited";                                     break;

      case 150: error_string="prohibited by FIFO rules";                                  break;

      //---- mql4 errors

      case 4000: error_string="no error (never generated code)";                          break;

      case 4001: error_string="wrong function pointer";                                   break;

      case 4002: error_string="array index is out of range";                              break;

      case 4003: error_string="no memory for function call stack";                        break;

      case 4004: error_string="recursive stack overflow";                                 break;

      case 4005: error_string="not enough stack for parameter";                           break;

      case 4006: error_string="no memory for parameter string";                           break;

      case 4007: error_string="no memory for temp string";                                break;

      case 4008: error_string="not initialized string";                                   break;

      case 4009: error_string="not initialized string in array";                          break;

      case 4010: error_string="no memory for array\' string";                             break;

      case 4011: error_string="too long string";                                          break;

      case 4012: error_string="remainder from zero divide";                               break;

      case 4013: error_string="zero divide";                                              break;

      case 4014: error_string="unknown command";                                          break;

      case 4015: error_string="wrong jump (never generated error)";                       break;

      case 4016: error_string="not initialized array";                                    break;

      case 4017: error_string="dll calls are not allowed";                                break;

      case 4018: error_string="cannot load library";                                      break;

      case 4019: error_string="cannot call function";                                     break;

      case 4020: error_string="expert function calls are not allowed";                    break;

      case 4021: error_string="not enough memory for temp string returned from function"; break;

      case 4022: error_string="system is busy (never generated error)";                   break;

      case 4050: error_string="invalid function parameters count";                        break;

      case 4051: error_string="invalid function parameter value";                         break;

      case 4052: error_string="string function internal error";                           break;

      case 4053: error_string="some array error";                                         break;

      case 4054: error_string="incorrect series array using";                             break;

      case 4055: error_string="custom indicator error";                                   break;

      case 4056: error_string="arrays are incompatible";                                  break;

      case 4057: error_string="global variables processing error";                        break;

      case 4058: error_string="global variable not found";                                break;

      case 4059: error_string="function is not allowed in testing mode";                  break;

      case 4060: error_string="function is not confirmed";                                break;

      case 4061: error_string="send mail error";                                          break;

      case 4062: error_string="string parameter expected";                                break;

      case 4063: error_string="integer parameter expected";                               break;

      case 4064: error_string="double parameter expected";                                break;

      case 4065: error_string="array as parameter expected";                              break;

      case 4066: error_string="requested history data in update state";                   break;

      case 4099: error_string="end of file";                                              break;

      case 4100: error_string="some file error";                                          break;

      case 4101: error_string="wrong file name";                                          break;

      case 4102: error_string="too many opened files";                                    break;

      case 4103: error_string="cannot open file";                                         break;

      case 4104: error_string="incompatible access to a file";                            break;

      case 4105: error_string="no order selected";                                        break;

      case 4106: error_string="unknown symbol";                                           break;

      case 4107: error_string="invalid price parameter for trade function";               break;

      case 4108: error_string="invalid ticket";                                           break;

      case 4109: error_string="trade is not allowed in the expert properties";            break;

      case 4110: error_string="longs are not allowed in the expert properties";           break;

      case 4111: error_string="shorts are not allowed in the expert properties";          break;

      case 4200: error_string="object is already exist";                                  break;

      case 4201: error_string="unknown object property";                                  break;

      case 4202: error_string="object is not exist";                                      break;

      case 4203: error_string="unknown object type";                                      break;

      case 4204: error_string="no object name";                                           break;

      case 4205: error_string="object coordinates error";                                 break;

      case 4206: error_string="no specified subwindow";                                   break;

      default:   error_string="unknown error";

     }

//----

   return(error_string);

  }

Comments