//+------------------------------------------------------------------+
//|                                                Floating_Stop.mq4 |
//|                                                    Rod Greenwood |
//|                                         rod.greenwood@tpg.com.au |
//+------------------------------------------------------------------+
#property copyright "Rod Greenwood"
#property link      "rod.greenwood@tpg.com.au"
#property version   "1.00"
#property strict

#include <stderror.mqh>
#include <stdlib.mqh>
#import "Kernel32.dll"
#import

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int ticket,button_color,indexPos;
int OnInit()
  {
//---
   if(IsTesting())
      Print("I am testing now");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   Floating_Stop();
   SideButtons();
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//+------------------------------------------------------------------+
//|                      Buy Button ChartEvent                       |
//+------------------------------------------------------------------+
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      if(sparam=="OpenBUYButton")
        {
         ticket = OrderSend(Symbol(),OP_BUY,0.10,Ask,3,Ask - 100*_Point,Ask + 100*_Point,IntegerToString(OrderTicket()),0,0,CLR_NONE);
         ObjectDelete((StringSubstr("close_order "+(string)OrderTicket(),12,10)));
        }
      //---
      if(sparam=="OpenSELLButton")
        {
         ticket = OrderSend(Symbol(),OP_SELL,0.10,Bid,3,Bid + 100*_Point,Bid - 100*_Point,IntegerToString(OrderTicket()),0,0,CLR_NONE);
         ObjectDelete((StringSubstr("close_order "+(string)OrderTicket(),12,10)));
        }
      //+------------------------------------------------------------------+
      //|                      Close All Button ChartEvent                 |
      //+------------------------------------------------------------------+
      if(sparam=="CloseAllButton")
        {
         for(int i=OrdersTotal()-1; i>=0; i--)
           {
            if(OrderSelect(i,SELECT_BY_POS))
               ;
            else;
              {
               Print(" ",GetLastError());
              }
            if((OrderType()==OP_BUY && OrderSymbol()==Symbol()) || (OrderType()==OP_SELL && OrderSymbol()==Symbol()))

               if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5))
                  ;
               else;

           }
         ObjectSetInteger(0,"CloseAllButton",OBJPROP_STATE,false);
   ObjectsDeleteAll();
        }
      //+------------------------------------------------------------------+
      //|                      close_order Button ChartEvent               |
      //+------------------------------------------------------------------+
      if(sparam==(StringSubstr("close_order "+(string)OrderTicket(),12,10)))
        {
         for(int i=OrdersTotal()-1; i>=0; i--)
           {
            if(OrderSelect(i,SELECT_BY_POS));
            else;
              {
               Print(" ",GetLastError());
              }
            if((OrderType()==OP_BUY && OrderSymbol()==Symbol()) || (OrderType()==OP_SELL && OrderSymbol()==Symbol()))

               if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5));
               else;
           }
         ObjectSetInteger(0,(StringSubstr("close_order "+(string)OrderTicket(),12,10)),OBJPROP_STATE,false);
         ObjectDelete((StringSubstr("close_order "+(string)OrderTicket(),12,10)));
        }
      //Print("close_order");
      //Print("close_order"+IntegerToString(OrderTicket(),0,11));
      //Print(IntegerToString(OrderTicket()));
      //ObjectDelete("close_order"+IntegerToString(OrderTicket()));
     }
  }

//+------------------------------------------------------------------+
//|                    Create Close_Order Button                     |
//+------------------------------------------------------------------+
void Floating_Stop()
  {
   indexPos = OrdersTotal()-1;
   while(indexPos>=0 && OrderSelect(indexPos,SELECT_BY_POS,MODE_TRADES))
     {
      if((OrderType()==OP_BUY && OrderSymbol()==Symbol()) || (OrderType()==OP_SELL && OrderSymbol()==Symbol()))
        {

         int      x     = 0;
         int      y     = 0;
         datetime dt    = TimeCurrent();
         double   price = OrderOpenPrice();
         int      window= 0;

           {
            if(OrderType() == OP_BUY)
               button_color = clrGreen;
            if(OrderType() == OP_SELL)
               button_color = clrRed;
           }
         if(ChartTimePriceToXY(0,window,dt,price,x,y))
           {
            ObjectCreate(0,(StringSubstr("close_order "+(string)OrderTicket(),12,10)),OBJ_BUTTON,0,0,0);
            ObjectSetInteger(0,(StringSubstr("close_order "+(string)OrderTicket(),12,10)),OBJPROP_CORNER,1);
            ObjectSetInteger(0,(StringSubstr("close_order "+(string)OrderTicket(),12,10)),OBJPROP_XDISTANCE,180);
            ObjectSetInteger(0,(StringSubstr("close_order "+(string)OrderTicket(),12,10)),OBJPROP_YDISTANCE,y);
            ObjectSetInteger(0,(StringSubstr("close_order "+(string)OrderTicket(),12,10)),OBJPROP_XSIZE,60);
            ObjectSetInteger(0,(StringSubstr("close_order "+(string)OrderTicket(),12,10)),OBJPROP_YSIZE,12);
            ObjectSetString(0,(StringSubstr("close_order "+(string)OrderTicket(),12,10)),OBJPROP_TEXT,"CLOSE");
            ObjectSetInteger(0,(StringSubstr("close_order "+(string)OrderTicket(),12,10)),OBJPROP_COLOR, clrBlack);
            ObjectSetInteger(0,(StringSubstr("close_order "+(string)OrderTicket(),12,10)),OBJPROP_BGCOLOR, button_color);
            ObjectSetInteger(0,(StringSubstr("close_order "+(string)OrderTicket(),12,10)),OBJPROP_BORDER_TYPE,BORDER_FLAT);
            ObjectSetInteger(0,(StringSubstr("close_order "+(string)OrderTicket(),12,10)),OBJPROP_BACK,false);
            ObjectSetInteger(0,(StringSubstr("close_order "+(string)OrderTicket(),12,10)),OBJPROP_HIDDEN,false);
            ObjectSetInteger(0,(StringSubstr("close_order "+(string)OrderTicket(),12,10)),OBJPROP_STATE,false);
            ObjectSetInteger(0,(StringSubstr("close_order "+(string)OrderTicket(),12,10)),OBJPROP_FONTSIZE,8);
                }
        }
      indexPos--;
     }
  }
//---
void SideButtons()
  {
//+------------------------------------------------------------------+
//|                    Create Open BUY Button                        |
//+------------------------------------------------------------------+
   ObjectCreate(0,"OpenBUYButton",OBJ_BUTTON,0,0,0);
   ObjectSet("OpenBUYButton",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
   ObjectSetInteger(0,"OpenBUYButton",OBJPROP_XDISTANCE,110);
   ObjectSetInteger(0,"OpenBUYButton",OBJPROP_YDISTANCE,25);
   ObjectSetInteger(0,"OpenBUYButton",OBJPROP_XSIZE,100);
   ObjectSetInteger(0,"OpenBUYButton",OBJPROP_YSIZE,25);
   ObjectSetString(0,"OpenBUYButton",OBJPROP_TEXT,"OPEN BUY");
//---
   ObjectSetInteger(0,"OpenBUYButton",OBJPROP_COLOR,clrWhite);
   ObjectSetInteger(0,"OpenBUYButton",OBJPROP_BGCOLOR,clrGreen);
   ObjectSetInteger(0,"OpenBUYButton",OBJPROP_BORDER_TYPE,BORDER_FLAT);
   ObjectSetInteger(0,"OpenBUYButton",OBJPROP_HIDDEN,false);
   ObjectSetInteger(0,"OpenBUYButton",OBJPROP_STATE,false);
   ObjectSetInteger(0,"OpenBUYButton",OBJPROP_FONTSIZE,10);
//+------------------------------------------------------------------+
//|                    Create Open SELL Button                       |
//+------------------------------------------------------------------+
   ObjectCreate(0,"OpenSELLButton",OBJ_BUTTON,0,0,0);
   ObjectSet("OpenSELLButton",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
   ObjectSetInteger(0,"OpenSELLButton",OBJPROP_XDISTANCE,110);
   ObjectSetInteger(0,"OpenSELLButton",OBJPROP_YDISTANCE,55);
   ObjectSetInteger(0,"OpenSELLButton",OBJPROP_XSIZE,100);
   ObjectSetInteger(0,"OpenSELLButton",OBJPROP_YSIZE,25);
   ObjectSetString(0,"OpenSELLButton",OBJPROP_TEXT,"OPEN SELL");
//---
   ObjectSetInteger(0,"OpenSELLButton",OBJPROP_COLOR,clrWhite);
   ObjectSetInteger(0,"OpenSELLButton",OBJPROP_BGCOLOR,clrRed);
   ObjectSetInteger(0,"OpenSELLButton",OBJPROP_BORDER_TYPE,BORDER_FLAT);
   ObjectSetInteger(0,"OpenSELLButton",OBJPROP_HIDDEN,false);
   ObjectSetInteger(0,"OpenSELLButton",OBJPROP_STATE,false);
   ObjectSetInteger(0,"OpenSELLButton",OBJPROP_FONTSIZE,10);
//+------------------------------------------------------------------+
//|                   Create Close All Button                        |
//+------------------------------------------------------------------+
   ObjectCreate(0,"CloseAllButton",OBJ_BUTTON,0,0,0);
   ObjectSet("CloseAllButton",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
   ObjectSetInteger(0,"CloseAllButton",OBJPROP_XDISTANCE,110);
   ObjectSetInteger(0,"CloseAllButton",OBJPROP_YDISTANCE,85);
   ObjectSetInteger(0,"CloseAllButton",OBJPROP_XSIZE,100);
   ObjectSetInteger(0,"CloseAllButton",OBJPROP_YSIZE,25);
   ObjectSetString(0,"CloseAllButton",OBJPROP_TEXT,"CLOSE ALL");
//---
   ObjectSetInteger(0,"CloseAllButton",OBJPROP_COLOR,clrWhite);
   ObjectSetInteger(0,"CloseAllButton",OBJPROP_BGCOLOR,clrBlue);
   ObjectSetInteger(0,"CloseAllButton",OBJPROP_BORDER_TYPE,BORDER_FLAT);
   ObjectSetInteger(0,"CloseAllButton",OBJPROP_HIDDEN,false);
   ObjectSetString(0,"CloseAllButton",OBJPROP_FONT,"Arial Bold");
   ObjectSetInteger(0,"CloseAllButton",OBJPROP_FONTSIZE,10);
  }
//+------------------------------------------------------------------+
