Author: Copyright
Price Data Components
Series array that contains open time of each barSeries array that contains open prices of each barSeries array that contains close prices for each bar
Orders Execution
It automatically opens orders when conditions are reachedIt Closes Orders by itself It can change open orders parameters, due to possible stepping strategyChecks for the total of open ordersChecks for the total of closed orders
Miscellaneous
It opens Message Boxes to the userIt plays sound alerts
0 Views
0 Downloads
0 Favorites
TradePanel
ÿþ//+--------------------------------------------------------------------------+

//|           _____               _        ___                 _             |

//|          /__   \_ __ __ _  __| | ___  / _ \__ _ _ __   ___| |            |

//|            / /\/ '__/ _` |/ _` |/ _ \/ /_)/ _` | '_ \ / _ \ |            |

//|           / /  | | | (_| | (_| |  __/ ___/ (_| | | | |  __/ |            |

//|           \/   |_|  \__,_|\__,_|\___\/    \__,_|_| |_|\___|_|            |

//|                                                                          |

//| Open-source software (OSS)                                TradePanel.mq4 |

//| Provided free of charge                          Copyright © 2018, MhFx7 |

//| By MhFx7                             https://www.mql5.com/en/users/mhfx7 |

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

#define Copyright    "Copyright © 2018, MhFx7"

#property copyright  Copyright

#property link       "https://www.mql5.com/en/users/mhfx7"

#define ExpertName   "TradePanel"

#define Version      "1.10"

#property version    Version

#property strict

//--

#define KEY_LEFT           37 

#define KEY_RIGHT          39 

#define KEY_UP             38 

#define KEY_DOWN           40 

//--

#define INDENT_TOP         15

#define INDENT_BOTTOM      30

//--

#define CLIENT_BG_X        5

#define CLIENT_BG_Y        20

//--

#define CLIENT_BG_WIDTH    245

#define CLIENT_BG_HEIGHT   150

//--

#define BUTTON_WIDTH       75

#define BUTTON_HEIGHT      20

//--

#define BUTTON_GAP_X       5

#define BUTTON_GAP_Y       5

//--

#define EDIT_WIDTH         75

#define EDIT_HEIGHT        18

//--

#define EDIT_GAP_X         15

#define EDIT_GAP_Y         15

//--

#define SPEEDTEXT_GAP_X    240

#define SPEEDTEXT_GAP_Y    28

//--

#define SPEEDBAR_GAP_X     210

#define SPEEDBAR_GAP_Y     28

//--

#define LIGHT              0

#define DARK               1

//--

#define CLOSEALL           0

#define CLOSELAST          1

#define CLOSEPROFIT        2

#define CLOSELOSS          3

#define CLOSEPARTIAL       4

//--

#define OPENPRICE          0

#define CLOSEPRICE         1

//--

#define OP_ALL             -1

//--

#define OBJPREFIX          "TP - "

//--

bool TimerIsEnabled        = false;

int TimerInterval          = 250;

//--

int MagicNumber            = 0;

int Slippage               = 3;

double LotSize             = 0;

double LotStep             = 0;

double MinLot              = 0;

double MaxLot              = 0;

double MinStop             = 0;

double StopLoss            = 0;

double TakeProfit          = 0;

//--

double LotSizeInp          = 0;

double StopLossInp         = 0;

double TakeProfitInp       = 0;

string SymbolInp           = "";

//--

int SelectedTheme          = 0;

int CloseMode              = 0;

bool IsPainting            = false;

bool SoundIsEnabled        = false;

bool PlayTicks             = false;

//--

int mouse_x                = 0;

int mouse_y                = 0;

int mouse_w                = 0;

datetime mouse_dt          = 0;

double mouse_pr            = 0;

//--

int draw                   = 0;

int BrushClrIndex          = 0;

int BrushIndex             = 0;

//--

int MaxSpeedBars           = 10;

double AvgPrice            = 0;

double UpTicks             = 0;

double DwnTicks            = 0;

int LastReason             = 0;

//--

color COLOR_BG             = clrNONE;

color COLOR_FONT           = clrNONE;

color COLOR_FONT2          = clrNONE;

color COLOR_MOVE           = clrNONE;

color COLOR_GREEN          = clrNONE;

color COLOR_RED            = clrNONE;

color COLOR_HEDGE          = clrNONE;

color COLOR_BID_REC        = clrNONE;

color COLOR_ASK_REC        = clrNONE;

color COLOR_ARROW          = clrNONE;

//--

color COLOR_SELL           = C'225,68,29';

color COLOR_BUY            = C'3,95,172';

color COLOR_CLOSE          = clrGoldenrod;

//--

int ErrorInterval          = 250;

string ErrorSound          = "error.wav";

//--

string MB_CAPTION=ExpertName+" v"+Version+" | "+Copyright;

//--

string CloseArr[]={"CLOSE ALL","CLOSE LAST","CLOSE PROFIT","CLOSE LOSS","CLOSE PARTIAL"};

//--

string BrushArr[]={"l","«","¨","t","­","Ë","°"};

color BrushClrArr[]={clrRed,clrGold,clrMagenta,clrBrown,clrDodgerBlue,clrGreen,clrOrange,clrWhite,clrBlack};

//--

int x1=0, x2=CLIENT_BG_WIDTH;

int y1=0, y2=CLIENT_BG_HEIGHT;

//--

int button_y=0;

int inputs_y=0;

int label_y=0;

//--

int fr_x=0;

//--

input bool ShowOrdHistory=true;//ShowOrderHistory

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

//| Expert initialization function                                   |

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

int OnInit()

  {

//--- CreateTimer

   if(!IsTesting())

      TimerIsEnabled=EventSetMillisecondTimer(TimerInterval);



//-- EnableEventMouseMove 

   if(!IsTesting())

      if(!ChartGetInteger(0,CHART_EVENT_MOUSE_MOVE))

         ChartEventMouseMoveSet(true);



//-- CheckConnection

   if(!TerminalInfoInteger(TERMINAL_CONNECTED))

     {

      MessageBox("Warning: No Internet connection found!\nPlease check your network connection.",

                 MB_CAPTION+" | "+"#"+IntegerToString(ERR_NO_CONNECTION),MB_OK|MB_ICONWARNING);

     }



//-- CheckTradingIsAllowed

   if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))//Terminal

     {

      MessageBox("Warning: Check if automated trading is allowed in the terminal settings!",

                 MB_CAPTION+" | "+"#"+IntegerToString(ERR_TRADE_NOT_ALLOWED),MB_OK|MB_ICONWARNING);

     }

   else

     {

      if(!MQLInfoInteger(MQL_TRADE_ALLOWED))//CheckBox

        {

         MessageBox("Warning: Automated trading is forbidden in the program settings for "+__FILE__,

                    MB_CAPTION+" | "+"#"+IntegerToString(ERR_TRADE_NOT_ALLOWED),MB_OK|MB_ICONWARNING);

        }

     }

//--

   if(!AccountInfoInteger(ACCOUNT_TRADE_EXPERT))//Server

     {

      MessageBox("Warning: Automated trading is forbidden for the account "+IntegerToString(AccountInfoInteger(ACCOUNT_LOGIN))+" at the trade server side.",

                 MB_CAPTION+" | "+"#"+IntegerToString(ERR_TRADE_EXPERT_DISABLED_BY_SERVER),MB_OK|MB_ICONWARNING);

     }

//--

   if(!AccountInfoInteger(ACCOUNT_TRADE_ALLOWED))//Investor

     {

      MessageBox("Warning: Trading is forbidden for the account "+IntegerToString(AccountInfoInteger(ACCOUNT_LOGIN))+"."+

                 "\n\nPerhaps an investor password has been used to connect to the trading account."+

                 "\n\nCheck the terminal journal for the following entry:"+

                 "\n\'"+IntegerToString(AccountInfoInteger(ACCOUNT_LOGIN))+"\': trading has been disabled - investor mode.",

                 MB_CAPTION+" | "+"#"+IntegerToString(ERR_TRADE_DISABLED),MB_OK|MB_ICONWARNING);

     }

//--

   if(!SymbolInfoInteger(_Symbol,SYMBOL_TRADE_MODE))//Symbol

     {

      MessageBox("Warning: Trading is disabled for the symbol "+_Symbol+" at the trade server side.",

                 MB_CAPTION+" | "+"#"+IntegerToString(ERR_TRADE_DISABLED),MB_OK|MB_ICONWARNING);

     }



//-- StrategyTester

   if(MQLInfoInteger(MQL_TESTER))

      Print("Some functions are not available in the strategy tester.");



//-- CheckSoundIsEnabled

   if(!GlobalVariableCheck(ExpertName+" - Sound"))

      SoundIsEnabled=true;

   else

      SoundIsEnabled=GlobalVariableGet(ExpertName+" - Sound");



//-- CheckColors

   SelectedTheme=(int)GlobalVariableGet(ExpertName+" - Theme");

   if(SelectedTheme==LIGHT)

      SetColors(LIGHT);

   else

      SetColors(DARK);



//-- GetStoredInputs

   LotSizeInp=GlobalVariableGet(ExpertName+" - LotSize");

   StopLossInp=GlobalVariableGet(ExpertName+" - StopLoss");

   TakeProfitInp=GlobalVariableGet(ExpertName+" - TakeProfit");



//-- GetClosingMode

   if(!IsTesting())

      CloseMode=(int)GlobalVariableGet(ExpertName+" - Close");



//-- GetAvgPrice

   if(IsConnected())

      AvgPrice=(MarketInfo(_Symbol,MODE_ASK)+MarketInfo(_Symbol,MODE_BID))/2;



//-- SetXYAxis

   GetSetCoordinates();



//-- CreateObjects

   ObjectsCreateAll();



//-- ChartChanged

   if(LastReason==REASON_CHARTCHANGE)

      _PlaySound("switch.wav");



//--- Succeeded

   return(INIT_SUCCEEDED);

  }

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

//| Expert deinitialization function                                 |

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

void OnDeinit(const int reason)

  {

//--- DestroyTimer

   EventKillTimer();

   TimerIsEnabled=false;



//-- DisableEventMouseMove

   if(!IsTesting())

      if(ChartGetInteger(0,CHART_EVENT_MOUSE_MOVE))

         ChartEventMouseMoveSet(false);



//-- SaveStoredValues

   if(reason!=REASON_INITFAILED)

     {

      //-- SaveXYAxis

      GlobalVariableSet(ExpertName+" - X",x1);

      GlobalVariableSet(ExpertName+" - Y",y1);

      //-- SaveUserInputs

      GlobalVariableSet(ExpertName+" - LotSize",LotSize);

      GlobalVariableSet(ExpertName+" - StopLoss",StopLoss);

      GlobalVariableSet(ExpertName+" - TakeProfit",TakeProfit);

      //-- Strategy Tester

      if(!IsTesting())

        {

         GlobalVariableSet(ExpertName+" - Theme",SelectedTheme);

         GlobalVariableSet(ExpertName+" - Sound",SoundIsEnabled);

         GlobalVariableSet(ExpertName+" - Close",CloseMode);

        }

      //--

      GlobalVariablesFlush();

     }



//-- ResetStoredTicks

   if(reason==REASON_CHARTCHANGE)

     {

      UpTicks=0;

      DwnTicks=0;

     }



//-- DeleteObjects

   if(reason<=REASON_REMOVE || reason==REASON_INITFAILED)

     {

      for(int i=0; i<ObjectsTotal(); i++)

        {

         //-- GetObjectName

         string obj_name=ObjectName(i);

         //-- PrefixObjectFound

         if(StringSubstr(obj_name,0,StringLen(OBJPREFIX))==OBJPREFIX)

           {

            //-- DeleteObjects

            if(ObjectsDeleteAll(0,OBJPREFIX,-1,-1)>0)

               break;

           }

        }

     }



//-- StoreDeinitReason

   LastReason=reason;

//---

  }

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

//| Expert tick function                                             |

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

void OnTick()

  {

//--- CreateTimer

   if(!TimerIsEnabled && !IsTesting())

      TimerIsEnabled=EventSetMillisecondTimer(TimerInterval);



//-- DisplaySpeedInfo

   Speedometer();



//-- StrategyTester

   if(IsTesting())

      _OnTester();

//---

  }

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

//| Timer function                                                   |

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

void OnTimer()

  {

//--- CheckObjects

   ObjectsCheckAll();



//-- GetSetUserInputs

   GetSetInputs();



//-- DisplaySymbolInfo

   SymbolInfo();



//-- DisplayAccount&TradeInfo

   AccAndTradeInfo();

//---

  }

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

//| ChartEvent function                                              |

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

void OnChartEvent(const int id,

                  const long &lparam,

                  const double &dparam,

                  const string &sparam)

  {

//---



   if(id==CHARTEVENT_OBJECT_CLICK)

     {



      //-- DisplayLastKnownPing

      if(sparam==OBJPREFIX+"CONNECTION")

        {

         //-- SetTransparentColor

         int sRed=88,sGreen=88,sBlue=88,sRGB=0;

         sRGB=(sBlue<<16);sRGB|=(sGreen<<8);sRGB|=sRed;

         //--

         double Ping=TerminalInfoInteger(TERMINAL_PING_LAST);//SetPingToMs

         string text=TerminalInfoInteger(TERMINAL_CONNECTED)?DoubleToString(Ping/1000,2)+" ms":"NC";/*SetText*/

         //--

         LabelCreate(0,OBJPREFIX+"PING",0,ChartMiddleX(),ChartMiddleY(),CORNER_LEFT_UPPER,text,"Tahoma",200,sRGB,0,ANCHOR_CENTER,true,false,true,0,"\n");

         //--

         Sleep(1000);

         ObjectDelete(0,OBJPREFIX+"PING");//DeleteObject

        }



      //-- SwitchTheme

      if(sparam==OBJPREFIX+"THEME")

        {

         if(SelectedTheme==LIGHT)

            SetTheme(DARK);

         else

            SetTheme(LIGHT);

        }



      //-- StartPainting

      if(sparam==OBJPREFIX+"PAINT")

        {

         if(!IsPainting)

           {

            //-- EnablePainting

            IsPainting=true;

            //-- BlockMouseScroll

            ChartMouseScrollSet(false);

            //-- DisplayInfo

            LabelCreate(0,OBJPREFIX+"ERASE",0,5,15,CORNER_LEFT_LOWER,"Press down to erase","Arial",9,COLOR_RED,0,ANCHOR_LEFT,false,false,true,0,"\n");

            LabelCreate(0,OBJPREFIX+"BRUSHCOLOR",0,ChartMiddleX(),15,CORNER_LEFT_LOWER,"Press up to change color / Press left to change brush","Arial",9,BrushClrArr[BrushClrIndex],0,ANCHOR_CENTER,false,false,true,0,"\n");

            LabelCreate(0,OBJPREFIX+"BRUSHTYPE",0,ChartMiddleX()+155,15,CORNER_LEFT_LOWER,BrushArr[BrushIndex],"Wingdings",9,BrushClrArr[BrushClrIndex],0,ANCHOR_CENTER,false,false,true,0,"\n");

            LabelCreate(0,OBJPREFIX+"STOPPAINT",0,5,15,CORNER_RIGHT_LOWER,"Press right to stop drawing","Arial",9,COLOR_GREEN,0,ANCHOR_RIGHT,false,false,true,0,"\n");

           }

        }



      //-- SoundManagement

      if(sparam==OBJPREFIX+"SOUND" || sparam==OBJPREFIX+"SOUNDIO")

        {

         //-- EnableSound

         if(!SoundIsEnabled)

           {

            SoundIsEnabled=true;

            ObjectSetInteger(0,OBJPREFIX+"SOUNDIO",OBJPROP_COLOR,C'59,41,40');//SetObject

            PlaySound("sound.wav");

           }

         //-- DisableSound

         else

           {

            SoundIsEnabled=false;

            ObjectSetInteger(0,OBJPREFIX+"SOUNDIO",OBJPROP_COLOR,clrNONE);//SetObject

           }

        }



      //-- TickSoundsManagement

      if(sparam==OBJPREFIX+"PLAY")

        {

         //-- EnableTickSounds

         if(!PlayTicks)

           {

            PlayTicks=true;

            //-- SetObjects

            ObjectSetString(0,OBJPREFIX+"PLAY",OBJPROP_TEXT,";");

            ObjectSetInteger(0,OBJPREFIX+"PLAY",OBJPROP_FONTSIZE,14);

           }

         //-- DisableTickSounds

         else

           {

            PlayTicks=false;

            //-- SetObjects

            ObjectSetString(0,OBJPREFIX+"PLAY",OBJPROP_TEXT,"4");

            ObjectSetInteger(0,OBJPREFIX+"PLAY",OBJPROP_FONTSIZE,15);

           }

        }



      //-- SetBull/BearColors

      if(sparam==OBJPREFIX+"CANDLES¦")

        {

         color clrBullish = RandomColor();

         color clrBearish = RandomColor();

         //-- SetChart

         ChartSetInteger(0,CHART_COLOR_CANDLE_BULL,clrBullish);

         ChartSetInteger(0,CHART_COLOR_CHART_UP,clrBullish);

         ChartSetInteger(0,CHART_COLOR_CANDLE_BEAR,clrBearish);

         ChartSetInteger(0,CHART_COLOR_CHART_DOWN,clrBearish);

         ChartSetInteger(0,CHART_COLOR_CHART_LINE,RandomColor());

        }



      //-- RemoveExpert

      if(sparam==OBJPREFIX+"EXIT")

        {

         if(MessageBox("Do you really want to remove the EA?",MB_CAPTION,MB_ICONQUESTION|MB_YESNO)==IDYES)

            ExpertRemove();//Exit

        }



      //-- SetClosingMode

      if(sparam==OBJPREFIX+"CLOSE¹²³")

        {

         CloseMode++;

         if(CloseMode>=ArraySize(CloseArr))//Reset

            CloseMode=0;

         ObjectSetString(0,OBJPREFIX+"CLOSE¹²³",OBJPROP_TEXT,0,CloseArr[CloseMode]);//SetObject

         _PlaySound("switch.wav");

        }



      //-- DecLotSize

      if(sparam==OBJPREFIX+"LOTSIZE<")

         ObjectSetString(0,OBJPREFIX+"LOTSIZE<>",OBJPROP_TEXT,0,DoubleToString(LotSize-=LotStep,2));//SetObject



      //-- IncLotSize

      if(sparam==OBJPREFIX+"LOTSIZE>")

         ObjectSetString(0,OBJPREFIX+"LOTSIZE<>",OBJPROP_TEXT,0,DoubleToString(LotSize+=LotStep,2));//SetObject



      //-- SellClick

      if(sparam==OBJPREFIX+"SELL")

        {

         //-- SendSellOrder

         OrderSend(OP_SELL);

         //-- ResetButton

         Sleep(100);

         ObjectSetInteger(0,OBJPREFIX+"SELL",OBJPROP_STATE,false);//SetObject

        }



      //-- CloseClick

      if(sparam==OBJPREFIX+"CLOSE")

        {

         //-- CloseOrder(s)

         OrderClose();

         //-- ResetButton

         Sleep(100);

         ObjectSetInteger(0,OBJPREFIX+"CLOSE",OBJPROP_STATE,false);//SetObject

        }



      //-- BuyClick

      if(sparam==OBJPREFIX+"BUY")

        {

         //-- SendBuyOrder

         OrderSend(OP_BUY);

         //-- ResetButton

         Sleep(100);

         ObjectSetInteger(0,OBJPREFIX+"BUY",OBJPROP_STATE,false);//SetObject

        }



      //-- ResetCoordinates

      if(sparam==OBJPREFIX+"RESET")

        {

         LabelMove(0,OBJPREFIX+"BCKGRND[]",CLIENT_BG_X,CLIENT_BG_Y);

         ObjectSetInteger(0,OBJPREFIX+"RESET",OBJPROP_STATE,false);//SetObject

         if(ObjectGetInteger(0,OBJPREFIX+"MOVE",OBJPROP_STATE))

            ObjectSetInteger(0,OBJPREFIX+"MOVE",OBJPROP_STATE,false);/*SetObject*/

         //-- MoveObjects

         GetSetCoordinates();

         ObjectsMoveAll();

        }



      //--

     }

//--

   if(id==CHARTEVENT_KEYDOWN)

     {



      //-- BrushType

      if(lparam==KEY_LEFT)

        {

         if(IsPainting)

           {

            BrushIndex++;

            if(BrushIndex>=ArraySize(BrushArr))//Reset

               BrushIndex=0;

            ObjectSetString(0,OBJPREFIX+"BRUSHTYPE",OBJPROP_TEXT,0,BrushArr[BrushIndex]);//SetObject

           }

        }



      //-- StopPainting

      if(lparam==KEY_RIGHT)

        {

         if(IsPainting)

           {

            //-- DisablePainting

            IsPainting=false;

            //-- DeleteObjects

            if(ObjectFind(0,OBJPREFIX+"ERASE")==0)

               ObjectDelete(0,OBJPREFIX+"ERASE");

            if(ObjectFind(0,OBJPREFIX+"BRUSHCOLOR")==0)

               ObjectDelete(0,OBJPREFIX+"BRUSHCOLOR");

            if(ObjectFind(0,OBJPREFIX+"BRUSHTYPE")==0)

               ObjectDelete(0,OBJPREFIX+"BRUSHTYPE");

            if(ObjectFind(0,OBJPREFIX+"STOPPAINT")==0)

               ObjectDelete(0,OBJPREFIX+"STOPPAINT");

            //-- UnblockMouseScroll

            ChartMouseScrollSet(true);

           }

        }



      //-- BrushColor

      if(lparam==KEY_UP)

        {

         if(IsPainting)

           {

            BrushClrIndex++;

            if(BrushClrIndex>=ArraySize(BrushClrArr))//Reset

               BrushClrIndex=0;

            //-- SetObjects

            ObjectSetInteger(0,OBJPREFIX+"BRUSHCOLOR",OBJPROP_COLOR,0,BrushClrArr[BrushClrIndex]);

            ObjectSetInteger(0,OBJPREFIX+"BRUSHTYPE",OBJPROP_COLOR,0,BrushClrArr[BrushClrIndex]);

           }

        }



      //-- DeleteDraws

      if(lparam==KEY_DOWN)

        {

         if(IsPainting)

           {

            if(ObjectsDeleteAll(0,"draw",0,OBJ_TEXT)>0)

               draw=0;

           }

        }



      //--  

     }

//---

   if(id==CHARTEVENT_MOUSE_MOVE)

     {



      //-- UserIsHolding (Left-Click)

      if(sparam=="1")

        {



         //-- MoveClient

         if(ObjectGetInteger(0,OBJPREFIX+"BCKGRND[]",OBJPROP_SELECTED) || ObjectFind(0,OBJPREFIX+"BCKGRND[]")!=0)

           {

            //-- MoveObjects

            GetSetCoordinates();

            ObjectsMoveAll();

           }



         //-- Paint

         if(IsPainting)

           {

            //-- GetMousePosition

            mouse_x=(int)lparam;

            mouse_y=(int)dparam;

            //-- ConvertXYToDatePrice

            ChartXYToTimePrice(0,mouse_x,mouse_y,mouse_w,mouse_dt,mouse_pr);

            //-- CreateObjects

            TextCreate(0,"draw"+IntegerToString(draw),0,mouse_dt,mouse_pr,BrushArr[BrushIndex],"Wingdings",10,BrushClrArr[BrushClrIndex],0,ANCHOR_CENTER,false,false,true,0,"\n");

            draw++;

           }



         //--

        }



      //--

     }

//---

  }

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

//| OnTester                                                         |

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

void _OnTester()

  {

//--- CheckObjects

   ObjectsCheckAll();



//-- GetSetUserInputs

   GetSetInputs();



//-- DisplaySymbolInfo

   SymbolInfo();



//-- DisplayAccount&TradeInfo

   AccAndTradeInfo();



//-- SellClick

   if(ObjectFind(0,OBJPREFIX+"SELL")==0)//ObjectIsPresent

     {

      if(ObjectGetInteger(0,OBJPREFIX+"SELL",OBJPROP_STATE))

        {

         //-- SendSellOrder

         OrderSend(OP_SELL);

         ObjectSetInteger(0,OBJPREFIX+"SELL",OBJPROP_STATE,false);//ResetButton

        }

     }



//-- CloseClick

   if(ObjectFind(0,OBJPREFIX+"CLOSE")==0)//ObjectIsPresent

     {

      if(ObjectGetInteger(0,OBJPREFIX+"CLOSE",OBJPROP_STATE))

        {

         //-- CloseOrder(s)

         OrderClose();

         ObjectSetInteger(0,OBJPREFIX+"CLOSE",OBJPROP_STATE,false);//ResetButton

        }

     }



//-- BuyClick

   if(ObjectFind(0,OBJPREFIX+"BUY")==0)//ObjectIsPresent

     {

      if(ObjectGetInteger(0,OBJPREFIX+"BUY",OBJPROP_STATE))

        {

         //-- SendBuyOrder

         OrderSend(OP_BUY);

         ObjectSetInteger(0,OBJPREFIX+"BUY",OBJPROP_STATE,false);//ResetButton

        }

     }



//-- MoveClient

   if(ObjectFind(0,OBJPREFIX+"BCKGRND[]")==0)//ObjectIsPresent

     {

      //-- GetCurrentPos

      int bg_x=(int)ObjectGetInteger(0,OBJPREFIX+"BCKGRND[]",OBJPROP_XDISTANCE);

      int bg_y=(int)ObjectGetInteger(0,OBJPREFIX+"BCKGRND[]",OBJPROP_YDISTANCE);

      //-- MoveObjects

      if(bg_x!=x1 || bg_y!=y1)

        {

         GetSetCoordinates();

         ObjectsMoveAll();

        }

     }



//-- ResetPosition

   if(ObjectFind(0,OBJPREFIX+"RESET")==0)//ObjectIsPresent

     {

      if(ObjectGetInteger(0,OBJPREFIX+"RESET",OBJPROP_STATE))

        {

         //-- MoveObject

         LabelMove(0,OBJPREFIX+"BCKGRND[]",CLIENT_BG_X,CLIENT_BG_Y);

         ObjectSetInteger(0,OBJPREFIX+"RESET",OBJPROP_STATE,false);//SetObject

         if(ObjectGetInteger(0,OBJPREFIX+"MOVE",OBJPROP_STATE))

            ObjectSetInteger(0,OBJPREFIX+"MOVE",OBJPROP_STATE,false);//SetObject

        }

     }



//---

  }

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

//| OrderSend                                                        |

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

void OrderSend(const int Type)

  {

//--

   int op_tkt=0;

   uint tick=0;

   uint ex_time=0;

//--

   double rq_price=0;

   double slippage=0;

//--- reset the error value

   ResetLastError();

//-- CheckOrdSendRequirements

   if(IsTradeAllowed() && !IsTradeContextBusy() && IsConnected())

     {

      //-- SellOrders

      if(Type==OP_SELL)

        {

         //-- EnoughMargin

         if(AccountFreeMarginCheck(_Symbol,OP_SELL,LotSize)>=0)

           {

            //-- CorrectLotSize (Rounded by GetSetInputs)

            if(LotSize>=MinLot && LotSize<=MaxLot)

              {

               tick=GetTickCount();//GetTime

               rq_price=MarketInfo(_Symbol,MODE_BID);//GetPrice

               op_tkt=OrderSend(_Symbol,OP_SELL,LotSize,rq_price,Slippage,0,0,ExpertName,0,0,COLOR_SELL);//SendOrder

              }

            else

              {

               //-- Error

               Print("OrderSend failed with error #131 [Invalid trade volume]");

               _PlaySound(ErrorSound);

               //--

               Sleep(ErrorInterval);

               return;

              }

            //--

            if(op_tkt<0)

              {

               //-- Error

               Print("OrderSend failed with error #",_LastError);

               _PlaySound(ErrorSound);

               //--

               Sleep(ErrorInterval);

               return;

              }

            else

              {

               //-- Succeeded

               ex_time=GetTickCount()-tick;//CalcExeTime

               slippage=(PriceByTkt(OPENPRICE,op_tkt)-rq_price)/_Point;//CalcSlippage

               Print("OrderSend placed successfully (Open Sell) "+"#"+IntegerToString(op_tkt)+" | Execuction Time: "+IntegerToString(ex_time)+"ms"+" | Slippage: "+DoubleToString(slippage,0)+"p");

               _PlaySound("sell.wav");

               //-- SL

               if(StopLoss>0 && StopLoss>=MinStop)

                 {

                  if(OrderSelect(op_tkt,SELECT_BY_TICKET,MODE_TRADES))

                    {

                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+StopLoss*_Point,OrderTakeProfit(),0,COLOR_SELL))

                       {

                        //-- Error

                        Print("Error in OrderModify. Error code=",_LastError);

                        _PlaySound(ErrorSound);

                        Sleep(ErrorInterval);

                       }

                     else

                       {

                        //-- Succeeded

                        //Print("Order modified successfully");

                       }

                    }

                 }

               //-- TP

               if(TakeProfit>0 && TakeProfit>=MinStop)

                 {

                  if(OrderSelect(op_tkt,SELECT_BY_TICKET,MODE_TRADES))

                    {

                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderOpenPrice()-TakeProfit*_Point,0,COLOR_BUY))

                       {

                        //-- Error

                        Print("Error in OrderModify. Error code=",_LastError);

                        _PlaySound(ErrorSound);

                        Sleep(ErrorInterval);

                       }

                     else

                       {

                        //-- Succeeded

                        //Print("Order modified successfully");*/

                       }

                    }

                 }

              }

            //--

           }

         else

           {

            //-- NotEnoughMoney

            Print(" '",AccountNumber(),"' :"," order #0 sell ",DoubleToString(LotSize,2)," ",_Symbol," [Not enough money]");

            _PlaySound(ErrorSound);

           }

         //--

        }

      //-- BuyOrders

      if(Type==OP_BUY)

        {

         //-- EnoughMargin

         if(AccountFreeMarginCheck(_Symbol,OP_BUY,LotSize)>=0)

           {

            //-- CorrectLotSize (Rounded by GetSetInputs)

            if(LotSize>=MinLot && LotSize<=MaxLot)

              {

               tick=GetTickCount();//GetTime

               rq_price=MarketInfo(_Symbol,MODE_ASK);//GetPrice

               op_tkt=OrderSend(_Symbol,OP_BUY,LotSize,rq_price,Slippage,0,0,ExpertName,0,0,COLOR_BUY);//SendOrder

              }

            else

              {

               //-- Error

               Print("OrderSend failed with error #131 [Invalid trade volume]");

               _PlaySound(ErrorSound);

               //--

               Sleep(ErrorInterval);

               return;

              }

            //--

            if(op_tkt<0)

              {

               //-- Error

               Print("OrderSend failed with error #",_LastError);

               _PlaySound(ErrorSound);

               //--

               Sleep(ErrorInterval);

               return;

              }

            else

              {

               //-- Succeeded

               ex_time=GetTickCount()-tick;//CalcExeTime

               slippage=(rq_price-PriceByTkt(OPENPRICE,op_tkt))/_Point;//CalcSlippage

               Print("OrderSend placed successfully (Open Buy) "+"#"+IntegerToString(op_tkt)+" | Execuction Time: "+IntegerToString(ex_time)+"ms"+" | Slippage: "+DoubleToString(slippage,0)+"p");

               _PlaySound("buy.wav");

               //-- SL

               if(StopLoss>0 && StopLoss>=MinStop)

                 {

                  if(OrderSelect(op_tkt,SELECT_BY_TICKET,MODE_TRADES))

                    {

                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-StopLoss*_Point,OrderTakeProfit(),0,COLOR_SELL))

                       {

                        //-- Error

                        Print("Error in OrderModify. Error code=",_LastError);

                        _PlaySound(ErrorSound);

                        Sleep(ErrorInterval);

                       }

                     else

                       {

                        //-- Succeeded

                        //Print("Order modified successfully");

                       }

                    }

                 }

               //-- TP

               if(TakeProfit>0 && TakeProfit>=MinStop)

                 {

                  if(OrderSelect(op_tkt,SELECT_BY_TICKET,MODE_TRADES))

                    {

                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderOpenPrice()+TakeProfit*_Point,0,COLOR_BUY))

                       {

                        //-- Error

                        Print("Error in OrderModify. Error code=",_LastError);

                        _PlaySound(ErrorSound);

                        Sleep(ErrorInterval);

                       }

                     else

                       {

                        //-- Succeeded

                        //Print("Order modified successfully");

                       }

                    }

                 }

              }

            //--

           }

         else

           {

            //-- NotEnoughMoney

            Print(" '",AccountNumber(),"' :"," order #0 buy ",DoubleToString(LotSize,2)," ",_Symbol," [Not enough money]");

            _PlaySound(ErrorSound);

           }

         //--

        }

     }

   else

     {

      //-- RequirementsNotFulfilled

      if(!IsConnected())

         Print("No Internet connection found! Please check your network connection and try again.");

      if(IsTradeContextBusy())

         Print("Trade context is busy, Please wait...");

      if(!IsTradeAllowed())

         Print("Check if automated trading is allowed in the terminal / program settings and try again.");

      //--

      _PlaySound(ErrorSound);

      //--

      Sleep(ErrorInterval);

      return;

      //--

     }

//--

  }

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

//| OrderClose                                                       |

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

void OrderClose()

  {

//--

   double ordprofit=0;

   double ordlots=0;

//--

   int c_tkt=0;

   int ordtype=0;

   uint tick=0;

   uint ex_time=0;

//--

   double rq_price=0;

   double slippage=0;

//--

   string ordtypestr="";

//--- reset the error value

   ResetLastError();

//-- CheckOrdCloseRequirements

   if(IsTradeAllowed() && !IsTradeContextBusy() && IsConnected())

     {

      //-- SelectOrder

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

        {

         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

           {

            if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber)

              {

               if(OrderType()<=OP_SELL)//MarketOrdersOnly

                 {

                  //--

                  ordprofit=OrderProfit()+OrderCommission()+OrderSwap();//GetPtofit

                  ordlots=(CloseMode==CLOSEPARTIAL)?ordlots=LotSizeInp:OrderLots();//SetLots

                  if(ordlots>OrderLots())

                     ordlots=OrderLots();

                  //--

                  if((CloseMode==CLOSEALL) || (CloseMode==CLOSELAST) || (CloseMode==CLOSEPROFIT && ordprofit>0) || (CloseMode==CLOSELOSS && ordprofit<0) || (CloseMode==CLOSEPARTIAL))

                    {

                     tick=GetTickCount();

                     rq_price=OrderClosePrice();

                     c_tkt=OrderTicket();

                     ordtype=OrderType();

                     ordtypestr=(OrderType()==OP_SELL)?ordtypestr="Sell":ordtypestr="Buy";

                     //--

                     if(!OrderClose(OrderTicket(),ordlots,rq_price,0,COLOR_CLOSE))

                       {

                        //-- Error

                        Print("OrderClose failed with error #",_LastError);

                        Sleep(ErrorInterval);

                        return;

                       }

                     else

                       {

                        //-- Succeeded

                        ex_time=GetTickCount()-tick;//CalcExeTime

                        slippage=(ordtype==OP_SELL)?(PriceByTkt(CLOSEPRICE,c_tkt)-rq_price)/_Point:(rq_price-PriceByTkt(CLOSEPRICE,c_tkt))/_Point;//CalcSlippage

                        Print("Order closed successfully"+" (Close "+ordtypestr+") "+"#"+IntegerToString(c_tkt)+" | Execuction Time: "+IntegerToString(ex_time)+"ms"+" | "+"Slippage: "+DoubleToString(slippage,0)+"p");

                        _PlaySound("close.wav");

                        //--

                        if(CloseMode==CLOSELAST || CloseMode==CLOSEPARTIAL)

                           break;

                       }

                    }

                  //--

                 }

              }

           }

        }

      //--

     }

   else

     {

      //-- RequirementsNotFulfilled

      if(!IsConnected())

         Print("No Internet connection found! Please check your network connection and try again.");

      if(IsTradeContextBusy())

         Print("Trade context is busy, Please wait...");

      if(!IsTradeAllowed())

         Print("Check if automated trading is allowed in the terminal / program settings and try again.");

      //--

      _PlaySound(ErrorSound);

      //--

      Sleep(ErrorInterval);

      return;

     }

//--

  }

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

//| OpenPos                                                          |

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

int OpenPos(const int Type)

  {

//--

   int count=0;

//--

   for(int i=0; i<OrdersTotal(); i++)

     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

        {

         if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber)

           {

            if(OrderType()==OP_SELL && Type==OP_SELL)

               count++;

            if(OrderType()==OP_BUY && Type==OP_BUY)

               count++;

            if(OrderType()<=OP_SELL && Type==OP_ALL)

               count++;

           }

        }

     }

   return(count);

//--

  }

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

//| ØOpenPrice                                                       |

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

double ØOpenPrice()

  {

//--

   double ordlots=0;

   double price=0;

   double avgprice=0;

//--

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

     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

        {

         if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber)

           {

            if(OrderType()<=OP_SELL)//MarketOrdersOnly

              {

               ordlots+=OrderLots();

               price+=OrderLots()*OrderOpenPrice();

              }

           }

        }

     }

//-- CalcAvgPrice

   avgprice=price/ordlots;

//--

   return(avgprice);

  }

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

//| FloatingProfits                                                  |

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

double FloatingProfits()

  {

//--  

   double profit=0;

//--

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

     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

        {

         if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber)

           {

            if(OrderType()<=OP_SELL)//MarketOrdersOnly

              {

               profit+=OrderProfit()+OrderCommission()+OrderSwap();

              }

           }

        }

     }

   return(profit);

//--

  }

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

//| FloatingPoints                                                   |

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

double FloatingPoints()

  {

//--

   double sellpts=0;

   double buypts=0;

//--

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

     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

        {

         if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber)

           {

            if(OrderType()==OP_SELL)

               sellpts+=(OrderOpenPrice()-OrderClosePrice())/_Point;

            if(OrderType()==OP_BUY)

               buypts+=(OrderClosePrice()-OrderOpenPrice())/_Point;

           }

        }

     }

   return(sellpts+buypts);

//--

  }

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

//| DailyProfits                                                     |

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

double DailyProfits()

  {

//--  

   double profit=0;

//--

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

     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

        {

         if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber)

           {

            if(OrderType()<=OP_SELL)//MarketOrdersOnly

              {

               if(TimeToStr(TimeCurrent(),TIME_DATE)==TimeToString(OrderCloseTime(),TIME_DATE))

                  profit+=OrderProfit()+OrderCommission()+OrderSwap();

              }

           }

        }

     }

   return(profit);

//--

  }

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

//| DailyPoints                                                      |

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

double DailyPoints()

  {

//--

   double sellpts=0;

   double buypts=0;

//--

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

     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

        {

         if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber)

           {

            if(OrderType()<=OP_SELL)//MarketOrdersOnly

              {

               if(TimeToStr(TimeCurrent(),TIME_DATE)==TimeToString(OrderCloseTime(),TIME_DATE))

                 {

                  if(OrderType()==OP_SELL)

                     sellpts+=(OrderOpenPrice()-OrderClosePrice())/_Point;

                  if(OrderType()==OP_BUY)

                     buypts+=(OrderClosePrice()-OrderOpenPrice())/_Point;

                 }

              }

           }

        }

     }

   return(sellpts+buypts);

//--

  }

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

//| DailyReturn                                                      |

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

double DailyReturn()

  {

//--

   double percent=0;

   double startbal=0;



//-- GetStartBalance

   startbal=(DailyProfits()>0)?AccountBalance()-DailyProfits():AccountBalance()+MathAbs(DailyProfits());



//-- CalcReturn (ROI)

   if(startbal!=0)//AvoidZeroDivide

      percent=DailyProfits()*100/startbal;

//--

   return(percent);

  }

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

//| PriceByTkt                                                       |

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

double PriceByTkt(const int Type,const int Ticket)

  {

//--

   double price=0;

//--

   if(OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES))

     {

      if(Type==OPENPRICE)

         price=OrderOpenPrice();

      if(Type==CLOSEPRICE)

         price=OrderClosePrice();

     }

//--

   return(price);

  }

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

//| GetSetInputs                                                     |

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

void GetSetInputs()

  {

//-- GetMarketInfo

   LotStep=MarketInfo(_Symbol,MODE_LOTSTEP);

   MinLot=MarketInfo(_Symbol,MODE_MINLOT);

   MaxLot=MarketInfo(_Symbol,MODE_MAXLOT);

   MinStop=MarketInfo(_Symbol,MODE_STOPLEVEL);



//-- GetLotSizeInput

   LotSizeInp=StringToDouble(ObjectGetString(0,OBJPREFIX+"LOTSIZE<>",OBJPROP_TEXT));/*SetObject*/

//-- RoundLotSize

   LotSize=LotSizeInp;

   LotSize=MathRound(LotSize/LotStep)*LotStep;

   ObjectSetString(0,OBJPREFIX+"LOTSIZE<>",OBJPROP_TEXT,0,DoubleToString(LotSize,2));/*SetObject*/

//-- WrongLotSize

   if(LotSize<=MinLot)

     {

      LotSize=MinLot;

      ObjectSetString(0,OBJPREFIX+"LOTSIZE<>",OBJPROP_TEXT,0,DoubleToString(LotSize,2));/*SetObject*/

     }

//--

   if(LotSize>=MaxLot)

     {

      LotSize=MaxLot;

      ObjectSetString(0,OBJPREFIX+"LOTSIZE<>",OBJPROP_TEXT,0,DoubleToString(LotSize,2));/*SetObject*/

     }



//-- GetSLInput

   StopLossInp=StringToDouble(ObjectGetString(0,OBJPREFIX+"SL<>",OBJPROP_TEXT));/*GetObject*/

//-- WrongSL

   if(StopLossInp<0 || StopLossInp<MinStop)

     {

      StopLoss=0;

      ObjectSetString(0,OBJPREFIX+"SL<>",OBJPROP_TEXT,0,DoubleToString(StopLoss,0));/*SetObject*/

     }

   else

     {

      StopLoss=StopLossInp;

     }



//-- GetTPInput

   TakeProfitInp=StringToDouble(ObjectGetString(0,OBJPREFIX+"TP<>",OBJPROP_TEXT));/*GetObject*/

//-- WrongTP

   if(TakeProfitInp<0 || TakeProfitInp<MinStop)

     {

      TakeProfit=0;

      ObjectSetString(0,OBJPREFIX+"TP<>",OBJPROP_TEXT,0,DoubleToString(TakeProfit,0));/*SetObject*/

     }

   else

     {

      TakeProfit=TakeProfitInp;

     }



//-- SymbolChanger

   SymbolInp=ObjectGetString(0,OBJPREFIX+"SYMBOL¤",OBJPROP_TEXT);//GetSymbolInput



   if(SymbolInp!="" && _Symbol!=SymbolInp)

     {

      if(SymbolFind(SymbolInp))

        {

         ChartSetSymbolPeriod(0,SymbolInp,PERIOD_CURRENT);//SetChart

        }

      else

        {

         //-- WrongSymbolInput

         MessageBox("Warning: Symbol "+SymbolInp+" couldn't be found!\n\nMake sure it is available in the symbol list.\n(View -> Symbols / Ctrl+U)",

                    MB_CAPTION,MB_OK|MB_ICONWARNING);

         ObjectSetString(0,OBJPREFIX+"SYMBOL¤",OBJPROP_TEXT,_Symbol);//Reset

        }

     }

//--

  }

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

//| SymbolInfo                                                       |

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

void SymbolInfo()

  {

//-- SetObjects

   ObjectSetString(0,OBJPREFIX+"ASK",OBJPROP_TEXT,DoubleToString(MarketInfo(_Symbol,MODE_ASK),_Digits));

   ObjectSetString(0,OBJPREFIX+"BID",OBJPROP_TEXT,DoubleToString(MarketInfo(_Symbol,MODE_BID),_Digits));

//--

   ObjectSetString(0,OBJPREFIX+"UPTICKS",OBJPROP_TEXT,DoubleToString(UpTicks,0));

   ObjectSetString(0,OBJPREFIX+"DWNTICKS",OBJPROP_TEXT,DoubleToString(DwnTicks,0));

//--

   ObjectSetString(0,OBJPREFIX+"TIMER",OBJPROP_TEXT,"--> "+TimeToString(Time[0]+Period()*60-TimeCurrent(),TIME_MINUTES|TIME_SECONDS));

//--

   ObjectSetString(0,OBJPREFIX+"SPREAD",OBJPROP_TEXT,DoubleToString(MarketInfo(_Symbol,MODE_SPREAD),0)+"p");



//-- GetOpen&Close

   double dayopen=iOpen(NULL,PERIOD_D1,0);

   double dayclose=iClose(NULL,PERIOD_D1,0);



//-- AvoidZeroDivide

   if(dayclose!=0)

     {

      //-- CalcPercentage

      double symbol_p=NormalizeDouble((dayclose-dayopen)/dayclose*100,2);

      //-- PositiveValue

      if(symbol_p>0)

        {

         //-- SetObjects

         ObjectSetString(0,OBJPREFIX+"SYMBOL§",OBJPROP_TEXT,0,"é");

         ObjectSetInteger(0,OBJPREFIX+"SYMBOL§",OBJPROP_COLOR,±Clr(symbol_p));

         //--

         ObjectSetString(0,OBJPREFIX+"SYMBOL%",OBJPROP_TEXT,0,±Str(symbol_p,2)+"%");

         ObjectSetInteger(0,OBJPREFIX+"SYMBOL%",OBJPROP_COLOR,±Clr(symbol_p));

        }

      //-- NegativeValue

      if(symbol_p<0)

        {

         //-- SetObjects

         ObjectSetString(0,OBJPREFIX+"SYMBOL§",OBJPROP_TEXT,0,"ê");

         ObjectSetInteger(0,OBJPREFIX+"SYMBOL§",OBJPROP_COLOR,±Clr(symbol_p));

         //--

         ObjectSetString(0,OBJPREFIX+"SYMBOL%",OBJPROP_TEXT,0,±Str(symbol_p,2)+"%");

         ObjectSetInteger(0,OBJPREFIX+"SYMBOL%",OBJPROP_COLOR,±Clr(symbol_p));

        }

      //-- NeutralValue

      if(symbol_p==0)

        {

         //-- SetObjects

         ObjectSetString(0,OBJPREFIX+"SYMBOL§",OBJPROP_TEXT,0,"è");

         ObjectSetInteger(0,OBJPREFIX+"SYMBOL%",OBJPROP_COLOR,±Clr(symbol_p));

         //--

         ObjectSetString(0,OBJPREFIX+"SYMBOL%",OBJPROP_TEXT,0,±Str(symbol_p,2)+"%");

         ObjectSetInteger(0,OBJPREFIX+"SYMBOL§",OBJPROP_COLOR,±Clr(symbol_p));

        }

     }

//-- ResetCumulatedTicks

   ResetTicks();

//--

  }

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

//| Speedometer                                                      |

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

void Speedometer()

  {

//-- CalcSpeed

   double LastPrice=AvgPrice/_Point;

   double CurrentPrice=((MarketInfo(_Symbol,MODE_ASK)+MarketInfo(_Symbol,MODE_BID))/2)/_Point;

   double Speed=NormalizeDouble((CurrentPrice-LastPrice),0);

   AvgPrice=(MarketInfo(_Symbol,MODE_ASK)+MarketInfo(_Symbol,MODE_BID))/2;



//-- SetMaxSpeed

   if(Speed>99)

      Speed=99;



//-- ResetColors

   for(int i=0; i<(MaxSpeedBars); i++)

     {

      //-- SetObjects

      ObjectSetInteger(0,OBJPREFIX+"SPEED#"+IntegerToString(i,0,0),OBJPROP_COLOR,clrNONE);

      ObjectSetInteger(0,OBJPREFIX+"SPEEDª",OBJPROP_COLOR,clrNONE);

     }



//-- SetColor&Text

   for(int i=0; i<MathAbs(Speed); i++)

     {

      //-- PositiveValue

      if(Speed>0)

        {

         //-- SetObjects

         ObjectSetInteger(0,OBJPREFIX+"SPEED#"+IntegerToString(i,0,0),OBJPROP_COLOR,COLOR_BUY);

         ObjectSetInteger(0,OBJPREFIX+"SPEEDª",OBJPROP_COLOR,COLOR_BUY);

         //--

         UpTicks+=Speed;//Cumulated

        }

      //-- NegativeValue

      if(Speed<0)

        {

         //-- SetObjects

         ObjectSetInteger(0,OBJPREFIX+"SPEED#"+IntegerToString(i,0,0),OBJPROP_COLOR,COLOR_SELL);

         ObjectSetInteger(0,OBJPREFIX+"SPEEDª",OBJPROP_COLOR,COLOR_SELL);

         //--

         DwnTicks+=MathAbs(Speed);//Cumulated

        }

      ObjectSetString(0,OBJPREFIX+"SPEEDª",OBJPROP_TEXT,0,±Str(Speed,0));//SetObject

     }



//-- IsPlayTickSound

   if(PlayTicks)

     {

      //-- SetWavFile

      string SpeedToStr="";

      //-- PositiveValue

      if(Speed>0)

        {

         SpeedToStr="+"+DoubleToString(MathMin(Speed,10),0);

        }

      //-- NegativeValue

      else

        {

         SpeedToStr=""+DoubleToString(MathMax(Speed,-10),0);

        }

      //--

      _PlaySound("Tick"+SpeedToStr+".wav");

     }

//--

  }

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

//| AccAndTradeInfo                                                  |

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

void AccAndTradeInfo()

  {

//-- ZeroOrders

   if(OpenPos(OP_ALL)==0)

     {

      //-- SetObjects

      ObjectSetInteger(0,OBJPREFIX+"ROIª",OBJPROP_COLOR,±Clr(DailyProfits()));

      ObjectSetInteger(0,OBJPREFIX+"ROI§",OBJPROP_COLOR,±Clr(DailyProfits()));

      //--

      ObjectSetString(0,OBJPREFIX+"ROI%",OBJPROP_TEXT,±Str(DailyReturn(),2)+"%");

      ObjectSetInteger(0,OBJPREFIX+"ROI%",OBJPROP_COLOR,±Clr(DailyReturn()));

      //--

      ObjectSetString(0,OBJPREFIX+"PROFITS",OBJPROP_TEXT,±Str(DailyProfits(),2)+_AccountCurrency());

      ObjectSetInteger(0,OBJPREFIX+"PROFITS",OBJPROP_COLOR,±Clr(DailyProfits()));

      //--

      ObjectSetString(0,OBJPREFIX+"POINTS",OBJPROP_TEXT,±Str(DailyPoints(),0)+"p");

      ObjectSetInteger(0,OBJPREFIX+"POINTS",OBJPROP_COLOR,±Clr(DailyPoints()));

      //--

      ObjectSetString(0,OBJPREFIX+"FLOATª",OBJPROP_TEXT,"");

      ObjectSetInteger(0,OBJPREFIX+"FLOATª",OBJPROP_COLOR,clrNONE);

      //--

      ObjectSetString(0,OBJPREFIX+"FLOAT§",OBJPROP_TEXT,"");

      ObjectSetInteger(0,OBJPREFIX+"FLOAT§",OBJPROP_COLOR,clrNONE);

      //--

      ObjectSetString(0,OBJPREFIX+"FLOAT$",OBJPROP_TEXT,DoubleToString(0,_Digits));

      ObjectSetInteger(0,OBJPREFIX+"FLOAT$",OBJPROP_COLOR,clrNONE);

     }



//-- BuyOrders

   if(OpenPos(OP_BUY)>0 && OpenPos(OP_SELL)==0)

     {

      //-- SetObjects

      ObjectSetString(0,OBJPREFIX+"FLOATª",OBJPROP_TEXT,"ö");

      ObjectSetInteger(0,OBJPREFIX+"FLOATª",OBJPROP_COLOR,clrDodgerBlue);

      //--

      ObjectSetString(0,OBJPREFIX+"FLOAT§",OBJPROP_TEXT,"Buy");

      ObjectSetInteger(0,OBJPREFIX+"FLOAT§",OBJPROP_COLOR,clrDodgerBlue);

      //--

      ObjectSetString(0,OBJPREFIX+"FLOAT$",OBJPROP_TEXT,DoubleToString(ØOpenPrice(),_Digits));

      ObjectSetInteger(0,OBJPREFIX+"FLOAT$",OBJPROP_COLOR,clrDodgerBlue);

     }



//-- SellOrders

   if(OpenPos(OP_SELL)>0 && OpenPos(OP_BUY)==0)

     {

      //-- SetObjects

      ObjectSetString(0,OBJPREFIX+"FLOATª",OBJPROP_TEXT,"ø");

      ObjectSetInteger(0,OBJPREFIX+"FLOATª",OBJPROP_COLOR,clrOrangeRed);

      //--

      ObjectSetString(0,OBJPREFIX+"FLOAT§",OBJPROP_TEXT,"Sell");

      ObjectSetInteger(0,OBJPREFIX+"FLOAT§",OBJPROP_COLOR,clrOrangeRed);

      //--

      ObjectSetString(0,OBJPREFIX+"FLOAT$",OBJPROP_TEXT,DoubleToString(ØOpenPrice(),_Digits));

      ObjectSetInteger(0,OBJPREFIX+"FLOAT$",OBJPROP_COLOR,clrOrangeRed);

     }



//-- Buy&Sell Orders (Hedge)

   if(OpenPos(OP_BUY)>0 && OpenPos(OP_SELL)>0)

     {

      //-- SetObjects

      ObjectSetString(0,OBJPREFIX+"FLOATª",OBJPROP_TEXT,"ô");

      ObjectSetInteger(0,OBJPREFIX+"FLOATª",OBJPROP_COLOR,COLOR_HEDGE);

      //--

      ObjectSetString(0,OBJPREFIX+"FLOAT§",OBJPROP_TEXT,"Hedge");

      ObjectSetInteger(0,OBJPREFIX+"FLOAT§",OBJPROP_COLOR,COLOR_HEDGE);

      //--

      ObjectSetString(0,OBJPREFIX+"FLOAT$",OBJPROP_TEXT,DoubleToString(ØOpenPrice(),_Digits));

      ObjectSetInteger(0,OBJPREFIX+"FLOAT$",OBJPROP_COLOR,COLOR_HEDGE);

     }



//-- AtLeastOneOrder

   if(OpenPos(OP_ALL)>0)

     {

      //-- SetObjects

      ObjectSetInteger(0,OBJPREFIX+"ROIª",OBJPROP_COLOR,clrNONE);

      ObjectSetInteger(0,OBJPREFIX+"ROI§",OBJPROP_COLOR,clrNONE);

      //--

      ObjectSetInteger(0,OBJPREFIX+"ROI%",OBJPROP_COLOR,clrNONE);

      //--

      ObjectSetString(0,OBJPREFIX+"PROFITS",OBJPROP_TEXT,±Str(FloatingProfits(),2)+_AccountCurrency());

      ObjectSetInteger(0,OBJPREFIX+"PROFITS",OBJPROP_COLOR,±Clr(FloatingProfits()));

      //--

      ObjectSetString(0,OBJPREFIX+"POINTS",OBJPROP_TEXT,±Str(FloatingPoints(),0)+"p");

      ObjectSetInteger(0,OBJPREFIX+"POINTS",OBJPROP_COLOR,±Clr(FloatingPoints()));

     }



//-- DisplayOrderHistory

   if(ShowOrdHistory)

      DrawOrdHistory();

//--

  }

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

//| GetSetCoordinates                                                |

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

void GetSetCoordinates()

  {

//-- 

   if(ObjectFind(0,OBJPREFIX+"BCKGRND[]")!=0)//ObjectNotFound

     {



      //-- DeleteObjects (Background must be at the back)

      for(int i=0; i<ObjectsTotal(); i++)

        {

         //-- GetObjectName

         string obj_name=ObjectName(i);

         //-- PrefixObjectFound

         if(StringSubstr(obj_name,0,StringLen(OBJPREFIX))==OBJPREFIX)

           {

            //-- DeleteObjects

            if(ObjectsDeleteAll(0,OBJPREFIX,-1,-1)>0)

               break;

           }

        }



      //-- GetXYValues (Saved)

      if(GlobalVariableGet(ExpertName+" - X")!=0 && GlobalVariableGet(ExpertName+" - Y")!=0)

        {

         x1=(int)GlobalVariableGet(ExpertName+" - X");

         y1=(int)GlobalVariableGet(ExpertName+" - Y");

        }

      //-- SetXYValues (Default)

      else

        {

         x1=CLIENT_BG_X;

         y1=CLIENT_BG_Y;

        }



      //-- CreateObject (Background)

      RectLabelCreate(0,OBJPREFIX+"BCKGRND[]",0,x1,y1,x2,y2,COLOR_BG,BORDER_FLAT,CORNER_LEFT_UPPER,clrOrange,STYLE_SOLID,1,false,true,true,0,"\n");

      ObjectSetInteger(0,OBJPREFIX+"BCKGRND[]",OBJPROP_SELECTED,false);//UnselectObject

     }



//-- GetCoordinates

   x1=(int)ObjectGetInteger(0,OBJPREFIX+"BCKGRND[]",OBJPROP_XDISTANCE);

   y1=(int)ObjectGetInteger(0,OBJPREFIX+"BCKGRND[]",OBJPROP_YDISTANCE);



//-- SetCommonAxis

   button_y=y1+y2-(BUTTON_HEIGHT+BUTTON_GAP_Y);

   inputs_y=button_y-BUTTON_HEIGHT-BUTTON_GAP_Y;

   label_y=inputs_y+EDIT_HEIGHT/2;

//--

   fr_x=x1+SPEEDBAR_GAP_X;

//--

  }

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

//| CreateObjects                                                    |

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

void ObjectsCreateAll()

  {

//--

   ButtonCreate(0,OBJPREFIX+"RESET",0,CLIENT_BG_X,CLIENT_BG_Y,15,15,CORNER_LEFT_UPPER,"°","Wingdings",10,COLOR_FONT,COLOR_MOVE,clrOrange,false,false,false,true,0,"\n");

//--

   RectLabelCreate(0,OBJPREFIX+"BORDER[]",0,x1,y1,x2,INDENT_TOP,clrOrange,BORDER_FLAT,CORNER_LEFT_UPPER,clrOrange,STYLE_SOLID,1,false,false,true,0,"\n");

//-- 

   LabelCreate(0,OBJPREFIX+"CAPTION",0,x1+(x2/2),y1,CORNER_LEFT_UPPER,"Trade Panel","Calibri",10,C'59,41,40',0,ANCHOR_UPPER,false,false,true,0,"\n");

//-- 

   LabelCreate(0,OBJPREFIX+"EXIT",0,(x1+(x2/2))+115,y1-2,CORNER_LEFT_UPPER,"r","Webdings",10,C'59,41,40',0,ANCHOR_UPPER,false,false,true,0,"\n",false);

//--

   ButtonCreate(0,OBJPREFIX+"MOVE",0,x1,y1,15,15,CORNER_LEFT_UPPER,"ó","Wingdings",10,COLOR_FONT,COLOR_MOVE,clrDarkOrange,false,false,false,true,0,"\n");

//--

   LabelCreate(0,OBJPREFIX+"CONNECTION",0,(x1+(x2/2))-97,y1-2,CORNER_LEFT_UPPER,"ü","Webdings",10,C'59,41,40',0,ANCHOR_UPPER,false,false,true,0,"",false);

//--

   LabelCreate(0,OBJPREFIX+"THEME",0,(x1+(x2/2))-72,y1-4,CORNER_LEFT_UPPER,"N","Webdings",15,C'59,41,40',0,ANCHOR_UPPER,false,false,true,0,"\n",false);

//--

   LabelCreate(0,OBJPREFIX+"PAINT",0,(x1+(x2/2))-48,y1,CORNER_LEFT_UPPER,"$","Wingdings 2",13,C'59,41,40',0,ANCHOR_UPPER,false,false,true,0,"\n",false);

//--

   LabelCreate(0,OBJPREFIX+"PLAY",0,(x1+(x2/2))+75,y1-5,CORNER_LEFT_UPPER,"4","Webdings",15,C'59,41,40',0,ANCHOR_UPPER,false,false,true,0,"\n",false);

//--

   LabelCreate(0,OBJPREFIX+"CANDLES¦",0,(x1+(x2/2))+97,y1-6,CORNER_LEFT_UPPER,"ß","Webdings",15,C'59,41,40',0,ANCHOR_UPPER,false,false,true,0,"\n",false);

//--

   LabelCreate(0,OBJPREFIX+"SOUND",0,(x1+(x2/2))+50,y1-2,CORNER_LEFT_UPPER,"X","Webdings",12,C'59,41,40',0,ANCHOR_UPPER,false,false,true,0,"\n",false);

//--

   LabelCreate(0,OBJPREFIX+"SOUNDIO",0,(x1+(x2/2))+60,y1-1,CORNER_LEFT_UPPER,"ð","Webdings",10,C'59,41,40',0,ANCHOR_UPPER,false,false,true,0,"\n",false);

//--

   EditCreate(0,OBJPREFIX+"SYMBOL¤",0,x1+BUTTON_GAP_X,y1+INDENT_TOP+BUTTON_GAP_X,EDIT_WIDTH,EDIT_HEIGHT,_Symbol,"Trebuchet MS",10,ALIGN_CENTER,false,CORNER_LEFT_UPPER,COLOR_FONT,COLOR_BG,clrDimGray,false,false,true,0);

//--

   LabelCreate(0,OBJPREFIX+"SYMBOL§",0,x1+100,y1+27,CORNER_LEFT_UPPER,"","Wingdings",12,clrLimeGreen,0,ANCHOR_RIGHT,false,false,true,0,"\n");

//--

   LabelCreate(0,OBJPREFIX+"SYMBOL%",0,x1+145,y1+27,CORNER_LEFT_UPPER,"","Arial Black",8,COLOR_FONT,0,ANCHOR_RIGHT,false,false,true,0,"\n");

//--

   LabelCreate(0,OBJPREFIX+"SPEEDª",0,x1+SPEEDTEXT_GAP_X,y1+SPEEDTEXT_GAP_Y,CORNER_LEFT_UPPER,"","Tahoma",12,clrNONE,0.0,ANCHOR_RIGHT,false,false,true,0);

//--

   LabelCreate(0,OBJPREFIX+"CLOSE¹²³",0,(x1+BUTTON_GAP_X)+37,(y1+INDENT_TOP+BUTTON_GAP_X)+27,CORNER_LEFT_UPPER,CloseArr[CloseMode],"Arial",6,COLOR_FONT,0,ANCHOR_CENTER,false,false,true,0,"\n",false);

//--

   LabelCreate(0,OBJPREFIX+"SPREAD",0,x1+90,y1+55,CORNER_LEFT_UPPER,"","Arial",8,COLOR_FONT,0,ANCHOR_CENTER,false,false,true,0,"\n");

//--

   LabelCreate(0,OBJPREFIX+"SPREAD§",0,x1+110,y1+55,CORNER_LEFT_UPPER,"h","Wingdings",12,COLOR_FONT,0,ANCHOR_CENTER,false,false,true,0,"\n");

//--

   RectLabelCreate(0,OBJPREFIX+"ASK[]",0,x1+155,y1+41,85,15,COLOR_ASK_REC,BORDER_FLAT,CORNER_LEFT_UPPER,COLOR_ASK_REC,STYLE_SOLID,1,false,false,true,0,"\n");

//--

   LabelCreate(0,OBJPREFIX+"ASK",0,x1+180,y1+49,CORNER_LEFT_UPPER,"","Arial",8,COLOR_FONT2,0,ANCHOR_CENTER,false,false,true,0,"\n");

//--

   RectLabelCreate(0,OBJPREFIX+"BID[]",0,x1+125,y1+56,85,15,COLOR_BID_REC,BORDER_FLAT,CORNER_LEFT_UPPER,COLOR_BID_REC,STYLE_SOLID,1,false,false,true,0,"\n");

//--

   LabelCreate(0,OBJPREFIX+"BID",0,x1+180,y1+63,CORNER_LEFT_UPPER,"","Arial",8,COLOR_FONT2,0,ANCHOR_CENTER,false,false,true,0,"\n");

//--

   LabelCreate(0,OBJPREFIX+"UPTICKS",0,x1+225,y1+49,CORNER_LEFT_UPPER,"","Arial",8,COLOR_FONT2,0,ANCHOR_CENTER,false,false,true,0,"\n");

//--

   LabelCreate(0,OBJPREFIX+"DWNTICKS",0,x1+140,y1+63,CORNER_LEFT_UPPER,"","Arial",8,COLOR_FONT2,0,ANCHOR_CENTER,false,false,true,0,"\n");

//--

   LabelCreate(0,OBJPREFIX+"UP»",0,x1+141,y1+47,CORNER_LEFT_UPPER,"6","Webdings",12,COLOR_SELL,0,ANCHOR_CENTER,false,false,true,0,"\n");

//--

   LabelCreate(0,OBJPREFIX+"DN»",0,x1+225,y1+63,CORNER_LEFT_UPPER,"5","Webdings",12,COLOR_BUY,0,ANCHOR_CENTER,false,false,true,0,"\n");

//--

   LabelCreate(0,OBJPREFIX+"TIMER",0,x1+10,y1+65,CORNER_LEFT_UPPER,"","Tahoma",7,COLOR_FONT,0,ANCHOR_LEFT,false,false,true,0,"\n");

//--

   LabelCreate(0,OBJPREFIX+"FLOATª",0,x1+BUTTON_GAP_X+5,inputs_y-15,CORNER_LEFT_UPPER,"","Wingdings",15,clrNONE,0,ANCHOR_LEFT,false,false,true,0,"\n");

//--

   LabelCreate(0,OBJPREFIX+"FLOAT§",0,x1+BUTTON_GAP_X+45,inputs_y-15,CORNER_LEFT_UPPER,"","Arial",9,clrNONE,0,ANCHOR_CENTER,false,false,true,0,"\n");

//--

   LabelCreate(0,OBJPREFIX+"FLOAT$",0,x1+BUTTON_GAP_X+120,inputs_y-15,CORNER_LEFT_UPPER,"","Arial",9,clrNONE,0,ANCHOR_RIGHT,false,false,true,0,"\n");

//--

   LabelCreate(0,OBJPREFIX+"PROFITS",0,x1+BUTTON_GAP_X+190,inputs_y-15,CORNER_LEFT_UPPER,"","Arial",9,clrNONE,0,ANCHOR_RIGHT,false,false,true,0,"\n");

//--

   LabelCreate(0,OBJPREFIX+"POINTS",0,x1+BUTTON_GAP_X+235,inputs_y-15,CORNER_LEFT_UPPER,"","Arial",9,clrNONE,0,ANCHOR_RIGHT,false,false,true,0,"\n");

//--

   LabelCreate(0,OBJPREFIX+"ROIª",0,x1+BUTTON_GAP_X+5,inputs_y-15,CORNER_LEFT_UPPER,"Today","Arial",9,clrNONE,0,ANCHOR_LEFT,false,false,true,0,"\n");

//--

   LabelCreate(0,OBJPREFIX+"ROI§",0,x1+BUTTON_GAP_X+45,inputs_y-15,CORNER_LEFT_UPPER,"P","Wingdings",15,clrNONE,0,ANCHOR_LEFT,false,false,true,0,"\n");

//--

   LabelCreate(0,OBJPREFIX+"ROI%",0,x1+BUTTON_GAP_X+120,inputs_y-15,CORNER_LEFT_UPPER,"","Arial",9,clrNONE,0,ANCHOR_RIGHT,false,false,true,0,"\n");

//--

   EditCreate(0,OBJPREFIX+"SL<>",0,x1+BUTTON_GAP_X,inputs_y,EDIT_WIDTH,EDIT_HEIGHT,DoubleToString(StopLossInp,0),"Tahoma",10,ALIGN_RIGHT,false,CORNER_LEFT_UPPER,C'59,41,40',clrWhite,clrWhite,false,false,true,0,"\n");

//--

   LabelCreate(0,OBJPREFIX+"SLª",0,x1+BUTTON_GAP_X+EDIT_GAP_Y,label_y,CORNER_LEFT_UPPER,"sl","Arial",10,clrDarkGray,0,ANCHOR_CENTER,false,false,true,0,"\n");

//--

   EditCreate(0,OBJPREFIX+"LOTSIZE<>",0,x1+BUTTON_GAP_X+BUTTON_WIDTH+BUTTON_GAP_X,inputs_y,EDIT_WIDTH,EDIT_HEIGHT,DoubleToString(LotSizeInp,2),"Tahoma",10,ALIGN_CENTER,false,CORNER_LEFT_UPPER,C'59,41,40',clrWhite,clrWhite,false,false,true,0,"\n");

//--

   LabelCreate(0,OBJPREFIX+"LOTSIZE<",0,(x1+BUTTON_GAP_X+EDIT_GAP_Y)+75,label_y,CORNER_LEFT_UPPER,"6","Webdings",10,C'59,41,40',0,ANCHOR_CENTER,false,false,true,0,"\n",false);

//--

   LabelCreate(0,OBJPREFIX+"LOTSIZE>",0,(x1+BUTTON_GAP_X+EDIT_GAP_Y)+130,label_y,CORNER_LEFT_UPPER,"5","Webdings",10,C'59,41,40',0,ANCHOR_CENTER,false,false,true,0,"\n",false);

//--

   EditCreate(0,OBJPREFIX+"TP<>",0,x1+(BUTTON_WIDTH*2)+(BUTTON_GAP_X*3),inputs_y,EDIT_WIDTH,EDIT_HEIGHT,DoubleToString(TakeProfitInp,0),"Tahoma",10,ALIGN_RIGHT,false,CORNER_LEFT_UPPER,C'59,41,40',clrWhite,clrWhite,false,false,true,0,"\n");

//--

   LabelCreate(0,OBJPREFIX+"TPª",0,x1+(BUTTON_WIDTH*2)+(BUTTON_GAP_X*3)+EDIT_GAP_Y,label_y,CORNER_LEFT_UPPER,"tp","Arial",10,clrDarkGray,0,ANCHOR_CENTER,false,false,true,0,"\n");

//--

   ButtonCreate(0,OBJPREFIX+"SELL",0,x1+BUTTON_GAP_X,button_y,BUTTON_WIDTH,BUTTON_HEIGHT,CORNER_LEFT_UPPER,"Sell","Trebuchet MS",10,C'59,41,40',C'255,128,128',C'239,112,112',false,false,false,true,1,"\n");

//--

   ButtonCreate(0,OBJPREFIX+"CLOSE",0,x1+BUTTON_WIDTH+(BUTTON_GAP_X*2),button_y,BUTTON_WIDTH,BUTTON_HEIGHT,CORNER_LEFT_UPPER,"Close","Trebuchet MS",10,C'59,41,40',C'255,255,160',C'239,239,144',false,false,false,true,1,"\n");

//--

   ButtonCreate(0,OBJPREFIX+"BUY",0,x1+(BUTTON_WIDTH*2)+(BUTTON_GAP_X*3),button_y,BUTTON_WIDTH,BUTTON_HEIGHT,CORNER_LEFT_UPPER,"Buy","Trebuchet MS",10,C'59,41,40',C'160,192,255',C'144,176,239',false,false,false,true,1,"\n");



//-- CreateSpeedBars

   for(int i=0; i<MaxSpeedBars; i++)

     {

      LabelCreate(0,OBJPREFIX+"SPEED#"+IntegerToString(i),0,fr_x,y1+SPEEDBAR_GAP_Y,CORNER_LEFT_UPPER,"l","Arial Black",15,clrNONE,0.0,ANCHOR_RIGHT,false,false,true,0);

      fr_x-=5;

     }



//-- Strategy Tester (Cannot change symbol)

   if(IsTesting())

     {

      if(ObjectFind(0,OBJPREFIX+"SYMBOL¤")==0)//ObjectIsPresent

        {

         if(!ObjectGetInteger(0,OBJPREFIX+"SYMBOL¤",OBJPROP_READONLY))//GetObject

            ObjectSetInteger(0,OBJPREFIX+"SYMBOL¤",OBJPROP_READONLY,true);//SetObject

        }

     }

//--

  }

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

//| MoveObjects                                                      |

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

void ObjectsMoveAll()

  {

//--

   RectLabelMove(0,OBJPREFIX+"BORDER[]",x1,y1);

//--

   LabelMove(0,OBJPREFIX+"CAPTION",(x1+(x2/2)),y1);

//--

   LabelMove(0,OBJPREFIX+"EXIT",(x1+(x2/2))+115,y1-2);

//--

   ButtonMove(0,OBJPREFIX+"MOVE",x1,y1);

//--

   LabelMove(0,OBJPREFIX+"CONNECTION",(x1+(x2/2))-97,y1-2);

//--

   LabelMove(0,OBJPREFIX+"THEME",(x1+(x2/2))-72,y1-4);

//--

   LabelMove(0,OBJPREFIX+"PAINT",(x1+(x2/2))-48,y1);

//--

   LabelMove(0,OBJPREFIX+"PLAY",(x1+(x2/2))+75,y1-5);

//--

   LabelMove(0,OBJPREFIX+"CANDLES¦",(x1+(x2/2))+97,y1-6);

//--

   LabelMove(0,OBJPREFIX+"SOUND",(x1+(x2/2))+50,y1-2);

//--

   LabelMove(0,OBJPREFIX+"SOUNDIO",(x1+(x2/2))+60,y1-1);

//--

   EditMove(0,OBJPREFIX+"SYMBOL¤",x1+BUTTON_GAP_X,y1+INDENT_TOP+BUTTON_GAP_X);

//--

   LabelMove(0,OBJPREFIX+"SYMBOL§",x1+100,y1+27);

//--

   LabelMove(0,OBJPREFIX+"SYMBOL%",x1+145,y1+27);

//--   

   LabelMove(0,OBJPREFIX+"SPEEDª",x1+SPEEDTEXT_GAP_X,y1+SPEEDTEXT_GAP_Y);

//--

   LabelMove(0,OBJPREFIX+"CLOSE¹²³",(x1+BUTTON_GAP_X)+37,(y1+INDENT_TOP+BUTTON_GAP_X)+27);

//--

   LabelMove(0,OBJPREFIX+"SPREAD",x1+90,y1+55);

//--

   LabelMove(0,OBJPREFIX+"SPREAD§",x1+110,y1+55);

//--

   RectLabelMove(0,OBJPREFIX+"ASK[]",x1+155,y1+41);

//--

   LabelMove(0,OBJPREFIX+"ASK",x1+180,y1+49);

//--

   RectLabelMove(0,OBJPREFIX+"BID[]",x1+125,y1+56);

//--

   LabelMove(0,OBJPREFIX+"BID",x1+180,y1+63);

//--

   LabelMove(0,OBJPREFIX+"UPTICKS",x1+225,y1+49);

//--

   LabelMove(0,OBJPREFIX+"DWNTICKS",x1+140,y1+63);

//--

   LabelMove(0,OBJPREFIX+"UP»",x1+141,y1+47);

//--

   LabelMove(0,OBJPREFIX+"DN»",x1+225,y1+63);

//--

   LabelMove(0,OBJPREFIX+"TIMER",x1+10,y1+65);

//--

   LabelMove(0,OBJPREFIX+"FLOATª",x1+BUTTON_GAP_X+5,inputs_y-15);

//--

   LabelMove(0,OBJPREFIX+"FLOAT§",x1+BUTTON_GAP_X+45,inputs_y-15);

//--

   LabelMove(0,OBJPREFIX+"FLOAT$",x1+BUTTON_GAP_X+120,inputs_y-15);

//--

   LabelMove(0,OBJPREFIX+"PROFITS",x1+BUTTON_GAP_X+190,inputs_y-15);

//--

   LabelMove(0,OBJPREFIX+"POINTS",x1+BUTTON_GAP_X+235,inputs_y-15);

//--

   LabelMove(0,OBJPREFIX+"ROIª",x1+BUTTON_GAP_X+5,inputs_y-15);

//--

   LabelMove(0,OBJPREFIX+"ROI§",x1+BUTTON_GAP_X+45,inputs_y-15);

//--

   LabelMove(0,OBJPREFIX+"ROI%",x1+BUTTON_GAP_X+120,inputs_y-15);

//--

   EditMove(0,OBJPREFIX+"SL<>",x1+BUTTON_GAP_X,inputs_y);

//--

   LabelMove(0,OBJPREFIX+"SLª",x1+BUTTON_GAP_X+EDIT_GAP_Y,label_y);

//--

   EditMove(0,OBJPREFIX+"LOTSIZE<>",x1+BUTTON_WIDTH+(BUTTON_GAP_X*2),inputs_y);

//--

   LabelMove(0,OBJPREFIX+"LOTSIZE<",(x1+BUTTON_GAP_X+EDIT_GAP_Y)+75,label_y);

//--

   LabelMove(0,OBJPREFIX+"LOTSIZE>",(x1+BUTTON_GAP_X+EDIT_GAP_Y)+130,label_y);

//--

   EditMove(0,OBJPREFIX+"TP<>",x1+(BUTTON_WIDTH*2)+(BUTTON_GAP_X*3),inputs_y);

//--

   LabelMove(0,OBJPREFIX+"TPª",x1+(BUTTON_WIDTH*2)+(BUTTON_GAP_X*3)+EDIT_GAP_Y,label_y);

//--

   ButtonMove(0,OBJPREFIX+"SELL",x1+BUTTON_GAP_X,button_y);

//--

   ButtonMove(0,OBJPREFIX+"CLOSE",x1+BUTTON_WIDTH+(BUTTON_GAP_X*2),button_y);

//--

   ButtonMove(0,OBJPREFIX+"BUY",x1+(BUTTON_WIDTH*2)+(BUTTON_GAP_X*3),button_y);



//-- MoveSpeedBars

   for(int i=0; i<MaxSpeedBars; i++)

     {

      LabelMove(0,OBJPREFIX+"SPEED#"+IntegerToString(i),fr_x,y1+SPEEDBAR_GAP_Y);

      fr_x-=5;

     }

//--

  }

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

//| CheckObjects                                                     |

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

void ObjectsCheckAll()

  {

//-- CreateObjects

   ObjectsCreateAll();/*User may have deleted one*/



//+------- TrackSomeObjects -------+



//-- IsSelectable

   if(ObjectFind(0,OBJPREFIX+"MOVE")==0 && ObjectFind(0,OBJPREFIX+"BCKGRND[]")==0)//ObjectIsPresent

     {

      if(ObjectGetInteger(0,OBJPREFIX+"MOVE",OBJPROP_STATE))//GetObject

        {

         if(!ObjectGetInteger(0,OBJPREFIX+"BCKGRND[]",OBJPROP_SELECTED))//GetObject

            ObjectSetInteger(0,OBJPREFIX+"BCKGRND[]",OBJPROP_SELECTED,true);//SetObject

        }

      //-- IsNotSelectable

      else

        {

         if(!ObjectGetInteger(0,OBJPREFIX+"MOVE",OBJPROP_STATE))//GetObject

            ObjectSetInteger(0,OBJPREFIX+"BCKGRND[]",OBJPROP_SELECTED,false);//SetObject

        }

     }



//-- IsConnected

   if(ObjectFind(0,OBJPREFIX+"CONNECTION")==0)//ObjectIsPresent

     {

      if(TerminalInfoInteger(TERMINAL_CONNECTED))

        {

         if(ObjectGetString(0,OBJPREFIX+"CONNECTION",OBJPROP_TEXT)!="ü")//GetObject

            ObjectSetString(0,OBJPREFIX+"CONNECTION",OBJPROP_TEXT,"ü");//SetObject

         if(ObjectGetString(0,OBJPREFIX+"CONNECTION",OBJPROP_TOOLTIP)!="Connected")//GetObject

            ObjectSetString(0,OBJPREFIX+"CONNECTION",OBJPROP_TOOLTIP,"Connected");//SetObject

        }

      //-- IsDisconnected

      else

        {

         if(ObjectGetString(0,OBJPREFIX+"CONNECTION",OBJPROP_TEXT)!="ñ")//GetObject

            ObjectSetString(0,OBJPREFIX+"CONNECTION",OBJPROP_TEXT,"ñ");//SetObject

         if(ObjectGetString(0,OBJPREFIX+"CONNECTION",OBJPROP_TOOLTIP)!="No connection!")//GetObject

            ObjectSetString(0,OBJPREFIX+"CONNECTION",OBJPROP_TOOLTIP,"No connection!");//SetObject

        }

     }



//-- SoundIsEnabled

   if(ObjectFind(0,OBJPREFIX+"SOUNDIO")==0)//ObjectIsPresent

     {

      if(SoundIsEnabled)

        {

         if(ObjectGetInteger(0,OBJPREFIX+"SOUNDIO",OBJPROP_COLOR)!=C'59,41,40')//GetObject

            ObjectSetInteger(0,OBJPREFIX+"SOUNDIO",OBJPROP_COLOR,C'59,41,40');//SetObject

        }

      //-- SoundIsDisabled

      else

        {

         if(ObjectGetInteger(0,OBJPREFIX+"SOUNDIO",OBJPROP_COLOR)!=clrNONE)//GetObject

            ObjectSetInteger(0,OBJPREFIX+"SOUNDIO",OBJPROP_COLOR,clrNONE);//SetObject

        }

     }



//-- TickSoundsAreEnabled

   if(ObjectFind(0,OBJPREFIX+"PLAY")==0)//ObjectIsPresent

     {

      if(PlayTicks)

        {

         if(ObjectGetString(0,OBJPREFIX+"PLAY",OBJPROP_TEXT)!=";")//GetObject

            ObjectSetString(0,OBJPREFIX+"PLAY",OBJPROP_TEXT,";");//SetObject

         if(ObjectGetInteger(0,OBJPREFIX+"PLAY",OBJPROP_FONTSIZE)!=14)//GetObject

            ObjectSetInteger(0,OBJPREFIX+"PLAY",OBJPROP_FONTSIZE,14);//SetObject

        }

      //-- TickSoundsAreDisabled

      else

        {

         if(ObjectGetString(0,OBJPREFIX+"PLAY",OBJPROP_TEXT)!="4")//GetObject

            ObjectSetString(0,OBJPREFIX+"PLAY",OBJPROP_TEXT,"4");//SetObject

         if(ObjectGetInteger(0,OBJPREFIX+"PLAY",OBJPROP_FONTSIZE)!=15)//GetObject

            ObjectSetInteger(0,OBJPREFIX+"PLAY",OBJPROP_FONTSIZE,15);//SetObject

        }

     }



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

//--

  }

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

//| SetColors                                                        |

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

void SetColors(const int Type)

  {

//--

   if(Type==LIGHT)

     {

      //-- Light

      COLOR_BG=C'240,240,240';

      COLOR_FONT=C'40,41,59';

      COLOR_FONT2=COLOR_FONT;

      COLOR_MOVE=clrDarkGray;

      COLOR_GREEN=clrForestGreen;

      COLOR_RED=clrIndianRed;

      COLOR_HEDGE=clrDarkOrange;

      COLOR_ASK_REC=C'255,228,255';

      COLOR_BID_REC=C'215,228,255';

     }

   else

     {

      //-- Dark

      COLOR_BG=C'28,28,28';

      COLOR_FONT=clrDarkGray;

      COLOR_FONT2=COLOR_BG;

      COLOR_MOVE=clrDimGray;

      COLOR_GREEN=clrLimeGreen;

      COLOR_RED=clrRed;

      COLOR_HEDGE=clrGold;

      COLOR_ASK_REC=COLOR_SELL;

      COLOR_BID_REC=COLOR_BUY;

     }

//--

  }

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

//| SetTheme                                                         |

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

void SetTheme(const int Type)

  {

//--

   if(Type==LIGHT)

     {

      //-- Light

      COLOR_BG=C'240,240,240';

      COLOR_FONT=C'40,41,59';

      COLOR_MOVE=clrDarkGray;

      COLOR_GREEN=clrForestGreen;

      COLOR_RED=clrIndianRed;

      COLOR_HEDGE=clrDarkOrange;

      //-- SetObjects

      ObjectSetInteger(0,OBJPREFIX+"RESET",OBJPROP_BGCOLOR,COLOR_MOVE);

      ObjectSetInteger(0,OBJPREFIX+"RESET",OBJPROP_COLOR,COLOR_FONT);

      //--

      ObjectSetInteger(0,OBJPREFIX+"BCKGRND[]",OBJPROP_BGCOLOR,COLOR_BG);

      //--

      ObjectSetInteger(0,OBJPREFIX+"MOVE",OBJPROP_BGCOLOR,COLOR_MOVE);

      ObjectSetInteger(0,OBJPREFIX+"MOVE",OBJPROP_COLOR,COLOR_FONT);

      //--

      ObjectSetInteger(0,OBJPREFIX+"CLOSE¹²³",OBJPROP_COLOR,COLOR_FONT);

      //--

      ObjectSetInteger(0,OBJPREFIX+"SYMBOL¤",OBJPROP_BGCOLOR,COLOR_BG);

      ObjectSetInteger(0,OBJPREFIX+"SYMBOL¤",OBJPROP_COLOR,COLOR_FONT);

      //--

      ObjectSetInteger(0,OBJPREFIX+"ASK[]",OBJPROP_BGCOLOR,C'255,228,255');

      ObjectSetInteger(0,OBJPREFIX+"ASK[]",OBJPROP_COLOR,C'255,228,255');

      ObjectSetInteger(0,OBJPREFIX+"ASK",OBJPROP_COLOR,COLOR_FONT);

      ObjectSetInteger(0,OBJPREFIX+"UPTICKS",OBJPROP_COLOR,COLOR_FONT);

      //--

      ObjectSetInteger(0,OBJPREFIX+"BID[]",OBJPROP_BGCOLOR,C'215,228,255');

      ObjectSetInteger(0,OBJPREFIX+"BID[]",OBJPROP_COLOR,C'215,228,255');

      ObjectSetInteger(0,OBJPREFIX+"BID",OBJPROP_COLOR,COLOR_FONT);

      ObjectSetInteger(0,OBJPREFIX+"DWNTICKS",OBJPROP_COLOR,COLOR_FONT);

      //--

      ObjectSetInteger(0,OBJPREFIX+"SPREAD§",OBJPROP_COLOR,COLOR_FONT);

      ObjectSetInteger(0,OBJPREFIX+"SPREAD",OBJPROP_COLOR,COLOR_FONT);

      //--

      ObjectSetInteger(0,OBJPREFIX+"TIMER",OBJPROP_COLOR,COLOR_FONT);

      //-- StoreSelectedTheme

      SelectedTheme=LIGHT;

     }

   else

     {

      //-- Dark

      COLOR_BG=C'28,28,28';

      COLOR_FONT=clrDarkGray;

      COLOR_MOVE=clrDimGray;

      COLOR_GREEN=clrLimeGreen;

      COLOR_RED=clrRed;

      COLOR_HEDGE=clrGold;

      //-- SetObjects

      ObjectSetInteger(0,OBJPREFIX+"RESET",OBJPROP_BGCOLOR,COLOR_MOVE);

      ObjectSetInteger(0,OBJPREFIX+"RESET",OBJPROP_COLOR,COLOR_FONT);

      //--

      ObjectSetInteger(0,OBJPREFIX+"BCKGRND[]",OBJPROP_BGCOLOR,COLOR_BG);

      //--

      ObjectSetInteger(0,OBJPREFIX+"MOVE",OBJPROP_BGCOLOR,COLOR_MOVE);

      ObjectSetInteger(0,OBJPREFIX+"MOVE",OBJPROP_COLOR,COLOR_FONT);

      //--

      ObjectSetInteger(0,OBJPREFIX+"CLOSE¹²³",OBJPROP_COLOR,COLOR_FONT);

      //--

      ObjectSetInteger(0,OBJPREFIX+"SYMBOL¤",OBJPROP_BGCOLOR,COLOR_BG);

      ObjectSetInteger(0,OBJPREFIX+"SYMBOL¤",OBJPROP_COLOR,COLOR_FONT);

      //--

      ObjectSetInteger(0,OBJPREFIX+"ASK[]",OBJPROP_BGCOLOR,COLOR_SELL);

      ObjectSetInteger(0,OBJPREFIX+"ASK[]",OBJPROP_COLOR,COLOR_SELL);

      ObjectSetInteger(0,OBJPREFIX+"ASK",OBJPROP_COLOR,COLOR_BG);

      ObjectSetInteger(0,OBJPREFIX+"UPTICKS",OBJPROP_COLOR,COLOR_BG);

      //--

      ObjectSetInteger(0,OBJPREFIX+"BID[]",OBJPROP_BGCOLOR,COLOR_BUY);

      ObjectSetInteger(0,OBJPREFIX+"BID[]",OBJPROP_COLOR,COLOR_BUY);

      ObjectSetInteger(0,OBJPREFIX+"BID",OBJPROP_COLOR,COLOR_BG);

      ObjectSetInteger(0,OBJPREFIX+"DWNTICKS",OBJPROP_COLOR,COLOR_BG);

      //--

      ObjectSetInteger(0,OBJPREFIX+"SPREAD§",OBJPROP_COLOR,COLOR_FONT);

      ObjectSetInteger(0,OBJPREFIX+"SPREAD",OBJPROP_COLOR,COLOR_FONT);

      //--

      ObjectSetInteger(0,OBJPREFIX+"TIMER",OBJPROP_COLOR,COLOR_FONT);

      //-- StoreSelectedTheme

      SelectedTheme=DARK;

     }

//--

  }

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

//| ResetTicks                                                       |

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

bool ResetTicks()

  {

//--

   static datetime lastbar=0;

//--

   if(lastbar!=Time[0])

     {

      //-- ResetTicks

      UpTicks=0;

      DwnTicks=0;

      //-- StoreBarTime

      lastbar=Time[0];

      return(true);

     }

   else

     {

      return(false);

     }

//--

  }

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

//| ±Str                                                             |

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

string ±Str(double Inp,int Precision)

  {

//-- PositiveValue

   if(Inp>0)

     {

      return("+"+DoubleToString(Inp,Precision));

     }

//-- NegativeValue

   else

     {

      return(DoubleToString(Inp,Precision));

     }

//--

  }

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

//| ±Clr                                                             |

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

color ±Clr(double Inp)

  {

//--

   color clr=clrNONE;

//-- PositiveValue

   if(Inp>0)

     {

      clr=COLOR_GREEN;

     }

//-- NegativeValue

   if(Inp<0)

     {

      clr=COLOR_RED;

     }

//-- NeutralValue

   if(Inp==0)

     {

      clr=COLOR_FONT;

     }

//--

   return(clr);

//--

  }

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

//| SymbolFind                                                       |

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

bool SymbolFind(const string _Symb)

  {

//--

   bool result=false;

//--

   for(int i=0; i<SymbolsTotal(false); i++)

     {

      if(_Symb==SymbolName(i,false))

        {

         result=true;//SymbolFound

         break;

        }

     }

   return(result);

  }

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

//| DrawOrdHistory                                                   |

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

void DrawOrdHistory()

  {

//--

   string obj_name="",ordtype="",ticket="",openprice="",closeprice="",ordlots="",stoploss="",takeprofit="";

//--

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

     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

        {

         if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber)

           {

            if(OrderType()<=OP_SELL)//MarketOrdersOnly

              {

               //-- SetColor&OrdType

               if(OrderType()==OP_SELL){COLOR_ARROW=COLOR_SELL;ordtype="sell";}//SellOrders

               else{COLOR_ARROW=COLOR_BUY;ordtype="buy";}/*BuyOrders*/

               //-- ConvertToString

               ticket=IntegerToString(OrderTicket());//GetTicket

               openprice=DoubleToString(OrderOpenPrice(),_Digits);//GetOpenPrice

               closeprice=DoubleToString(OrderClosePrice(),_Digits);//GetClosePrice

               ordlots=DoubleToString(OrderLots(),2);/*GetOrderLots*/

               //-- OrderLine

               obj_name="#"+ticket+" "+openprice+" -> "+closeprice;//SetName

               TrendCreate(0,obj_name,0,OrderOpenTime(),OrderOpenPrice(),OrderCloseTime(),OrderClosePrice(),COLOR_ARROW,STYLE_DOT,1,false,false,false,0);

               //-- OpenArrow

               obj_name="#"+ticket+" "+ordtype+" "+ordlots+" "+_Symbol+" at "+openprice;//SetName

               ArrowCreate(0,obj_name,0,OrderOpenTime(),OrderOpenPrice(),1,ANCHOR_BOTTOM,COLOR_ARROW,STYLE_SOLID,1,false,false,false,0);

               //-- CloseArrow

               obj_name+=" close at "+closeprice;//SetName

               ArrowCreate(0,obj_name,0,OrderCloseTime(),OrderClosePrice(),3,ANCHOR_BOTTOM,COLOR_CLOSE,STYLE_SOLID,1,false,false,false,0);

               //-- StopLossArrow

               if(OrderStopLoss()>0)

                 {

                  stoploss=DoubleToString(OrderStopLoss(),_Digits);//GetStopLoss

                  obj_name="#"+ticket+" "+ordtype+" "+ordlots+" "+_Symbol+" at "+openprice+" sl at "+stoploss;//SetName

                  ArrowCreate(0,obj_name,0,OrderOpenTime(),OrderStopLoss(),4,ANCHOR_BOTTOM,COLOR_SELL,STYLE_SOLID,1,false,false,false,0);

                 }

               //-- TakeProfitArrow

               if(OrderTakeProfit()>0)

                 {

                  takeprofit=DoubleToString(OrderTakeProfit(),_Digits);//GetTakeProfit

                  obj_name="#"+ticket+" "+ordtype+" "+ordlots+" "+_Symbol+" at "+openprice+" tp at "+takeprofit;//SetName

                  ArrowCreate(0,obj_name,0,OrderOpenTime(),OrderTakeProfit(),4,ANCHOR_BOTTOM,COLOR_BUY,STYLE_SOLID,1,false,false,false,0);

                 }

               //--

              }

           }

        }

     }

//--

  }

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

//| Create rectangle label                                           |

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

bool RectLabelCreate(const long             chart_ID=0,               // chart's ID

                     const string           name="RectLabel",         // label name

                     const int              sub_window=0,             // subwindow index

                     const int              x=0,                      // X coordinate

                     const int              y=0,                      // Y coordinate

                     const int              width=50,                 // width

                     const int              height=18,                // height

                     const color            back_clr=C'236,233,216',  // background color

                     const ENUM_BORDER_TYPE border=BORDER_SUNKEN,     // border type

                     const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // chart corner for anchoring

                     const color            clr=clrRed,               // flat border color (Flat)

                     const ENUM_LINE_STYLE  style=STYLE_SOLID,        // flat border style

                     const int              line_width=1,             // flat border width

                     const bool             back=false,               // in the background

                     const bool             selection=false,          // highlight to move

                     const bool             hidden=true,              // hidden in the object list

                     const long             z_order=0,                // priority for mouse click 

                     const string           tooltip="\n")             // tooltip for mouse hover

  {

//--- reset the error value

   ResetLastError();

//--

   if(ObjectFind(chart_ID,name)!=0)

     {

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

        {

         Print(__FUNCTION__,

               ": failed to create a rectangle label! Error code = ",_LastError);

         return(false);

        }

      //-- SetObjects

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

      ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);

      ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,border);

      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);

      ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);

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

      ObjectSetString(chart_ID,name,OBJPROP_TOOLTIP,tooltip);

     }

//--

   return(true);

  }

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

//| Move rectangle label                                             |

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

bool RectLabelMove(const long   chart_ID=0,       // chart's ID

                   const string name="RectLabel", // label name

                   const int    x=0,              // X coordinate

                   const int    y=0)              // Y coordinate

  {

//--- reset the error value

   ResetLastError();

//--

   if(ObjectFind(chart_ID,name)==0)

     {

      if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))

        {

         Print(__FUNCTION__,

               ": failed to move X coordinate of the label! Error code = ",_LastError);

         return(false);

        }

      if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))

        {

         Print(__FUNCTION__,

               ": failed to move Y coordinate of the label! Error code = ",_LastError);

         return(false);

        }

     }

//--

   return(true);

  }

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

//| Create the button                                                | 

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

bool ButtonCreate(const long              chart_ID=0,               // chart's ID 

                  const string            name="Button",            // button name 

                  const int               sub_window=0,             // subwindow index 

                  const int               x=0,                      // X coordinate 

                  const int               y=0,                      // Y coordinate 

                  const int               width=50,                 // button width 

                  const int               height=18,                // button height 

                  const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // chart corner for anchoring 

                  const string            text="Button",            // text 

                  const string            font="Arial",             // font 

                  const int               font_size=10,             // font size 

                  const color             clr=clrBlack,             // text color 

                  const color             back_clr=C'236,233,216',  // background color 

                  const color             border_clr=clrNONE,       // border color 

                  const bool              state=false,              // pressed/released 

                  const bool              back=false,               // in the background 

                  const bool              selection=false,          // highlight to move 

                  const bool              hidden=true,              // hidden in the object list 

                  const long              z_order=0,                // priority for mouse click 

                  const string            tooltip="\n")             // tooltip for mouse hover

  {

//-- reset the error value 

   ResetLastError();

//--

   if(ObjectFind(chart_ID,name)!=0)

     {

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

        {

         Print(__FUNCTION__,

               ": failed to create the button! Error code = ",_LastError);

         return(false);

        }

      //-- SetObjects

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

      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);

      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_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_STATE,state);

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

      ObjectSetString(chart_ID,name,OBJPROP_TOOLTIP,tooltip);

     }

//--

   return(true);

  }

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

//| Move the button                                                  |

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

bool ButtonMove(const long   chart_ID=0,    // chart's ID

                const string name="Button", // button name

                const int    x=0,           // X coordinate

                const int    y=0)           // Y coordinate

  {

//--- reset the error value

   ResetLastError();

//--

   if(ObjectFind(chart_ID,name)==0)

     {

      if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))

        {

         Print(__FUNCTION__,

               ": failed to move X coordinate of the button! Error code = ",_LastError);

         return(false);

        }

      if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))

        {

         Print(__FUNCTION__,

               ": failed to move Y coordinate of the button! Error code = ",_LastError);

         return(false);

        }

     }

//--

   return(true);

  }

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

//| Create a text label                                              | 

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

bool LabelCreate(const long              chart_ID=0,               // chart's ID 

                 const string            name="Label",             // label name 

                 const int               sub_window=0,             // subwindow index 

                 const int               x=0,                      // X coordinate 

                 const int               y=0,                      // Y coordinate 

                 const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // chart corner for anchoring 

                 const string            text="Label",             // text 

                 const string            font="Arial",             // font 

                 const int               font_size=10,             // font size 

                 const color             clr=clrRed,               // color 

                 const double            angle=0.0,                // text slope 

                 const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // anchor type 

                 const bool              back=false,               // in the background 

                 const bool              selection=false,          // highlight to move 

                 const bool              hidden=true,              // hidden in the object list 

                 const long              z_order=0,                // priority for mouse click 

                 const string            tooltip="\n",             // tooltip for mouse hover

                 const bool              tester=true)              // create object in the strategy tester

  {

//-- reset the error value 

   ResetLastError();

//-- CheckTester

   if(!tester && IsTesting())

      return(false);

//--

   if(ObjectFind(chart_ID,name)!=0)

     {

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

        {

         Print(__FUNCTION__,

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

         return(false);

        }

      //-- SetObjects

      ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);

      ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);

      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);

      ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);

      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_COLOR,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);

      ObjectSetString(chart_ID,name,OBJPROP_TOOLTIP,tooltip);

     }

//--

   return(true);

  }

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

//| Move the text label                                              |

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

bool LabelMove(const long   chart_ID=0,   // chart's ID

               const string name="Label", // label name

               const int    x=0,          // X coordinate

               const int    y=0)          // Y coordinate

  {

//-- reset the error value

   ResetLastError();

//--

   if(ObjectFind(chart_ID,name)==0)

     {

      if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))

        {

         Print(__FUNCTION__,

               ": failed to move X coordinate of the label! Error code = ",_LastError);

         return(false);

        }

      if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))

        {

         Print(__FUNCTION__,

               ": failed to move Y coordinate of the label! Error code = ",_LastError);

         return(false);

        }

     }

//--

   return(true);

  }

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

//| Create Edit object                                               |

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

bool EditCreate(const long             chart_ID=0,               // chart's ID

                const string           name="Edit",              // object name

                const int              sub_window=0,             // subwindow index

                const int              x=0,                      // X coordinate

                const int              y=0,                      // Y coordinate

                const int              width=50,                 // width

                const int              height=18,                // height

                const string           text="Text",              // text

                const string           font="Arial",             // font

                const int              font_size=10,             // font size

                const ENUM_ALIGN_MODE  align=ALIGN_CENTER,       // alignment type

                const bool             read_only=false,          // ability to edit

                const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // chart corner for anchoring

                const color            clr=clrBlack,             // text color

                const color            back_clr=clrWhite,        // background color

                const color            border_clr=clrNONE,       // border color

                const bool             back=false,               // in the background

                const bool             selection=false,          // highlight to move

                const bool             hidden=true,              // hidden in the object list

                const long             z_order=0,                // priority for mouse click 

                const string           tooltip="\n")             // tooltip for mouse hover

  {

//-- reset the error value

   ResetLastError();

//--

   if(ObjectFind(chart_ID,name)!=0)

     {

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

        {

         Print(__FUNCTION__,

               ": failed to create \"Edit\" object! Error code = ",_LastError);

         return(false);

        }

      //-- SetObjects

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

      ObjectSetString(chart_ID,name,OBJPROP_TOOLTIP,tooltip);

     }

//--

   return(true);

  }

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

//| Move Edit object                                                 |

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

bool EditMove(const long   chart_ID=0,  // chart's ID

              const string name="Edit", // object name

              const int    x=0,         // X coordinate

              const int    y=0)         // Y coordinate

  {



//-- reset the error value

   ResetLastError();

//--

   if(ObjectFind(chart_ID,name)==0)

     {

      if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))

        {

         Print(__FUNCTION__,

               ": failed to move X coordinate of the object! Error code = ",_LastError);

         return(false);

        }

      if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))

        {

         Print(__FUNCTION__,

               ": failed to move Y coordinate of the object! Error code = ",_LastError);

         return(false);

        }

     }

//--

   return(true);

  }

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

//| Creating Text object                                             | 

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

bool TextCreate(const long              chart_ID=0,               // chart's ID 

                const string            name="Text",              // object name 

                const int               sub_window=0,             // subwindow index 

                datetime                time=0,                   // anchor point time 

                double                  price=0,                  // anchor point price 

                const string            text="Text",              // the text itself 

                const string            font="Arial",             // font 

                const int               font_size=10,             // font size 

                const color             clr=clrRed,               // color 

                const double            angle=0.0,                // text slope 

                const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // anchor type 

                const bool              back=false,               // in the background 

                const bool              selection=false,          // highlight to move 

                const bool              hidden=true,              // hidden in the object list 

                const long              z_order=0,                // priority for mouse click 

                const string            tooltip="\n")             // tooltip for mouse hover

  {

//-- reset the error value

   ResetLastError();

//--

   if(ObjectFind(chart_ID,name)!=0)

     {

      if(!ObjectCreate(chart_ID,name,OBJ_TEXT,sub_window,time,price))

        {

         Print(__FUNCTION__,

               ": failed to create \"Text\" object! Error code = ",_LastError);

         return(false);

        }

      //-- SetObjects

      ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);

      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_COLOR,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);

      ObjectSetString(chart_ID,name,OBJPROP_TOOLTIP,tooltip);

     }

//--

   return(true);

  }

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

//| Create the arrow                                                 | 

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

bool ArrowCreate(const long              chart_ID=0,           // chart's ID 

                 const string            name="Arrow",         // arrow name 

                 const int               sub_window=0,         // subwindow index 

                 datetime                time=0,               // anchor point time 

                 double                  price=0,              // anchor point price 

                 const uchar             arrow_code=252,       // arrow code 

                 const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM, // anchor point position 

                 const color             clr=clrRed,           // arrow color 

                 const ENUM_LINE_STYLE   style=STYLE_SOLID,    // border line style 

                 const int               width=3,              // arrow size 

                 const bool              back=false,           // in the background 

                 const bool              selection=true,       // highlight to move 

                 const bool              hidden=true,          // hidden in the object list 

                 const long              z_order=0)            // priority for mouse click 

  {

//-- reset the error value

   ResetLastError();

//--

   if(ObjectFind(chart_ID,name)!=0)

     {

      if(!ObjectCreate(chart_ID,name,OBJ_ARROW,sub_window,time,price))

        {

         Print(__FUNCTION__,

               ": failed to create an arrow! Error code = ",_LastError);

         return(false);

        }

      //-- SetObjects

      ObjectSetInteger(chart_ID,name,OBJPROP_ARROWCODE,arrow_code);

      ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);

      ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);

      ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);

      ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,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);

     }

//--

   return(true);

  }

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

//| Create a trend line by the given coordinates                     | 

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

bool TrendCreate(const long            chart_ID=0,        // chart's ID 

                 const string          name="TrendLine",  // line name 

                 const int             sub_window=0,      // subwindow index 

                 datetime              time1=0,           // first point time 

                 double                price1=0,          // first point price 

                 datetime              time2=0,           // second point time 

                 double                price2=0,          // second point price 

                 const color           clr=clrRed,        // line color 

                 const ENUM_LINE_STYLE style=STYLE_SOLID, // line style 

                 const int             width=1,           // line width 

                 const bool            back=false,        // in the background 

                 const bool            selection=true,    // highlight to move 

                 const bool            ray_right=false,   // line's continuation to the right 

                 const bool            hidden=true,       // hidden in the object list 

                 const long            z_order=0)         // priority for mouse click 

  {

//-- reset the error value

   ResetLastError();

//--

   if(ObjectFind(chart_ID,name)!=0)

     {

      if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,time1,price1,time2,price2))

        {

         Print(__FUNCTION__,

               ": failed to create a trend line! Error code = ",_LastError);

         return(false);

        }

      //-- SetObjects

      ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);

      ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);

      ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,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_RAY_RIGHT,ray_right);

      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);

      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);

     }

//--

   return(true);

  }

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

//| ChartEventMouseMoveSet                                                       | 

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

bool ChartEventMouseMoveSet(const bool value)

  {

//-- reset the error value 

   ResetLastError();

//--

   if(!ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,0,value))

     {

      Print(__FUNCTION__,

            ", Error Code = ",_LastError);

      return(false);

     }

//--

   return(true);

  }

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

//| ChartMouseScrollSet                                                | 

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

bool ChartMouseScrollSet(const bool value)

  {

//-- reset the error value 

   ResetLastError();

//--

   if(!ChartSetInteger(0,CHART_MOUSE_SCROLL,0,value))

     {

      Print(__FUNCTION__,

            ", Error Code = ",_LastError);

      return(false);

     }

//--

   return(true);

  }

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

//| ChartMiddleX                                                     |

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

int ChartMiddleX()

  {

   return((int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS)/2);

  }

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

//| ChartMiddleY                                                     |

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

int ChartMiddleY()

  {

   return((int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS)/2);

  }

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

//| RandomColor                                                      |

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

color RandomColor()

  {

//--

   int p1=0+255*MathRand()/32768;

   int p2=0+255*MathRand()/32768;

   int p3=0+255*MathRand()/32768;

//--

   return(StringToColor(IntegerToString(p1)+","+IntegerToString(p2)+","+IntegerToString(p3)));

  }

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

//| PlaySound                                                        | 

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

void _PlaySound(const string FileName)

  {

   if(SoundIsEnabled)

      PlaySound(FileName);

  }

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

//| AccountCurrency                                                  |

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

string _AccountCurrency()

  {

//--

   string txt="";

   if(AccountCurrency()=="AUD")txt="$";

   if(AccountCurrency()=="CAD")txt="$";

   if(AccountCurrency()=="CHF")txt="Fr.";

   if(AccountCurrency()=="EUR")txt="¬ ";

   if(AccountCurrency()=="GBP")txt="£";

   if(AccountCurrency()=="JPY")txt="¥";

   if(AccountCurrency()=="NZD")txt="$";

   if(AccountCurrency()=="USD")txt="$";

   if(txt=="")txt="$";

   return(txt);

//--

  }

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

//| End of the code                                                  | 

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

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