VisualTrading

Author: Dmitry Yakovlev, Russia,Omsk, WM R865705290089
VisualTrading
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It can change open orders parameters, due to possible stepping strategyChecks for the total of closed orders
Miscellaneous
It opens Message Boxes to the userUses files from the file systemIt reads information from a fileIt writes information to file
0 Views
0 Downloads
0 Favorites
VisualTrading
//+------------------------------------------------------------------+
//|                                                VisualTrading.mq4 |
//|                   Dmitry Yakovlev, Russia,Omsk, WM R865705290089 |
//|                                       dmitry_yakovlev@rambler.ru |
//+------------------------------------------------------------------+
#property copyright "Dmitry Yakovlev, Russia,Omsk, WM R865705290089"
#property link      "dmitry_yakovlev@rambler.ru"

#import  "shell32.dll"           //Connect a dll (provided with Windows)             
  int ShellExecuteA(int hwnd,string Operation,string File,string Parameters,string Directory,int ShowCmd); 
#import "user32.dll"
  int MessageBoxA(int hWnd ,string lpText,string lpCaption,int uType);
#import

extern color      OpenColor=Yellow;
extern color      TakeProfitColor=Lime;
extern color      StopLossColor=Red;
extern bool       lShowTargets=true;
extern string     _donate1="Äëÿ $ áëàãîäàðíîñòåé:";
extern string     _donate2="R865705290089";

int cnt=0;
int awh[];

void init()
{
   int i=0,j=0;
   string n;
   
   CheckDonate();
   
   DeleteHistory();
   for(i=0;i<OrdersTotal();i++)
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && (OrderSymbol()==Symbol()))
   {
         n=OrderSymbol()+"_"+DoubleToStr(OrderTicket(),0)+"_"+DoubleToStr(Period(),0);
         if(ObjectFind(n+"open")==-1)
            {ObjectCreate(n+"open",OBJ_HLINE,awh[j],Time[0],OrderOpenPrice()); ObjectSet(n+"open",OBJPROP_COLOR,OpenColor);}
         
         if(OrderStopLoss()!=0 && ObjectFind(n+"stop")==-1)
            {ObjectCreate(n+"stop",OBJ_HLINE,awh[j],Time[0],OrderStopLoss()); ObjectSet(n+"stop",OBJPROP_COLOR,StopLossColor);}
         
         if(OrderTakeProfit()!=0 && ObjectFind(n+"take")==-1)
            {ObjectCreate(n+"take",OBJ_HLINE,awh[j],Time[0],OrderTakeProfit()); ObjectSet(n+"take",OBJPROP_COLOR,TakeProfitColor);}
   }

   DeleteLabels();
   ShowLabels();
   cnt=OrdersTotal();
}

void deinit()
{
   string n;
   int i=0,j=0;
   
   for(i=0;i<OrdersTotal();i++)
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && (OrderSymbol()==Symbol()))
   {
         n=OrderSymbol()+"_"+DoubleToStr(OrderTicket(),0)+"_"+DoubleToStr(Period(),0);
         if(ObjectFind(n+"open")!=-1) ObjectDelete(n+"open");
         if(ObjectFind(n+"stop")!=-1) ObjectDelete(n+"stop");
         if(ObjectFind(n+"take")!=-1) ObjectDelete(n+"take");
   }
   DeleteHistory();
   for(i=0;i<30;i++)
   {
      ObjectDelete(Symbol()+DoubleToStr(Period(),0)+"topen"+i);
      ObjectDelete(Symbol()+DoubleToStr(Period(),0)+"ttake"+i);
      ObjectDelete(Symbol()+DoubleToStr(Period(),0)+"tstop"+i);
   }
   DeleteLabels();
}

void start()
{
   string n;
   int i=0,j=0;

   if(cnt!=OrdersTotal()) init();
   
   DeleteHistory();
   DeleteLabels();

   double popen, ptake, pstop;
   for(i=0;i<OrdersTotal();i++)
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && (OrderSymbol()==Symbol()))
   {
      n=OrderSymbol()+"_"+DoubleToStr(OrderTicket(),0)+"_"+DoubleToStr(Period(),0);

      if((ObjectFind(n+"stop")==-1) && (OrderStopLoss()!=0))
      //if(MessageBox("Óáðàòü ñòîï ëîññ?","Óáðàòü?",4)==6)
      //{
      //   OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),0,CLR_NONE);
      //   ObjectDelete(n+"stop");
      //   continue;
      //}
      //else
      {
         ObjectCreate(n+"stop",OBJ_HLINE,awh[j],Time[0],OrderStopLoss()); ObjectSet(n+"stop",OBJPROP_COLOR,StopLossColor);
      }
      
      if((ObjectFind(n+"take")==-1) && (OrderTakeProfit()!=0))
      //if(MessageBox("Óáðàòü òåéê ïðîôèò?","Óáðàòü?",4)==6)
      //{
      //   OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),0,0,CLR_NONE);
      //   ObjectDelete(n+"take");
      //   continue;
      //}
      //else
      {
         ObjectCreate(n+"take",OBJ_HLINE,awh[j],Time[0],OrderTakeProfit()); ObjectSet(n+"take",OBJPROP_COLOR,TakeProfitColor);
      }
   
      if(ObjectFind(n+"open")==-1)
      if(MessageBox("Çàêðûòü îðäåð "+OrderTicket()+"?","Çàêðûòü?",4)==6)
      {
         if(OrderType()==OP_BUY) popen=Bid;
         if(OrderType()==OP_SELL) popen=Ask;
         OrderClose(OrderTicket(),OrderLots(),popen,3,CLR_NONE);
         OrderDelete(OrderTicket());
         ObjectDelete(n+"take");
         ObjectDelete(n+"stop");
         continue;
      }
      else
      {
         ObjectCreate(n+"open",OBJ_HLINE,awh[j],Time[0],OrderOpenPrice()); ObjectSet(n+"open",OBJPROP_COLOR,OpenColor);
      }
   
      popen=NormalizeDouble(ObjectGet(n+"open",OBJPROP_PRICE1),Digits);
      ptake=NormalizeDouble(ObjectGet(n+"take",OBJPROP_PRICE1),Digits);
      pstop=NormalizeDouble(ObjectGet(n+"stop",OBJPROP_PRICE1),Digits);
      //Comment("");
      if((popen!=NormalizeDouble(OrderOpenPrice(),Digits)) || (pstop!=NormalizeDouble(OrderStopLoss(),Digits)) || (ptake!=NormalizeDouble(OrderTakeProfit(),Digits)))
      {
         if((OrderType()!=OP_BUY) && (OrderType()!=OP_SELL) && (NormalizeDouble(popen,Digits)!=NormalizeDouble(OrderOpenPrice(),Digits)))
         {
            OrderModify(OrderTicket(),popen,OrderStopLoss(),OrderTakeProfit(),0,CLR_NONE);//continue;
         }
         if(((OrderType()==OP_BUY) || (OrderType()==OP_SELL)) && (NormalizeDouble(popen,Digits)!=NormalizeDouble(OrderOpenPrice(),Digits)))
         {
            ObjectSet(n+"open",OBJPROP_PRICE1,OrderOpenPrice());//continue;
         }
         if((OrderType()==OP_BUY) && (NormalizeDouble(pstop,Digits)>Bid))
         {
            ObjectSet(n+"stop",OBJPROP_PRICE1,OrderStopLoss());//continue;
         }
         if((OrderType()==OP_SELL) && (NormalizeDouble(pstop,Digits)<Ask))
         {
            ObjectSet(n+"stop",OBJPROP_PRICE1,OrderStopLoss());//continue;
         }
         
         if((NormalizeDouble(ptake,Digits)!=NormalizeDouble(OrderTakeProfit(),Digits)) && (OrderTakeProfit()!=0) && (ptake!=0))
         {
            OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),ptake,0,CLR_NONE);//continue;
         }
         if((NormalizeDouble(pstop,Digits)!=NormalizeDouble(OrderStopLoss(),Digits)) && (OrderStopLoss()!=0) && (pstop!=0))
         {
            OrderModify(OrderTicket(),OrderOpenPrice(),pstop,OrderTakeProfit(),0,CLR_NONE);//continue;
         }
      }
   } 
   
   ShowLabels();
   if(lShowTargets) fShowTargets();

   WindowRedraw();
}

void DeleteHistory()
{
   string n;
   int i=0,j=0;
   
   for(i=0;i<OrdersHistoryTotal();i++)
   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderSymbol()==Symbol()))
   {
      n=OrderSymbol()+"_"+DoubleToStr(OrderTicket(),0)+"_"+DoubleToStr(Period(),0);

      if(ObjectFind(n+"open")!=-1) ObjectDelete(n+"open");
      if(ObjectFind(n+"stop")!=-1) ObjectDelete(n+"stop");
      if(ObjectFind(n+"take")!=-1) ObjectDelete(n+"take");
   }
}

void fShowTargets()
{
   int      i=0, prof_pts=0, ticket=0; 
   double   dist_stop_pts, dist_stop;
   double   dist_take_pts, dist_take;
   double   pr=(Ask+Bid)/2, prof=0;
   datetime CT=Time[0]+Period()*60*(WindowBarsPerChart()/20+2); // time shift
   double   CP=5*Point; // price shift
   int      FS=10; // font size
   color    prof_clr=Blue;
   string   txt="";
   //-------------------------------------------------------------
   for(i=0;i<10;i++)
   {
      ObjectDelete(Symbol()+DoubleToStr(Period(),0)+"topen"+i);
      ObjectDelete(Symbol()+DoubleToStr(Period(),0)+"ttake"+i);
      ObjectDelete(Symbol()+DoubleToStr(Period(),0)+"tstop"+i);
   }
   for(i=0;i<OrdersTotal();i++)
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
   {
      // <---ñ÷èòàåì
      RefreshRates();
      prof=OrderProfit();
      if(OrderType()==OP_BUY || OrderType()==3 || OrderType()==4) 
      {
         pr=Bid;
         prof_pts=pr/Point-OrderOpenPrice()/Point;
      }
      if(OrderType()==OP_SELL || OrderType()==2 || OrderType()==5)
      {
         pr=Ask;
         prof_pts=OrderOpenPrice()/Point-pr/Point;
      }
      prof_clr=Blue;
      if(prof_pts<0) prof_clr=Red;
      if(prof_pts>0) prof_clr=Green;
      ObjectCreate(Symbol()+DoubleToStr(Period(),0)+"topen"+i,OBJ_TEXT,0,CT,OrderOpenPrice()+CP);
      txt="";
      if(OrderType()==0 || OrderType()==1) txt=" ("+DoubleToStr(MathAbs(prof),2)+"$)";
      ObjectSetText(Symbol()+DoubleToStr(Period(),0)+"topen"+i,DoubleToStr(MathAbs(prof_pts),0)+txt,FS,"Arial",prof_clr);

      dist_take_pts=0;dist_take=0;
      if(OrderTakeProfit()!=0) 
      {
         dist_take_pts=MathAbs(pr/Point-OrderTakeProfit()/Point);
         txt=DoubleToStr(dist_take_pts,0);
         dist_take_pts=MathAbs(OrderOpenPrice()/Point-OrderTakeProfit()/Point);
         txt=txt+"("+DoubleToStr(dist_take_pts,0)+"/"+DoubleToStr(dist_take_pts*OrderLots()*10,0)+"$)";
         
         ObjectCreate(Symbol()+DoubleToStr(Period(),0)+"ttake"+i,OBJ_TEXT,0,CT,OrderTakeProfit()+CP);
         ObjectSetText(Symbol()+DoubleToStr(Period(),0)+"ttake"+i,txt,FS,"Arial",Green);
      }
      
      dist_stop_pts=0;dist_stop=0;
      if(OrderStopLoss()!=0)
      {
         dist_stop_pts=MathAbs(pr/Point-OrderStopLoss()/Point);
         txt=DoubleToStr(dist_stop_pts,0);
         dist_stop_pts=MathAbs(OrderOpenPrice()/Point-OrderStopLoss()/Point);
         txt=txt+"("+DoubleToStr(dist_stop_pts,0)+"/"+DoubleToStr(dist_stop_pts*OrderLots()*10,0)+"$)";

         ObjectCreate(Symbol()+DoubleToStr(Period(),0)+"tstop"+i,OBJ_TEXT,0,CT,OrderStopLoss()+CP);
         ObjectSetText(Symbol()+DoubleToStr(Period(),0)+"tstop"+i,txt,FS,"Arial",Red);
      }
      // ðèñóåì--->
   }
}

void DeleteLabels()
{
   int i=0;
   string n="";
   int t=Time[WindowFirstVisibleBar()];
   
   for(i=0;i<OrdersHistoryTotal();i++)
   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderSymbol()==Symbol())
   {
      n=OrderSymbol()+Period()+DoubleToStr(OrderTicket(),0);
      ObjectDelete(n+"stoplbl");
      ObjectDelete(n+"takelbl");
   }
   
   for(i=0;i<OrdersTotal();i++)
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol())
   {
      n=OrderSymbol()+Period()+DoubleToStr(OrderTicket(),0);
      ObjectDelete(n+"stoplbl");
      ObjectDelete(n+"takelbl");
   }
}

void ShowLabels()
{
   int i=0;
   string n="";
   int t=Time[WindowFirstVisibleBar()-(WindowBarsPerChart()/20)];
   
   //Comment(WindowBarsPerChart());
   
   for(i=0;i<OrdersTotal();i++)
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol())
   {
      n=OrderSymbol()+Period()+DoubleToStr(OrderTicket(),0);

      ObjectDelete(n+"stoplbl");
      ObjectCreate(n+"stoplbl",OBJ_TEXT,0,t,OrderStopLoss()); 
      ObjectSetText(n+"stoplbl","#"+DoubleToStr(OrderTicket(),0)+"  stop",8,"Arial",StopLossColor);
   
      ObjectDelete(n+"takelbl");
      ObjectCreate(n+"takelbl",OBJ_TEXT,0,t,OrderTakeProfit()); 
      ObjectSetText(n+"takelbl","#"+DoubleToStr(OrderTicket(),0)+"  take",8,"Arial",TakeProfitColor);
   }
}

void CheckDonate()
{
   int fd=0; string pay="0"; datetime dt=0;
   string fn="VisualTrading.txt";
   fd=FileOpen(fn,FILE_READ|FILE_CSV,";");
   if(fd>=1)
   {
      pay=FileReadString(fd); if(pay!="0" && pay!="1") pay="0";
      dt=StrToTime(FileReadString(fd));
   }
   else
   {
      dt=TimeCurrent();
      fd=FileOpen(fn,FILE_WRITE|FILE_CSV,";");
      FileWrite(fd,"0",TimeToStr(dt,TIME_DATE));
   }
   FileClose(fd);
   
   if(pay=="0" && (TimeCurrent()-dt)>10*24*60*60) // 5 äíåé
   {
      if(MessageBoxA(0,"Åñëè Âàì ïîíðàâèëñÿ ñîâåòíèê VisualTrading,\n õîòèòå ïîìî÷ü àâòîðó ìàòåðèàëüíî?","Âîïðîñ",4)==6)
      {
         ShellExecuteA(0,"Open","iexplore.exe","wmk:payto?Purse=R865705290089&Amount=100&Desc=VisualTrading&BringToFront=Y&ExecEvenKeeperIsOffline=Y","",7);
         pay="1";
      }
      dt=TimeCurrent();
      
      fd=FileOpen(fn,FILE_WRITE|FILE_CSV,";");
      FileWrite(fd,pay,TimeToStr(dt,TIME_DATE));
      FileClose(fd);
   }
   FileClose(fd);
}





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