Проблемы, обнаруженные при обратном тестировании, и невозможность найти первопричину! - страница 4

 
GumRai:

позволит производить вычисления при первом проходе на закрытых барах, отличные от тех, что он делает на текущем баре.

На первом тике нового бара он будет делать следующее.

На последующих тиках того же бара он будет вычислять

Что является своего рода компаундированием

Уважаемый GumRai,

Текущий бар, Bar[0] необходим для перерисовки. То есть тема посвящена вопросу о том, что исторические бары наблюдались с перерисовкой, может быть Bar[8],...Bar[3],..., или Bar[1].

Вы можете видеть, что это всего лишь около 10 строк кода для основного содержимого индикатора.

Тем не менее, нам все еще трудно найти причину перерисовки исторических баров.

Это так странно, и я не понимаю, как исторические бары могут быть перерисованы с помощью этого кода.

 

Как я уже сказал, индикатор пересчитывает bar[0] каждый тик, используя значение, которое было рассчитано в предыдущем тике того же бара.

Пока работает тестер, индикатор будет вычислять в псевдореальном времени, даже если индикатор не находится на графике.

После завершения работы тестера индикатор добавляется на график и, как мне кажется, не учитывает все тики, так как рассчитывается только один раз на бар.

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

 
jollydragon:

Уважаемый ffoorr, я не могу открыть страницы и не могу зайти на сайт, www.forex-tsd.com. Возможно, у меня проблемы с настройками интернета.

Пожалуйста, давайте сосредоточимся на моем коде. Это всего лишь около 10 строк кода для основного содержания.

Однако нам все еще так трудно найти первопричину перерисовки исторических баров.


уменьшите масштаб, чтобы получить доступ к номеру страницы на TSD,


индикатор лучше

 
GumRai:

Как я уже сказал, индикатор пересчитывает bar[0] каждый тик, используя значение, которое было рассчитано в предыдущем тике того же бара.

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

GumRai, пожалуйста, обратитесь к моим предыдущим сообщениям:

. Это не проблема для bar[0] перерисовываться по мере необходимости.

. Для этой темы, тема или вопрос именно в том, почему исторические бары слева от bar[0] были перекрашены и это не ожидаемо. Я это уже наблюдал на графиках и скриншоты уже прикладывал.

Уважаемые все, пожалуйста, давайте сосредоточимся на моих кодах и будем вместе совершенствоваться, докапываясь до первопричины. Мне не нужен какой-то лучший индикатор, а хочется узнать первопричину!

Спасибо за понимание и поддержку.

 

Похоже, вы не понимаете, что я вам говорю.

Я не знаю, потому ли это, что я плохо объясняю, или вы просто не читаете мои сообщения должным образом.

Когда вы повторно инициализируете индикатор, весь индикатор пересчитывается на основе одного тика на бар, в то время как в реальном времени он основан на нескольких тиках в одном баре.

Поэтому, если индикатор строится в реальном времени, а затем повторно инициализируется, будут различия.

 
GumRai:

Похоже, вы не понимаете, что я вам говорю.

Я не знаю, потому ли это, что я плохо объясняю, или вы просто не читаете мои сообщения должным образом.

Когда вы повторно инициализируете индикатор, весь индикатор пересчитывается на основе одного тика на бар, в то время как в реальном времени он основан на нескольких тиках в одном баре.

Поэтому, если индикатор строится в реальном времени, а затем повторно инициализируется, будут различия.

Извините, что говорю, английский не мой родной язык.

Независимо от того, рисуется ли он при повторной инициализации или в реальном времени, каждый исторический бар рассчитывается на основе последнего тика.

Поэтому исторический бар должен быть заморожен таким же образом. Правильно? Как можно заметить разницу или перерисовку, если наблюдать за индикатором на живом графике с M1 в течение периода?

 
Похоже, это не простой вопрос, который не под силу многим специалистам по кодированию.
 

Мне кажется, что это простой вопрос, просто вы не понимаете ответа.

Попробуйте приложенный код, в котором, я надеюсь, вы сможете увидеть, что происходит.

Я только что изменил цикл рисования индикатора на

   for(i=limit-1; i>=0; i--)
     {
      ExtBuffer1[i]=1.1*Fish1;
      Fish1=ExtBuffer1[i];
      if(Fish1>=EMPTY_VALUE)
         Fish1=1;
     }

и начальное значение для Fish1

Fish1=0.00001;

Запустите его на графике M1 с регулярными тиками. Вы увидите формирование различных пиков.

Переинициализируйте индикатор, и вы увидите, что все эти пики исчезнут.

Также, если у вас не очень хорошее соединение с интернетом, и индикатор пропустит один бар, весь индикатор будет пересчитан, поэтому пики исчезнут.

Вы видите, почему?

Файлы:
 
GumRai:

Мне кажется, что это простой вопрос, просто вы не понимаете ответа.

Попробуйте приложенный код, в котором, я надеюсь, вы сможете увидеть, что происходит.

Я только что изменил цикл рисования индикатора на

и начальное значение для Fish1

Запустите его на графике M1 с регулярными тиками. Вы увидите формирование различных пиков.

Переинициализируйте индикатор, и вы увидите, что все эти пики исчезнут.

Также, если у вас не очень хорошее соединение с интернетом, и индикатор пропустит один бар, весь индикатор будет пересчитан, поэтому пики исчезнут.

Вы видите, почему?

Уважаемый GumRai,

Похоже, вы уловили мою мысль.

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

Однако я все еще не могу понять, почему. Именно поэтому я не могу найти первопричину в моем перерисовывающемся индикаторе.

. Согласно модифицированному вами индикатору, как я понимаю, он должен рисовать экспоненциальную линию. Почему он рисует пики с интервалами? Это потому что есть "пустое значение"?

. Почему расположение пиков меняется после обновления?

. Я все еще не могу увидеть исчезновение пиков. Как "переинициализировать" его?

До обновления:

После обновления:

 
jollydragon: Однако я все еще не могу понять, почему. Именно поэтому я не могу найти первопричину в моем индикаторе перерисовки.

   for(i=limit-1; i>=0; i--)
     {
      ExtBuffer1[i]=1.1*Fish1;
      Fish1=ExtBuffer1[i];
      if(Fish1>=EMPTY_VALUE)
         Fish1=1;
     }

Для каждой итерации (кроме первой) Fish1 - это значение предыдущего элемента буфера, но вы не инициализируете его в ExtBuffer1[limit].

Итак, для начальной итерации (когда limit == bars) вы устанавливаете ExtBuffer1[0] = 1.1*ExtBuffer1[1] .

Но для последующих тиков (когда limit == 1) вы устанавливаете ExtBuffer1[0] = 1.1*0.00001 .

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