pętla while we wskaźniku

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

pętla while we wskaźniku

Nieprzeczytany post autor: personov »

Chciałbym aby wskaźnik działał w pętli i odświeżał przykładowy zegar nie co tick, ale ciągle.
W prostym kodzie wpisałem sobie w Comment() sekundy i milisekundy, abym mógł zobaczyć czy d\ziała ciągle, a nie co tick.
Co dziwne : działa to ale jako EA, a jako wskaźnik już nie i zawiesza całe MT4.
Czy taki sposób z pętlą działa tylko w EA ? Czy jest jakiś sposób, aby zrobić to we wskaźniku ?
Oto kod EA :

Kod: Zaznacz cały

void init()
{}
void deinit(){Comment("");}
///////////////////////////////////////////////////////////////////////////////////////////////////
void start() 
{ 
   while(IsExpertEnabled() && !IsStopped()) 
   { RefreshRates(); 
      start2();
     Sleep(50); 
   } 
} 
////////////////////////////////////////////////////////////////////////////////////
void start2()
{       Comment(
           "\n"+"Sec "+Seconds()
          +"\n"+"mSec "+GetTickCount()
          );
      
}
Solą życia jest kasa.

z6yszko
Gaduła
Gaduła
Posty: 266
Rejestracja: 17 sty 2011, 10:09

Re: pętla while we wskaźniku

Nieprzeczytany post autor: z6yszko »

Spróbuj coś takiego:

Kod: Zaznacz cały

extern int TimerInterval=50;

//...

int init()
  {
	if (IsTesting() == false) timer();

   return(0);
  }

int deinit()
  {
//----

//----
   return(0);
}

void timer() {
	if (TimerInterval == 0) return(0);
	while(true) {
		Sleep(TimerInterval);

		if(IsStopped() || !IsExpertEnabled()) {
			return;
		}

		RefreshRates();
		start();
	}
}
Jednak zwróć uwagę, że wskaźnik będzie działać asynchronicznie, jednak samo wyświetlanie na wykresie działa prawdopodobnie synchronicznie. Czyli wykres będzie się odświeżał i tak po każdym tiku.

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Re: pętla while we wskaźniku

Nieprzeczytany post autor: personov »

No niestety w dalszym ciągu zawiesza całe MT4. Oczywiście jako wskaźnik.
Solą życia jest kasa.

z6yszko
Gaduła
Gaduła
Posty: 266
Rejestracja: 17 sty 2011, 10:09

Re: pętla while we wskaźniku

Nieprzeczytany post autor: z6yszko »

Bo zapętliłeś wskaźnik. Skasuj pętlę w starcie bo jest niepotrzebna.

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Re: pętla while we wskaźniku

Nieprzeczytany post autor: personov »

W start() nic nie zapętlałem. Zgodnie z Twoim zapisem wygląda to tak :

Kod: Zaznacz cały

#property indicator_chart_window
extern int TimerInterval=50;
void init()
{if (IsTesting() == false) timer();return(0);}
void deinit(){Comment("");}
///////////////////////////////////////////////////////////////////////////////////////////////////
void timer() {
   if (TimerInterval == 0) return(0);
   while(true) {
      Sleep(TimerInterval);
      if(IsStopped() || !IsExpertEnabled()) {
         return;
      }
      RefreshRates();
      start();
   }
}
////////////////////////////////////////////////////////////////////////////////////
void start()
{       Comment(
           "\n"+"Sec "+Seconds()
          +"\n"+"mSec "+GetTickCount()
          );    
}
Czyli działa to jako wskaźnik i zawiesza MT4, nie uruchamia się. Ale kompiluje się OK.
Solą życia jest kasa.

z6yszko
Gaduła
Gaduła
Posty: 266
Rejestracja: 17 sty 2011, 10:09

Re: pętla while we wskaźniku

Nieprzeczytany post autor: z6yszko »

U mnie działa. Załączam, dzisiaj nie mam czasu sprawdzać czy czymś się różnią.
Spróbuj z moim plikiem.

Pozdrawiam, do przyszłego roku :)
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Re: pętla while we wskaźniku

Nieprzeczytany post autor: personov »

No niestety - nawet ten Twój kod nie uruchamia się tylko od razu zawiesza MT4. Próbowałem u trzech różnych brokerów. Nie wiem co to może być.
Solą życia jest kasa.

ODPOWIEDZ