У меня в индикаторе стрелка прописывается с помощью такой строчки:
SetIndexStyle(0, DRAW_ARROW, ArrowSize, 0);
Что необходимо дописать в код индикатора, чтобы эта стрелка рисовалась с заданным отступом от цены на графике?
Или такую регулировку можно делать только для объектов (OBJ) ?
К значению соответствующего индикаторного буфера прибавьте нужное смещение.
У меня в индикаторе стрелка прописывается с помощью такой строчки:
SetIndexStyle(0, DRAW_ARROW, ArrowSize, 0);
Что необходимо дописать в код индикатора, чтобы эта стрелка рисовалась с заданным отступом от цены на графике?
Или такую регулировку можно делать только для объектов (OBJ) ?
К значению буфера, соответствующего данной стрелке, надо добавить или отнять нужное количество пипсов, высота расположения стрелки изменится.
К значению буфера, соответствующего данной стрелке, надо добавить или отнять нужное количество пипсов, высота расположения стрелки изменится.
А можно на примере это показать? Что куда конкретно надо написать? (Ибо я забыл написать, что в MQL4, увы, не силен)
val1[shift]=Low[shift]-Point*15; //стрелка будет ниже минимума цены на 15 пунктов val2[shift]=High[shift]+Point*15; //стрелка будет выше максимума цены на 15 пунктов (вернее не сама стрелка, а её точка привязки)
То есть если ТУПО я после строчки:
SetIndexStyle(0, DRAW_ARROW, ArrowSize, 0);
вставлю:
val1[shift]=Low[shift]-NormalizeDouble(Point*15,Digits);
То все будет, как надо, или надо еще что-то будет дописывать?
(прошу понять меня правильно -я нуб в программировании)
Прошу прощения за тупость, еще раз повторюсь - я нуб в программировании...
ГДЕ находится это место, где "значение буферу просваивается" ?
Напишите пожалуйста - в каком КОНКРЕТНО месте и ЧТО надо написать, чтобы все заработало ?
Код вот такой:
#property indicator_chart_window #property indicator_buffers 7 #property indicator_color1 DeepSkyBlue #property indicator_color2 Red #property indicator_color3 Green #property indicator_color4 Red #property indicator_color5 DeepSkyBlue #property indicator_color6 Red #property indicator_color7 Maroon extern int SignalPeriod = 6; extern int ArrowPeriod = 2; extern int bars = 1000; extern int SL_pips = 100; extern bool AlertON = false; bool Email = false; extern int ArrowSize = 4; extern int drawDots = 2; extern int drawZZ = 0; int gi_84 = 1; double BlueDots[]; double RedDots[]; double ArrUp[]; double ArrDn[]; double ZZlo[]; double ZZhi[]; double ZZ[]; bool gi_136 = FALSE; bool gi_140 = FALSE; datetime g_time_144; void displayAlert(string as_0, double ad_8, double ad_16, double ad_24) { string ls_32; string ls_40; string ls_48; string ls_56; string ls_64; if (Time[0] != g_time_144) { g_time_144 = Time[0]; if (ad_24 != 0.0) ls_48 = " at price " + DoubleToStr(ad_24, 4); else ls_48 = ""; if (ad_8 != 0.0) ls_40 = ", TakeProfit on " + DoubleToStr(ad_8, 4); else ls_40 = ""; if (ad_16 != 0.0) ls_32 = ", StopLoss on " + DoubleToStr(ad_16, 4); else ls_32 = ""; Alert("BUYSELL MAGIC " + as_0 + ls_48 + ls_40 + ls_32 + " ", Symbol(), ", ", Period(), " minute chart"); ls_56 = "BUYSELL MAGIC - " + as_0 + ls_48; ls_64 = "BUYSELL MAGIC " + as_0 + ls_48 + ls_40 + ls_32 + " " + Symbol() + ", " + Period() + " minute chart"; if (Email) SendMail(ls_56, ls_64); } } int init() { SetIndexBuffer(0, BlueDots); SetIndexBuffer(1, RedDots); SetIndexBuffer(2, ArrUp); SetIndexBuffer(3, ArrDn); SetIndexBuffer(4, ZZlo); SetIndexBuffer(5, ZZhi); SetIndexBuffer(6, ZZ); SetIndexStyle(0, DRAW_ARROW, ArrowSize, 0); SetIndexStyle(1, DRAW_ARROW, ArrowSize, 0); SetIndexStyle(2, DRAW_ARROW, STYLE_SOLID, 0); SetIndexStyle(3, DRAW_ARROW, STYLE_SOLID, 0); int dr = 0; if(dr == 1) { SetIndexStyle(4, DRAW_ZIGZAG, STYLE_DASH, 1); SetIndexStyle(5, DRAW_ZIGZAG, STYLE_DASH, 1); } else { SetIndexStyle(4, DRAW_NONE); SetIndexStyle(5, DRAW_NONE); } SetIndexStyle(6, DRAW_NONE); SetIndexArrow(0, 159); // Жирная точка SetIndexArrow(1, 159); // Жирная точка SetIndexArrow(2, 233); SetIndexArrow(3, 234); IndicatorDigits(MarketInfo(Symbol(), MODE_DIGITS)); string ls_0 = "BUYSELL MAGIC(" + AlertON + "," + ArrowPeriod + ")"; IndicatorShortName(ls_0); SetIndexLabel(0, "UpTrend Stop"); SetIndexLabel(1, "DownTrend Stop"); SetIndexLabel(2, "UpTrend Signal"); SetIndexLabel(3, "DownTrend Signal"); SetIndexLabel(4, "UpTrend Line"); SetIndexLabel(5, "DownTrend Line"); SetIndexDrawBegin(0, SignalPeriod); SetIndexDrawBegin(1, SignalPeriod); SetIndexDrawBegin(2, SignalPeriod); SetIndexDrawBegin(3, SignalPeriod); SetIndexDrawBegin(4, SignalPeriod); SetIndexDrawBegin(5, SignalPeriod); return (0); } int start() { int crossBB; double BBupper[25000]; double BBlower[25000]; double upLine[25000]; double dnLine[25000]; double ld_28; double l_close_36; double lastLo, lastHi; int lastLoNum, lastHiNum; for (int i = bars; i > 0; i--) { BlueDots[i] = 0; RedDots[i] = 0; ArrUp[i] = 0; ArrDn[i] = 0; ZZlo[i] = EMPTY_VALUE; ZZhi[i] = EMPTY_VALUE; } for (i = bars - SignalPeriod - 1; i > 0; i--) { BBupper[i] = iBands(NULL, 0, SignalPeriod, ArrowPeriod, 0, PRICE_CLOSE, MODE_UPPER, i); BBlower[i] = iBands(NULL, 0, SignalPeriod, ArrowPeriod, 0, PRICE_CLOSE, MODE_LOWER, i); if (Close[i] > BBupper[i + 1]) crossBB = 1; if (Close[i] < BBlower[i + 1]) crossBB = -1; if (crossBB > 0 && BBlower[i] < BBlower[i + 1]) BBlower[i] = BBlower[i + 1]; if (crossBB < 0 && BBupper[i] > BBupper[i + 1]) BBupper[i] = BBupper[i + 1]; upLine[i] = BBupper[i] + (gi_84 - 1) / 2.0 * (BBupper[i] - BBlower[i]); dnLine[i] = BBlower[i] - (gi_84 - 1) / 2.0 * (BBupper[i] - BBlower[i]); if (crossBB > 0 && dnLine[i] < dnLine[i + 1]) dnLine[i] = dnLine[i + 1]; if (crossBB < 0 && upLine[i] > upLine[i + 1]) upLine[i] = upLine[i + 1]; if (crossBB > 0) { if(High[i] >= lastHi) { lastHi = High[i]; lastHiNum = i; } if (drawDots > 0 && BlueDots[i + 1] == -1.0) // Close пересекла верх линию BB { lastHi = High[i]; lastHiNum = i; ZZ[lastLoNum] = lastLo; ArrUp[i] = dnLine[i]; BlueDots[i] = dnLine[i]; if (drawZZ > 0) ZZlo[i] = dnLine[i]; if (AlertON == TRUE && i == 1 && !gi_136) { // это ьолько для алерта. ld_28 в отображении индюка не участвует ld_28 = Low[1]; if (Low[2] < ld_28) ld_28 = Low[2]; if (Low[3] < ld_28) ld_28 = Low[3]; if (Low[4] < ld_28) ld_28 = Low[4]; ld_28 -= SL_pips * Point; l_close_36 = Close[1]; displayAlert("Buy signal", 0, ld_28, l_close_36); gi_136 = TRUE; gi_140 = FALSE; } } else { BlueDots[i] = dnLine[i]; if (drawZZ > 0) ZZlo[i] = dnLine[i]; ArrUp[i] = -1; } if (drawDots == 2) BlueDots[i] = 0; ArrDn[i] = -1; RedDots[i] = -1.0; ZZhi[i] = EMPTY_VALUE; } if (crossBB < 0) { if(Low[i] <= lastLo) { lastLo = Low[i]; lastLoNum = i; } if (drawDots > 0 && RedDots[i + 1] == -1.0) { lastLo = Low[i]; lastLoNum = i; ZZ[lastHiNum] = lastHi; ArrDn[i] = upLine[i]; RedDots[i] = upLine[i]; if (drawZZ > 0) ZZhi[i] = upLine[i]; if (AlertON == TRUE && i == 1 && !gi_140) { ld_28 = High[1]; if (High[2] > ld_28) ld_28 = High[2]; if (High[3] > ld_28) ld_28 = High[3]; if (High[4] > ld_28) ld_28 = High[4]; ld_28 += SL_pips * Point; l_close_36 = Close[1]; displayAlert("Sell signal", 0, ld_28, l_close_36); gi_140 = TRUE; gi_136 = FALSE; } } else { RedDots[i] = upLine[i]; if (drawZZ > 0) ZZhi[i] = upLine[i]; ArrDn[i] = -1; } if (drawDots == 2) RedDots[i] = 0; ArrUp[i] = -1; BlueDots[i] = -1.0; ZZlo[i] = EMPTY_VALUE; } } return (0); }
Код вот такой:
На базе ломанного индикатора делаете свой?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
У меня в индикаторе стрелка прописывается с помощью такой строчки:
SetIndexStyle(0, DRAW_ARROW, ArrowSize, 0);
Что необходимо дописать в код индикатора, чтобы эта стрелка рисовалась с заданным отступом от цены на графике?
Или такую регулировку можно делать только для объектов (OBJ) ?