Баг в функции OrderSend() ? - страница 5

 
Sepulca:

static работает 100 %. Вот вам тест:

И результаты:

 

 


 Ну так и у меня всё работает так же как и работало до того... Никаких изменений! У меня даже функция открытия нового бара есть:

bool isNewBar()
   {
      static datetime lastBar;                                   // Задаём переменную для времени открытия последнего бара
      datetime currBar;                                                  // Задаём переменную для времени открытия текущего бара
      currBar = iTime(Symbol(),PERIOD_M1,0);          // Находим время открытия текущего бара
      if(lastBar!=currBar)                                               // Если время открытия последнего бара не равно времени открытия текущего бара, то...
         {
            lastBar=currBar;
            return(true);
         }
      return(false);
   }

 

которая тоже работает исправно. Поэтому тут уже пошли придирки к моему коду необоснованные. А вопрос был вообще корректный. Видимо тестер глючный, вот и показания кривые. На М5 как-то чище, на М15 тоже Н1 уже абы-как.

 
hoz:


 Ну так и у меня всё работает так же как и работало до того... Никаких изменений! У меня даже функция открытия нового бара есть:

 

которая тоже работает исправно. Поэтому тут уже пошли придирки к моему коду необоснованные. А вопрос был вообще корректный. Видимо тестер глючный, вот и показания кривые. На М5 как-то чище, на М15 тоже Н1 уже абы-как.


Сразу, навскидку, я бы посоветовал бы написать if(lastBar<currBar), хотя это вряд-ли это что-то изменит. Дальше пройдусь по Вашим сообщениям, может ещё что скажу.
 
hoz:


 Ну так и у меня всё работает так же как и работало до того... Никаких изменений! У меня даже функция открытия нового бара есть:

 

которая тоже работает исправно. Поэтому тут уже пошли придирки к моему коду необоснованные. А вопрос был вообще корректный. Видимо тестер глючный, вот и показания кривые. На М5 как-то чище, на М15 тоже Н1 уже абы-как.



Может поможет. Ваша функция start() немного переработанная. Глубоко не вникал, но все же:

int start()
{
   fastMa = iMA(NULL,i_TF,i_fastMaPeriod,0,MODE_EMA,MODE_CLOSE,1);
   slowMa = iMA(NULL,i_TF,i_slowMaPeriod,0,MODE_EMA,MODE_CLOSE,1);
   
 /*  Print("Bid = ", Bid);
   Print("Ask = ", Ask);
   Print("fastMa = ", fastMa);
   Print("i_thresholdFromMa * pt = ", i_thresholdFromMa * pt);
   */
// Отслеживание открытия нового бара
   static datetime lastBarTime = iTime(NULL, 0, 1));    // Время проведения последних рассчётов, изначально принимаем предыдущий бар
   
   if (lastBarTime < iTime(NULL, 0, 0))         // Если случился новый бар
 // Рассчёт сигнала 
    {
     if("На этом баре случилось что-то, что вынуждает ждать следуещего бара")
      {
       ..........// Выполняем действия открытия/закрытия или что-то там ещё...
       lastBarTime = iTime(NULL, 0, 0);              // На текущем баре все необходимые действия выполнены, ждём следуещего бара..
      }
     else
      {
       "Ничего не случилось, ждем до следуещего тика"
      }
    }
                                       // .. успешно выполнены
  return (0);
}
 
Sepulca:



Может поможет. Ваша функция start() немного переработанная. Глубоко не вникал, но все же:

 


 Ну тут время рассчётов берётся с предыдущего бара. Это как-то не логично. Нам же нужен текущий бар.
 
PapaYozh:

лично я ниразу не сталкивался с неработающим статиком.

 

вот пример эксперта, хотите проверяйте на графике:

 

1. Запускаете эксперт.

2. Меняете ТФ.

3. Убеждаетесь, что сс не стало вновь равным 20.

 
hoz:


 Ну так и у меня всё работает так же как и работало до того... Никаких изменений! У меня даже функция открытия нового бара есть:

 

которая тоже работает исправно. Поэтому тут уже пошли придирки к моему коду необоснованные. А вопрос был вообще корректный. Видимо тестер глючный, вот и показания кривые. На М5 как-то чище, на М15 тоже Н1 уже абы-как.

Применительно к Вашей ситуации:

Время инициализировалось один раз - при запуске советника, больше оно инициализироваться не будет, поэтому при переключении с М1 на D1 Вам придется ждать обновления графика примерно сутки :(

 
tara:

Применительно к Вашей ситуации:

Время инициализировалось один раз - при запуске советника, больше оно инициализироваться не будет, поэтому при переключении с М1 на D1 Вам придется ждать обновления графика примерно сутки :(



 Эксперт то работает на канкретном ТФ. С чего бы то вдруг мне понадобится переключать его ?
 
tara:

3. Убеждаетесь, что сс не стало вновь равным 20.

Это документированная особенность работы советников.
 
TheXpert:
Это документированная особенность работы советников.


А что тогда Static? Это, скорее - Fatalic...


Кстати,- где документированная?

 
hoz:

 Эксперт то работает на канкретном ТФ. С чего бы то вдруг мне понадобится переключать его ?

Можете просто поменять какой-нибудь параметр. Реакция будет только после первого тика нового бара на установленном ТФ.

Да Вы ведь сами недоумевали,- почему на старших ТФ работа советника необъяснима:)

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