Если Вы хотите заказать советник или индикатор, то публикуйте в эту группу тех. задание. Если Ваш заказ не очень сложный, то велика вероятность, что Вам его смогут сделать даже бесплатно
Программистам MQL: подпишитесь на группу, чтобы получать уведомления о заказах.
Доброго времени суток.
Просьба перенести индикатор «GapView» с МТ4 на МТ5. Данный индикатор находится в свободном доступе в сети: www.mql5.com/ru/code/10738 (Сам индикатор: transfiles.ru/4l982)
Заранее благодарен.
Андрей, просьба сделать на МТ5 индикатор максимально совпадающий по логике и функционалу с приведенным в примере индикатором. Иными словами сделать на МТ5 индикатор позволяющий получать ту информацию и примерно в том объеме, которую позволяет получать приведенный в примере индикатор работающий на МТ4.
Редактирован: 28 мая 2022, 15:31
Индикатор показывает все не закрытые разрывы цены (разрыв цены — это ценовая разница между закрытием цены и открытием следующей, соответственно закрытый разрыв, это такой разрыв цены, где данная ценовая разница была, но была закрыта ценой в дальнейшем, а у не закрытого разрыва данная разница осталась) на графике к которому прикреплен. Это то, что касается логики, в моем понимании.
Можно попробовать описать функционал (линии которыми отображаются имеющиеся не закрытые разрывы цены имеющие дату и время данной свечи с не закрытым разрывом, возможность выбрать цвет данной линии для привязки к таймфрейму, возможность выбрать необходимые таймфреймы, выбор количества свечей для отображения), но поскольку могу что-то не так как следует описать или что-то забыть, думаю лучше один раз увидеть, буду рад, если найдете время глянуть на прикрепленный пример.
сделал индикатор, который показывает разрывы цены:
//+------------------------------------------------------------------+
//| GapsShow.mq5 |
//| Copyright 2022, AM2 |
//| https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, AM2"
#property link "https://www.forexsystems.biz"
#property version "1.00"
#property indicator_chart_window
#property indicator_plots 0
input int bars=22;
input color cl=Red;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
ObjectsDeleteAll(0,0,OBJ_HLINE);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment("");
ObjectsDeleteAll(0,0,OBJ_HLINE);
}
//+------------------------------------------------------------------+
//| Горизонтальная линия |
//+------------------------------------------------------------------+
void PutHLine(string name,double p,color clr=Red)
{
ObjectDelete(0,name);
ObjectCreate(0,name,OBJ_HLINE,0,0,p);
//--- установим цвет линии
ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим толщину линии
ObjectSetInteger(0,name,OBJPROP_WIDTH,2);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(0,name,OBJPROP_HIDDEN,0);
//--- включим (true) или отключим (false) режим перемещения линии мышью
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
ObjectSetInteger(0,name,OBJPROP_SELECTABLE,1);
}
//+------------------------------------------------------------------+
//| 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[])
{
//---
for(int i=0; i<bars; i++)
{
if(NormalizeDouble(iOpen(NULL,0,i),4)!=NormalizeDouble(iClose(NULL,0,i+1),4))
PutHLine((string)iOpen(NULL,0,i+1)+" "+(string)iTime(NULL,0,i+1),iOpen(NULL,0,i+1),cl);
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
Благодарю, Вы все верно начали делать, только я не предупредил и Вы взяли первый файл из примера GapView, он с переводом, но там нет уровней Gap_M1, а мне они необходимы, поэтому попрошу сделать с ними (за основу лучше взять GapViewEn3).
Теперь по существу, приложил скрины для примера (M5 и M15), там при первом беглом просмотре видно, что не все разрывы отражены (места отмечены вертикальными линиями перед разрывом) почему такое происходит? Параметр дальность гэпов у меня достаточный для нормального отображения.
Как понял вопрос: «как будем объяснять машине слово не закрытые?» — снят?
Вы взяли первый файл из примера GapView, он с переводом, но там нет уровней Gap_M1, а мне они необходимы, поэтому попрошу сделать с ними (за основу лучше взять GapViewEn3).
эти моменты нужно сразу указывать. на переписывание я потратил достаточно времени и сил, теперь прикажете делать все заново? дальше не ко мне.
Хорошо, Андрей, еще раз извините, раз так, пусть будет без Gap_M1, но по существу работы индикатора, приложил скрины для примера (M5 и M15), там при первом беглом просмотре видно, что не все разрывы отражены (места отмечены вертикальными линиями перед разрывом) почему такое происходит? Параметр дальность гэпов у меня достаточный для нормального отображения.
Андрей, при этом на битке, который сейчас торгуется все показывает норм, надеюсь и остальное будет работать норм, когда торговаться начнет.
Спасибо огромное.
Андрей, если можно один маленький вопрос, добавил в код перед блоком:
//////////////////////////M5
по аналогии блок:
//////////////////////////M1
и вверху по аналогии:
input bool Гэп_M1=true;
input color UplineM1=MediumVioletRed;
input color DwnlineM1=MediumVioletRed;
все вроде работает и разрыв на M1 отображается, все вено сделал?
еще в середине где:
int shiftDALNOSTGAP=iBarShift(NULL,PERIOD_M5,DALNOSTGAP,false);
исправил на:
int shiftDALNOSTGAP=iBarShift(NULL,PERIOD_M1,DALNOSTGAP,false);
но тут совсем не уверен, стоило или нет.
Редактирован: 29 мая 2022, 18:37
Комментарии (13)
35 AM2 Сообщений: 16425 - Андрей
5 sdm Автор Сообщений: 20
35 AM2 Сообщений: 16425 - Андрей
5 sdm Автор Сообщений: 20
35 AM2 Сообщений: 16425 - Андрей
Можно попробовать описать функционал (линии которыми отображаются имеющиеся не закрытые разрывы цены имеющие дату и время данной свечи с не закрытым разрывом, возможность выбрать цвет данной линии для привязки к таймфрейму, возможность выбрать необходимые таймфреймы, выбор количества свечей для отображения), но поскольку могу что-то не так как следует описать или что-то забыть, думаю лучше один раз увидеть, буду рад, если найдете время глянуть на прикрепленный пример.
5 sdm Автор Сообщений: 20
как будем объяснять машине слово не закрытые?
35 AM2 Сообщений: 16425 - Андрей
Редактирован: 29 мая 2022, 11:22
35 AM2 Сообщений: 16425 - Андрей
Теперь по существу, приложил скрины для примера (M5 и M15), там при первом беглом просмотре видно, что не все разрывы отражены (места отмечены вертикальными линиями перед разрывом) почему такое происходит? Параметр дальность гэпов у меня достаточный для нормального отображения.
Как понял вопрос: «как будем объяснять машине слово не закрытые?» — снят?
5 sdm Автор Сообщений: 20
эти моменты нужно сразу указывать. на переписывание я потратил достаточно времени и сил, теперь прикажете делать все заново? дальше не ко мне.
35 AM2 Сообщений: 16425 - Андрей
Редактирован: 29 мая 2022, 17:09
5 sdm Автор Сообщений: 20
Спасибо огромное.
5 sdm Автор Сообщений: 20
//////////////////////////M5
по аналогии блок:
//////////////////////////M1
и вверху по аналогии:
input bool Гэп_M1=true;
input color UplineM1=MediumVioletRed;
input color DwnlineM1=MediumVioletRed;
все вроде работает и разрыв на M1 отображается, все вено сделал?
еще в середине где:
int shiftDALNOSTGAP=iBarShift(NULL,PERIOD_M5,DALNOSTGAP,false);
исправил на:
int shiftDALNOSTGAP=iBarShift(NULL,PERIOD_M1,DALNOSTGAP,false);
но тут совсем не уверен, стоило или нет. Редактирован: 29 мая 2022, 18:37
5 sdm Автор Сообщений: 20
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий