cm-ManualTrade

Author: Copyright 2016, cmillion@narod.ru
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
Miscellaneous
It opens Message Boxes to the user
0 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

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