Кто может такое объяснить?

 

Вот скрипт.

#property show_inputs 

extern int DNEY=8, MINUTY=30;
int a, Vhod;
double Dney_Fakt;
bool Polnoch;

int start()  {

a=1440*DNEY;
while (!Polnoch)
 {
  a--;
  if(TimeDay(Time[a])!=TimeDay(Time[a-1])) {Polnoch=true; a--;}                       // стартуем с полуночи 
 } 
Dney_Fakt=MathCeil(a/1440.0);
while(a>0)
 { 
  while (TimeMinute(Time[a])<MINUTY && TimeHour(Time[a])==0) {a--;}                   // сдвигаемся по графику вправо на бар действий  
  Vhod++;  Comment("\n"," Vhod  ",Vhod,"     Дата  ",TimeDay(Time[a])); Sleep(777);   // действия 
  while (TimeDay(Time[a])==TimeDay(Time[a-1]) && a>0) {a--;}                          // двигаемся к очередной полуночи 
  a--;
 }       
Comment("\n"," Входов  ",Vhod,"     Dney_Fakt  ",Dney_Fakt); Sleep(5555); Comment("");

return(0);  }

По идее, сколько Dney_Fakt, столько и Vhod. Но ...

При увеличении DNEY от 1 и до ..., появляются лишние Vhod.

На разных терминалах при разных значениях DNEY.

 
Количество минут в дне может быть меньше, чем 1440. Количество рабочих дней в неделе в терминале у разных брокеров тоже может быть разным даже без праздников. У кого 5 дней у кого 6.
 
hhohholl:

Вот скрипт.

По идее, сколько Dney_Fakt, столько и Vhod. Но ...

При увеличении DNEY от 1 и до ..., появляются лишние Vhod.

На разных терминалах при разных значениях DNEY.




А если кинуть на H1, то вообще весело..

По поводу скрипта - он еще и воскресенья (?) посчитал у меня за "рабочие", хотя там всего по 2 часа

 
Zhunko:
Количество минут в дне может быть меньше, чем 1440. Количество рабочих дней в неделе в терминале у разных брокеров тоже может быть разным даже без праздников. У кого 5 дней у кого 6.

Так первым while выбирается погрешность по 1440.

А дальше от полуночи до полуночи по фактическому числу баров.

На терминале Интеграл банка лишний Vhod при DNEY==2, сегодня и вчера. (Выходных нет)

На Укргазбанке при DNEY==9.

Т.е. за первые 8 дней выходные точно были.

 
ilunga:

А если кинуть на H1, то вообще весело..

По поводу скрипта - он еще и воскресенья (?) посчитал у меня за "рабочие", хотя там всего по 2 часа


Ну-у, вообще-то скрипт для минуток.

Это видно из

a=1440*DNEY;
 
hhohholl:

Ну-у, вообще-то скрипт для минуток.

Это видно из

это да.

Но де-факто у вас получится, что Dney_Fakt считает количество суток (плюс-минус один заборный столб), содержащих 1440 минут

а цикл считает количество появлений полуночи за то же число баров.

Если есть дыры в истории (самый глобальный вариант - есть только половина каждых суток - от 0 до 12 часов), то насчитаете вы суток больше

 
ilunga:

это да.

Но де-факто у вас получится, что Dney_Fakt считает количество суток (плюс-минус один заборный столб), содержащих 1440 минут

а цикл считает количество появлений полуночи за то же число баров.

Если есть дыры в истории (самый глобальный вариант - есть только половина каждых суток - от 0 до 12 часов), то насчитаете вы суток больше


1440*DNEY заведомо больше чем фактическое количество баров за DNEY.

Первый while выбирает разницу между ними.

Dney_Fakt=MathCeil(a/1440.0);

Частное в скобках заведомо меньше DNEY, и данным выражением показано, что обрабатывается

столько дней, сколько заказано. Никаких "(плюс-минус один заборный столб)".

Далее, отсчет идет от полуночи до полуночи, независимо от числа баров в сутках. Один день - один вход.

Вход делается на ближайшем последующем после 00-30 баре.(второй while)

После чего третий while переносит все действия в следующие сутки.

 
hhohholl:

1440*DNEY заведомо больше чем фактическое количество баров за DNEY.

Первый while выбирает разницу между ними.

Частное в скобках заведомо меньше DNEY, и данным выражением показано, что обрабатывается

столько дней, сколько заказано. Никаких "(плюс-минус один заборный столб)".

Далее, отсчет идет от полуночи до полуночи, независимо от числа баров в сутках. Один день - один вход.

Вход делается на ближайшем последующем после 00-30 баре.(второй while)

После чего третий while переносит все действия в следующие сутки.


Вот именно, независимо от числа баров в сутках. попробуйте вывести сколько баров в каждых сутках (прямо в цикле), сразу будет все ясно
 
ilunga:
Вот именно, независимо от числа баров в сутках. попробуйте вывести сколько баров в каждых сутках (прямо в цикле), сразу будет все ясно


Вот пример:

Код:

#property show_inputs 

extern int DNEY=8, MINUTY=30;
int a, Vhod;
double Dney_Fakt;
bool Polnoch;

int last_a;

int start()
{
   a=1440*DNEY;
   while (!Polnoch)
   {
      a--;
      if(TimeDay(Time[a])!=TimeDay(Time[a-1])) {Polnoch=true; a--;}                       // стартуем с полуночи 
   }
   Dney_Fakt=MathCeil(a/1440.0);
   while(a>0)
   {
      last_a = a;
      while (TimeMinute(Time[a])<MINUTY && TimeHour(Time[a])==0) {a--;}                   // сдвигаемся по графику вправо на бар действий  
      Vhod++;
      Print("\n"," Vhod  ",Vhod,"     Дата  ",TimeDay(Time[a]));
      Sleep(777);   // действия 
      while (TimeDay(Time[a])==TimeDay(Time[a-1]) && a>0) {a--;}                          // двигаемся к очередной полуночи 
      Print("    разница (минут) ", (last_a - a));
      a--;
   }       
   Comment("\n"," Входов  ",Vhod,"     Dney_Fakt  ",Dney_Fakt); Sleep(5555); Comment("");
   return(0);
}


Результат:

17:11:21 test GBPUSD,M1 inputs: DNEY=8; MINUTY=30;
17:11:21 test GBPUSD,M1:  Vhod  1     Дата  14
17:11:22 test GBPUSD,M1:     разница (минут) 1316
17:11:22 test GBPUSD,M1:  Vhod  2     Дата  16
17:11:23 test GBPUSD,M1:     разница (минут) 91
17:11:23 test GBPUSD,M1:  Vhod  3     Дата  17
17:11:23 test GBPUSD,M1:     разница (минут) 1409
17:11:23 test GBPUSD,M1:  Vhod  4     Дата  18
17:11:24 test GBPUSD,M1:     разница (минут) 1419
17:11:24 test GBPUSD,M1:  Vhod  5     Дата  19
17:11:25 test GBPUSD,M1:     разница (минут) 1415
17:11:25 test GBPUSD,M1:  Vhod  6     Дата  20
17:11:26 test GBPUSD,M1:     разница (минут) 1416
17:11:26 test GBPUSD,M1:  Vhod  7     Дата  21
17:11:26 test GBPUSD,M1:     разница (минут) 1312
17:11:26 test GBPUSD,M1:  Vhod  8     Дата  23
17:11:27 test GBPUSD,M1:     разница (минут) 75
17:11:27 test GBPUSD,M1:  Vhod  9     Дата  24
17:11:28 test GBPUSD,M1:     разница (минут) 1415
17:11:28 test GBPUSD,M1:  Vhod  10     Дата  25
17:11:29 test GBPUSD,M1:     разница (минут) 901
 
ilunga:
Вот именно, независимо от числа баров в сутках. попробуйте вывести сколько баров в каждых сутках (прямо в цикле), сразу будет все ясно



А для чего мне эта цифра? Что будет ясно?

Вы, возможно, не поняли.

НЕЗАВИСИМО от количества баров в сутках, вход на ближайшем справа к 00-30 баре. Один раз в день. И переход в другие сутки.

Разве в коде написано что-то другое?

Откуда лишние входы?

 
hhohholl:

А для чего мне эта цифра? Что будет ясно?

Вы, возможно, не поняли.

НЕЗАВИСИМО от количества баров в сутках, вход на ближайшем справа к 00-30 баре. Один раз в день. И переход в другие сутки.

Разве в коде написано что-то другое?

Откуда лишние входы?

Итак, давайте по порядку.

0) сначала мы берем a = 1440*DNEY баров

да/нет?

1) в переменной Dney_Fakt будет количество кусков по 1440 баров (+округление по полночи) за "а" баров

да/нет?

2) в переменной Vhod будет количество переходов через 00-30 за "а" баров

да/нет?


Если вы считаете, что все 3 ответа "да", то продолжаем:

итак, Dney_Fakt посчитало 8 дней, "а" примерно равно 11520 (8*1440)

и пошел цикл...

1. первый день все хорошо, он целый. 1440 баров

2. потом (внезапно) не хватает минутных баров и длина суток всего 1300 минутных баров, ок

3. Далее (еще более внезапно) воскресенье (!), состоящее из 2 часов (120 баров)

4-9. потом 5 нормальных целых дней по 1440 баров.

итого, мы посчитали все те же 11520 баров, но входов уже 9. Появился "лишний" за счет очень короткого воскресенья и обрыва истории на два с небольшим часа

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