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

 

Необходимо знать наименьший и наибольший фрактал за последние n баров, что тут написано неправильно? Плиз хелп!

   for (ii = 0; ii = n; ii++)
      {
         i = iFractals(NULL, 0, MODE_LOWER, ii);
         if (i < StopLos_L) StopLos_L = i;
         i = iFractals(NULL, 0, MODE_UPPER, ii);
         if (i > StopLos_H) StopLos_H = i;
      }

 
solnce600:

Я решил пойти другим как мне кажется более простым путем.

Не удалять отложенный ордер - а выставлять отложенный ордер только если не закончилась пятиминутная свеча

Т.е. устанавливать отложенный ордер при исполнении двух условий. При исполнении первого условия

- я проверял ордер устанавливается

Конечно, устанавливается, ведь это условие истинно ВСЕГДА, оно просто не может быть ложным. Так как означает, что нулевой бар вообще существует.

А как оформить второе условие,т.е установить отложенный ордер только если не истекли 5 минут.  if (---------- && ?????????)

Сформулируйте, пожалуйста, четко условие словами. Пока непонятно, хотите ли вы выставить отложку по началу новой свечки или как?
 
belozad:

Необходимо знать наименьший и наибольший фрактал за последние n баров, что тут написано неправильно? Плиз хелп!

   for (ii = 0; ii = n; ii++)
      {
         i = iFractals(NULL, 0, MODE_LOWER, ii);
         if (i < StopLos_L) StopLos_L = i;
         i = iFractals(NULL, 0, MODE_UPPER, ii);
         if (i > StopLos_H) StopLos_H = i;
      }



переменная i как объявлена, можно взглянуть?
 
alsu:

переменная i как объявлена, можно взглянуть?


int ii;

double i;

 
belozad:


Должно работать так:

   int ii;
   double i;
   double StopLos_L,StopLos_H;

   for (ii = 0; ii <= n; ii++)
      {
         i = iFractals(NULL, 0, MODE_LOWER, ii);
         if (i < StopLos_L || ii==0) StopLos_L = i;
         i = iFractals(NULL, 0, MODE_UPPER, ii);
         if (i > StopLos_H || ii==0) StopLos_H = i;
      } 
 
alsu:

Должно работать так:


блин очевидно же
ii <=n


alsu - многие и многие благодарности =)

 
artmedia70:
Можно

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

https://www.mql5.com/ru/code/7835 Только это индикатор. В советнике надо объекты использовать
 
alsu:

Конечно, устанавливается, ведь это условие истинно ВСЕГДА, оно просто не может быть ложным. Так как означает, что нулевой бар вообще существует.

Сформулируйте, пожалуйста, четко условие словами. Пока непонятно, хотите ли вы выставить отложку по началу новой свечки или как?

Спасибо.Извините я немного запутался.В данном случае я должен  установить не отложенный ордер ,а рыночный ордер по цене Ореn[0]+30 пунктов.

Но установить рыночный ордер только в период от начала образования нулевой свечи до появления следующей за ней свечи.Т.е. применительно к пятиминуткам  только в течении 5 минут после

открытия пятиминутной свечи.Т.е. не установка рыночного ордера в течении 5 минут, по моему замыслу ,будет эквивалентна отмене отложенного ордера если он не откроется в течении 5 минут.

Как мне написать второе условие?

И правильно ли я оформил цену открытия рыночного ордера?

Спасибо.

 int start()

  {
 double Price=Open[0]+300*Point;        
 double SL=Price-300*Point;     
 double TP=Price+150*Point;
 if (Time[0]&& ???????)                         
 int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP );
 
solnce600:

Спасибо.Извините я немного запутался.В данном случае я должен  установить не отложенный ордер ,а рыночный ордер по цене Ореn[0]+30 пунктов.

Но установить рыночный ордер только в период от начала образования нулевой свечи до появления следующей за ней свечи.Т.е. применительно к пятиминуткам  только в течении 5 минут после

открытия пятиминутной свечи.Т.е. не установка рыночного ордера в течении 5 минут, по моему замыслу ,будет эквивалентна отмене отложенного ордера если он не откроется в течении 5 минут.

Как мне написать второе условие?

И правильно ли я оформил цену открытия рыночного ордера?

Спасибо.


Все, теперь понял. Если цена на текущем баре дошла до Open[0] + 30, то открываемся. Если бар закончился, то Open[0] изменился, и уровень открытия смещается соответствено. В рынке должна быть только одна сделка, правильно?

Тогда так:

int start()

{

 double Price=Open[0]+300*Point;        
 double SL=NormalizeDouble (Price-300*Point, Digits);         
 double TP=NormalizeDouble (Price+150*Point, Digits);    
 
 if (OrdesTotal()==0 && Close[0]>=Price)                         
    int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP );

}

Отслеживать новый бар не надо, так как при его формировании система автоматически пропишет в Open[0] новое значение, а значит, и новый уровень рассчитается правильно. Обратите внимание, что сделка BUY открывается по текущей цене Ask, а закрывается (TP и SL) по Bid. Кроме того, необходимо нормализовать значения цен.

Причина обращения: