Files
-mql5_scripts/SD_M_Swap - script for MetaTrader 5/sd_m_swap.mq5
T

270 lines
23 KiB
Plaintext

//+------------------------------------------------------------------+
//| 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);
}
//+------------------------------------------------------------------+
//| На основе Справочника по MQL5 |
//+------------------------------------------------------------------+
bool LabelCreate(const long chart_id=0, // ID графика
const string name="Label", // имя метки
const int sub_window=0, // номер подокна
const int x=0, // координата по оси X
const int y=0, // координата по оси Y
const string toolTip="\n", // текст всплывающей подсказки
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // угол графика для привязки
const string text="Label", // текст
const string font="Arial", // шрифт
const int font_size=10, // размер шрифта
const color clr=clrRed, // цвет
const double angle=0.0, // наклон текста
const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // способ привязки
const bool back=false, // на заднем плане
const bool selection=false, // выделить для перемещений
const bool hidden=true, // скрыт в списке объектов
const long z_order=0, // приоритет на нажатие мышью
const int timeFrames=OBJ_ALL_PERIODS)//отображение объекта на различных периодах
{
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);
}
//+------------------------------------------------------------------+