Exp - Templates #1 light

Author: Copyright © 2012, templates from expforex
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
0 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

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