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

 
PapaYozh >>:

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

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

1) История D1 имеется, может я его не так вставляю.....

2) Понятно но его вариант мне не подойдет............

 

Вот этот вариант можно сделать?


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

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

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

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

1) История D1 имеется, может я его не так вставляю.....

Вы где проверяли? В тестере или на Demo?

Чтобы это работало в тестере, нужен несколько иной код. В этом варианте происходит "заглядывание в будущее".

 
PapaYozh >>:

Вы где проверяли? В тестере или на Demo?

Чтобы это работало в тестере, нужен несколько иной код. В этом варианте происходит "заглядывание в будущее".

В тетсере, я его пока еще не вешал на онлайн пока через тестер гоняю, мне нужен что бы в тестере и на демке работал.... Иначе как его проверить по истории, а можно просто сделать чтобы искал хаи и лоу как описал чуть выше, мой советник именно там, и попадает всегда так как является скальпером.(

 
PapaYozh писал(а) >>

Вы где проверяли? В тестере или на Demo?

Чтобы это работало в тестере, нужен несколько иной код. В этом варианте происходит "заглядывание в будущее".

Я чуть позже поправлю код.

 
PapaYozh >>:

Я чуть позже поправлю код.

Спасибо.

 

Вот исправленный вариант кода:

   int sh;
   int fl; // fl = 1 - BUY_ENABLE, -1 - SELL_ENABLE
   int deadzone=10; // мёртвая зона
   int shD=0;
   double Hi,Lo;
   int CurD=0;
   double Mdl,MdlH,MdlL;
   
   CurD = DayOfYear();
   for ( shD=1; CurD==TimeDayOfYear(Time[shD]); shD++ )
   {}
   
   sh = iHighest( NULL, 0, MODE_HIGH, shD, 0);
   Hi = iHigh( NULL, 0, sh );
   
   sh = iLowest( NULL, 0, MODE_LOW, shD, 0);
   Lo = iLow( NULL, 0, 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 ) )
   {
      // операции BUY разрешены
      fl = 1;
   }
   else if ( ( Bid < MdlL ) || ( Bid > Mdl && Bid < MdlH ) )
   {
      // операции SELL разрешены
      fl = -1;
   }
И маленький эксперт для теста (переменная deadzone задана как extern):
Файлы:
test_dz_1.mq4  4 kb
 
PapaYozh >>:

Вот исправленный вариант кода:

И маленький эксперт для теста (переменная deadzone задана как extern):

Да то что я хотел прямо все видно, пока смотрю в визуально, не плохой фильтр... Берет значение с дневной свечи только не много пока не разобрался как он это делает вроде стоит значение периода нулевое, ну думаю разберусь, спасибо PapaYozh профессиональная работа!


Да из него индюк хороший выйдет, для новичков само то будет, чтобы не входили в рынок там где нельзя это делать... - ну это уже другая история.

Еще раз благадарю за проделанную работу, респект Вам от меня!

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

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

Период "0" означает, что используется период текущего графика. Соответственно, он использует только те данные, которые есть в окне.

--

Удачи.