Author: Dina Paches
0 Views
0 Downloads
0 Favorites
SD_M_Swap
ÿþ//+------------------------------------------------------------------+

//|                                                    SD_M_Swap.mq5 |

//|                                                      Dina Paches |

//|                           https://login.mql5.com/ru/users/dipach |

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

#property copyright "Dina Paches"

#property link      "https://login.mql5.com/ru/users/dipach"

#property version   "1.08"

//---

#property script_show_inputs

//---

#define CHART_ID                            (0)

#define SUB_WINDOW                          (0)

#define DIGITS                              (2)

#define OBJ_NUMBER                          (3)

#define CORRECTION_WIDTH                    (3)

#define CORRECTION_LOCATION_NEXT_OBJ        (11)

#define LINE_NUMBER                         "Line: ",__LINE__,", "

#define TEXT_SWAP_LONG                      "sw_long"

#define TEXT_SWAP_SHORT                     "sw_short"

#define TEXT_SYMB_DATE                      "sw_symb_date"

//---

input bool   i_delete_text_only      = false;

input color  i_color_plus            = clrGreen;

input color  i_color_minus           = clrRed;

input uchar  i_font_size             = 9;

input ushort i_y                     = 5;

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

void OnStart()

  {

//--------------------------------------------------------------------

   string name_arr[OBJ_NUMBER]={TEXT_SWAP_LONG,TEXT_SWAP_SHORT,TEXT_SYMB_DATE};

//--------------------------------------------------------------------

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

     {if(!ObDelete(CHART_ID,name_arr[i])){return;}}

//--------------------------------------------------------------------

   if(i_delete_text_only){return;}

//--------------------------------------------------------------------

   double swap_arr[2]={0,0};

//---

   SwapGet(swap_arr[0],swap_arr[1]);

//--------------------------------------------------------------------

   string text_arr[OBJ_NUMBER]={"?","?","?"};

//---

   TextObjCreate_1(text_arr[2]);

//---

   for(int i=OBJ_NUMBER-2;i>=0;i--)

     {TextObjCreate_0(text_arr[i],name_arr[i],swap_arr[i],DIGITS);}

//--------------------------------------------------------------------

   color text_clr_arr[OBJ_NUMBER]={clrNONE,clrNONE,clrNONE};

//---

   for(int i=OBJ_NUMBER-2;i>=0;i--)

     {text_clr_arr[i]=(swap_arr[i]<0) ? i_color_minus : i_color_plus;}

//---

   text_clr_arr[2]=text_clr_arr[1];

//--------------------------------------------------------------------

   int width=0;

//---

   if(!ChWidthInPixels(CHART_ID,width)){return;}

//---

   width/=CORRECTION_WIDTH;

//--------------------------------------------------------------------

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

     {

      LabelCreate(CHART_ID,name_arr[i],SUB_WINDOW,width,i_y,"\n",CORNER_LEFT_UPPER,

                  text_arr[i],"Arial",i_font_size,text_clr_arr[i]);

      //---

      width+=(i_font_size*CORRECTION_LOCATION_NEXT_OBJ);

     }

  }//OnStart()

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

void SwapGet(double &value_long,double &value_short)

  {

   string symbol=Symbol();

//---

   value_long  = SymbolInfoDouble(symbol,SYMBOL_SWAP_LONG);

   value_short = SymbolInfoDouble(symbol,SYMBOL_SWAP_SHORT);

//---

   return;

  }

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

bool ChWidthInPixels(const long chart_id,int &weight)

  {

   long result=-1;

//--- 

   if(!ChartGetInteger(chart_id,CHART_WIDTH_IN_PIXELS,0,result))

     {

      Print(LINE_NUMBER,__FUNCTION__,", Error = ",GetLastError());

     }

//---

   weight=(int)result;

//---

   return(true);

  }

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

int TextObjCreate_0(string &text,string prefix,double value,int digits)

  {return(StringConcatenate(text,prefix," = ",DoubleToString(value,digits)));}

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

int  TextObjCreate_1(string &text)

  {

   return(StringConcatenate(text,"(",Symbol()," ",

          TimeToString(TimeCurrent(),TIME_DATE|TIME_MINUTES),")"));

  }

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

bool ObDelete(long chart_id,string name)

  {

   if(ObjectFind(chart_id,name)>-1)

     {

      if(!ObjectDelete(chart_id,name))

        {

         Print(LINE_NUMBER,__FUNCTION__,", Error Code = ",GetLastError());

         return(false);

        }

     }

   return(true);

  }

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

bool ObSetString(long                        chart_id,

                 string                      name,

                 ENUM_OBJECT_PROPERTY_STRING prop_id,

                 string                      prop_value)

  {

   if(!ObjectSetString(chart_id,name,prop_id,prop_value))

     {

      Print(LINE_NUMBER,__FUNCTION__,", Error Code = ",GetLastError());

      return(false);

     }

   return(true);

  }

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

bool ObSetIntegerInt(long                         chart_id,

                     string                       name,

                     ENUM_OBJECT_PROPERTY_INTEGER prop_id,

                     int                          prop_value)

  {

   if(!ObjectSetInteger(chart_id,name,prop_id,prop_value))

     {

      Print(LINE_NUMBER,__FUNCTION__,", Error Code = ",GetLastError());

      return(false);

     }

   return(true);

  }

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

bool ObSetIntegerCorner(long             chart_id,

                        string           name,

                        ENUM_BASE_CORNER prop_value)

  {

   if(!ObjectSetInteger(chart_id,name,OBJPROP_CORNER,prop_value))

     {

      Print(LINE_NUMBER,__FUNCTION__,", Error Code = ",GetLastError());

      return(false);

     }

   return(true);

  }

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

bool ObSetDouble(long                        chart_id,

                 string                      name,

                 ENUM_OBJECT_PROPERTY_DOUBLE prop_id,

                 double                      prop_value)

  {

   if(!ObjectSetDouble(chart_id,name,prop_id,prop_value))

     {

      Print(LINE_NUMBER,__FUNCTION__,", Error Code = ",GetLastError());

      return(false);

     }

   return(true);

  }

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

bool ObSetIntegerAncorPoint(long              chart_id,

                            string            name,

                            ENUM_ANCHOR_POINT prop_value)

  {

   if(!ObjectSetInteger(chart_id,name,OBJPROP_ANCHOR,prop_value))

     {

      Print(LINE_NUMBER,__FUNCTION__,", Error Code = ",GetLastError());

      return(false);

     }

   return(true);

  }

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

bool ObSetIntegerColor(long                         chart_id,

                       string                       name,

                       ENUM_OBJECT_PROPERTY_INTEGER prop_id,

                       color                        prop_value)

  {

   if(!ObjectSetInteger(chart_id,name,prop_id,prop_value))

     {

      Print(LINE_NUMBER,__FUNCTION__,", Error Code = ",

            GetLastError());

      return(false);

     }

   return(true);

  }

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

bool ObSetIntegerBool(long                         chart_id,

                      string                       name,

                      ENUM_OBJECT_PROPERTY_INTEGER prop_id,

                      bool                         prop_value)

  {

   if(!ObjectSetInteger(chart_id,name,prop_id,prop_value))

     {

      Print(LINE_NUMBER,__FUNCTION__,", Error Code = ",GetLastError());

      return(false);

     }

   return(true);

  }

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

bool ObSetIntegerLong(long                         chart_id,

                      string                       name,

                      ENUM_OBJECT_PROPERTY_INTEGER prop_id,

                      long                         prop_value)

  {



   if(!ObjectSetInteger(chart_id,name,prop_id,prop_value))

     {

      Print(LINE_NUMBER,__FUNCTION__,", Error Code = ",GetLastError());

      return(false);

     }

   return(true);

  }

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

//| 0 >A=>25 !?@02>G=8:0 ?> MQL5                                    |

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

bool LabelCreate(const long              chart_id=0,               // ID 3@0D8:0

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

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

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

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

                 const string            toolTip="\n",             // B5:AB 2A?;K20NI59 ?>4A:07:8

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

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

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

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

                 const color             clr=clrRed,               // F25B

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

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

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

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

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

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

                 const int               timeFrames=OBJ_ALL_PERIODS)//>B>1@065=85 >1J5:B0 =0 @07;8G=KE ?5@8>40E

  {

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

     {

      Print(LINE_NUMBER,__FUNCTION__,

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

      return(false);

     }

//---

   ObSetString(chart_id,name,OBJPROP_TOOLTIP,toolTip);

   ObSetIntegerInt(chart_id,name,OBJPROP_XDISTANCE,x);

   ObSetIntegerInt(chart_id,name,OBJPROP_YDISTANCE,y);

   ObSetIntegerCorner(chart_id,name,corner);

   ObSetString(chart_id,name,OBJPROP_TEXT,text);

   ObSetString(chart_id,name,OBJPROP_FONT,font);

   ObSetIntegerInt(chart_id,name,OBJPROP_FONTSIZE,font_size);

   ObSetDouble(chart_id,name,OBJPROP_ANGLE,angle);

   ObSetIntegerAncorPoint(chart_id,name,anchor);

   ObSetIntegerColor(chart_id,name,OBJPROP_COLOR,clr);

   ObSetIntegerBool(chart_id,name,OBJPROP_BACK,back);

   ObSetIntegerBool(chart_id,name,OBJPROP_SELECTABLE,selection);

   ObSetIntegerBool(chart_id,name,OBJPROP_SELECTED,selection);

   ObSetIntegerBool(chart_id,name,OBJPROP_HIDDEN,hidden);

   ObSetIntegerLong(chart_id,name,OBJPROP_ZORDER,z_order);

   ObSetIntegerInt(chart_id,name,OBJPROP_TIMEFRAMES,timeFrames);

//---

   return(true);

  }

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

Comments