Оба буфера красный и зелёный в индикаторе есть. Посчитай столбики с ненулевыми значениями в цикле.Наверное и то и другое.
Чтобы выводилась цифра допустим 4 зеленым или 10 красным. Хочу потом со всех TF вывести. Знать бы как это посчитать. Вывести наверное сам смогу.
А как без кода то? Напиши хотя бы названия буферов красного и зелёного.В том то и дело что я не знаю как этот цикл написать. Умения не хватает. Так напишу, что еще и линии индикатора пропадут.
#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 White
#property indicator_color2 C'0,45,0' //bbMacd up
#property indicator_color3 FireBrick //bbMacd up
#property indicator_color4 Silver //Upperband
#property indicator_color5 Silver //Lowerband
#property indicator_width2 3
#property indicator_width3 3
//---- indicator parameters
extern int FastLen = 38;
extern int SlowLen = 120;
extern int Length = 20;
extern double StDv = 1.1;
extern int LagFast = 38;
extern int LagSlow = 128;
extern int NumberOfComputations = 2;
extern int NumberOfBars = 2000;
//----
int loopbegin;
int shift;
double zeroline;
//---- indicator buffers
double ExtMapBuffer1[]; // bbMacd
double ExtMapBuffer2[]; // bbMacd
double ExtMapBuffer3[]; // Upperband Line
double ExtMapBuffer4[]; // Lowerband Line
//---- buffers
double bbMacd[];
double Upperband[];
double Lowerband[];
double avg[];
double bbMacdline;
double sDev;
double mean;
double sumSqr;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(8);
SetIndexBuffer(0, bbMacd);
SetIndexStyle(0, DRAW_LINE);
SetIndexBuffer(1, ExtMapBuffer1); // bbMacd line
SetIndexStyle(1, DRAW_HISTOGRAM);
SetIndexBuffer(2, ExtMapBuffer2); // bbMacd line
SetIndexStyle(2, DRAW_HISTOGRAM);
SetIndexBuffer(3, ExtMapBuffer3); // Upperband line
SetIndexStyle(3, DRAW_LINE);
SetIndexBuffer(4, ExtMapBuffer4); // Lowerband line
SetIndexStyle(4, DRAW_LINE);
SetIndexBuffer(5, Upperband);
SetIndexBuffer(6, Lowerband);
SetIndexBuffer(7, avg);
IndicatorShortName("Custom BB_MACD");
SetIndexLabel(0, "bbMacd");
SetIndexLabel(1, "Upperband");
SetIndexLabel(2, "Lowerband");
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom BB_MACD |
//+------------------------------------------------------------------+
int start()
{
int limit;
int counted_bars = IndicatorCounted();
//---- check for possible errors
if(counted_bars < 0)
return(-1);
//---- last counted bar will be recounted
if(counted_bars > 0)
counted_bars--;
limit = Bars - counted_bars;
//----
for(int i = 0; i < limit; i++)
bbMacd[i] = iCustom(Symbol(),Period(),"z_SSA of price",LagFast,NumberOfComputations,NumberOfBars,PRICE_CLOSE,0,i) -
iCustom(Symbol(),Period(),"z_SSA of price",LagSlow,NumberOfComputations,NumberOfBars,PRICE_CLOSE,0,i);
//----
for(i = 0; i < limit; i++)
{
avg[i] = iMAOnArray(bbMacd, 0, Length, 0, MODE_EMA, i);
sDev = iStdDevOnArray(bbMacd, 0, Length, MODE_EMA, 0, i);
Upperband[i] = avg[i] + (StDv * sDev);
Lowerband[i] = avg[i] - (StDv * sDev);
ExtMapBuffer1[i]=bbMacd[i]; // Uptrend bbMacd
ExtMapBuffer2[i]=bbMacd[i]; // downtrend bbMacd
ExtMapBuffer3[i]=Upperband[i]; // Upperband
ExtMapBuffer4[i]=Lowerband[i]; // Lowerband
//----
if(bbMacd[i] > bbMacd[i+1])
ExtMapBuffer2[i] = EMPTY_VALUE;
//----
if(bbMacd[i] < bbMacd[i+1])
ExtMapBuffer1[i] = EMPTY_VALUE;
}
return(0);
}
Так можно определить фрактал на 3 баре только если он там есть.Добрый вечер!
Последний фрактал можно определить так:
iFractals(NULL, 0, MODE_UPPER, 3);
iFractals(NULL, 0, MODE_LOWER, 3);
А как можно определить ПРЕДПОСЛЕДНИЙ фрактал?
И еще вопрос. Как определить, какой из последних фракталов самый последний: верхний или нижний?
Спасибо.
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
extern int FastAvgLen = 7;
extern int SlowAvgLen = 15;
extern int N = 250;
extern int Correction = 2;
double g_ibuf_92[];
double g_ibuf_96[];
double g_ibuf_100[];
int gi_unused_104 = 4;
int g_time_116 = 0;
int init() {
IndicatorBuffers(3);
SetIndexStyle(0, DRAW_HISTOGRAM);
SetIndexBuffer(0, g_ibuf_92);
SetIndexStyle(1, DRAW_HISTOGRAM);
SetIndexBuffer(1, g_ibuf_96);
SetIndexBuffer(2, g_ibuf_100);
return (0);
}
int deinit() {
return (0);
}
int start() {
double l_ima_12;
double l_ima_20;
double l_ima_28;
double l_ima_36;
int li_44;
int li_48;
double ld_52;
double ld_60;
double ld_68;
double ld_76;
double ld_84;
double lda_100[];
double lda_104[];
double ld_108;
double lda_116[];
if (g_time_116 == Time[0]) return (0);
g_time_116 = Time[0];
int l_ind_counted_0 = IndicatorCounted();
int li_4 = Bars - SlowAvgLen;
ArrayResize(lda_100, Bars);
ArrayResize(lda_104, Bars);
ArrayResize(lda_116, Bars);
ArraySetAsSeries(lda_100, TRUE);
ArraySetAsSeries(lda_104, TRUE);
ArraySetAsSeries(lda_116, TRUE);
ArrayInitialize(lda_100, 0);
ArrayInitialize(lda_104, 0);
ArrayInitialize(lda_116, 0);
for (int li_8 = li_4 - 1; li_8 >= 0; li_8--) {
l_ima_12 = iMA(Symbol(), 0, FastAvgLen, 0, MODE_EMA, PRICE_CLOSE, li_8);
l_ima_20 = iMA(Symbol(), 0, FastAvgLen, 0, MODE_EMA, PRICE_CLOSE, li_8 + 1);
l_ima_28 = iMA(Symbol(), 0, SlowAvgLen, 0, MODE_EMA, PRICE_CLOSE, li_8);
l_ima_36 = iMA(Symbol(), 0, SlowAvgLen, 0, MODE_EMA, PRICE_CLOSE, li_8 + 1);
ld_52 = l_ima_12 - l_ima_28;
ld_60 = l_ima_20 - l_ima_36;
if (ld_52 >= 0.0) li_44 = 1;
else li_44 = -1;
if (ld_60 >= 0.0) li_48 = 1;
else li_48 = -1;
ld_68 = Close[li_8] - (Close[li_8 + 1]);
if (li_44 != li_48) {
ld_84 = 0;
lda_100[li_8] = 0;
} else {
ld_84 += ld_68 * li_44;
lda_100[li_8] = ld_84 / 4.0 + 0.75 * (lda_100[li_8 + 1]);
}
ld_108 = ld_84 - lda_100[li_8];
lda_104[li_8] = ld_108 * ld_108;
if (li_8 <= Bars - N) {
ld_76 = Correction * MathSqrt(iMAOnArray(lda_104, 0, N, 0, MODE_SMA, li_8));
if (MathAbs(lda_100[li_8]) + MathAbs(ld_76) > 0.0) lda_116[li_8] = 100.0 * MathAbs(lda_100[li_8]) / (MathAbs(lda_100[li_8]) + MathAbs(ld_76));
else lda_116[li_8] = lda_116[li_8 + 1];
if (li_8 <= Bars - N - 4) {
g_ibuf_100[li_8] = iMAOnArray(lda_116, 0, 3, 0, MODE_EMA, li_8);
if (li_44 > 0) {
g_ibuf_92[li_8] = g_ibuf_100[li_8];
g_ibuf_96[li_8] = EMPTY_VALUE;
if (li_48 < 0) g_ibuf_92[li_8 + 1] = g_ibuf_100[li_8 + 1];
} else {
g_ibuf_96[li_8] = g_ibuf_100[li_8];
g_ibuf_92[li_8] = EMPTY_VALUE;
if (li_48 > 0) g_ibuf_96[li_8 + 1] = g_ibuf_100[li_8 + 1];
}
}
}
}
return (0);
}
Здравствуйте!
Не могли бы помочь(проконсультировать) в одном вопросе:
не могу в MQL4 реализовать функцию, чтобы после закрытия ордера командой OrderClose() следующий ордер на открытие позиции OrderSend() не открывался пока не пройдет определенное время, например 15 минут.
У меня сейчас происходит закрытие позиции. т.е. условия для OrderClose() выполняются, ордер закрывается, но потом происходит вновь открытие позиции в убыточною сторону, т.к. условия для OrderSend тоже выполняются и поэтому я хотел бы добавить еще одно условие для открытия позиции - это условие по времени, т.е. должна быть некая временная пауза между OrderClose() и OrderSend()
Самое простое это транслировать через GV переменные. Советрик в них пишет что надо отобразить, а в окнах стоят индикаторы отображалки. Они берут из GV данные которые надо отобразить и отображают.Есть ли способ выводить текстовую или графическую инфу в окно, отличное, от того, в котором работает советник?
Типа, мультивалютник выводит инфу по сделке в окно пары, по которой сделка произошла?
#include <WinUser32.mqh>
...
handle=WindowHandle(Какая-тоПара,Period());
PostMessageA(handle,WM_KEYDOWN,VK_HOME,0);
Да спасибо,разобрапся,немного запутался в именах,..Т.е. это встроенный параболик так вызывается в коде. Или в чем вопрос?PHP:double iSAR( string symbol, int timeframe, double step, double maximum, int shift) Расчет индикатора Parabolic Stop and Reverse system.