cm-ManualTrade

Author: Copyright 2016, cmillion@narod.ru
Profit factor:
0.00
6 Views
0 Downloads
0 Favorites
cm-ManualTrade
//+------------------------------------------------------------------+
//|                                Copyright 2016, cmillion@narod.ru |
//|                                               http://cmillion.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, cmillion@narod.ru"
#property link      "http://cmillion.ru"
#property version   "2.00"
#property strict
//#property description "Ñîâåòíèê äëÿ ðó÷íîé òîðãîâëè"
//#property description "Ïîìîãàåò îòêðûâàòü è ñîïðîâîæäàòü ñäåëêè"

 int     slb   = 100,//StopLoss Buy
         tpb   = 100,//TakeProfit Buy
         tsb   = 33,//TrailingStop Buy
         nlb   = 20,//NoLoss Buy
         sls   = 100,//StopLoss Sell
         tps   = 100,//TakeProfit Sell
         tss   = 33,//TrailingStop Sell
         nls   = 20;//NoLoss Sell

input int TrailingStep      = 1,
          TrailingStart     = 1;
               
double  Lot          = 0.01;
input int      slippage     = 2;
input bool     confirmation = true;
 bool    TradeNoLossBuy    = true;
 bool    TradeNoLossSell   = true;
//ìàãèê (åñëè -1 òî âñå ìàãèêè)
extern int     Magic = -1;  
string ID;
int i;
bool TRADE;
double delta;
string AC,Font = "Times New Roman";
bool _OtNb,_OtNs,_NLb,_NLs,_SLb,_SLs,_TPb,_TPs,_TSb,_TSs;
//+------------------------------------------------------------------+
int OnInit()
{
   AC=" "+AccountCurrency();
   ID=StringConcatenate(WindowExpertName(),Symbol());
   string txt;
   txt = StringConcatenate("slb",ID);
   if (GlobalVariableCheck(txt)) slb = (int)GlobalVariableGet(txt);
   txt = StringConcatenate("tpb",ID);
   if (GlobalVariableCheck(txt)) tpb = (int)GlobalVariableGet(txt);
   txt = StringConcatenate("tsb",ID);
   if (GlobalVariableCheck(txt)) tsb = (int)GlobalVariableGet(txt);
   txt = StringConcatenate("nlb",ID);
   if (GlobalVariableCheck(txt)) nlb = (int)GlobalVariableGet(txt);
   txt = StringConcatenate("sls",ID);
   if (GlobalVariableCheck(txt)) sls = (int)GlobalVariableGet(txt);
   txt = StringConcatenate("tps",ID);
   if (GlobalVariableCheck(txt)) tps = (int)GlobalVariableGet(txt);
   txt = StringConcatenate("tss",ID);
   if (GlobalVariableCheck(txt)) tss = (int)GlobalVariableGet(txt);
   txt = StringConcatenate("nls",ID);
   if (GlobalVariableCheck(txt)) nls = (int)GlobalVariableGet(txt);
   txt=StringConcatenate("Lot",ID);
   if (GlobalVariableCheck(txt)) Lot = GlobalVariableGet(txt);

   txt = StringConcatenate("kn nb",ID);
   if (GlobalVariableCheck(txt)) _OtNb = (bool)GlobalVariableGet(txt);
   txt = StringConcatenate("kn ns",ID);
   if (GlobalVariableCheck(txt)) _OtNs = (bool)GlobalVariableGet(txt);
   txt = StringConcatenate("kn slb",ID);
   if (GlobalVariableCheck(txt)) _SLb = (bool)GlobalVariableGet(txt);
   txt = StringConcatenate("kn tpb",ID);
   if (GlobalVariableCheck(txt)) _TPb = (bool)GlobalVariableGet(txt);
   txt = StringConcatenate("kn tsb",ID);
   if (GlobalVariableCheck(txt)) _TSb = (bool)GlobalVariableGet(txt);
   txt = StringConcatenate("kn nlb",ID);
   if (GlobalVariableCheck(txt)) _NLb = (bool)GlobalVariableGet(txt);
   txt = StringConcatenate("kn sls",ID);
   if (GlobalVariableCheck(txt)) _SLs = (bool)GlobalVariableGet(txt);
   txt = StringConcatenate("kn tps",ID);
   if (GlobalVariableCheck(txt)) _TPs = (bool)GlobalVariableGet(txt);
   txt = StringConcatenate("kn tss",ID);
   if (GlobalVariableCheck(txt)) _TSs = (bool)GlobalVariableGet(txt);
   txt = StringConcatenate("kn nls",ID);
   if (GlobalVariableCheck(txt)) _NLs = (bool)GlobalVariableGet(txt);

   int X=0;
   ButtonCreate(0,StringConcatenate("cls" ,ID),0,X,40,100,40,"Close",Font,10,clrBlack,clrLightGray,false);X+=100;
   ButtonCreate(0,StringConcatenate("tss" ,ID),0,X,40,75,40,StringConcatenate("TS ",tss),Font,10,clrBlack,clrLightGray,_TSs);X+=75;
   ButtonCreate(0,StringConcatenate("tss+",ID),0,X,40,20,20,"+",Font,8,clrBlack,clrLightGray,false);
   ButtonCreate(0,StringConcatenate("tss-",ID),0,X,20,20,20,"-",Font,8,clrBlack,clrLightGray,false);X+=20;
   ButtonCreate(0,StringConcatenate("Ns" ,ID),0,X,40,20,40,"N",Font,10,clrBlack,clrGreen,_OtNb);X+=20;
   ButtonCreate(0,StringConcatenate("nls" ,ID),0,X,40,75,40,StringConcatenate("NL ",nls),Font,10,clrBlack,clrLightGray,_NLs);X+=75;
   ButtonCreate(0,StringConcatenate("nls+",ID),0,X,40,20,20,"+",Font,8,clrBlack,clrLightGray,false);
   ButtonCreate(0,StringConcatenate("nls-",ID),0,X,20,20,20,"-",Font,8,clrBlack,clrLightGray,false);X+=20;
   ButtonCreate(0,StringConcatenate("tps" ,ID),0,X,40,75,40,StringConcatenate("TP ",tps),Font,10,clrBlack,clrLightGray,_TPs);X+=75;
   ButtonCreate(0,StringConcatenate("tps+",ID),0,X,40,20,20,"+",Font,8,clrBlack,clrLightGray,false);
   ButtonCreate(0,StringConcatenate("tps-",ID),0,X,20,20,20,"-",Font,8,clrBlack,clrLightGray,false);X+=20;
   ButtonCreate(0,StringConcatenate("sls" ,ID),0,X,40,75,40,StringConcatenate("SL ",sls),Font,10,clrBlack,clrLightGray,_SLs);X+=75;
   ButtonCreate(0,StringConcatenate("sls+",ID),0,X,40,20,20,"+",Font,8,clrBlack,clrLightGray,false);
   ButtonCreate(0,StringConcatenate("sls-",ID),0,X,20,20,20,"-",Font,8,clrBlack,clrLightGray,false);X+=20;
   ButtonCreate(0,StringConcatenate("sell",ID),0,X,20,75,20,"SELL",Font,10,clrBlack,clrRed,false);X+=75;

   ButtonCreate(0,StringConcatenate("buy" ,ID),0,X,20,75,20,"BUY",Font,10,clrBlack,clrBlue,false);X+=75;
   ButtonCreate(0,StringConcatenate("slb" ,ID),0,X,40,75,40,StringConcatenate("SL ",slb),Font,10,clrBlack,clrLightGray,_SLb);X+=75;
   ButtonCreate(0,StringConcatenate("slb+",ID),0,X,40,20,20,"+",Font,8,clrBlack,clrLightGray,false);
   ButtonCreate(0,StringConcatenate("slb-",ID),0,X,20,20,20,"-",Font,8,clrBlack,clrLightGray,false);X+=20;
   ButtonCreate(0,StringConcatenate("tpb" ,ID),0,X,40,75,40,StringConcatenate("TP ",tpb),Font,10,clrBlack,clrLightGray,_TPb);X+=75;
   ButtonCreate(0,StringConcatenate("tpb+",ID),0,X,40,20,20,"+",Font,8,clrBlack,clrLightGray,false);
   ButtonCreate(0,StringConcatenate("tpb-",ID),0,X,20,20,20,"-",Font,8,clrBlack,clrLightGray,false);X+=20;
   ButtonCreate(0,StringConcatenate("nlb" ,ID),0,X,40,75,40,StringConcatenate("NL ",nlb),Font,10,clrBlack,clrLightGray,_NLb);X+=75;
   ButtonCreate(0,StringConcatenate("nlb+",ID),0,X,40,20,20,"+",Font,8,clrBlack,clrLightGray,false);
   ButtonCreate(0,StringConcatenate("nlb-",ID),0,X,20,20,20,"-",Font,8,clrBlack,clrLightGray,false);X+=20;
   ButtonCreate(0,StringConcatenate("Nb" ,ID),0,X,40,20,40,"N",Font,10,clrBlack,clrGreen,_OtNs);X+=20;
   ButtonCreate(0,StringConcatenate("tsb" ,ID),0,X,40,75,40,StringConcatenate("TS ",tsb),Font,10,clrBlack,clrLightGray,_TSb);X+=75;
   ButtonCreate(0,StringConcatenate("tsb+",ID),0,X,40,20,20,"+",Font,8,clrBlack,clrLightGray,false);
   ButtonCreate(0,StringConcatenate("tsb-",ID),0,X,20,20,20,"-",Font,8,clrBlack,clrLightGray,false);X+=20;
   ButtonCreate(0,StringConcatenate("clb" ,ID),0,X,40,100,40,"Close",Font,10,clrBlack,clrLightGray,false);

   EditCreate(0,StringConcatenate("Lot",ID),0,500,40,150,20,DoubleToString(Lot,2),"Arial",10,ALIGN_CENTER,false);

   delta=MarketInfo(Symbol(),MODE_MINLOT);
   EventSetTimer(1);
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   for(i=ObjectsTotal()-1; i>=0; i--) 
   {
      string Name=ObjectName(i);
      if (StringFind(Name,ID)!=-1) ObjectDelete(Name);
   }
   EventKillTimer();
}
//--------------------------------------------------------------------
void OnTick() {OnTimer();}
void OnTimer()
{
   int p;
   p=kn_UP_DN("tss", tss); if (p!=tss) {tss=p; ObjectSetString(0,StringConcatenate("tss",ID),OBJPROP_TEXT,StringConcatenate("TS ",tss));GlobalVariableSet(StringConcatenate("tss",ID),tss);}
   p=kn_UP_DN("nls", nls); if (p!=nls) {nls=p; ObjectSetString(0,StringConcatenate("nls",ID),OBJPROP_TEXT,StringConcatenate("NL ",nls));GlobalVariableSet(StringConcatenate("nls",ID),nls);}
   p=kn_UP_DN("tps", tps); if (p!=tps) {tps=p; ObjectSetString(0,StringConcatenate("tps",ID),OBJPROP_TEXT,StringConcatenate("TP ",tps));GlobalVariableSet(StringConcatenate("tps",ID),tps);}
   p=kn_UP_DN("sls", sls); if (p!=sls) {sls=p; ObjectSetString(0,StringConcatenate("sls",ID),OBJPROP_TEXT,StringConcatenate("SL ",sls));GlobalVariableSet(StringConcatenate("sls",ID),sls);}

   p=kn_UP_DN("tsb", tsb); if (p!=tsb) {tsb=p; ObjectSetString(0,StringConcatenate("tsb",ID),OBJPROP_TEXT,StringConcatenate("TS ",tsb));GlobalVariableSet(StringConcatenate("tsb",ID),tsb);}
   p=kn_UP_DN("nlb", nlb); if (p!=nlb) {nlb=p; ObjectSetString(0,StringConcatenate("nlb",ID),OBJPROP_TEXT,StringConcatenate("NL ",nlb));GlobalVariableSet(StringConcatenate("nlb",ID),nlb);}
   p=kn_UP_DN("tpb", tpb); if (p!=tpb) {tpb=p; ObjectSetString(0,StringConcatenate("tpb",ID),OBJPROP_TEXT,StringConcatenate("TP ",tpb));GlobalVariableSet(StringConcatenate("tpb",ID),tpb);}
   p=kn_UP_DN("slb", slb); if (p!=slb) {slb=p; ObjectSetString(0,StringConcatenate("slb",ID),OBJPROP_TEXT,StringConcatenate("SL ",slb));GlobalVariableSet(StringConcatenate("slb",ID),slb);}
   
   if (Lot!=StringToDouble(ObjectGetString(0,StringConcatenate("Lot",ID),OBJPROP_TEXT))) {Lot=StringToDouble(ObjectGetString(0,StringConcatenate("Lot",ID),OBJPROP_TEXT));GlobalVariableSet(StringConcatenate("Lot",ID),Lot);}
   
   _OtNb=ObjectGetInteger(0,StringConcatenate("Nb" ,ID),OBJPROP_STATE);GlobalVariableSet(StringConcatenate("kn Nb",ID),_OtNb);
   _OtNs=ObjectGetInteger(0,StringConcatenate("Ns" ,ID),OBJPROP_STATE);GlobalVariableSet(StringConcatenate("kn Ns",ID),_OtNs);
   _NLb=ObjectGetInteger(0,StringConcatenate("nlb" ,ID),OBJPROP_STATE);GlobalVariableSet(StringConcatenate("kn nlb",ID),_NLb);
   _NLs=ObjectGetInteger(0,StringConcatenate("nls" ,ID),OBJPROP_STATE);GlobalVariableSet(StringConcatenate("kn nls",ID),_NLs);
   _SLb=ObjectGetInteger(0,StringConcatenate("slb" ,ID),OBJPROP_STATE);GlobalVariableSet(StringConcatenate("kn slb",ID),_SLb);
   _SLs=ObjectGetInteger(0,StringConcatenate("sls" ,ID),OBJPROP_STATE);GlobalVariableSet(StringConcatenate("kn sls",ID),_SLs);
   _TPb=ObjectGetInteger(0,StringConcatenate("tpb" ,ID),OBJPROP_STATE);GlobalVariableSet(StringConcatenate("kn tpb",ID),_TPb);
   _TPs=ObjectGetInteger(0,StringConcatenate("tps" ,ID),OBJPROP_STATE);GlobalVariableSet(StringConcatenate("kn tps",ID),_TPs);
   _TSb=ObjectGetInteger(0,StringConcatenate("tsb" ,ID),OBJPROP_STATE);GlobalVariableSet(StringConcatenate("kn tsb",ID),_TSb);
   _TSs=ObjectGetInteger(0,StringConcatenate("tss" ,ID),OBJPROP_STATE);GlobalVariableSet(StringConcatenate("kn tss",ID),_TSs);

   TRADE=MarketInfo(Symbol(),MODE_TRADEALLOWED)!=0 && IsTradeAllowed() && !IsTradeContextBusy();
   if (TRADE)
   {
      if (ObjectGetInteger(0,StringConcatenate("buy" ,ID),OBJPROP_STATE))
      {
         if (SendOrder(OP_BUY,Lot,NormalizeDouble(Ask,Digits)))
         {
            Comment(TimeToStr(TimeCurrent(),TIME_SECONDS)," Open buy ",DoubleToStr(Lot,2));
         }
         ObjectSetInteger(0,StringConcatenate("buy" ,ID),OBJPROP_STATE,false);
      }
      if (ObjectGetInteger(0,StringConcatenate("sell" ,ID),OBJPROP_STATE))
      {
         if (SendOrder(OP_SELL,Lot,NormalizeDouble(Bid,Digits)))
         {
            Comment(TimeToStr(TimeCurrent(),TIME_SECONDS)," Open Sell ",DoubleToStr(Lot,2));
         }
         ObjectSetInteger(0,StringConcatenate("sell" ,ID),OBJPROP_STATE,false);
      }
      if (ObjectGetInteger(0,StringConcatenate("clb" ,ID),OBJPROP_STATE))
      {
         Comment(TimeToStr(TimeCurrent(),TIME_SECONDS)," Close Buy");
         close(OP_BUY);ObjectSetInteger(0,StringConcatenate("clb" ,ID),OBJPROP_STATE,false);
      }
      if (ObjectGetInteger(0,StringConcatenate("cls" ,ID),OBJPROP_STATE))
      {
         Comment(TimeToStr(TimeCurrent(),TIME_SECONDS)," Close Sell");
         close(OP_SELL);ObjectSetInteger(0,StringConcatenate("cls" ,ID),OBJPROP_STATE,false);
      }
   }

   double price_b=0,price_s=0;
   double StLo,OSL,OTP,OOP,SL,TP;
   int Ticket,b=0,s=0,tip;
   double OL,LB=0,LS=0,ProfitB=0,ProfitS=0;
   double STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
   double stoplevel=STOPLEVEL*Point;
   for (i=0; i<OrdersTotal(); i++)
   {    
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      { 
         if (OrderSymbol()==Symbol() && (Magic==-1 || Magic==OrderMagicNumber()))
         { 
            OSL = NormalizeDouble(OrderStopLoss(),Digits);
            OTP = NormalizeDouble(OrderTakeProfit(),Digits);
            OOP = NormalizeDouble(OrderOpenPrice(),Digits);
            Ticket=OrderTicket();
            SL=OSL;TP=OTP;
            tip = OrderType(); 
            OL = OrderLots();
            if (tip==OP_BUY)             
            {  
               b++; 
               LB+=OL;price_b+=(Bid-OOP)*OL+(OrderCommission()+OrderSwap())*Point;
               ProfitB+=OrderProfit()+OrderCommission()+OrderSwap();
               if (OSL==0 && Bid-NormalizeDouble(OOP - slb   * Point,Digits)>=stoplevel && slb!=0 && _SLb)
               {
                  SL = NormalizeDouble(OOP - slb   * Point,Digits);
               } 
               if (!_SLb && !_NLb && !_TSb) SL=0;
               if (!_TPb) TP=0;
               if (!_OtNb)
               {
                  if (OTP==0 && NormalizeDouble(OOP + tpb * Point,Digits)-Ask>=stoplevel && tpb!=0 && _TPb)
                  {
                     TP = NormalizeDouble(OOP + tpb * Point,Digits);
                  } 
                  if (OSL<OOP && nlb!=0 && _NLb)
                  {
                     if (Bid-OOP >= nlb*Point && Bid-OOP >= stoplevel) SL = OOP+Point;
                  }
                  if (tsb!=0 && _TSb)
                  {
                     StLo = NormalizeDouble(Bid - tsb*Point,Digits); 
                     if (StLo >= OOP+TrailingStart*Point && StLo > OSL+TrailingStep*Point && StLo <= NormalizeDouble(Bid - stoplevel,Digits)) SL = StLo;
                  }
               }
               if (TRADE && (SL != OSL || TP != OTP))
               {  
                  Comment("Modify ",Ticket," Buy, SL ",OSL,"->",SL,", TP ",OTP,"->",TP);
                  if (!OrderModify(Ticket,OOP,SL,TP,0,White)) Print("Error Order Modify ",GetLastError());
               }
            }                                         
            if (tip==OP_SELL)        
            {
               s++;
               LS+=OL;price_s+=(OOP-Ask)*OL+(OrderCommission()+OrderSwap())*Point;
               ProfitS+=OrderProfit()+OrderCommission()+OrderSwap();
               if (OSL==0 && NormalizeDouble(OOP + sls   * Point,Digits)-Ask>=stoplevel && sls!=0 &&_SLs)
               {
                  SL = NormalizeDouble(OOP + sls   * Point,Digits);
               }
               if (!_SLs && !_NLs && !_TSs) SL=0;
               if (!_TPs) TP=0;
               if (!_OtNs)
               {
                  if (OTP==0 && Bid-NormalizeDouble(OOP - tps * Point,Digits)>=stoplevel && tps!=0 && _TPs)
                  {
                     TP = NormalizeDouble(OOP - tps * Point,Digits);
                  }
                  if ((OSL>OOP || OSL==0) && nls!=0 && _NLs)
                  {
                     if (OOP-Ask >= nls*Point && (OOP < OSL || OSL==0) && OOP-Ask >= stoplevel) SL = OOP-Point;
                  }
                  if (tss!=0 && _TSs)
                  {
                     StLo = NormalizeDouble(Ask + tss*Point,Digits); 
                     if (StLo <= OOP-TrailingStart*Point && (StLo < OSL-TrailingStep*Point || OSL==0) && StLo >= NormalizeDouble(Ask + stoplevel,Digits)) SL = StLo;
                  }
               }
               if (TRADE && (SL != OSL || TP != OTP))
               {  
                  Comment("Modify ",Ticket," Sell, SL ",OSL,"->",SL,", TP ",OTP,"->",TP);
                  if (!OrderModify(Ticket,OOP,SL,TP,0,White)) Print("Error Order Modify ",GetLastError());
               }
            } 
         }
      }
   }
   LabelCreate(0,StringConcatenate("profitB" ,ID),0,1145,0,CORNER_LEFT_LOWER,StringConcatenate(DoubleToStr(ProfitB,2),AC),"Arial",8,clrBlack,0,ANCHOR_RIGHT_LOWER);
   LabelCreate(0,StringConcatenate("profitS" ,ID),0,5,0,CORNER_LEFT_LOWER,StringConcatenate(DoubleToStr(ProfitS,2),AC),"Arial",8,clrBlack,0,ANCHOR_LEFT_LOWER);
   //---
   if (_OtNb || _OtNs)
   {
      double NL=0,NLb=0,NLs=0;
      if(LB>0) NLb=Bid-price_b/LB;
      ARROW("NoLoss_NLb", NLb, 6, clrBlue);
      if(LS>0) NLs=Ask+price_s/LS;
      ARROW("NoLoss_NLs", NLs, 6, clrRed);
      if(LB-LS>0) NL=Bid-(price_b+price_s)/(LB-LS);
      if(LB-LS<0) NL=Ask-(price_b+price_s)/(LB-LS);
      ARROW("NoLoss_NL", NL, 6, clrYellow);

//---
      for (i=0; i<OrdersTotal(); i++)
      {    
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         { 
            if (OrderSymbol()==Symbol() && (Magic==-1 || Magic==OrderMagicNumber()))
            { 
               OSL = NormalizeDouble(OrderStopLoss(),Digits);
               OTP = NormalizeDouble(OrderTakeProfit(),Digits);
               OOP = NormalizeDouble(OrderOpenPrice(),Digits);
               Ticket=OrderTicket();
               SL=OSL;TP=OTP;
               tip = OrderType(); 
               OL = OrderLots();
               if (tip==OP_BUY && _OtNb)             
               {  
                  if (!_TPb) TP=0;
                  if (NormalizeDouble(NLb + tpb * Point,Digits)-Ask>=stoplevel && tpb!=0 && _TPb)
                  {
                     TP = NormalizeDouble(NLb + tpb * Point,Digits);
                  } 
                  if (OSL<OOP && nlb!=0 && _NLb)
                  {
                     if (Bid-NLb >= nlb*Point && Bid-NLb >= stoplevel) SL = NLb+Point;
                  }
                  if (tsb!=0 && _TSb)
                  {
                     StLo = NormalizeDouble(Bid - tsb*Point,Digits); 
                     if (StLo >= NLb+TrailingStart*Point && StLo > OSL+TrailingStep*Point && StLo <= NormalizeDouble(Bid - stoplevel,Digits)) SL = StLo;
                  }
                  if (TRADE && (SL != OSL || TP != OTP))
                  {  
                     Comment("Modify ",Ticket," NL Buy SL ",OSL,"->",SL,", TP ",OTP,"->",TP);
                     if (!OrderModify(Ticket,OOP,SL,TP,0,White)) Print("Error Order Modify ",GetLastError());
                  }
               }                                         
               if (tip==OP_SELL && _OtNs)        
               {
                  if (!_TPs) TP=0;
                  if (Bid-NormalizeDouble(NLs - tps * Point,Digits)>=stoplevel && tps!=0 && _TPs)
                  {
                     TP = NormalizeDouble(NLs - tps * Point,Digits);
                  }
                  if ((OSL>NLs || OSL==0) && nls!=0 && _NLs)
                  {
                     if (NLs-Ask >= nls*Point && (NLs < OSL || OSL==0) && NLs-Ask >= stoplevel) SL = NLs-Point;
                  }
                  if (tss!=0 && _TSs)
                  {
                     StLo = NormalizeDouble(Ask + tss*Point,Digits); 
                     if (StLo <= NLs-TrailingStart*Point && (StLo < OSL-TrailingStep*Point || OSL==0) && StLo >= NormalizeDouble(Ask + stoplevel,Digits)) SL = StLo;
                  }
                  if (TRADE && (SL != OSL || TP != OTP))
                  {  
                     Comment("Modify ",Ticket," NL Sell SL ",OSL,"->",SL,", TP ",OTP,"->",TP);
                     if (!OrderModify(Ticket,OOP,SL,TP,0,White)) Print("Error Order Modify ",GetLastError());
                  }
               } 
            }
         }
      }
   }
   else
   {
      ObjectDelete("NoLoss_NLb");
      ObjectDelete("NoLoss_NLs");
      ObjectDelete("NoLoss_NL");
   }
   return;
}
//--------------------------------------------------------------------
int kn_UP_DN(string kn, int p)
{
   string name=StringConcatenate(kn,"+",ID);
   if (ObjectGetInteger(0,name,OBJPROP_STATE))
   {
      p++;
      ObjectSetInteger(0,name,OBJPROP_STATE,false);
   }
   name=StringConcatenate(kn,"-",ID);
   if (ObjectGetInteger(0,name,OBJPROP_STATE))
   {
      p--;
      ObjectSetInteger(0,name,OBJPROP_STATE,false);
   }
   return(p);
}
//--------------------------------------------------------------------
bool ButtonCreate(const long              chart_ID=0,
                  const string            name="Button", 
                  const int               sub_window=0,
                  const long               x=0, 
                  const long               y=0,
                  const int               width=50,
                  const int               height=18,
                  const string            text="Button", 
                  const string            font="Arial",
                  const int               font_size=10,
                  const color             clr=clrBlack,
                  const color             clrfon=clrLightGray, 
                  const bool              state=false) 
  {
   if (ObjectFind(chart_ID,name)==-1)
   {
      ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_LEFT_LOWER);
      ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
      ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,1);
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
      ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,clrNONE);
   }
   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,clrfon);
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
   return(true);
}
//--------------------------------------------------------------------
bool RectLabelCreate(const long             chart_ID=0,
                     const string           name="RectLabel",
                     const int              sub_window=0, 
                     const long              x=0, 
                     const long              y=0,   
                     const int              width=50, 
                     const int              height=18,
                     const color            back_clr=clrNONE,
                     const color            clr=clrNONE,
                     const ENUM_LINE_STYLE  style=STYLE_SOLID,
                     const int              line_width=1,   
                     const bool             back=false,
                     const bool             selection=false,
                     const bool             hidden=true, 
                     const long             z_order=0)       
  {
   ResetLastError();
   if (ObjectFind(chart_ID,name)==-1)
   {
      ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,BORDER_FLAT);
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
      ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
      ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width);
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
   }
   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
   return(true);
}
//--------------------------------------------------------------------
bool LabelCreate(const long              chart_ID=0,   
                 const string            name="Label",  
                 const int               sub_window=0, 
                 const long              x=0,
                 const long              y=0,
                 const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER,
                 const string            text="Label",
                 const string            font="Arial",
                 const int               font_size=10,
                 const color             clr=clrNONE,      
                 const double            angle=0.0,
                 const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER,
                 const bool              back=false,
                 const bool              selection=false,
                 const bool              hidden=true,   
                 const long              z_order=0)
{
   ResetLastError();
   if (ObjectFind(chart_ID,name)==-1)
   {
      if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0))
      {
         return(false);
      }
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
      ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
      ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
      ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
      ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
   }
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
   return(true);
  }
//--------------------------------------------------------------------
bool SendOrder(int tip, double lot, double p)
{
   if (confirmation)
   {
      string txt;
      if (tip==OP_BUY) txt=StringConcatenate("Open BUY ",DoubleToStr(lot,2)," lot, price ",DoubleToStr(p,Digits)," ?");
      if (tip==OP_SELL) txt=StringConcatenate("Open SELL ",DoubleToStr(lot,2)," lot, price ",DoubleToStr(p,Digits)," ?");
      int ret=MessageBox(txt,"", MB_YESNO);
      if (ret==IDNO) return(1);
   }
   int nn;
   while(true)
   {
      RefreshRates();
      if (OrderSend(Symbol(),tip,lot,p,slippage,0,0,NULL,Magic,0,clrNONE)==-1)
      {
         Print("Order Send Error ",GetLastError()," Lot ",lot);
         Sleep(1000);
      }
      else return(1);
      nn++;
      if (nn>10) return(0);
   }
   return(0);
}
//--------------------------------------------------------------------
bool close(int tip)
{
   if (confirmation)
   {
      string txt="Close all ";
      if (tip==OP_BUY) txt=StringConcatenate(txt,"BUY ?");
      if (tip==OP_SELL) txt=StringConcatenate(txt,"SELL ?");
      int ret=MessageBox(txt,"", MB_YESNO);
      if (ret==IDNO) return(1);
   }
   bool error=true;
   int j,err,nn,OT;
   while(!IsStopped())
   {
      for (j = OrdersTotal()-1; j >= 0; j--)
      {
         if (OrderSelect(j, SELECT_BY_POS))
         {
            if (OrderSymbol() == Symbol() && (Magic==-1 || Magic==OrderMagicNumber()))
            {
               OT = OrderType();
               if (tip!=OT) continue;
               if (OT==OP_BUY) 
               {
                  error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,Blue);
               }
               if (OT==OP_SELL) 
               {
                  error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,Red);
               }
               if (!error) 
               {
                  err = GetLastError();
                  if (err<2) continue;
                  if (err==129) 
                  {
                     RefreshRates();
                     continue;
                  }
                  if (err==146) 
                  {
                     if (IsTradeContextBusy()) Sleep(2000);
                     continue;
                  }
                  Print("Error ",err," close order N ",OrderTicket(),"     ",TimeToStr(TimeCurrent(),TIME_SECONDS));
               }
            }
         }
      }
      int n=0;
      for (j = 0; j < OrdersTotal(); j++)
      {
         if (OrderSelect(j, SELECT_BY_POS))
         {
            if (OrderSymbol() == Symbol() && (Magic==-1 || Magic==OrderMagicNumber()))
            {
               OT = OrderType();
               if (tip!=OT) continue;
               if (OT==OP_BUY || OT==OP_SELL) n++;
            }
         }  
      }
      if (n==0) break;
      nn++;
      if (nn>10) 
      {
         return(0);
      }
      Sleep(1000);
      RefreshRates();
   }
   return(1);
}
//--------------------------------------------------------------------
void ARROW(string Name, double Price, int ARROWCODE, color c)
{
   ObjectDelete(Name);
   ObjectCreate(Name,OBJ_ARROW,0,Time[0],Price,0,0,0,0);                     
   ObjectSetInteger(0,Name,OBJPROP_ARROWCODE,ARROWCODE);
   ObjectSetInteger(0,Name,OBJPROP_COLOR, c);
   ObjectSetInteger(0,Name,OBJPROP_WIDTH, 1);
}
//--------------------------------------------------------------------
bool EditCreate(const long             chart_ID=0,
                const string           name="Edit", 
                const int              sub_window=0, 
                const int              x=0,     
                const int              y=0,          
                const int              width=50,       
                const int              height=18,  
                const string           text="Text",  
                const string           font="Arial",
                const int              font_size=10,     
                const ENUM_ALIGN_MODE  align=ALIGN_CENTER,
                const bool             read_only=true,     
                const ENUM_BASE_CORNER corner=CORNER_LEFT_LOWER,
                const color            clr=clrBlack,  
                const color            back_clr=clrWhite, 
                const color            border_clr=clrNONE,
                const bool             back=false,   
                const bool             selection=false, 
                const bool             hidden=true,  
                const long             z_order=0) 
  { 
   ResetLastError(); 
   if(!ObjectCreate(chart_ID,name,OBJ_EDIT,sub_window,0,0)) 
     { 
      return(false); 
     } 
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x); 
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y); 
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width); 
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height); 
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); 
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font); 
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); 
   ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,align); 
   ObjectSetInteger(chart_ID,name,OBJPROP_READONLY,read_only); 
   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner); 
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 
   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr); 
   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr); 
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 
   return(true); 
  } 
//+------------------------------------------------------------------+ 

Comments