Извините, недопонял. Вообще не могу догнать, как вычленить счет столбцов. Подскажите, пожалуйста, поподробнее.
Здравствуйте, подскажите, пожалуйста, какая функция способна посчитать сколько баров в положительной\отрицательной зону MACD прошло до момента пересечения сигнальной линии. На скрине понятно, что я имею ввиду
.
Такой функции нет. Если вам надо автоматически считать кол-во баров, то надо писать самому. Или просто глазками посчитайте.
Алгоритм такой:
1. Запоминаем номер бара на котором было пересечение с сигнальной линией, назовем его N. Номер текущего еще не закрытого бара равен нулю, предыдущего равен 1 и т.д. справа налево.
2. Далее циклично от N до максимального количества баров на графике увеличиваем его значение на 1, то есть смещаемся влево по графику и проверяем было ли пересечение с нулем.
3. Если пересечения не было увеличиваем счетчик кол-во баров на единицу, назовем его count.
4. Если пересечение было, завершаем цикл и получаем результат. Количество баров будет count.
Извините, недопонял. Вообще не могу догнать, как вычленить счет столбцов. Подскажите, пожалуйста, поподробнее.
Начните что-то делать. Значение имеет где вы это делаете. Если в советнике, то надо в цикле идти по истории и считать бары. Поскольку это действие затратное, его надо делать только когда выполнились предварительные условия.
Если в индикаторе, то желательно сделать дополнительный буфер, при выполнении одно условия обнулять его, затем, на каждом баре прибавлять к нему 1. Нет волшебной функции и даже волшебного алгоритма нет.
Данную проблемы решил посредством добавление графических элементов в работу советника. Советник рисует вертикальную линию на первом столбце при пересечение уровня 0 главным буфером, вторую вертикальную линию рисует на том столбце, на котором сигнальный буфер пересек линию 0. После появления второй линии - считает количество баров между линиями, включая выделенные бары. При появление обратного сигнала - рисует все по новой. Функция CountBar(); выдает количество баров.
extern string time="Рабочий тайм-фрейм";
enum tf
{
M1=0, // Минутный
M5=1, // Пятиминутный
M15=2, // Пятнадцатиминутный
M30=3, // Получасовой
H1=4, // Часовой
H4=5, //Четырехчасовой
W1=6, // Недельный
MN=7, // Месячный
};
input tf TimeFrame=H1;
//+------------------------------------------------------------------+
void OnTick()
{
CountBar();
if(MACD0>0)
{
ObjectDelete("Line3");
ObjectDelete("Line4");
}
if(MACD0<0)
{
ObjectDelete("Line");
ObjectDelete("Line2");
}
}
//+------------------------------------------------------------------+
// Счетчик баров MACD
//+------------------------------------------------------------------+
double CountBar()
{
double t5 = 0;
double bar=0;
double MACD0 = iMACD (Symbol(),0,FastMACD,SlowMACD,SignalMASD,0,0,1);
double MACD1 = iMACD (Symbol(),0,FastMACD,SlowMACD,SignalMASD,0,1,1);
if(MACD0>0)
{
if(ObjectCreate("Line",OBJ_VLINE,0,Time[1],High[0])) sig=0;
}
if(MACD0>0 && MACD1 >0)
{
ObjectCreate("Line2",OBJ_VLINE,0,Time[1],High[0]);
}
if(MACD0<0)
{
if(ObjectCreate("Line3",OBJ_VLINE,0,Time[1],High[0])) sig = 1;
}
if(MACD0<0 && MACD1 <0)
{
ObjectCreate("Line4",OBJ_VLINE,0,Time[1],High[0]);
}
double t = ObjectGet("Line",0);
double t2 = ObjectGet("Line2",0);
double t3 = ObjectGet("Line3",0);
double t4 = ObjectGet("Line4",0);
if(MACD0>0)
{
t5 = t2-t;
}
if(MACD0<0)
{
t5 = t4-t3;
}
if(TimeFrame == 0) bar = t5/60+1;
if(TimeFrame == 1) bar = t5/300+1;
if(TimeFrame == 2) bar = t5/900+1;
if(TimeFrame == 3) bar = t5/1800+1;
if(TimeFrame == 4) bar = t5/3600+1;
if(TimeFrame == 5) bar = t5/14400+1;
if(TimeFrame == 6) bar = t5/432000+1;
if(TimeFrame == 7) bar = t5/2592000+1;
return(bar);
}
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте, подскажите, пожалуйста, какая функция способна посчитать сколько баров в положительной\отрицательной зону MACD прошло до момента пересечения сигнальной линии. На скрине понятно, что я имею ввиду
.![](https://c.mql5.com/3/121/Screenshot_13__1.png)