Подскажите в отношении Timeframe

 

Я написал этот код


#property copyright "Copyright 2017, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"

#property strict



extern int    Dig      = 2;

extern double Risk     = 0.02;

extern int    sl       = 250;

extern int    tilt     = 60;

extern int    bpt      = 15;

extern int    bpc1     = 50;

extern int    bpc2     = 5;

extern int    m1       = 101;

extern int    m2       = 102;


void OnTick()

  {

//---

   int s = 0, s1 = 0, t = bpt;

double h1, h2, l1, l2;

for(int i = bpc2; i < bpc1; i++)

  {

  h1 = High[iHighest(Symbol(), t, MODE_HIGH, i + bpc2, 1)];

  l1 = Low[iLowest(Symbol(), t, MODE_LOW, i + bpc2, 1)];

  h2 = High[iHighest(Symbol(), t, MODE_HIGH, bpc2 + 1, i + bpc2)];

  l2 = Low[iLowest(Symbol(), t, MODE_LOW, bpc2 + 1, i + bpc2)];

 

  if((h2 - l2)/(h1 - l1) > 2)

    {

     {

     if(Bid - h1 > (h1 - l1)/10)

     {

     s = 1;

     break;

     }

     if(l1 - Ask > (h1 - l1)/10)

     {

     s = -1;

     break;

     }

     }

   }

 }

 Comment(h1,"   ",l1,"   ",h2,"   ",l2,"   ",s);

  }

но проблема в том что при внесении параметра bpt (timeframe)  и при изменении TF в терминале

меняются показания при этом не меняя bpt.  

Что сделать чтобы это не происходило, потому что получается какой бы ТФ не выставлял для функции 

берется ТФ на котором открыт терминал.

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Советники: SAR trading v2.0 SAR trading v2.0: Торговые...
 
kastaneda:

Я написал этот код


#property copyright "Copyright 2017, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"

#property strict



extern int    Dig      = 2;

extern double Risk     = 0.02;

extern int    sl       = 250;

extern int    tilt     = 60;

extern int    bpt      = 15;

extern int    bpc1     = 50;

extern int    bpc2     = 5;

extern int    m1       = 101;

extern int    m2       = 102;


void OnTick()

  {

//---

   int s = 0, s1 = 0, t = bpt;

double h1, h2, l1, l2;

for(int i = bpc2; i < bpc1; i++)

  {

  h1 = High[iHighest(Symbol(), t, MODE_HIGH, i + bpc2, 1)];

  l1 = Low[iLowest(Symbol(), t, MODE_LOW, i + bpc2, 1)];

  h2 = High[iHighest(Symbol(), t, MODE_HIGH, bpc2 + 1, i + bpc2)];

  l2 = Low[iLowest(Symbol(), t, MODE_LOW, bpc2 + 1, i + bpc2)];

 

  if((h2 - l2)/(h1 - l1) > 2)

    {

     {

     if(Bid - h1 > (h1 - l1)/10)

     {

     s = 1;

     break;

     }

     if(l1 - Ask > (h1 - l1)/10)

     {

     s = -1;

     break;

     }

     }

   }

 }

 Comment(h1,"   ",l1,"   ",h2,"   ",l2,"   ",s);

  }

но проблема в том что при внесении параметра bpt (timeframe)  и при изменении TF в терминале

меняются показания при этом не меняя bpt.  

Что сделать чтобы это не происходило, потому что получается какой бы ТФ не выставлял для функции 

берется ТФ на котором открыт терминал.


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

и каждый тик у тебя происходит такое t = bpt;

в t заносится 15.


 

Так я о том же (что должно не менятся),

а выдаваемые данные меняются при

изменении ТФ в терминале не смотря

на то что bpt остается без изменения.

 
kastaneda:

Так я о том же (что должно не менятся),

а выдаваемые данные меняются при

изменении ТФ в терминале не смотря

на то что bpt остается без изменения.


с чего ты взял, что они у тебя меняются?

пропиши вот так и посмотри значения

 h1 = High[iHighest(Symbol(), t, MODE_HIGH, i + bpc2, 1)];
  Alert(t);

  l1 = Low[iLowest(Symbol(), t, MODE_LOW, i + bpc2, 1)];

  h2 = High[iHighest(Symbol(), t, MODE_HIGH, bpc2 + 1, i + bpc2)];

  l2 = Low[iLowest(Symbol(), t, MODE_LOW, bpc2 + 1, i + bpc2)];
 
kastanedaЯ написал этот код
     if(Bid - h1 > (h1 - l1)/10)
     {
     s = 1;
     break;
     }
Скажите пожалуйста, а что у Вас здесь break; делает? Может быть проще
     if(Bid - h1 > (h1 - l1)/10)  s = 1;
 

Почему тогда переменные вставленные

в Comment меняются?

 
kastaneda:  Почему тогда переменные вставленные в Comment меняются?

Это у Вас советник или скрипт. Прикрепите весь файл, попробую. И скажите, как Вы его используете!!!

 
Выбросил все лишнее - получилось так
#property strict

extern int    tilt     = 60;
extern int    bpt      = 15;
extern int    bpc1     = 50;
extern int    bpc2     = 5;

void OnTick()
{
   int s = 0, s1 = 0, t = bpt;
   double h1, h2, l1, l2;
   for(int i = bpc2; i < bpc1; i++)
   {
      h1 = High[iHighest(Symbol(), t, MODE_HIGH, i + bpc2, 1)];
      l1 = Low[iLowest(Symbol(), t, MODE_LOW, i + bpc2, 1)];
      h2 = High[iHighest(Symbol(), t, MODE_HIGH, bpc2 + 1, i + bpc2)];
      l2 = Low[iLowest(Symbol(), t, MODE_LOW, bpc2 + 1, i + bpc2)];

      if((h2 - l2)/(h1 - l1) > 2)
      {
         if(Bid - h1 > (h1 - l1)/10) s = 1;
         if(l1 - Ask > (h1 - l1)/10) s = -1;
      }
   }
  Comment(h1,"   ",l1,"   ",h2,"   ",l2,"   ",s);
}

Если Вы согласны, что это эквивалентно Вашему коду - начну проверять

 
Нашел в чем дело
#property strict

void start()
{
   int t = 15, bpc2=10;
   double h1 = iHigh(_Symbol,t,iHighest(Symbol(), t, MODE_HIGH, bpc2, 1));
   Comment(h1);
}
High - это таймфрейм, на котором сидит программа. Если другой (постоянный) - надо iHigh
 

прикреплен

Файлы:
64kkkjh.mq4  8 kb
 
kastaneda:  прикреплен

Так уже написал в чем дело ...

High - это таймфрейм, на котором сидит программа. Если другой (постоянный) - надо iHigh

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