10 свечей, после закрытия позиции

 

Добрый день!

Уважаемые программисты, помогите пожалуйста решить одну задачу, ТЗ:

После того, как происходит закрытие позиции, на протяжении 10 последующих свечей идёт поиск падающей свечи.

То, есть: если из 10 свечей найдена хотя бы одна падающая свеча, то выходим из цикла. 



Вот часть кода, но неправильно работает.


if ((OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS, MODE_HISTORY)==true))

{

int C=OrderCloseTime();

int h=iBarShift(Symbol3,PERIOD_M1,C);

double g=(Close[1]-Open[1])/Point;

}

Alert("КОЛ-ВО СВЕЧЕЙ ПОСЛЕ ЗАКРЫТИЯ",h);

Alert("НАПРАВЛЕНИЕ СВЕЧЕЙ ПОСЛЕ ЗАКРЫТИЯ",g);


if ((h>1)&&(h<=10))

{

if (g>=0)

{

Alert("РАНОВА-ТО");

return(-1);

}

}

metka1();

}


return(0);

}

int metka1()

{

int send1=OrderSend(Symbol3,OP_BUY,Lots,Ask,3,Bid-30*Point,Bid+30*Point);

return(0);

}



Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
ProfessorU:

Добрый день!

Уважаемые программисты, помогите пожалуйста решить одну задачу, ТЗ:

После того, как происходит закрытие позиции, на протяжении 10 последующих свечей идёт поиск падающей свечи.

То, есть: если из 10 свечей найдена хотя бы одна падающая свеча, то выходим из цикла. 

Изучаем первоисточники:

а так же вставляем на форуме код правильно 

отредактируйте пожалуйста своё первое сообщение:

 
Nikolai Semko:

Изучаем первоисточники:

а так же вставляем на форуме код правильно 

отредактируйте пожалуйста своё первое сообщение:

Пытался 

While и for

while( h>=10)     

{

if (g>=0) код ищет растущую свечу НЕ ОТ ЗАКРЫТИЯ ПОЗИЦИИ, А ОТ НАЧАЛА ЗАПУСКА. Я что только не перепробывал.

{

{

Alert("РАНОВА-ТО");

return(-1);

}

}

 

Не надо здесь никакого цикла. На каждом тике или раз на бар выполнять проверку.

Про выход из какого цикла идет разговор? Сформулируйте задачу, что бы понятно было, тогда и сами поймете.

 
ProfessorU:

Пытался 

While и for

while( h>=10)     

{

if (g>=0) код ищет растущую свечу НЕ ОТ ЗАКРЫТИЯ ПОЗИЦИИ, А ОТ НАЧАЛА ЗАПУСКА. Я что только не перепробывал.

{

{

Alert("РАНОВА-ТО");

return(-1);

}

}

еще раз - вставляйте код в своих сообщениях правильно.
Вот вам один из вариантов ответа:
   int i=0;
   double g;
   do
     {
      g=(Close[i]-Open[i]);
      i++;
     }
   while(g>=0 && i<10);

 
Dmitry Fedoseev:

Не надо здесь никакого цикла. На каждом тике или раз на бар выполнять проверку.

Про выход из какого цикла идет разговор? Сформулируйте задачу, что бы понятно было, тогда и сами поймете.


Пример проверки на каждом баре привести можете?

 
ProfessorU:


Пример проверки на каждом баре привести можете?

static datetime lastTime=0;
if(lastTime!=iTime(NULL,0,0)){
   // сделать что-то
   lastTime=iTime(NULL,0,0);
}
 
Nikolai Semko:
еще раз - вставляйте код в своих сообщениях правильно.
Вот вам один из вариантов ответа:

Проверил, изменил переменную g>=-50 
Все- ровно открывает. На 8 ой свече. ( падающей свечи размером -50 не было)
 
ProfessorU:
Проверил, изменил переменную g>=-50 
Все- ровно открывает. На 8 ой свече. ( падающей свечи размером -50 не было)
почему минус 50?
while (g>=-50) означает, что цикл выполняется пока g не станет меньше чем минус пятьдесят.
 
Nikolai Semko:
почему минус 50?
while (g>=-50) означает, что цикл выполняется пока g не станет меньше чем минус пятьдесят.
Да, именно (-50)
До тех пор пока нет падающей свечи, размером меньше или равно (-50) цикл не должен прекращаться в течении 10 свечей от закрытия позиции

Когда испытал: после закрытия позиции не было свечи размером меньше (-50) , а код все ровно завершил цикл.
 
ProfessorU:


Ошибка как минимум тут:

int C=OrderCloseTime();

Это не int, а datetime

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