Всем добрый день. Срочно нужна ваша помощь. Помогите прикрутить алерт в сплывающем окне к индикатарам
BrainTrend2Sig.ex4 BrainTrend2Sig.mq4 LabTrend1_v4.ex4 LabTrend1_v4.mq4
От loreno, 17 августа, 2011 в Уголок Программиста
Всем добрый день. Срочно нужна ваша помощь. Помогите прикрутить алерт в сплывающем окне к индикатарам
BrainTrend2Sig.ex4 BrainTrend2Sig.mq4 LabTrend1_v4.ex4 LabTrend1_v4.mq4
Всем привет. Нужна помощь. Есть индикатор
Я его чуток подредактировал
ExtMapBuffer1[i]=iRSI(NULL,TimeFrame,RSIperiod,applied_price,y);
if (ExtMapBuffer1[i] > LevUpRSI)
{
UpRSI[i]=ExtMapBuffer1[i];
DnRSI[i]=EMPTY_VALUE;
}
else
if (ExtMapBuffer1[i] < LevDnRSI)
{
DnRSI[i]=ExtMapBuffer1[i];
UpRSI[i]=EMPTY_VALUE;
}
и получилось это
Хочу добавить стрелки на график, пробовал это
ExtMapBuffer1[i]=iRSI(NULL,TimeFrame,RSIperiod,applied_price,y);
if (ExtMapBuffer1[i] > LevUpRSI)
{
UpRSI[i]=ExtMapBuffer1[i];
DnRSI[i]=EMPTY_VALUE;
ObjectCreate(0,"ArUpRSI",OBJ_ARROW,0,Time[i],High[i]+100*Point);
ObjectSet("ArUpRSI",OBJPROP_ARROWCODE,218);
ObjectSet("ArUpRSI",OBJPROP_COLOR,clrCrimson);
}
else
if (ExtMapBuffer1[i] < LevDnRSI)
{
DnRSI[i]=ExtMapBuffer1[i];
UpRSI[i]=EMPTY_VALUE;
ObjectCreate(0,"ArDnRSI",OBJ_ARROW,0,Time[i],Low[i]);
ObjectSet("ArDnRSI",OBJPROP_ARROWCODE,217);
ObjectSet("ArDnRSI",OBJPROP_COLOR,clrTeal);
}
но не рисует все стрелки(
Кто знает, подскажите, пожалуйста, что не так.
@MikR0ReR Вот код
//+------------------------------------------------------------------+ //| MTF_RSI.mq4 | //| Copyright © 2006, Keris2112 | //| | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Keris2112" #property link "http://www.forex-tsd.com" //---- #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 DodgerBlue #property indicator_level1 30 #property indicator_level2 70 #property indicator_minimum 0 #property indicator_maximum 100 //---- extern int TimeFrame=0; extern int RSIperiod=14; extern int applied_price=0; //---- double ExtMapBuffer1[]; double UpRSI[]; double DnRSI[]; int LevUpRSI = 70; int LevDnRSI = 30; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicator line SetIndexBuffer(0,ExtMapBuffer1); SetIndexStyle(0,DRAW_LINE); SetIndexStyle(1,DRAW_ARROW,0,2,clrTeal); SetIndexLabel(1,"DnRSI"); SetIndexBuffer(1,DnRSI); SetIndexArrow(1,159); SetIndexStyle(2,DRAW_ARROW,0,2,clrCrimson); SetIndexLabel(2,"UpRSI"); SetIndexBuffer(2,UpRSI); SetIndexArrow(2,159); //---- name for DataWindow and indicator subwindow label switch(TimeFrame) { case 1 : string TimeFrameStr="Period_M1"; break; case 5 : TimeFrameStr="Period_M5"; break; case 15 : TimeFrameStr="Period_M15"; break; case 30 : TimeFrameStr="Period_M30"; break; case 60 : TimeFrameStr="Period_H1"; break; case 240 : TimeFrameStr="Period_H4"; break; case 1440 : TimeFrameStr="Period_D1"; break; case 10080 : TimeFrameStr="Period_W1"; break; case 43200 : TimeFrameStr="Period_MN1"; break; default : TimeFrameStr="Current Timeframe"; } IndicatorShortName("MTF_RSI("+(string)RSIperiod+") ("+TimeFrameStr+")"); return(0); } //---- //+------------------------------------------------------------------+ //| MTF RSI | //+------------------------------------------------------------------+ int start() { datetime TimeArray[]; int i,limit,y=0,counted_bars=IndicatorCounted(); // Plot defined time frame on to current time frame ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame); limit=Bars-counted_bars; for(i=0,y=0;i<limit;i++) { if (Time[i]<TimeArray[y]) y++; //---- ExtMapBuffer1[i]=iRSI(NULL,TimeFrame,RSIperiod,applied_price,y); if (ExtMapBuffer1[i] > LevUpRSI) { UpRSI[i]=ExtMapBuffer1[i]; DnRSI[i]=EMPTY_VALUE; ObjectCreate(0,"ArUpRSI",OBJ_ARROW,0,Time[i],High[i]+100*Point); ObjectSet("ArUpRSI",OBJPROP_ARROWCODE,218); ObjectSet("ArUpRSI",OBJPROP_COLOR,clrCrimson); } else if (ExtMapBuffer1[i] < LevDnRSI) { DnRSI[i]=ExtMapBuffer1[i]; UpRSI[i]=EMPTY_VALUE; ObjectCreate(0,"ArDnRSI",OBJ_ARROW,0,Time[i],Low[i]); ObjectSet("ArDnRSI",OBJPROP_ARROWCODE,217); ObjectSet("ArDnRSI",OBJPROP_COLOR,clrTeal); } } //---- return(0); } //----------------------------+ void deinit() { ObjectDelete("ArDnRSI"); ObjectDelete("ArUpRSI"); return; } //+------------------------------------------------------------------+
Стрелки нужны на графике.
Изменено 23 февраля, 2020 пользователем 0ll
@MakarFX Блок "Код" предназначен для вставки части кода, а не всего индикатора.
ObjectCreate(0,"ArUpRSI",OBJ_ARROW,0,Time[i],High[i]+100*Point); ObjectSet("ArUpRSI",OBJPROP_ARROWCODE,218); ObjectSet("ArUpRSI",OBJPROP_COLOR,clrCrimson);
При работе с объектами их имена должны быть уникальными. У тебя же только два имени, поэтому отображаются только две последние стрелки.
Чтоб создать "Чудик имя" поступим так
Вот это имя будет уникальное всегда.
ObjectCreate(0,"ArDnRSI"+Time[i],OBJ_ARROW,0,Time[i],Low[i]-100*Point);
Вот это не будет работать после первого прохода (просчета) после запуска индикатора, поэтому не уникальное имя.
ObjectCreate(0,"ArDnRSI"+i,OBJ_ARROW,0,Time[i],Low[i]-100*Point);
Да, в ObjectSet() не забудь обратится к вновь испеченному имени.
Чуди дальше.
@MakarFX Все по правилам! Я думаю не будет для тебя секретом, что удалятся и другие обьектя от других индикаторов.
Смысл таков
Вот в справочнике написано
int ObjectsDeleteAll(
long chart_id, // идентификатор графика
const string prefix, // префикс имени объекта
int sub_window=EMPTY, // индекс окна
int object_type=EMPTY // тип объекта для удаления
);
но когда я делаю так(указываю префикс)
ObjectsDeleteAll(0,"Ar",0,OBJ_ARROW);
Другие объекты тоже удаляются(
Добрый день! Перешел на мт5 но есть проблема мой грааааль)) для мт4! Помогите конвертировать на мт5 люди добрые не оставляйте сироту в беде( Заранее премного благодарен!
Уважаемые гуру! Можно прикрутить алерты на уровни 6 и 9 к данному индикатору? Сама система ручной торговли в архиве. Там же и мануал.
Добрый день. Помогите доработать индикатор. Он отображает на графике зоны одинаковые на все дни недели. Нужно чтобы была возможность задать зоны на каждый день недели отдельно.
//+------------------------------------------------------------------+ //| 2 ЗОНЫ.mq4 | //| | //| | //| | //| 2017 | //+------------------------------------------------------------------+ #property indicator_chart_window //--- day of week enum dayOfWeek { S=0, // Sunday M=1, // Monday T=2, // Tuesday W=3, // Wednesday Th=4, // Thursday Fr=5, // Friday, St=6, // Saturday }; //--- input parameters input dayOfWeek swapday=W; //------- Внешние параметры индикатора ------------------------------- extern int NumberOfDays = 10; // Количество дней extern string Begin_1 = "09:00"; extern string End_1 = "15:00"; extern color Color_1 = PowderBlue; extern string Begin_2 = "03:00"; extern string End_2 = "07:00"; extern color Color_2 = Yellow; extern bool HighRange = true; //+------------------------------------------------------------------+ //| Custom indicator initialization function // Функция инициализации пользовательского индикатора | //+------------------------------------------------------------------+ void init() { DeleteObjects(); for (int i=0; i<NumberOfDays; i++) { CreateObjects("PWT1"+i, Color_1); CreateObjects("PWT2"+i, Color_2); } Comment(""); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ void deinit() { DeleteObjects(); Comment(""); } //+------------------------------------------------------------------+ //| Создание объектов индикатора | //| Параметры: | //| no - наименование объекта | //| cl - цвет объекта | //+------------------------------------------------------------------+ void CreateObjects(string no, color cl) { ObjectCreate(no, OBJ_RECTANGLE, 0, 0,0, 0,0); ObjectSet(no, OBJPROP_STYLE, STYLE_SOLID); ObjectSet(no, OBJPROP_COLOR, cl); ObjectSet(no, OBJPROP_BACK, True); } //+------------------------------------------------------------------+ //| Удаление объектов индикатора | //+------------------------------------------------------------------+ void DeleteObjects() { for (int i=0; i<NumberOfDays; i++) { ObjectDelete("PWT1"+i); ObjectDelete("PWT2"+i); } } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //| Итерации функции пользовательского индикатора | //+------------------------------------------------------------------+ void start() { datetime dt=CurTime(); for (int i=0; i<NumberOfDays; i++) { DrawObjects(dt, "PWT1"+i, Begin_1, End_1); DrawObjects(dt, "PWT2"+i, Begin_2, End_2); dt=decDateTradeDay(dt); while (TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt); } } //+------------------------------------------------------------------+ //| Прорисовка объектов на графике | //| Параметры: | //| dt - дата торгового дня | //| no - наименование объекта | //| tb - время начала сессии | //| te - время окончания сессии | //+------------------------------------------------------------------+ void DrawObjects(datetime dt, string no, string tb, string te) { datetime t1, t2, t3; double p1, p2, p3; int b1, b2; t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb); t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te); t3=StrToTime(TimeToStr(dt, TIME_DATE)+" ""23:00"); b1=iBarShift(NULL, 0, t1); //Поиск бара по времени b2=iBarShift(NULL, 0, t2); p1=High[iHighest(NULL, PERIOD_M5, MODE_HIGH, b1-b2, b2)]; // вставлено PERIOD_M5 вместо 0 p2=Low [iLowest (NULL, PERIOD_M5, MODE_LOW , b1-b2, b2)]; // вставлено PERIOD_M5 вместо 0 p3=p2; if (!HighRange) {p1=0; p2=2*p2;} ObjectSet(no, OBJPROP_TIME1 , t1); ObjectSet(no, OBJPROP_PRICE1, p1); ObjectSet(no, OBJPROP_TIME2 , t2); ObjectSet(no, OBJPROP_PRICE2, p2); ObjectSet(no, OBJPROP_TIME2 , t3); ObjectSet(no, OBJPROP_PRICE2, p3); } //+------------------------------------------------------------------+ //| Уменьшение даты на один торговый день | //| Параметры: | //| dt - дата торгового дня | //+------------------------------------------------------------------+ datetime decDateTradeDay (datetime dt) { int ty=TimeYear(dt); int tm=TimeMonth(dt); int td=TimeDay(dt); int th=TimeHour(dt); int ti=TimeMinute(dt); td--; if (td==0) { tm--; if (tm==0) { ty--; tm=12; } if (tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12) td=31; if (tm==2) if (MathMod(ty, 4)==0) td=29; else td=28; if (tm==4 || tm==6 || tm==9 || tm==11) td=30; } return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti)); } //+------------------------------------------------------------------+
Изменено 1 марта, 2020 пользователем 0ll
Я бы с радостью исправил но вот беда в mql5 я дуб)
Здравствуйте.
Пишу советник с использованием индикатора TMA+CG mladen. Нужно получить значения границ канала и средний линии.
Вроде все логично, средняя линия = буфер 0, верхняя = буфер 1, нижняя = буфер 2 (скрин кода http://prntscr.com/r9sxd4)
В советнике значения индикатора получаю на открытии бара. Гоняю в тестере для проверки. Получаю разные данные (то, что вижу на графике и то, что вижу в данных индикатора).
Например, верхняя граница http://prntscr.com/r9szk4
Нижняя граница http://prntscr.com/r9szrv
Средняя линия http://prntscr.com/r9t00l
Настройки индикатора http://prntscr.com/r9t05s
В тестере котировки тестируемой валюты m15 и h4 загружены
Как получить значения линий? Или что-то не учел?
Код самого индикатора прикладываю
Изменено 1 марта, 2020 пользователем UncleSam
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем