Обновить окно графика - страница 2

 

Проблема" может заключаться в том, что индикаторы используют ограничение, т.е. функцию IndicatorCounted()
для того, чтобы не перерисовывать бары.

Смена таймфрейма сбрасывает это, а WindowRedraw() - нет. Ее функция заключается в перерисовке объектов, а не индексов индикаторов.

void WindowRedraw( )
Перерисовывает текущий график принудительно. Обычно используется после изменения свойств объектов.

Я знаю, что обычно я пересчитываю 1000 баров или около того для большинства вещей, которые я пишу, и это
запускается нажатием правой кнопки мыши Refresh.

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

 
Есть ли у кого-нибудь подсказка, что происходит? Почему я не вижу никакого эффекта после использованияWindowRedraw()?

Спасибо большое,
 

Вы "плохо читаете"?

 
Привет, Фи,

Спустя почти два месяца я получил твой последний ответ. Я просто не знаю, как я пропустил это. У меня все еще проблемы с "перерисовкой моего индикатора". теперь я попытаюсь решить проблему с помощью информации, которую вы мне дали. спасибо вам большое,,,,
 

Покажите свой код...

 
brspMA:
Привет, Фи,

только что, спустя почти два месяца, я получил твой последний ответ. Я просто не знаю, как я пропустил это. У меня все еще проблемы с "перерисовкой индикатора". теперь я попытаюсь решить проблему с помощью информации, которую вы мне дали. спасибо вам большое,
.
Я прочитал эту тему и думаю, что в вашем коде есть проблема => функция WindowRefresh() вам не поможет.
 
привет,

я предполагаю, что я пытаюсь сбросить индикатор, чтобы заставить его перерисовать все снова с самого начала!? моя проблема в том, что я использую функцию, которая изменяет прошлые данные в функции новых данных, и в результате мой график становится массой с течением времени. Мне нужно периодически перерисовывать весь индикатор. в последнее время я меняю таймфрейм, так что когда я возвращаюсь к тому таймфрейму, на котором я был, я получаю чистые окна графика (перерисованные). вот схема моего кода:

.
int start(){
   int limit;
   int counted_bars=IndicatorCounted();
   //---- check for possible errors
   if(counted_bars<0) return(-1);
   //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   if (limit>GV) limit = GV;
   //---- main loop
   for(int i=limit; i>=1; i--){
 
 
{calculates the variable and feed the buffers}
 
return(0);}
спасибо большое,,,,
 
вставьте 2 строки в ваш код

int start(){
   int limit;
   int counted_bars=IndicatorCounted();
   //---- check for possible errors
   if(counted_bars<0) return(-1);
   //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
 
   double startTime=GetTickCount();
   if (limit>GV) limit = GV;
   //---- main loop
   for(int i=limit; i>=1; i--){
 
 
{calculates the variable and feed the buffers}
 
   double finishTime=GetTickCount();
   Print("Calculation time is ",(finishTime-startTime)/1000.0," seconds");
return(0);}
 

Что такое ГВ?

В последнее время я делаю примерно следующее:

for( int i = MathMax(WindowFirstVisibleBar(), Bars-IndicatorCounted()); i>= 0; i--){

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

 
phy:

Что такое ГВ?

В последнее время я делаю примерно следующее:

for( int i = MathMax(WindowFirstVisibleBar(), Bars-IndicatorCounted()); i>= 0; i--){

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


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

Ребята, вы просто супер!!! Я реализую этот код сегодня днем.

for( int i = MathMax(WindowFirstVisibleBar(), Bars-IndicatorCounted()); i>= 0; i--){
Спасибо за вашу щедрость,
Причина обращения: