Odświeżenie wszystkich wykresów.

O jezykach programowania w platformach i nie tylko.
dulf
Pasjonat
Pasjonat
Posty: 399
Rejestracja: 24 kwie 2010, 15:13

Odświeżenie wszystkich wykresów.

Nieprzeczytany post autor: dulf »

Witam.
Istnieje jakiś sposób aby po uruchomieniu platformy MT4 odświeżyć wszystkie załadowane wykresy ,np skrypt .
Korzystam ze wskaźników które odświeżają się co bar danego tf :

Kod: Zaznacz cały

//-------------------------------------------------------------------+
bool IsNewBar(int period)
{ 
  static int prevTime;  

  if(iTime(NULL,period,0)!=prevTime)
  {  
   prevTime=iTime(NULL,period,0);
   return(true);  
  } 
  return(false); 
 }
//-------------------------------------------------------------------+

//-------------------------------------------------------------------+ 
int start()
{
 
  if(IsNewBar(Period()))
  {
         //kod
  }
}
Niestety to działa ale w trakcie , zaraz po uruchomieniu platformy mam stan wskaźników bliżej nieokreślony , chyba z poprzedniej sesji.Muszę więc ręcznie "odświeżyć" ,przez załadowanie na nowo szablonu lub zmianę TF .Da się to jakoś zautomatyzować ?
Nie spiesz się , zawsze zdążysz stracić .

Awatar użytkownika
Esco
Przyjaciel Forum
Przyjaciel Forum
Posty: 2603
Rejestracja: 11 kwie 2010, 20:56

Nieprzeczytany post autor: Esco »

Chyba tylko robiąc inicjalizacje w init().

Awatar użytkownika
reptile
Maniak
Maniak
Posty: 2799
Rejestracja: 13 gru 2008, 13:48

Nieprzeczytany post autor: reptile »

RefreschRates() ?
R.E.P.T.I.L.E. - Robotic Electronic Person Trained for Infiltration and Logical Exploration (off-line,only e-mail)

Awatar użytkownika
mike_05
Maniak
Maniak
Posty: 1668
Rejestracja: 02 wrz 2010, 11:55

Nieprzeczytany post autor: mike_05 »

Jeżeli chcesz odnieść sukces, naucz się cenić ludzi.

dulf
Pasjonat
Pasjonat
Posty: 399
Rejestracja: 24 kwie 2010, 15:13

Nieprzeczytany post autor: dulf »

Może i rates ,tylko gdzie[?],nie wiem czy ta funkcja działa we wskaźnikach. Chwilowo zmieniłem trochę kod IsNewBar .
Rano się okaże , musi trochę świeczek przelecieć.
Nie spiesz się , zawsze zdążysz stracić .

dulf
Pasjonat
Pasjonat
Posty: 399
Rejestracja: 24 kwie 2010, 15:13

Nieprzeczytany post autor: dulf »

Fajny ten ticker ale nie poradzi.
Sprawa wygląda chyba tak - po uruchomieniu MT4 zaczyna ładować wskaźniki zanim uzupełni dane .
Funkcja IsNewBar wykona się i w kolejnych wywołaniach start zwróci false .
Pierwsze wywołanie jednak jest w czasie gdy brakuje pełnych danych dla wykresu ,więc wskaźnik wymaluje to co jest z historii .
Nie jest to problem np. na M5 bo wskaźnik odświeży się na kolejnej świecy ,ale już na większych TF trzeba "przeładować" wykres .
Nie pasuje mi odświeżanie wszystkich wykresów co 5 min bo wskaźniki zawierają dużo obliczeń i strasznie muli gdy wszystkie się dorwą do odświeżania.
Tak że nic nie wymyśliłem konkretnego .
Nie spiesz się , zawsze zdążysz stracić .

Awatar użytkownika
CoVal
Gaduła
Gaduła
Posty: 320
Rejestracja: 06 paź 2005, 22:45

Nieprzeczytany post autor: CoVal »

no to dopisz w funkcji isNewBar() zapisywanie do zmiennych globalnych aktualnej godziny za kazdym razem kiedy zwraca true przy pomocy
GlobalVariableSet();

i porownuj ja z aktualna godzina razem ze sprawdzaniem funkcji IsNewBar()
jesli uruchamiasz mt4 po raz pierwszy, to najprawdopodobniej godzina bedzie wieksza niz poprzednia zapisana w globalsach godzina....

Awatar użytkownika
reptile
Maniak
Maniak
Posty: 2799
Rejestracja: 13 gru 2008, 13:48

Nieprzeczytany post autor: reptile »

Po uruchomieniu moze.. warto dac sleep lub if Empty_value wait() sleep
Nie wiem jaki problem z przeladowaniem wykresu.. w sensie nei ma danych?
Jesli tak mozna przeleciec TF przez iClose dane sie odswieża
Po uruchomieniu mt4 sa tez "szybkie" sztuczne ticki moga namacic.
R.E.P.T.I.L.E. - Robotic Electronic Person Trained for Infiltration and Logical Exploration (off-line,only e-mail)

dulf
Pasjonat
Pasjonat
Posty: 399
Rejestracja: 24 kwie 2010, 15:13

Nieprzeczytany post autor: dulf »

@CoVal
Spróbuję z tą godziną, ale to mi wygląda na podobne zachowanie z Time[0] ,czas bieżący będzie prawidłowy tak jak Time[0] ,ale zostanie luka w danych poprzedzających Time[0] .
@reptil
Organoleptycznie to wygląda tak .
1.Uruchamiam MT4 .
2.Na wykresie mam już naniesione poziomy które rysuje wskaźnik,ale są to obiekty prawdopodobnie zapamiętane gdy zamykałem MT4.
3.Brakuje nowych świeczek więc platforma "dociąga dane" ,bieżąca świeca (cena) już jest ale brakuje w środku pomiędzy starą sesją ,a aktualną świecą.
4.Stare poziomy mi zostają ,czyli mam na starcie Time[0] uaktualnione , ale jest luka pomiędzy Time[poprzednia _sesja] ,a Time[0] .
Wniosek taki że wykona się IsNewBar(){Time[0] != prev_time Ok .} ,ale zanim pojawią się Time[poprzednia _sesja] do Time[1] i reszta danych będzie ona już nie aktywna - wskaźnik nie odświeży poziomów .
Nie spiesz się , zawsze zdążysz stracić .

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

dulf pisze:Niestety to działa ale w trakcie , zaraz po uruchomieniu platformy mam stan wskaźników bliżej nieokreślony , chyba z poprzedniej sesji.Muszę więc ręcznie "odświeżyć" ,przez załadowanie na nowo szablonu lub zmianę TF .Da się to jakoś zautomatyzować ?

do Init() dodaj linie wywołującą funkcję start:

Kod: Zaznacz cały

start();
??
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

ODPOWIEDZ