Техническое задание. Требуется написать индикатор для определения тренда. Алгоритм определения тренда следующий: Итак, для определения тренда, далее, восходящего движения(сначала опишу для повышающегося), необходимо общее условие: повышающиеся локальные минимумы и повышающиеся локальные максимумы, необходимы четыре составляющие: Минимум 1, Максимум 1, Минимум 2, Максимум 2. Восходящее движение считается образованным, если эти 4 составляющие появились последовательно и по всем правилам(критерии ниже). Критерии для идентификации каждой составляющей: Минимум 1(рассматривается свеча и ее минимум): 1.Минимум (т.е. минимум потенциальной свечи, которая может стать Минимумом 1) ниже или равен минимуму предыдущей свечи. 2.Минимум ниже или равен минимуму следующей свечи. 3.Если 1 - false, то следующая свеча рассматривается как потенциальный Минимум 1 по новой. 4.Если 2 - false, то следующая свеча рассматривается как потенциальный Минимум 1 по новой. 5.Если 1 и 2 - true, Минимум 1 определен. 6.Далее, только после идентификации Минимума 1, начинается поиск Максимума 1. То есть, пока Минимум 1 не появится, дальше не двигаемся. Максимум 1(рассматривается свеча и ее максимум, после образования Минимума 1, в том числе, свеча, появившаяся сразу после свечи Минимума 1): 1.Максимум(потенциальной свечи) выше или равен максимуму предыдущей свечи, в т.ч. максимуму свечи: Минимум 1. 2.Минимум(этой же свечи) выше или равен минимуму свечи: Минимум 1. 3.Следующая свеча медвежья(после потенциальной свечи) своим минимумом ниже или равна цене открытия(для бычьей потенциальной свечи) или цене закрытия(для медвежьей). 4.Если 1 - false, а 2 – true, то следующая свеча рассматривается как потенциальный Максимум 1 по новой. 5.Если 1 - false, а 2 - false,(то есть при 1 false, эта же свеча проверяется и на 2) то весь алгоритм начинается сначала, с определения Минимума 1. Причем, начинается он со свечи, минимум которой, оказался ниже минимума свечи: Минимум 1. 6.Если 1 - true, а 2 - false, то весь алгоритм начинается сначала, с определения Минимума 1. Причем, начинается он со свечи, минимум которой, оказался ниже минимума свечи: Минимум 1. 7.Если 1 и 2 - true, а 3 - false, то следующая свеча(после потенциальной) рассматривается как потенциальный Максимум 1 по новой. 8.Если 1, 2 и 3 - true, Максимум 1 определен, двигаемся дальше. Минимум 2(рассматривается свеча и ее минимум, после образования Максимума 1, в т.ч., свеча, появившаяся сразу после свечи Максимума 1): 1.Минимум(потенциальной свечи) ниже или равен минимуму предыдущей свечи, в т.ч. минимуму свечи: Максимум 1. 2.Минимум выше или равен минимуму свечи: Минимум 1. 3.Минимум ниже или равен минимуму следующей свечи. 4.Следующая свеча(после потенциальной свечи) 4.1 Своим минимумом выше или равна минимуму потенциального Минимума 2. 4.2 Своей ценой закрытия выше или равна максимуму свечи: Максимум 1. 5.Если 1 - false, то следующая свеча рассматривается как потенциальный Минимум 2 по новой. 6.Если 1 - true, 2 - false, то весь алгоритм начинается сначала, с определения Минимума 1. Причем, начинается он со свечи, минимум которой, оказался ниже минимума свечи: Минимум 1. 7.Если 1 и 2 - true, а 3 - false, то следующая свеча рассматривается как потенциальный Минимум 2 по новой. 8.Если 4.1 - true, 4.2 - false, то следующая свеча рассматривается как 4. 9.Если 4.1 - false, 4.2 – false, а 2 - true, то следующая свеча(после “следующей”) рассматривается как потенциальный Минимум 2 по новой. 10.Если 4.1 - false, 4.2 - false и 2 - false, то весь алгоритм начинается сначала, с определения Минимума 1. Причем, начинается он со свечи, минимум которой, оказался ниже минимума свечи: Минимум 1. 11.Если 1, 2, 3, 4 - true, Минимум 2 определен. Двигаемся дальше. Максимум 2(рассматривается свеча и ее максимум, после образования Минимума 2, в том числе, свеча, появившаяся сразу после свечи Минимума 2): 1.Максимум(потенциальной свечи) выше или равен максимуму предыдущей свечи, в т.ч. максимуму свечи: Минимум 2. 2.Цена закрытия выше или равна минимуму свечи: Минимум 2. 3.Максимум выше или равен максимуму свечи: Максимум 1. 4.Следующая свеча(после потенциальной свечи) своей ценой закрытия ниже или равна цене открытия(для бычьей потенциальной свечи) или цене закрытия(для медвежьей). 5.Если 1 - false, то следующая свеча рассматривается как потенциальный Максимум 1 по новой. 6.Если 1 - true, а 2 - false, то весь алгоритм начинается сначала, с определения Минимума 1. Причем, начинается он со свечи, цена закрытия которой, оказалась ниже минимума свечи: Минимум 2. 7.Если 1 и 2 - true, а 3 - false, то следующая свеча рассматривается как потенциальный Максимум 2 по новой. 8.Если 1, 2 и 3 - true, а 4 - false, то следующая свеча рассматривается как потенциальный Максимум 1 по новой. 9.Если 1, 2, 3, 4 - true, Максимум 2 определен, восходящее движение полностью сформировалось. Когда тренд сформировался, алерт мне на почту. В сообщении должно быть прописано, что Мин 1, Макс 1, Мин 2, Макс 2 сформировались. На графике, Минимумы и Максимумы должны быть отмечены стрелками и подписаны соответственно своим определениям, как на прикрепленном рисунке EURUSDH1. После формирования тренда, поиск нового Минимума и относящегося к нему Максимума, то есть поиск двух, а не четырех последовательных составляющих: Минимум 1(рассматривается свеча и ее минимум): 1.Минимум (т.е. минимум потенциальной свечи, которая может стать Минимумом 1) ниже или равен минимуму предыдущей свечи. 2.Минимум ниже или равен минимуму следующей свечи. 3.Если 1 - false, то следующая свеча рассматривается как потенциальный Минимум 1 по новой. 4.Если 2 - false, то следующая свеча рассматривается как потенциальный Минимум 1 по новой. 5.Если 1 и 2 - true, Минимум 1 определен. 6.Далее, только после идентификации Минимума 1, начинается поиск Максимума 1. То есть, пока Минимум 1 не появится, дальше не двигаемся. Максимум 1(рассматривается свеча и ее максимум, после образования Минимума 1, в том числе, свеча, появившаяся сразу после свечи Минимума 1): 1.Максимум(потенциальной свечи) выше или равен максимуму предыдущей свечи, в т.ч. максимуму свечи: Минимум 1. 2.Минимум(этой же свечи) выше или равен минимуму свечи: Минимум 1. 3.Следующая свеча медвежья(после потенциальной свечи) своим минимумом ниже или равна цене открытия(для бычьей потенциальной свечи) или цене закрытия(для медвежьей). 4.Если 1 - false, а 2 – true, то следующая свеча рассматривается как потенциальный Максимум 1 по новой. 5.Если 1 - false, а 2 - false,(то есть при 1 false, эта же свеча проверяется и на 2) то весь алгоритм начинается сначала, с определения Минимума 1. Причем, начинается он со свечи, минимум которой, оказался ниже минимума свечи: Минимум 1. 6.Если 1 - true, а 2 - false, то весь алгоритм начинается сначала, с определения Минимума 1. Причем, начинается он со свечи, минимум которой, оказался ниже минимума свечи: Минимум 1. 7.Если 1 и 2 - true, а 3 - false, то следующая свеча(после потенциальной) рассматривается как потенциальный Максимум 1 по новой. 8.Если 1, 2 и 3 - true, Максимум 1 определен, весь алгоритм начинается сначала, с определения Минимума 1. Причем, начинается он со свечи, минимум которой, оказался ниже минимума свечи: Минимум 1. И, после формирования этих двух составляющих, алерт мне на почту. Причем, в этом случае, в сообщении новый Мин и Макс должны быть пронумерованы, нумерация начинается после, естественно, формирования основного движения. Если это первые Мин и Макс, то запись должна выглядеть так: Min X1, Max X1 сформировались. Если это третьи, то Min X3, Max X3 сформировались, соответственно. На графике, Минимумы и Максимумы должны быть отмечены стрелками и подписаны соответственно своим определениям, то есть, Min Xn, Max Xn, как на прикрепленном рисунке EURUSDH1. После отключения и включения индикатора по новой, все сначала, поиск основного движения, затем Мин Xn, Макс Xn. Для определения нисходящего движения, необходимо общее условие: понижающиеся локальные максимумы и понижающиеся локальные минимумы, необходимы четыре составляющие: Максимум 1, Минимум 1, Максимум 2, Минимум 2. Нисходящее движение считается образованным, если эти 4 составляющие появились последовательно и по всем правилам(критерии ниже). Критерии для идентификации каждой составляющей: Максимум 1(рассматривается свеча и ее максимум): 1.Максимум(т.е. максимум потенциальной свечи, которая может стать Максимумом выше или равен максимуму предыдущей свечи. 2.Максимум выше или равен максимуму следующей свечи. 3.Если 1 - false, то следующая свеча рассматривается как потенциальный Максимум 1 по новой. 4.Если 2 - false, то следующая свеча рассматривается как потенциальный Максимум 1 по новой. 5.Если 1 и 2 - true, Максимум 1 определен. 6.Далее, только после идентификации Максимума 1, начинается поиск Минимума 1. То есть, пока Максимум 1 не появится, дальше не двигаемся. Минимум 1(рассматривается свеча и ее минимум, после образования Максимума 1, в том числе, свеча, появившаяся сразу после свечи Максимума 1): 1.Минимум(потенциальной свечи) ниже минимума предыдущей свечи, в т.ч. минимума свечи: Максимум 1. 2.Максимум(этой же свечи) ниже максимума свечи: Максимум 1. 3.Следующая свеча бычья(после потенциальной свечи) своим максимумом выше или равна цене открытия(для медвежьей потенциальной свечи) или цене закрытия(для бычьей). 4.Если 1 - false, а 2 - true, то следующая свеча рассматривается как потенциальный Минимум 1 по новой. 5.Если 1 - false, а 2 - false, то весь алгоритм начинается сначала, с определения Максимума 1. Причем, начинается он со свечи, максимум которой, оказался выше максимума свечи: Максимум 1. 6.Если 1 - true, а 2 - false, то весь алгоритм начинается сначала, с определения Максимума 1. Причем, начинается он со свечи, максимум которой, оказался выше максимума свечи: Максимум 1. 7.Если 1 и 2 - true, а 3 - false, то следующая свеча(после потенциальной) рассматривается как потенциальный Минимум 1 по новой. 8.Если 1, 2 и 3 - true, Минимум 1 определен, двигаемся дальше. Максимум 2(рассматривается свеча и ее максимум, после образования Минимума 1, в т.ч., свеча, появившаяся сразу после свечи Минимума 1): 1.Максимум(потенциальной свечи) выше или равен максимуму предыдущей свечи, в т.ч. максимуму свечи: Минимум 1. 2.Максимум ниже или равен максимуму свечи: Максимум 1. 3.Максимум выше или равен максимуму следующей свечи. 4.Следующая свеча(после потенциальной свечи) 4.1 Своим максимумом ниже или равна максимуму потенциального Максимума 2. 4.2 Своей ценой закрытия ниже или равна минимуму свечи: Минимум 1. 5.Если 1 - false, то следующая свеча рассматривается как потенциальный Максимум 2 по новой. 6.Если 1 - true, 2 - false, то весь алгоритм начинается сначала, с определения Максимума 1. Причем, начинается он со свечи, максимум которой, оказался выше максимума свечи: Максимум 1. 7.Если 1 и 2 - true, а 3 - false, то следующая свеча рассматривается как потенциальный Максимум 2 по новой. 8.Если 4.1 - true, 4.2 - false, то следующая свеча рассматривается как 4. 9.Если 4.1 - false, 4.2 – false, а 2 – true, то следующая свеча(после “следующей”) рассматривается как потенциальный Максимум 2 по новой. 10.Если 4.1 - false, 4.2 - false и 2 - false, то весь алгоритм начинается сначала, с определения Максимума 1. Причем, начинается он со свечи, максимум которой, оказался выше максимума свечи: Максимум 1. 11.Если 1, 2, 3, 4 - true, Максимум 2 определен. Двигаемся дальше. Минимум 2(рассматривается свеча и ее минимум, после образования Максимума 2, в том числе, свеча, появившаяся сразу после свечи Максимума 2): 1.Минимум(потенциальной свечи) ниже или равен минимуму предыдущей свечи, в т.ч. минимуму свечи: Максимум 2. 2.Цена закрытия ниже или равна максимуму свечи: Максимум 2. 3.Минимум ниже или равен минимуму свечи: Минимум 1. 4.Следующая свеча(после потенциальной свечи) своей ценой закрытия выше или равна цене открытия(для медвежьей потенциальной свечи) или цене закрытия(для бычьей). 5.Если 1 - false, то следующая свеча рассматривается как потенциальный Минимум 2 по новой. 6.Если 1 - true, а 2 - false, то весь алгоритм начинается сначала, с определения Максимума 1. Причем, начинается он со свечи, цена закрытия которой, оказалась выше максимума свечи: Максимум 2. 7.Если 1 и 2 - true, а 3 - false, то следующая свеча рассматривается как потенциальный Минимум 2 по новой. 8.Если 1, 2 и 3 - true, а 4 - false, то следующая свеча рассматривается как потенциальный Минимум 2 по новой. 9.Если 1, 2, 3, 4 - true, Максимум 2 определен, восходящее движение полностью сформировалось. Когда тренд сформировался, алерт мне на почту. В сообщении должно быть прописано, что Макс 1, Мин 1, Макс 2, Мин 2 сформировались. На графике, Максимумы и Минимумы должны быть отмечены стрелками и подписаны соответственно своим определениям, как на прикрепленном рисунке USDCHFH1. После формирования тренда, поиск нового Максимума и относящегося к нему Минимума, то есть поиск двух, а не четырех последовательных составляющих: Максимум 1(рассматривается свеча и ее максимум): 1.Максимум(т.е. максимум потенциальной свечи, которая может стать Максимумом выше или равен максимуму предыдущей свечи. 2.Максимум выше или равен максимуму следующей свечи. 3.Если 1 - false, то следующая свеча рассматривается как потенциальный Максимум 1 по новой. 4.Если 2 - false, то следующая свеча рассматривается как потенциальный Максимум 1 по новой. 5.Если 1 и 2 - true, Максимум 1 определен. 6.Далее, только после идентификации Максимума 1, начинается поиск Минимума 1. То есть, пока Максимум 1 не появится, дальше не двигаемся. Минимум 1(рассматривается свеча и ее минимум, после образования Максимума 1, в том числе, свеча, появившаяся сразу после свечи Максимума 1): 1.Минимум(потенциальной свечи) ниже минимума предыдущей свечи, в т.ч. минимума свечи: Максимум 1. 2.Максимум(этой же свечи) ниже максимума свечи: Максимум 1. 3.Следующая свеча бычья(после потенциальной свечи) своим максимумом выше или равна цене открытия(для медвежьей потенциальной свечи) или цене закрытия(для бычьей). 4.Если 1 - false, а 2 - true, то следующая свеча рассматривается как потенциальный Минимум 1 по новой. 5.Если 1 - false, а 2 - false, то весь алгоритм начинается сначала, с определения Максимума 1. Причем, начинается он со свечи, максимум которой, оказался выше максимума свечи: Максимум 1. 6.Если 1 - true, а 2 - false, то весь алгоритм начинается сначала, с определения Максимума 1. Причем, начинается он со свечи, максимум которой, оказался выше максимума свечи: Максимум 1. 7.Если 1 и 2 - true, а 3 - false, то следующая свеча(после потенциальной) рассматривается как потенциальный Минимум 1 по новой. 8.Если 1, 2 и 3 - true, Минимум 1 определен, весь алгоритм начинается сначала, с определения Максимума 1. Причем, начинается он со свечи, максимум которой, оказался выше максимума свечи: Максимум 1. И, после формирования этих двух составляющих, алерт мне на почту. Причем, в этом случае, в сообщении новый Макс и Мин должны быть пронумерованы, нумерация начинается после, естественно, формирования основного движения. Если это первые Макс и Мин, то запись должна выглядеть так: Max X1, Min X1 сформировались. Если это третьи, то Max X3, Min X3 сформировались, соответственно. На графике, Максимумы и Минимумы должны быть отмечены стрелками и подписаны соответственно своим определениям, то есть, Max Xn, Min Xn, как на прикрепленном рисунке USDCHFH1. После отключения и включения индикатора по новой, все сначала, поиск основного движения, затем Макс Xn, Мин Xn. Равенство максимумов и минимумов до 5 знака. На рисунке с франком, у минимума 1 в правилах еще не было следующей свечи - бычьей. В целом, построено все корректно. Максимумы и минимумы строились вручную, чтобы потом можно было сравнить результат. Все.