Общие вопросы по разработке > Реализовать условие в коде "размер нижней тени предыдущей зеленой свечи больше тела этой же свечи в 2 раза"

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
Макс5
Сообщения: 6
Зарегистрирован: 30 ноя 2021, 09:34
Благодарил (а): 4 раза

Реализовать условие в коде "размер нижней тени предыдущей зеленой свечи больше тела этой же свечи в 2 раза"

Непрочитанное сообщение Макс5 » 30 ноя 2021, 09:57

Добрый день, уважаемые форумчане. Подскажите, пожалуйста, как реализовать следующее условие в коде.
Условия:
1. Тело предыдущей свечи - зеленое. Здесь проблем нет. Код получается такой:

Код: Выделить всё

Input1.Close[1] > Input1.Open[1]

2. Размер нижней тени предыдущей зеленой свечи больше тела этой же свечи в 2 раза. Конструктор не дает поставить такое условие. С данным языком программирования никогда не сталкивался. В компиляторе я написал так (по аналогии с формулами Excel):

Код: Выделить всё

(Input1.Open[1] - Input1.Low[1]) > (Input1.Close[1] - Input1.Open[1])*2)

Разумеется, это не правильно оказалось. :lol: Подскажите, пожалуйста, как написать код корректно.

С уважением, Максим.

Полностью код, который "неправильный":

Код: Выделить всё

/**

**/
function Initialize()
{
   StrategyName = "Ниж.тень>тело*2 - предыд свеча";
   AddParameter("P1", 0, "", 1);
   AddInput("Input1", Inputs.Candle, 5, true, "ARSA=МБ ЦК");
   LongLimit = 0;
   ShortLimit = 0;
}

function OnUpdate()
{
   /// ПРАВИЛО 1
   if ( (Input1.Close[1] > Input1.Open[1]) && ((Input1.Open[1] - Input1.Low[1]) > (Input1.Close[1] - Input1.Open[1])*2) )
   {
      ShowMessage(0);
   }

}

BugsDigger
Сообщения: 533
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 91 раз

Re: Реализовать условие в коде "размер нижней тени предыдущей зеленой свечи больше тела этой же свечи в 2 раза"

Непрочитанное сообщение BugsDigger » 30 ноя 2021, 13:08

Если в чем-то сомневаешься, лучше сделать по разделениям (раз-два):

Код: Выделить всё

 double open=Input1.Open[-1];  // можно и 1, знак на самом деле не важен; но для порядка пишем согласно документации -1
 double low=Input1.Low[-1];
 double close=Input1.Close[-1];

 double body=close-open;           // тело
 double lowshadow=open-low; // нижняя тень (для зеленой); для красной будет close-low

 /// ПРАВИЛО 1
 if(body > 0 &&                  // зеленая
    lowshadow > 2*body)  // тень больше двух тел
 {
  ShowMessage(0);
 }


Вроде так (если сам не наврал), т.е. ваш код вроде как правильный. Почему вы решили, что нет?

Макс5
Сообщения: 6
Зарегистрирован: 30 ноя 2021, 09:34
Благодарил (а): 4 раза

Re: Реализовать условие в коде "размер нижней тени предыдущей зеленой свечи больше тела этой же свечи в 2 раза"

Непрочитанное сообщение Макс5 » 30 ноя 2021, 13:39

Сейчас убрал ненужные скобки во втором условии, укоротил название робота и все получилось!))
Так не получалось:

Код: Выделить всё

 if ( (Input1.Close[1] > Input1.Open[1]) && ((Input1.Open[1] - Input1.Low[1]) > (Input1.Close[1] - Input1.Open[1])*2) )

Так получилось:

Код: Выделить всё

 if ( (Input1.Close[1] > Input1.Open[1]) && (Input1.Open[1] - Input1.Low[1] > (Input1.Close[1] - Input1.Open[1])*2) )

То есть, без разницы [1] или [-1] указывать для предыдущей свечи?

BugsDigger
Сообщения: 533
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 91 раз

Re: Реализовать условие в коде "размер нижней тени предыдущей зеленой свечи больше тела этой же свечи в 2 раза"

Непрочитанное сообщение BugsDigger » 30 ноя 2021, 14:04

Да, без разницы, исключений не знаю. Дизассемблер показывает, что во "внутренностях" индексы прогоняются через Abs. Но в документации всегда говорится об отрицательных индексах, так что стараюсь действовать "по уставу".



Вернуться в «Общие вопросы по разработке»

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и 7 гостей