270 lines
23 KiB
Plaintext
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);
|
|
}
|
|
//+------------------------------------------------------------------+
|