[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 283

 
tara:

Можно блок-схемой. Можно еще как-нибудь, но очень въедливо и однозначно. Так, чтобы я не имел возможности пнуть Вас за несоответствие замысла его описанию. 

ЗЫ Делать не буду.  

Вы зашли в ветку чтоб написать, что делать не будите? Для чего? Просто чтоб написать.... ?
 
Для того, чтобы сам сделал. Господи, прости меня, грешного 
 

 Я думаю.. тут либо нужно проверить некоторое время назад цену, если она была соответственно выше (в баевой фазе), то что-то ещё учесть. Да фиг его знает. Я не представляю как это формализовать.

 Я же не прошу писать за меня. Просто прошу помочь формализовать словесно... 

 

Дурное дело - не хитрое. Это я про кодирование, как здесь говорить принято. Понимаете, создавая серьезную программу, Вы создаете мир, живущий по правилам, Вами установленными. Не факт, что Вы сами сумеете понять этот мир после его создания. 

А потому - правила в студию :)  

 
hoz:
 Неужели никто этого не реализовывал. Не думаю что тут очень сложно. Просто у меня опыта ещё не так много, не совсем понимаю как формализовать данный момент ...

Привет, Виктор! Для открытия Бая должно быть (Аск - ема), проверь! Если я правильно понял!?
 

Здаров, Борис. Да я так и сделал, кстати. Выше уже кидал, продублирую код:

//+-------------------------------------------------------------------------------------+
//| Получение значений МА на указанном баре                                             |
//+-------------------------------------------------------------------------------------+
double GetMA(int index, int maPeriod)
{
   return (iMA(NULL, i_TF, maPeriod, 0, MODE_EMA, MODE_CLOSE, index));
}
//+-------------------------------------------------------------------------------------+
//| Имеет ли место отскок?                                                              |
//+-------------------------------------------------------------------------------------+
void IsRebound(int crossDir[], bool& returnSign[])
{
   for (int i = 0; i < 4; i++)
   {
      if (crossDir[i] == CROSS_NO)
         continue;

      returnSign[i] = false;
      double ema = GetMA(1, g_maPeriod[i]);

      if (crossDir[i] == CROSS_UP)
      {
         if (ND(MathAbs(ema - Ask)) <= i_thresholdFromMa * pt) // ..зазор между ценой покупки и машки, <= i_thresholdFromMa..
         {
            returnSign[i] = true;

     Alert("CROSS_UP");
         }
      }
      if (crossDir[i] == CROSS_DN)
      {
         if (ND(MathAbs(ema - Bid)) <= i_thresholdFromMa * pt) // ..зазор между ценой продажи и машки, <= i_thresholdFromMa..
         {
            returnSign[i] = true;
       Alert("CROSS_DN");
         }
      }
   }
}

 Но не работает так, почему-то..

 
hoz:

Здаров, Борис. Да я так и сделал, кстати. Выше уже кидал, продублирую код:

 Но не работает так, почему-то..


Попробуй наоборот: (Аск - ема) и оптимизируй эту i_thresholdFromMa!
 
borilunad:

Попробуй наоборот: (Аск - ема)

А разницы то какая? :)
 
hoz:

А разницы то какая? :)

Что должно быть выше? Если Аск в случае Бая, то ема в случае Селла. Соответственно: Если ема в случае Бая, то Бид в случае Селла! Для симметрии, по логике. Не будешь же вычитать из меньшего большее!
 
borilunad:

Что должно быть выше? Если Аск в случае Бая, то ема в случае Селла. Соответственно: Если ема в случае Бая, то Бид в случае Селла! Для симметрии, по логике. Не будешь же вычитать из меньшего большее!
Так не важно. Я же абсолютное значение возвращаю, по модулю через MathAbs..
Причина обращения: