Как сделать такое, алгоритм фильтра по дневному бару.

 
Мне нужно сделать фильтры по дневному бару как это реализовать в коде?

А) Фильтры для запрета торговли
1) Вычисляем середину постоянную дневного бара.
Середина бара = ((хай+лоу)*0.5) 
2) Вычисляем мертвую зону, при нахождении цены в этой зоне, будет означать запрет на открытие ордера.
(середина бара +5*Point && середина бара -5*Point) фильтр 1 //здесь получили мертвую зону + -5 пунктов от середины бара, этот фильтр для бая и селл
3) Вычисляем еще две мертвые зоны при нахождении цены в этой зоне ордера выставлятся не будут.
(хай-10*Point) фильтр 2 // для бая
(лоу+10*Point) фильтр 3 // для села

Б) Фильтры для открытия позиций в направлении
1) Вычисляем середину между серединой бара и хай, и серединой бара и лоу.
середина хая = ((середина бара + хай)*0.5)
середина лоу = ((середина бара + лоу)*0.5)
2) Зона разрешения покупок (бая)
(выше середины хая можно покупать, выше середины лоу разрешено покупать до середины бара) //фильтр 4 для бая
3) Зона разрешения продаж (села)
(ниже середины лоу разрешено продавать, ниже середины хая разрешено продавать до середины бара) // фильтр 5 для селла
Хотел прописать его в код сам, но у меня не получается с логикой я пока слаб в этом....
 
1Rakso писал(а) >>

Хотел прописать его в код сам, но у меня не получается с логикой я пока слаб в этом.

Реализовать это не сложно, только, что именно Вы хотите получить? Индикатор или что-то иное?

 
PapaYozh >>:

Реализовать это не сложно, только, что именно Вы хотите получить? Индикатор или что-то иное?

Это условие хочу вставить в свой скальпер по отложкам. На счет индикатора не уверен, но можно и индикатор была бы хорошая вещь для фильтрации, если вывести изменяемые значения пунктов(Point) во внешних переменных.

 
1Rakso писал(а) >>

Это условие хочу вставить в свой скальпер по отложкам. На счет индикатора не уверен, но можно и индикатор была бы хорошая вещь для фильтрации, если вывести изменяемые значения пунктов(Point) во внешних переменных.

Если я нигде не ошибся, то можно написать так:

   int sh;
   int fl; // fl = 1 - BUY_ENABLE, -1 - SELL_ENABLE
   int deadzone=10; // мёртвая зона
   double Hi,Lo;
   double Mdl,MdlH,MdlL;
   
   sh = iBarShift( NULL, PERIOD_D1, TimeCurrent(), true );
   if ( sh == -1 )
   {
      fl = 0;
   }
   else
   {
      Hi = iHigh( NULL, PERIOD_D1, sh );
      Lo = iLow( NULL, PERIOD_D1, sh );
      Mdl = ( Hi + Lo ) / 2.0;
      MdlH = ( Hi + Mdl ) / 2.0;
      MdlL = ( Mdl + Lo ) / 2.0;
      if ( ( Bid > Hi - deadzone * Point )
           || ( ( Bid < Mdl + 0.5 * deadzone * Point ) && ( Bid > Mdl - 0.5 * deadzone * Point ) )
           || ( Bid < Lo + deadzone * Point )
         )
      {
         // цена в мёртвой зоне
         fl = 0;
      }
      else if ( ( Bid > MdlH ) || ( Bid < Mdl && Bid > MdlL ) )
         fl = 1;
      else if ( ( Bid < MdlL ) || ( Bid > Mdl && Bid < MdlH ) )
         fl = -1;
   }
 

Можно и так наверно

   extern int       Filtr1=5;
   extern int       Filtr2=10;
   double l   = MarketInfo(Symbol(),MODE_LOW);
   double h   = MarketInfo(Symbol(),MODE_HIGH);
   double p   = MarketInfo(Symbol(),MODE_POINT);
   double b   = MarketInfo(Symbol(),MODE_BID);
   
   double m = (h+l)/2;
   double f1buy = m+Filtr1*p;
   double f1sell = m-Filtr1*p;
   double f2buy = h-Filtr2*p;
   double f2sell = l+Filtr2*p;
   
   if (b > f1buy  && b < f2buy || b > (m+l)/2 && b < m) { // Можно покупать
      Ваш код для покупки
   } 
   if (b < f1sell && b > f2sell || b < (m+h)/2 && b > m) { // Можно продавать
      Ваш код для продажи
   }
 
PapaYozh >>:

Если я нигде не ошибся, то можно написать так:

leman >>:

Можно и так наверно

Спасибо огромное, попробую оба варианта!)

 
1Rakso писал(а) >>

Спасибо огромное, попробую оба варианта!)

При использовании моего варианта не забудте перед выставлением ордера BUY проверить переменную fl на равентсво 1, а перед выставлением SELL - на равенство -1.

 
PapaYozh >>:

При использовании моего варианта не забудте перед выставлением ордера BUY проверить переменную fl на равентсво 1, а перед выставлением SELL - на равенство -1.

if ( fl>0){


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

==============================================================

может упростить тогда просто оставить фильтр поиска двойного дна через switch?

или это наверно еще сложнее....


Как сделать, что бы не открывал ордера бай когда цена приближается к хаю на расстояние 10 пунктов на ТФ Н4, D1, W1, MN.

Для селла когда цена приблизилась к лоу на расстояние 10 пунктов на одном из ТФ Н4, D1, W1, MN.

чтобы была проверка всех выше перечисленных тф на обнаружение нахождения цены близко к лоу для селл, и к хаю для бай

 
1Rakso писал(а) >>

if ( fl>0){

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

На каком таймфрейме стоит советник?

 
PapaYozh >>:

На каком таймфрейме стоит советник?

на М5

 
1Rakso писал(а) >>

на М5

Мой вариант предполагает наличие истории D1.

Вариант от leman предполагает, что советник стоит на D1.

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