Click Trade free

Author: Yuriy Tokman (YTG)
Orders Execution
It automatically opens orders when conditions are reachedChecks for the total of open orders
Miscellaneous
It plays sound alerts
0 Views
0 Downloads
0 Favorites
Click Trade free
ÿþ//+------------------------------------------------------------------+

//|                                                  Click Trade.mq4 |

//|                                               Yuriy Tokman (YTG) |

//|                       https://www.mql5.com/ru/users/satop/seller |

//+------------------------------------------------------------------+

#property copyright "Yuriy Tokman (YTG)"

#property link      "https://www.mql5.com/ru/users/satop/seller"

#property version   "1.00"

#property strict



input double Lot = 0.01;

input int TakeProfit = 100;

input int StopLoss = 100;



bool gbDisabled = False;



string sname="";

bool start_buy=false;

bool start_sell= false;

bool click = false;

double   price = 0;

double LL,TP,SL;

string txxt;

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit()

  {

//---

   LL=Lot;

   TP=TakeProfit;

   SL=StopLoss;

//---

   sname="Click_"+Symbol()+"_";

   LabelCreate(sname+"Lot",5,175,"LOT");//175

   EditCreate(sname+"lot",50,175,DoubleToString(LL,LotPoint()));

   LabelCreate(sname+"TP",5,140,"TP");

   EditCreate(sname+"tp",50,140,DoubleToString(TP,0));

   LabelCreate(sname+"SL",5,105,"SL");

   EditCreate(sname+"sl",50,105,DoubleToString(SL,0));

   Button(sname+"_Start Buy",clrGray,"Buy",5,70);

   Button(sname+"_Start Sell",clrGray,"Sell",5,35);

//---

   EventSetTimer(1);

//---

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

//---

   EventKillTimer();

  }

//+------------------------------------------------------------------+

void OnTimer()

  {

   if(EditTextGet(txxt,0,sname+"lot"))

      LL=StringToDouble(txxt);

   if(EditTextGet(txxt,0,sname+"tp"))

      TP=StringToDouble(txxt);

   if(EditTextGet(txxt,0,sname+"sl"))

      SL=StringToDouble(txxt);

  }

//+------------------------------------------------------------------+

void OnTick()

  {

   double stplv = MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;

   double ll=0,pp=0,sl=0,tp=0;

//---

   if(start_buy && click)

     {

      if(price>Ask)

        {

         ll=NormalizeDouble(Lot,LotPoint());

         pp=NormalizeDouble(price,Digits);

         tp=NormalizeDouble(pp+TP*Point,Digits);

         sl=NormalizeDouble(pp-SL*Point,Digits);

         SetOrder(Symbol(),OP_BUYSTOP,ll,pp,sl,tp);

         return_buy();

         return;

        }

     }



   if(start_sell && click)

     {

      if(price>Ask)

        {

         ll=NormalizeDouble(Lot,LotPoint());

         pp=NormalizeDouble(price,Digits);

         tp=NormalizeDouble(pp-TP*Point,Digits);

         sl=NormalizeDouble(pp+SL*Point,Digits);

         SetOrder(Symbol(),OP_SELLLIMIT,ll,pp,sl,tp);

         return_buy();

         return;

        }

     }

//---

  }

//+------------------------------------------------------------------+

void return_buy()

  {

   BUYfalse();

   SELLfalse();

  }

//+------------------------------------------------------------------+

void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)

  {

   static ulong last_obj_click = GetMicrosecondCount();

   bool selected;



   if(id==CHARTEVENT_OBJECT_CLICK)

     {

      string clickedChartObject=sparam;

      if(clickedChartObject==sname+"_Start Buy")

        {

         selected=ObjectGetInteger(0,sname+"_Start Buy",OBJPROP_STATE);

         if(selected)

           {

            last_obj_click = GetMicrosecondCount();

            BUYtrue();

            return;

           }

         else

            BUYfalse();

        }

      if(clickedChartObject==sname+"_Start Sell")

        {

         selected=ObjectGetInteger(0,sname+"_Start Sell",OBJPROP_STATE);

         if(selected)

           {

            last_obj_click = GetMicrosecondCount();

            SELLtrue();

            return;

           }

         else

            SELLfalse();

        }

      //+---

      ChartRedraw();

     }

//+-----

   if((start_buy || start_sell) && id==CHARTEVENT_CLICK && GetMicrosecondCount() - last_obj_click > 50)

     {

      click = true;

      int      x     =(int)lparam;

      int      y     =(int)dparam;

      datetime dt    =0;

      price = 0;

      int      window=0;

      if(ChartXYToTimePrice(0,x,y,window,dt,price))

         PrintFormat("Window=%d X=%d  Y=%d  =>  Time=%s  Price=%G",window,x,y,TimeToString(dt),price);

     }

//+---



  }

//+------------------------------------------------------------------+

void BUYtrue()

  {

   start_buy=true;

   ObjectSetInteger(0,sname+"_Start Buy",OBJPROP_BGCOLOR,clrLime);

   ObjectSetInteger(0,sname+"_Start Buy",OBJPROP_COLOR,clrRed);

   ObjectSetInteger(0,sname+"_Start Buy",OBJPROP_STATE,true);

  }

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void BUYfalse()

  {

   click = false;

   start_buy=false;

   ObjectSetInteger(0,sname+"_Start Buy",OBJPROP_BGCOLOR,clrGray);

   ObjectSetInteger(0,sname+"_Start Buy",OBJPROP_COLOR,clrWhite);

   ObjectSetInteger(0,sname+"_Start Buy",OBJPROP_STATE,false);

  }

//---

void SELLtrue()

  {

   start_sell=true;

   ObjectSetInteger(0,sname+"_Start Sell",OBJPROP_BGCOLOR,clrLime);

   ObjectSetInteger(0,sname+"_Start Sell",OBJPROP_COLOR,clrRed);

   ObjectSetInteger(0,sname+"_Start Sell",OBJPROP_STATE,true);

  }

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void SELLfalse()

  {

   click = false;

   start_sell=false;

   ObjectSetInteger(0,sname+"_Start Sell",OBJPROP_BGCOLOR,clrGray);

   ObjectSetInteger(0,sname+"_Start Sell",OBJPROP_COLOR,clrWhite);

   ObjectSetInteger(0,sname+"_Start Sell",OBJPROP_STATE,false);

  }

//----

bool Button(string name="",color clr=clrWhite,string txt="",int x=0,int y=0,int xs=120,int ys=30,int sz=12)

  {

//--- A>74048< :=>?:C

   if(ObjectFind(name)>=0)

      ObjectDelete(name);//5A;8 >1J5:B C65 A>740= C40;O5< 53>, 2284C A;CG09=>3> ?5@5B0A:820=8O <KHLN

//--- A1@>A8< 7=0G5=85 >H81:8

   ResetLastError();

   if(!ObjectCreate(0,name,OBJ_BUTTON,0,0,0))

     {

      Print(name,__FUNCTION__,": failed to create button! Error code = ",GetLastError());

      return(false);

     }

//ObjectCreate(0,name,OBJ_BUTTON,0,150,20);

   ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_LEFT_LOWER);

   ObjectSetInteger(0,name,OBJPROP_COLOR,clrWhite);

   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,clr);

   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);

   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);

   ObjectSetInteger(0,name,OBJPROP_XSIZE,xs);

   ObjectSetInteger(0,name,OBJPROP_YSIZE,ys);

   ObjectSetString(0,name,OBJPROP_FONT,"Arial Black");

   ObjectSetString(0,name,OBJPROP_TEXT,txt);

   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,sz);

   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,0);

//OBJPROP_STATE

   ObjectSetInteger(0,name,OBJPROP_STATE,false);



//OBJPROP_ZORDER

   ObjectSetInteger(0,name,OBJPROP_ZORDER,111);//@8>@8B5B 3@0D8G5A:>3> >1J5:B0

//OBJPROP_BACK

   ObjectSetInteger(0,name,OBJPROP_BACK,false);



   return(true);

  }

void GetDell(string name_n="ytg_L")

  {

   string vName;

   for(int i=ObjectsTotal()-1; i>=0; i--)

     {

      vName=ObjectName(i);

      if(StringFind(vName,name_n)!=-1)

         ObjectDelete(vName);

     }

  }

//+------------------------------------------------------------------+

int LotPoint()

  {

   double steplot = MarketInfo(Symbol(),MODE_LOTSTEP);

   int LotsDigits = (int)MathCeil(MathAbs(MathLog(steplot)/MathLog(10)));

   return(LotsDigits);

  }

//+----------------------------------------------------------------------------+

//|  ?8A0=85 : #AB0=>2:0 >@45@0. 5@A8O DC=:F88 4;O B5AB>2 =0 8AB>@88.        |

//+----------------------------------------------------------------------------+

void SetOrder(string sy, int op, double ll, double pp,double sl=0, double tp=0, int mn=0, datetime ex=0)

  {

   color clOpen;

   int   err, ticket;

   if(sy=="" || sy=="0")

      sy=Symbol();

   if(op==OP_BUYLIMIT || op==OP_BUYSTOP)

      clOpen=clrLime;

   else

      clOpen=clrRed;

   ticket=OrderSend(sy, op, ll, pp, 1, sl, tp, "", mn, ex, clOpen);

   if(ticket<0)

     {

      err=GetLastError();       //+----------------------------------------------------------------------------+

      Print("Error(",err,") set ",GetNameOP(op),": ",ErrorDescription(err));

      Print("Ask=",Ask," Bid=",Bid," sy=",sy," ll=",ll,           " pp=",pp," sl=",sl," tp=",tp," mn=",mn);

     }

   else

      PlaySound("expert.wav");

  }

//+----------------------------------------------------------------------------+

string GetNameOP(int op)

  {

   switch(op)

     {

      case OP_BUY      :

         return("Buy");

      case OP_SELL     :

         return("Sell");

      case OP_BUYLIMIT :

         return("BuyLimit");

      case OP_SELLLIMIT:

         return("SellLimit");

      case OP_BUYSTOP  :

         return("BuyStop");

      case OP_SELLSTOP :

         return("SellStop");

      default          :

         return("Unknown Operation");

     }

  }

//+----------------------------------------------------------------------------+

string GetNameTF(int TimeFrame=0)

  {

   if(TimeFrame==0)

      TimeFrame=Period();

   switch(TimeFrame)

     {

      case PERIOD_M1:

         return("M1");

      case PERIOD_M5:

         return("M5");

      case PERIOD_M15:

         return("M15");

      case PERIOD_M30:

         return("M30");

      case PERIOD_H1:

         return("H1");

      case PERIOD_H4:

         return("H4");

      case PERIOD_D1:

         return("Daily");

      case PERIOD_W1:

         return("Weekly");

      case PERIOD_MN1:

         return("Monthly");

      default:

         return("UnknownPeriod");

     }

  }

//+----------------------------------------------------------------------------+

void Message(string m)

  {

   Comment(m);

   if(StringLen(m)>0)

      Print(m);

  }

//+----------------------------------------------------------------------------+

bool ExistOrders(string sy="", int op=-1, int mn=-1, datetime ot=0)

  {

   int i, k=OrdersTotal(), ty;



   if(sy=="0")

      sy=Symbol();

   for(i=0; i<k; i++)

     {

      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

        {

         ty=OrderType();

         if(ty>1 && ty<6)

           {

            if((OrderSymbol()==sy || sy=="") && (op<0 || ty==op))

              {

               if(mn<0 || OrderMagicNumber()==mn)

                 {

                  if(ot<=OrderOpenTime())

                     return(true);

                 }

              }

           }

        }

     }

   return(false);

  }

//----

string ErrorDescription(int err)

  {

   return((string)err);

  }

//+------------------------------------------------------------------+

//| !>7405B B5:AB>2CN <5B:C                                          |

//+------------------------------------------------------------------+

bool LabelCreate(

   const string            name="Label",             // 8<O <5B:8

   const int               x=0,                      // :>>@48=0B0 ?> >A8 X

   const int               y=0,                      // :>>@48=0B0 ?> >A8 Y

   const string            text="Label",             // B5:AB

   const long              chart_ID=0,               // ID 3@0D8:0

   const int               sub_window=0,             // =><5@ ?>4>:=0

   const ENUM_BASE_CORNER  corner=CORNER_LEFT_LOWER, // C3>; 3@0D8:0 4;O ?@82O7:8

   const string            font="Arial Black",             // H@8DB

   const int               font_size=12,             // @07<5@ H@8DB0

   const color             clr=clrRed,               // F25B

   const double            angle=0.0,                // =0:;>= B5:AB0

   const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // A?>A>1 ?@82O7:8

   const bool              back=false,               // =0 704=5< ?;0=5

   const bool              selection=false,          // 2K45;8BL 4;O ?5@5<5I5=89

   const bool              hidden=true,              // A:@KB 2 A?8A:5 >1J5:B>2

   const long              z_order=0)                // ?@8>@8B5B =0 =060B85 <KHLN

  {

//----

   if(ObjectFind(name)>=0)

      ObjectDelete(name);//5A;8 >1J5:B C65 A>740= C40;O5< 53>, 2284C A;CG09=>3> ?5@5B0A:820=8O <KHLN

//--- A1@>A8< 7=0G5=85 >H81:8

   ResetLastError();

//--- A>74048< B5:AB>2CN <5B:C

   if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0))

     {

      Print(__FUNCTION__,

            ": failed to create text label! Error code = ",GetLastError());

      return(false);

     }

//--- CAB0=>28< :>>@48=0BK <5B:8

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);

   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);

//--- CAB0=>28< C3>; 3@0D8:0, >B=>A8B5;L=> :>B>@>3> 1C4CB >?@545;OBLAO :>>@48=0BK B>G:8

   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);

//--- CAB0=>28< B5:AB

   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);

//--- CAB0=>28< H@8DB B5:AB0

   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);

//--- CAB0=>28< @07<5@ H@8DB0

   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);

//--- CAB0=>28< C3>; =0:;>=0 B5:AB0

   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);

//--- CAB0=>28< A?>A>1 ?@82O7:8

   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);

//--- CAB0=>28< F25B

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);

//--- >B>1@078< =0 ?5@54=5< (false) 8;8 704=5< (true) ?;0=5

   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);

//--- 2:;NG8< (true) 8;8 >B:;NG8< (false) @568< ?5@5<5I5=8O <5B:8 <KHLN

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

//--- A:@>5< (true) 8;8 >B>1@078< (false) 8<O 3@0D8G5A:>3> >1J5:B0 2 A?8A:5 >1J5:B>2

   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);

//--- CAB0=>28< ?@8>@8B5B =0 ?>;CG5=85 A>1KB8O =060B8O <KH8 =0 3@0D8:5

   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);

//--- CA?5H=>5 2K?>;=5=85

   return(true);

  }

//----

//+------------------------------------------------------------------+

//| !>7405B >1J5:B ">;5 22>40"                                      |

//+------------------------------------------------------------------+

bool EditCreate(

   const string           name="Edit",              // 8<O >1J5:B0

   const int              x=0,                      // :>>@48=0B0 ?> >A8 X

   const int              y=0,                      // :>>@48=0B0 ?> >A8 Y

   const string           text="Text",              // B5:AB

   const long             chart_ID=0,               // ID 3@0D8:0

   const int              sub_window=0,             // =><5@ ?>4>:=0

   const int              width=75,                 // H8@8=0

   const int              height=30,                // 2KA>B0

   const string           font="Arial Black",             // H@8DB

   const int              font_size=12,             // @07<5@ H@8DB0

   const ENUM_ALIGN_MODE  align=ALIGN_CENTER,       // A?>A>1 2K@02=820=8O

   const bool             read_only=false,          // 2>7<>6=>ABL @540:B8@>20BL

   const ENUM_BASE_CORNER corner=CORNER_LEFT_LOWER, // C3>; 3@0D8:0 4;O ?@82O7:8

   const color            clr=clrGreen,             // F25B B5:AB0

   const color            back_clr=clrWhite,        // F25B D>=0

   const color            border_clr=clrNONE,       // F25B 3@0=8FK

   const bool             back=false,               // =0 704=5< ?;0=5

   const bool             selection=false,          // 2K45;8BL 4;O ?5@5<5I5=89

   const bool             hidden=true,              // A:@KB 2 A?8A:5 >1J5:B>2

   const long             z_order=0)                // ?@8>@8B5B =0 =060B85 <KHLN

  {

   if(ObjectFind(name)>=0)

      ObjectDelete(name);//5A;8 >1J5:B C65 A>740= C40;O5< 53>, 2284C A;CG09=>3> ?5@5B0A:820=8O <KHLN

//--- A1@>A8< 7=0G5=85 >H81:8

   ResetLastError();

//--- A>74048< ?>;5 22>40

   if(!ObjectCreate(chart_ID,name,OBJ_EDIT,sub_window,0,0))

     {

      Print(__FUNCTION__,

            ": Could not create object \"Input field\"! Error code = ",GetLastError());

      return(false);

     }

//--- CAB0=>28< :>>@48=0BK >1J5:B0

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);

   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);

//--- CAB0=>28< @07<5@K >1J5:B0

   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);

   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);

//--- CAB0=>28< B5:AB

   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);

//--- CAB0=>28< H@8DB B5:AB0

   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);

//--- CAB0=>28< @07<5@ H@8DB0

   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);

//--- CAB0=>28< A?>A>1 2K@02=820=8O B5:AB0 2 >1J5:B5

   ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,align);

//--- CAB0=>28< (true) 8;8 >B<5=8< (false) @568< B>;L:> 4;O GB5=8O

   ObjectSetInteger(chart_ID,name,OBJPROP_READONLY,read_only);

//--- CAB0=>28< C3>; 3@0D8:0, >B=>A8B5;L=> :>B>@>3> 1C4CB >?@545;OBLAO :>>@48=0BK >1J5:B0

   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);

//--- CAB0=>28< F25B B5:AB0

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);

//--- CAB0=>28< F25B D>=0

   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);

//--- CAB0=>28< F25B 3@0=8FK

   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);

//--- >B>1@078< =0 ?5@54=5< (false) 8;8 704=5< (true) ?;0=5

   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);

//--- 2:;NG8< (true) 8;8 >B:;NG8< (false) @568< ?5@5<5I5=8O <5B:8 <KHLN

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

//--- A:@>5< (true) 8;8 >B>1@078< (false) 8<O 3@0D8G5A:>3> >1J5:B0 2 A?8A:5 >1J5:B>2

   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);

//--- CAB0=>28< ?@8>@8B5B =0 ?>;CG5=85 A>1KB8O =060B8O <KH8 =0 3@0D8:5

   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);

//--- CA?5H=>5 2K?>;=5=85

   return(true);

  }

//----

//+------------------------------------------------------------------+

//| >72@0I05B B5:AB >1J5:B0 ">;5 22>40"                            |

//+------------------------------------------------------------------+

bool EditTextGet(string      &text,        // B5:AB

                 const long   chart_ID=0,  // ID 3@0D8:0

                 const string name="Edit") // 8<O >1J5:B0

  {

//--- A1@>A8< 7=0G5=85 >H81:8

   ResetLastError();

//--- ?>;CG8< B5:AB >1J5:B0

   if(!ObjectGetString(chart_ID,name,OBJPROP_TEXT,0,text))

     {

      Print(__FUNCTION__,

            ": failed to get text! Error code = ",GetLastError());

      return(false);

     }

//--- CA?5H=>5 2K?>;=5=85

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