Exp-SetSLxamp9TPnlimit

Author: Copyright � 2009, Expforex
0 Views
0 Downloads
0 Favorites
Exp-SetSLxamp9TPnlimit
//+------------------------------------------------------------------+
//|                                                 Exp-SetSL&TP.mq4 |
//|                                       Copyright © 2009, Expforex |
//|                                            http://expforex.at.ua |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Expforex"
#property link      "http://expforex.at.ua"
#property show_inputs




extern string Ðàçðàáîò÷èê="http://expforex.at.ua";
extern string a="Ñêðèïò óñòàíàâëèâàåò TP è SL ïî âûáîðó äëÿ îðäåðîâ";
extern string new="Ñèìâîë óñòàíîâêè 0-âñå 1-âàëþòà ãðàôèêà";
extern int ttt=0;
extern string d="0-áåç ñòîïà,-1-ìèíèìàëüíûé ñòîï";
extern int SL=0;
extern int TP=0;
extern string b="Òèï îðäåðîâ äëÿ êîòîðûõ ñëåäóåò óñòàíîâèòü ñòîïû:";
extern string ò="0-óñòàíîâèòü äëÿ âñåõ îðäåðà";
extern string ò2="1-óñòàíîâèòü äëÿ âñåõ îðäåðà Buy";
extern string ò3="2-óñòàíîâèòü äëÿ âñåõ îðäåðà Sell";
extern string ò4="3-óñòàíîâèòü äëÿ âñåõ îðäåðà BuyStop BuyLimit";
extern string ò5="4-óñòàíîâèòü äëÿ âñåõ îðäåðà Sellstop SellLimit";
extern int ÒèïÎðäåðà=0;
bool Ans=false;
string sym;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void init()
  {

   Stamp();

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Stamp()
  {

   ObjectCreate("Original",OBJ_LABEL,0,0,0);
   ObjectSetText("Original"," ---http://Expforex.at.ua---",10,"Arial Bold",Red);
   ObjectSet("Original",OBJPROP_CORNER,2);
   ObjectSet("Original",OBJPROP_XDISTANCE,200);
   ObjectSet("Original",OBJPROP_YDISTANCE,10);

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
//----
   for(int i=1;i<=OrdersTotal();i++) // Öèêë ïåðåáîðà îðäåðîâ
     {
      if(OrderSelect(i-1,SELECT_BY_POS)==true) // Åñëè åñòü ñëåäóþùèé ïðîâåðÿåì åãî
        {                                       // Àíàëèç îðäåðîâ:
         int Tip=OrderType();
         int Tickett=OrderTicket();                   // Òèï îðäåðà
         double Price=OrderOpenPrice();
         double SLt;
         double TPt;
         sym=OrderSymbol();
         if(ttt==1 && OrderSymbol()!=Symbol())continue;
         if(SL<0)SL=MarketInfo(sym,MODE_STOPLEVEL);
         if(TP<0)TP=MarketInfo(sym,MODE_STOPLEVEL);

         // ----------------------------------------------------------     
         if(ÒèïÎðäåðà==1 || ÒèïÎðäåðà==0)
           {

            if(Tip==OP_BUY)
              {

               if(SL!=0){SLt=MarketInfo(sym,MODE_BID)-(SL*MarketInfo(sym,MODE_POINT));}else SLt=0;
               if(TP!=0){TPt=MarketInfo(sym,MODE_BID)+(TP*MarketInfo(sym,MODE_POINT));}else TPt=0;

               MOr(-1,SLt,TPt,CLR_NONE);
              }

           }

         //---------------------------------------------------------------
         if(ÒèïÎðäåðà==2 || ÒèïÎðäåðà==0)
           {

            if(Tip==OP_SELL)
              {
               if(SL!=0){SLt=MarketInfo(sym,MODE_ASK)+(SL*MarketInfo(sym,MODE_POINT));}else SLt=0;
               if(TP!=0){TPt=MarketInfo(sym,MODE_ASK)-(TP*MarketInfo(sym,MODE_POINT));}else TPt=0;
               MOr(-1,SLt,TPt,CLR_NONE);
              }

           }

         //-----------------------------------------------------------------

         if(ÒèïÎðäåðà==3 || ÒèïÎðäåðà==0)
           {

            if(Tip==OP_BUYSTOP)
              {
               if(SL!=0){SLt=Price-(SL*MarketInfo(sym,MODE_POINT));}else SLt=0;
               if(TP!=0){TPt=Price+(TP*MarketInfo(sym,MODE_POINT));}else TPt=0;
               MOr(-1,SLt,TPt,CLR_NONE);
              }

            if(Tip==OP_BUYLIMIT)
              {
               if(SL!=0){SLt=Price-(SL*MarketInfo(sym,MODE_POINT));}else SLt=0;
               if(TP!=0){TPt=Price+(TP*MarketInfo(sym,MODE_POINT));}else TPt=0;
               MOr(-1,SLt,TPt,CLR_NONE);
              }



           }

         //------------------------------------------------------------------

         if(ÒèïÎðäåðà==4 || ÒèïÎðäåðà==0)
           {

            if(Tip==OP_SELLSTOP)
              {
               if(SL!=0){SLt=Price+(SL*MarketInfo(sym,MODE_POINT));}else SLt=0;
               if(TP!=0){TPt=Price-(TP*MarketInfo(sym,MODE_POINT));}else TPt=0;
               MOr(-1,SLt,TPt,CLR_NONE);
              }

            if(Tip==OP_SELLLIMIT)
              {
               if(SL!=0){SLt=Price+(SL*MarketInfo(sym,MODE_POINT));}else SLt=0;
               if(TP!=0){TPt=Price-(TP*MarketInfo(sym,MODE_POINT));}else TPt=0;
               MOr(-1,SLt,TPt,CLR_NONE);
              }

           }

         //-------------------------------------------------------------------- 
        }
     }

   return(0);
  }
//+------------------------------------------------------------------+

void MOr(double pp=-1,double sl=0,double tp=0,color cl=CLR_NONE) 
  {
   bool   fm;
   double pa=MarketInfo(OrderSymbol(), MODE_ASK);
   double pb=MarketInfo(OrderSymbol(), MODE_BID);
   double op,os,ot;
   int    dg,err,it;

   if(pp<=0) pp=OrderOpenPrice();
   if(sl<0) sl=OrderStopLoss();
   if(tp<0) tp=OrderTakeProfit();

   dg=MarketInfo(OrderSymbol(), MODE_DIGITS);
   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<=3;it++) 
        {
         if(!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
         while(!IsTradeAllowed()) Sleep(5000);
         RefreshRates();
         fm=OrderModify(OrderTicket(),pp,sl,tp,0,cl);
         if(fm) 
           {
            break;
              } else {

            Sleep(1000*2);
           }
        }
     }
  }
//+------------------------------------------------------------------+

Comments