VisualTrader-SimulatorEdition

Author: when-money-makes-money.com
Profit factor:
0.00
Orders Execution
It can change open orders parameters, due to possible stepping strategyIt automatically opens orders when conditions are reachedChecks for the total of open orders
1 Views
0 Downloads
0 Favorites
VisualTrader-SimulatorEdition
//+------------------------------------------------------------------+
//|                                                 OrderManager.mq4 |
//|                                                                  |
//|                                       when-money-makes-money.com |
//+------------------------------------------------------------------+
#property copyright "when-money-makes-money.com"
#property link      "when-money-makes-money.com"
extern color StoplossColor=Red;
extern color TakeprofitColor=Green;
extern color OpenPriceColor=Magenta;

#define MODE_INIT 3
#define MODE_DEINIT 2
#define MODE_NORMAL 1


double pmod;

void DeleteGFX(int tickets[]){
   for(int i=ArraySize(tickets)-1;i>=0;i--){
      ObjectDelete(tickets[i]+"-sl");
      ObjectDelete(tickets[i]+"-open");
      ObjectDelete(tickets[i]+"-tp");      
      ObjectDelete(tickets[i]+"-sl_l");
      ObjectDelete(tickets[i]+"-tp_l"); 
   }
}

void UpdateGFX(int tickets[]){
   for(int i=ArraySize(tickets)-1;i>=0;i--){
      OrderSelect(tickets[i],SELECT_BY_TICKET);
      ObjectCreate(tickets[i]+"-sl",OBJ_HLINE,0,0,OrderStopLoss());
      ObjectSet(tickets[i]+"-sl",OBJPROP_PRICE1,OrderStopLoss());
      ObjectSet(tickets[i]+"-sl",OBJPROP_COLOR,StoplossColor);    
      ObjectCreate(tickets[i]+"-sl_l",OBJ_TEXT,0,OrderOpenTime(),OrderStopLoss());
      ObjectSet(tickets[i]+"-sl_l",OBJPROP_TIME1,OrderOpenTime());
      ObjectSet(tickets[i]+"-sl_l",OBJPROP_PRICE1,OrderStopLoss());
      ObjectSet(tickets[i]+"-sl_l",OBJPROP_COLOR,StoplossColor);  
      ObjectSetText(tickets[i]+"-sl_l","[SL]"+OrderTicket()+"  for "+DoubleToStr(MathAbs(OrderOpenPrice()-OrderStopLoss())/pmod,1)+" pips");  

      ObjectCreate(tickets[i]+"-tp",OBJ_HLINE,0,0,OrderTakeProfit());
      ObjectSet(tickets[i]+"-tp",OBJPROP_COLOR,TakeprofitColor);   
      ObjectSet(tickets[i]+"-tp",OBJPROP_PRICE1,OrderTakeProfit());
      ObjectCreate(tickets[i]+"-tp_l",OBJ_TEXT,0,OrderOpenTime(),OrderTakeProfit());
      ObjectSet(tickets[i]+"-tp_l",OBJPROP_TIME1,OrderOpenTime());
      ObjectSet(tickets[i]+"-tp_l",OBJPROP_PRICE1,OrderTakeProfit());
      ObjectSet(tickets[i]+"-tp_l",OBJPROP_COLOR,TakeprofitColor);  
      ObjectSetText(tickets[i]+"-tp_l","[TP]"+OrderTicket()+"  for "+DoubleToStr(MathAbs(OrderOpenPrice()-OrderTakeProfit())/pmod,1)+" pips");  


      
      ObjectCreate(tickets[i]+"-open",OBJ_HLINE,0,0,OrderOpenPrice());
      ObjectSet(tickets[i]+"-open",OBJPROP_COLOR,OpenPriceColor);      
      ObjectSet(tickets[i]+"-open",OBJPROP_PRICE1,OrderOpenPrice());   
   }   
}

void RecalcByGFX(int &tickets[],double &sl[], double &tp[]){
   for(int i=ArraySize(tickets)-1;i>=0;i--){
      OrderSelect(tickets[i],SELECT_BY_TICKET);
      double gfx.tp,gfx.sl;
      gfx.tp=NormalizeDouble(ObjectGet(tickets[i]+"-tp",OBJPROP_PRICE1),Digits);
      if(gfx.tp!=OrderTakeProfit()){
         if(gfx.tp!=tp[i]){
            if(OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(gfx.tp,Digits),0,CLR_NONE)){
               tp[i]=gfx.tp;
               ObjectSet(tickets[i]+"-tp_l",OBJPROP_TIME1,OrderOpenTime());
               ObjectSet(tickets[i]+"-tp_l",OBJPROP_PRICE1,gfx.tp);
               ObjectSet(tickets[i]+"-tp_l",OBJPROP_COLOR,TakeprofitColor);  
               ObjectSetText(tickets[i]+"-tp_l","[TP]"+OrderTicket()+"  for "+DoubleToStr(MathAbs(OrderOpenPrice()-gfx.tp)/pmod,1)+" pips");  

            }
         }else{
            ObjectSet(tickets[i]+"-tp",OBJPROP_PRICE1,OrderTakeProfit());
            ObjectSet(tickets[i]+"-tp_l",OBJPROP_TIME1,OrderOpenTime());
            ObjectSet(tickets[i]+"-tp_l",OBJPROP_PRICE1,OrderTakeProfit());
            ObjectSet(tickets[i]+"-tp_l",OBJPROP_COLOR,TakeprofitColor);  
            ObjectSetText(tickets[i]+"-tp_l","[TP]"+OrderTicket()+"  for "+DoubleToStr(MathAbs(OrderOpenPrice()-OrderTakeProfit())/pmod,1)+" pips");  

            tp[i]=gfx.tp;               
         }
      }

      gfx.sl=NormalizeDouble(ObjectGet(tickets[i]+"-sl",OBJPROP_PRICE1),Digits);
      if(gfx.sl!=OrderStopLoss()){
         if(gfx.sl!=sl[i]){
            if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(gfx.sl,Digits),OrderTakeProfit(),0,CLR_NONE)){
               sl[i]=gfx.sl;
               ObjectSet(tickets[i]+"-sl_l",OBJPROP_TIME1,OrderOpenTime());
               ObjectSet(tickets[i]+"-sl_l",OBJPROP_PRICE1,gfx.sl);
               ObjectSet(tickets[i]+"-sl_l",OBJPROP_COLOR,StoplossColor);  
               ObjectSetText(tickets[i]+"-sl_l","[SL]"+OrderTicket()+"  for "+DoubleToStr(MathAbs(OrderOpenPrice()-gfx.sl)/pmod,1)+" pips");  

            }
         }else{
            ObjectSet(tickets[i]+"-sl",OBJPROP_PRICE1,OrderStopLoss());
            ObjectSet(tickets[i]+"-sl_l",OBJPROP_TIME1,OrderOpenTime());
            ObjectSet(tickets[i]+"-sl_l",OBJPROP_PRICE1,OrderStopLoss());
            ObjectSet(tickets[i]+"-sl_l",OBJPROP_COLOR,StoplossColor);  
            ObjectSetText(tickets[i]+"-sl_l","[SL]"+OrderTicket()+"  for "+DoubleToStr(MathAbs(OrderOpenPrice()-OrderStopLoss())/pmod,1)+" pips");  

            sl[i]=gfx.sl;               
         }
      }

   }   
}



void OrderManager(int mode){
   static int tickets[];
   static double tp[];
   static double sl[];
   string prefix="";
   if(IsTesting()) prefix="";
   if(GlobalVariableCheck(prefix+"NewTrade")){
      int nt_mode=(GlobalVariableGet(prefix+"NewTrade_mode"));
      double nt_lot=(GlobalVariableGet(prefix+"NewTrade_lot"));
      int nt_tp=(GlobalVariableGet(prefix+"NewTrade_tp"));
      int nt_sl=(GlobalVariableGet(prefix+"NewTrade_sl"));   
      double pmod=1;
      if(Digits==5 || Digits==3) pmod=10;
      double nt_slippage=0;
      double nt_stoploss=0;
      double nt_takeprofit=0;
      double nt_op;
      switch(nt_mode){
         case OP_BUY:{
            nt_op=Ask;
            nt_stoploss=nt_op-(nt_sl*Point*pmod);
            nt_takeprofit=nt_op+(nt_tp*Point*pmod);
            break;
         }
         case OP_SELL:{
            nt_op=Bid;
            nt_stoploss=nt_op+(nt_sl*Point*pmod);
            nt_takeprofit=nt_op-(nt_tp*Point*pmod);
            break;
         }
      }
      Print(nt_lot);
      int err=OrderSend(Symbol(),nt_mode,NormalizeDouble(nt_lot,2),nt_op,nt_slippage,NormalizeDouble(nt_stoploss,Digits),NormalizeDouble(nt_takeprofit,Digits),"when-money-makes-money.com",0,0,CLR_NONE);         
      /*if(err>=0)*/ GlobalVariableDel(prefix+"NewTrade");
   }

   
   if(mode==MODE_DEINIT){
      DeleteGFX(tickets);
   }else{
      if(mode==MODE_INIT){
         ArrayResize(tickets,0);
      }
   
      int i=0;
      int OpenOrdersOnSymbol=0;
      for(i=OrdersTotal()-1;i>=0;i--){
         OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()==Symbol()){
            OpenOrdersOnSymbol++;
         }
      }
      if(OpenOrdersOnSymbol!=ArraySize(tickets)){
         DeleteGFX(tickets);
         ArrayResize(tickets,OpenOrdersOnSymbol);
         ArrayResize(tp,OpenOrdersOnSymbol);
         ArrayResize(sl,OpenOrdersOnSymbol);
         int j=0;
         for(i=OrdersTotal()-1;i>=0;i--){
            OrderSelect(i,SELECT_BY_POS);
            if(OrderSymbol()==Symbol()){
               tickets[j]=OrderTicket();
               sl[j]=OrderStopLoss();
               tp[j]=OrderStopLoss();
               j++;
            }
         }
         UpdateGFX(tickets);
      }else{
         RecalcByGFX(tickets,tp,sl);
      }
   }
   Comment("NR of orders: "+ArraySize(tickets)+"\nwww.when-money-makes-money.com");
}

int init(){
   ObjectCreate("logo",OBJ_LABEL,0,0,0);
   ObjectSetText("logo","when-money-makes-money.com",20);
   ObjectSet("logo",OBJPROP_XDISTANCE,0);
   ObjectSet("logo",OBJPROP_YDISTANCE,30);
   if(Digits==5||Digits==3){
      pmod=Point*10;
   }else{
      pmod=Point;
   }
   OrderManager(MODE_INIT);
      GlobalVariableDel("NewTrade");
      GlobalVariableDel("NewTrade_mode");
      GlobalVariableDel("NewTrade_lot");
      GlobalVariableDel("NewTrade_tp");
      GlobalVariableDel("NewTrade_sl");  
   return(0);
}

color lc[]={Yellow,Gold,Orange,DarkOrange,OrangeRed,Red,OrangeRed,DarkOrange,Orange,Gold};
int currc=0;
int start()
{
   if(IsTesting()){
   OrderManager(MODE_NORMAL);
   }
   ObjectSet("logo",OBJPROP_COLOR,lc[currc]);
   currc++;
   if(currc>=ArraySize(lc))currc=0;
   return(0);
}

int deinit(){
   OrderManager(MODE_DEINIT);
      GlobalVariableDel("NewTrade");
      GlobalVariableDel("NewTrade_mode");
      GlobalVariableDel("NewTrade_lot");
      GlobalVariableDel("NewTrade_tp");
      GlobalVariableDel("NewTrade_sl");   
   return(0);
}
//+------------------------------------------------------------------+

Comments