Files
mql5_indicators_mt5_part1/AutoTradeLevels - indicator for MetaTrader 5/autotradelevels.mq5
T

162 lines
14 KiB
Plaintext

//+------------------------------------------------------------------+
//| AutoTradeLevels.mq5 |
//| Copyright © 2017, Nikolay Kositsin |
//| Khabarovsk, farria@mail.redcom.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Nikolay Kositsin"
#property link "farria@mail.redcom.ru"
//--- номер версии индикатора
#property version "1.00"
#property description "Индикатор производит подмену всех значков совершённых сделок покупки и продажи"
//+------------------------------------------------+
//| Параметры отрисовки индикатора |
//+------------------------------------------------+
//---- отрисовка индикатора в главном окне
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots 0
//+------------------------------------------------+
//| Объявление констант |
//+------------------------------------------------+
#define RESET 0 // Константа для возврата терминалу команды на пересчет индикатора
//+------------------------------------------------+
//| Входные параметры индикатора |
//+------------------------------------------------+
//---- настройки визуального отображения индикатора
input string Sirname="AutoTradeLevels"; // Название для меток индикатора
input uint Len=3; // Длина ценовых уровней в количестве свечей
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---- имя для окон данных и лэйба для субъокон
IndicatorSetString(INDICATOR_SHORTNAME,"AutoTradeLevels");
//--- определение точности отображения значений индикатора
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//--- завершение инициализации
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//----
ObjectsDeleteAll(0,"AutoTradeLevels",-1,-1);
//----
ChartRedraw(NULL);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, // количество истории в барах на текущем тике
const int prev_calculated,// количество истории в барах на предыдущем тике
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---- проверка количества баров на достаточность для расчета
if(rates_total<1) return(RESET);
int total=ObjectsTotal(0,0,OBJ_ARROW_BUY);
//---- основной цикл замены Buy значков
for(int kkk=total-1; kkk>=0 && !IsStopped(); kkk--)
{
string name=ObjectName(0,kkk,0,OBJ_ARROW_BUY);
if(StringSubstr(name,0,9)=="autotrade")
{
datetime Time=datetime(ObjectGetInteger(0,name,OBJPROP_TIME,0));
double Price=ObjectGetDouble(0,name,OBJPROP_PRICE,0);
color Color=color(ObjectGetInteger(0,name,OBJPROP_COLOR));
SetTline(0,"AutoTradeLevels"+name,0,Time,Price,Time+MathMax(1,Len)*PeriodSeconds(),Price,Color,0,2,name);
}
}
total=ObjectsTotal(0,0,OBJ_ARROW_SELL);
//---- основной цикл замены Buy значков
for(int kkk=total-1; kkk>=0 && !IsStopped(); kkk--)
{
string name=ObjectName(0,kkk,0,OBJ_ARROW_SELL);
if(StringSubstr(name,0,9)=="autotrade")
{
datetime Time=datetime(ObjectGetInteger(0,name,OBJPROP_TIME,0));
double Price=ObjectGetDouble(0,name,OBJPROP_PRICE,0);
color Color=color(ObjectGetInteger(0,name,OBJPROP_COLOR));
SetTline(0,"AutoTradeLevels"+name,0,Time,Price,Time+MathMax(1,Len)*PeriodSeconds(),Price,Color,0,2,name);
}
}
//----
ChartRedraw(0);
return(rates_total);
}
//+------------------------------------------------------------------+
//| Создание трендовой линии |
//+------------------------------------------------------------------+
void CreateTline
(
long chart_id, // идентификатор графика
string name, // имя объекта
int nwin, // индекс окна
datetime time1, // время 1 ценового уровня
double price1, // 1 ценовой уровень
datetime time2, // время 2 ценового уровня
double price2, // 2 ценовой уровень
color Color, // цвет линии
int style, // стиль линии
int width, // толщина линии
string text // текст
)
//----
{
//----
ObjectCreate(chart_id,name,OBJ_TREND,nwin,time1,price1,time2,price2);
ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color);
ObjectSetInteger(chart_id,name,OBJPROP_STYLE,style);
ObjectSetInteger(chart_id,name,OBJPROP_WIDTH,width);
ObjectSetString(chart_id,name,OBJPROP_TEXT,text);
ObjectSetInteger(chart_id,name,OBJPROP_BACK,false);
ObjectSetInteger(chart_id,name,OBJPROP_RAY_RIGHT,false);
ObjectSetInteger(chart_id,name,OBJPROP_RAY,false);
ObjectSetInteger(chart_id,name,OBJPROP_SELECTED,true);
ObjectSetInteger(chart_id,name,OBJPROP_SELECTABLE,true);
ObjectSetInteger(chart_id,name,OBJPROP_ZORDER,true);
//----
}
//+------------------------------------------------------------------+
//| Переустановка трендовой линии |
//+------------------------------------------------------------------+
void SetTline
(
long chart_id, // идентификатор графика
string name, // имя объекта
int nwin, // индекс окна
datetime time1, // время 1 ценового уровня
double price1, // 1 ценовой уровень
datetime time2, // время 2 ценового уровня
double price2, // 2 ценовой уровень
color Color, // цвет линии
int style, // стиль линии
int width, // толщина линии
string text // текст
)
//----
{
//----
if(ObjectFind(chart_id,name)==-1) CreateTline(chart_id,name,nwin,time1,price1,time2,price2,Color,style,width,text);
else
{
ObjectSetString(chart_id,name,OBJPROP_TEXT,text);
ObjectMove(chart_id,name,0,time1,price1);
ObjectMove(chart_id,name,1,time2,price2);
ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color);
}
//----
}
//+------------------------------------------------------------------+