Я не могу понять из вашего кода, что вы пытаетесь сделать, но в двух местах вы не даете переменной i значение. Вам нужно решить эту проблему.
int start() // Special function start() { if (Crosses()) count++; int i, n, // Bar index Counted_bars; Buf_1[i]= count; // Number of counted bars double Sum_H; //-------------------------------------------------------------------- Counted_bars=IndicatorCounted(); // Number of counted bars i=Bars-Counted_bars-1; // Index of the first uncounted while(i>=0) // Loop for uncounted bars { Sum_H=0; // Nulling at loop beginning for(n=i;n<=i+Aver_Bars-1;n++) // Loop of summing values { Buf_0[i]=Buf_1[n]; // Value of 0 buffer on i bar i--; // Calculating index of the next bar } } //-------------------------------------------------------------------- return(0); // Exit the special funct. start() } //-------------------------------------------------------------------- bool Crosses() { int i; double H=iHigh(NULL,PERIOD_M1,i); double L=iLow(NULL,PERIOD_M1,i); double O=iOpen(NULL,PERIOD_D1,i); if (O > L && O < H) return(true); else return(EMPTY_VALUE); }
Извините за прямоту, но ваш код показывает, что вы пытаетесь достичь чего-то, что находится далеко за пределами ваших возможностей.
Пример
bool Crosses() { int i; double H=iHigh(NULL,PERIOD_M1,i); double L=iLow(NULL,PERIOD_M1,i); double O=iOpen(NULL,PERIOD_D1,i); if (O > L && O < H) return(true); else return(EMPTY_VALUE);
Допустим, для примера i = 1.
double O=iOpen(NULL,PERIOD_D1,1);
Это вернет вчерашнюю цену открытия
double H=iHigh(NULL,PERIOD_M1,1); double L=iLow(NULL,PERIOD_M1,1);
Эти 2 вернут значения для последнего закрытого 1-минутного бара.
Таким образом, вы сравниваете значения, полученные 1 минуту назад и вчерашнее открытие.
Если i = 2, вы будете сравнивать значения, полученные 2 минуты назад, с открытием 2 дня назад.
Вы должны видеть, что это не может быть тем, что вы хотите.
Извините за прямоту, но ваш код показывает, что вы пытаетесь достичь чего-то, что находится далеко за пределами ваших возможностей.
Пример
Допустим, для примера i = 1.
Это вернет вчерашнюю цену открытия
Эти 2 вернут значения для последнего закрытого 1-минутного бара.
Таким образом, вы сравниваете значения, полученные 1 минуту назад и вчерашнее открытие.
Если i = 2, вы будете сравнивать значения, полученные 2 минуты назад, с открытием 2 дня назад.
Вы должны видеть, что это не может быть тем, что вы хотите.
Привет, ГумРай,
Спасибо, что нашли время помочь мне. Вы правы, я всего лишь новичок и с нетерпением пытаюсь научиться кодировать советника. Вот что я пытаюсь сделать:
1. Сравнить PERIOD_D1 Open с каждым минутным баром PERIOD_M1 на его собственном баре D1, так что есть 1440 баров M1 для сравнения с баром D1. Затем подсчитываем бары M1, которые удовлетворяют условию if (O > L && O < H) .
2. Сохраните подсчитанные бары в массиве, затем снова перейдите к следующему бару D1 и повторите цикл снова.
3. Подсчитанные бары будут построены индикатором на дневном графике. Так, если, скажем, количество баров M1, удовлетворяющих утверждению, равно 5, то это 5 будет отображено как значение дневного бара Bar1. Затем, скажем, для следующего дневного бара M1 подсчитанный бар равен 10, то он снова будет построен на Bar1, так как предыдущий бар переместился на Bar2.
Пожалуйста, покажите мне, как лучше закодировать это, казалось бы, простое утверждение, с которым мне трудно справиться. Дайте мне знать, если вам нужны дополнительные объяснения. и большое спасибо.
Привет GumRai,
Спасибо, что нашли время помочь мне. Вы правы, я только начинающий и очень стараюсь научиться кодировать советника. Вот что я пытаюсь сделать:
1. Сравнить PERIOD_D1 Open с каждым минутным баром PERIOD_M1 на его собственном баре D1, так что есть 1440 баров M1 для сравнения с баром D1. Затем подсчитываем бары M1, которые удовлетворяют условию if (O > L && O < H) .
2. Сохраните подсчитанные бары в массиве, затем снова перейдите к следующему бару D1 и повторите цикл снова.
3. Подсчитанные бары будут построены индикатором на дневном графике. Так, если, скажем, количество баров M1, удовлетворяющих утверждению, равно 5, то это 5 будет отображено как значение дневного бара Bar1. Затем, скажем, для следующего дневного бара M1 подсчитанный бар равен 10, то он снова будет построен на Bar1, так как предыдущий бар переместился на Bar2.
Пожалуйста, покажите мне, как лучше закодировать это, казалось бы, простое утверждение, с которым мне трудно справиться. Дайте мне знать, если вам нужны дальнейшие объяснения, и большое спасибо.
Я буду рад помочь вам, но я не буду писать код, так как это не поможет вам в леармировании.
Во-первых, вы должны понимать, что 1440 баров M1 не всегда соответствуют периоду в 1 день. Если во время бара нет тиков, этот бар будет отсутствовать в истории, и их может быть меньше, чем вы ожидаете.
Поэтому вам нужно значение времени открытия свечи D1. Вы можете это сделать? Попробуйте и опубликуйте свой код
не так быстро
Я знаю, что вы пытаетесь сделать, и ваш код(if (O > L && O < H)) не даст вам того, что вы хотите.
посмотрите на прилагаемый график
стрелка вверх - это сегодняшнее открытие
& стрелка ,направленная вправо - это первый бар, соответствующий вашему коду (if (O > L && O < H)), поэтому count = 1
но если вы обратите внимание, бар закрылся выше сегодняшнего открытия, так что на самом деле счетчик должен быть = 2 (по крайней мере (может быть еще несколько пересечений, которые вы не можете увидеть только на тиковом графике)).
но в вашем коде count = только 1
не так быстро
Я знаю, что вы пытаетесь сделать, и ваш код(if (O > L && O < H)) не даст вам того, что вы хотите.
посмотрите на прилагаемый график
стрелка вверх - это сегодняшнее открытие
& стрелка ,направленная вправо - это первый бар, соответствующий вашему коду (if (O > L && O < H)), поэтому count = 1
но если вы обратите внимание, бар закрылся выше сегодняшнего открытия, так что на самом деле счетчик должен быть = 2 (по крайней мере (может быть еще несколько пересечений, которые вы не можете увидеть только на тиковом графике)).
но в вашем коде count = только 1
Насколько я понимаю, он хочет считать бары, которые находятся в диапазоне цены открытия - возможно, я ошибаюсь :)
- Zaldy: ПОЖАЛУЙСТА, ПОМОГИТЕ КОМУ-НИБУДЬ! ВОЗМОЖНО ЛИ ЭТО ВООБЩЕ?Не кричите на нас. Конечно, это возможно.
- Целочисленные и булевы числа конвертируемы. False == 0, true = ненулевое значение.
return(true); else return(EMPTY_VALUE); return(true); else return(2147483647); return(true); else return(true);
- Вы также имеете дело с тремя таймфреймами, D1, график, M1. Вы должны конвертировать.Не компилировалось и не тестировалось.
Counted_bars=IndicatorCounted(); // Number of counted bars for(iCht = Bars - 1 - Counted_bars; iCht >= 0; iCht--){ // Chart bars int iD1 = iBarShift(NULL, PERIOD_D1, Time[iCht]; double openD1 = iOpen(NULL, PERIOD_D1, iD1); int iM1Beg = iBarShift(NULL, PERIOD_M1, Time[iCht], iM1End = -1; if(iCht > 0) iM1End = iBarShift(NULL, PERIOD_M1, Time[iCht-1]; for(Buf_0[i] = 0; iM1Beg > iM1End; iM1Beg--){ double hM1 = iHigh(NULL, PERIOD_M1, iM1Beg), lM1 = iLow(NULL, PERIOD_M1, iM1Beg); // count Bars of M1 Period that crisscross Open price of D1 Period if( hM1 >= openD1 && openD1 >= lM1) Buf_0[iCht]++; } }
Не компилируется и не тестируется.
не так быстро
Я знаю, что вы пытаетесь сделать, и ваш код(if (O > L && O < H)) не даст вам того, что вы хотите.
посмотрите на прилагаемый график
стрелка вверх - это сегодняшнее открытие
& стрелка ,направленная вправо - это первый бар, соответствующий вашему коду (if (O > L && O < H)), поэтому count = 1
но если вы обратите внимание, бар закрылся выше сегодняшнего открытия, так что на самом деле счетчик должен быть = 2 (по крайней мере (может быть еще несколько пересечений, которые вы не можете увидеть только на тиковом графике)).
но в вашем коде count = только 1
Привет Qjol, Да, стрелка, направленная вправо - это первый подсчет, который я хочу. Те, которые пересекаются с D1 Open, считаются только. Еще раз спасибо за ваши усилия.
- Залпы: ПОЖАЛУЙСТА, ПОМОГИТЕ КТО МОЖЕТ! ВОЗМОЖНО ЛИ ЭТО ВООБЩЕ?Не кричите на нас. Конечно, это возможно.
- Целочисленные и булевы числа конвертируемы. False == 0, true = ненулевое значение.
- Вы также имеете дело с тремя таймфреймами, D1, график, M1. Вы должны конвертировать.Не компилируется и не тестируется.
Не компилируется и не тестируется.
Спасибо WHRoeder и извините за использование заглавных букв! Я попробую ваши предложения и вернусь сюда за результатом.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Приветствую! Нужна помощь по данному индикатору. Пробовал разные методы подсчета количества баров в периоде M1, которые пересекались с уровнем цены открытия в периоде D1. Я приложил свою попытку закодировать его, но не смог запустить его успешно. Я очень старался над этим, но уперся в стену, так что теперь прошу помощи у любезных джентльменов!
Вот что мне нужно для этого индикатора:
1. Когда цена бара в периоде M1 пересекается с ценой открытия в периоде D1, это будет засчитано. В периоде M1 имеется 1440 баров для каждого периода D1, поэтому каждые 1440 баров будут проверяться.
2. Для каждого бара D1 общий счетчик/D1 бар будет суммирован и усреднен по определенному значению. Скажем, среднее значение равно 30, эти 30 - количество баров D1.
3. Затем среднее значение будет построено в качестве индикатора.