Sprawdzenie aktualizacji wykresu
Sprawdzenie aktualizacji wykresu
Używam Ea do zarządzania stopem/modyfikacją i zdarza się gdy uruchamiam platformę na drugi dzień,
gdzie kurs wiadomo jest już kilka świeczek dalej i zanim się uaktualni to bywa że Ea swoją pracę już wykona,
niestety czasami na złych wartościach, na starszych świeczkach,
w większości przypadków gdy kurs idzie w dobrą stronę nie sprawia to kłopotu bo następuje zaraz korekta, jednak są sytuacje w których jest to kłopotliwe.
W zwązku z tym może ma ktoś jakiś patent jak zapsać warunek aby najpierw została sprawdzona aktualizacja wykresu?
Wiem można dać sleep i uśpić na chwilę wykonywanie kodu w Ea dając tym samym czas na uaktualnienie jednak wolałbym sprawdzać to warunkiem.
Pozdrawiam
gdzie kurs wiadomo jest już kilka świeczek dalej i zanim się uaktualni to bywa że Ea swoją pracę już wykona,
niestety czasami na złych wartościach, na starszych świeczkach,
w większości przypadków gdy kurs idzie w dobrą stronę nie sprawia to kłopotu bo następuje zaraz korekta, jednak są sytuacje w których jest to kłopotliwe.
W zwązku z tym może ma ktoś jakiś patent jak zapsać warunek aby najpierw została sprawdzona aktualizacja wykresu?
Wiem można dać sleep i uśpić na chwilę wykonywanie kodu w Ea dając tym samym czas na uaktualnienie jednak wolałbym sprawdzać to warunkiem.
Pozdrawiam
Re: Sprawdzenie aktualizacji wykresu
Może spróbuj taki warunek:
Oczywiście musisz oprócz minuty sprawdzić rok, miesiąc, dzień i godzinę w ten sam sposób. To co napisałem to tylko pseudokod, nie mam teraz dostępu do kompilatora, ale myślę, że wiesz co miałem na myśli 
Kod: Zaznacz cały
if (TimeMinute(Time[0]) - TimeMinute(TimeCurrent())) <= 1) {
// twoj warunek
}

Re: Sprawdzenie aktualizacji wykresu
Można również tak:
Nie trzeba sprawdzać dodatkowych warunków. Dodatkowo to rozwiązanie pozwala na zabezpieczenie się w pewnych sytuacjach przed zwisami platformy u brokera. Oczywiście kod działa na standardowych TF
Kod: Zaznacz cały
if (Time[0] - Time[1] == Period()*60) {
//--- Kod EA
}
Re: Sprawdzenie aktualizacji wykresu
Dzięki sprawdzę jak nadarzy się okazja, póki co czekam też na weryfikację kodu który wymyśliłem,
dzisiaj problemów nie było, jednak nie mam pewności czy będzie się to sprawdzało, może ktoś zerknie czy ma to ręce i nogi?
dzisiaj problemów nie było, jednak nie mam pewności czy będzie się to sprawdzało, może ktoś zerknie czy ma to ręce i nogi?
Kod: Zaznacz cały
bool sprAktualizacji()
{
static int BarTime = 0;
bool Refresh = false;
if( BarTime == iTime(NULL, 0, 0) ) //gdy iTime zwraca 0 historia niezaładowana, warunek niespełniony (false)
{
Refresh = false;
}
else
{
Refresh = true;
}
return (Refresh);
}
Re: Sprawdzenie aktualizacji wykresu
Jest ok, ale jeśli chcesz polegać na poważnie na EA to musisz uwzględnić fakt, że serwer może mieć problem w postaci np braku danych na którymś TF. Należy wiec sprawdzić czy czas na świecy się zmienił i czy jest aktualna świeca a wykres nie wisi. Bo odłącz net.. wywal eksperymentalnie 2 ostatnie świece i masz true. Cena się zmienia.. ticki lecą, a wykresu nie ma.. zamulone serwery AM tak miewały. Czyli dla danego TimeCurrent() musi odpowiadać każdy TF.
Masz też opcję przelecenia po TFach funkcją, która doładuje dane, a później wykona robotę w pierwszych tickach po uruchomieniu mt4. Albo 1razowy sleep na ten przypadek.
Masz też opcję przelecenia po TFach funkcją, która doładuje dane, a później wykona robotę w pierwszych tickach po uruchomieniu mt4. Albo 1razowy sleep na ten przypadek.
R.E.P.T.I.L.E. - Robotic Electronic Person Trained for Infiltration and Logical Exploration (off-line,only e-mail)
Re: Sprawdzenie aktualizacji wykresu
Jest źle, bo nie podstawiasz nic pod zmienną BarTime. Poza tym uwagi reptile są słuszne. Lepszy jest mój sposób. Możesz tym sposobem sprawdzać nie tylko ostatnią ale kilka świec do tyłu.kris007 pisze:Dzięki sprawdzę jak nadarzy się okazja, póki co czekam też na weryfikację kodu który wymyśliłem,
dzisiaj problemów nie było, jednak nie mam pewności czy będzie się to sprawdzało, może ktoś zerknie czy ma to ręce i nogi?Kod: Zaznacz cały
bool sprAktualizacji() { static int BarTime = 0; bool Refresh = false; if( BarTime == iTime(NULL, 0, 0) ) //gdy iTime zwraca 0 historia niezaładowana, warunek niespełniony (false) { Refresh = false; } else { Refresh = true; } return (Refresh); }
Re: Sprawdzenie aktualizacji wykresu
BarTime == iTime(NULL, 0, 0) to warunek więc ok.
datetime iTime( string symbol, int timeframe, int shift)
Returns Time value for the bar of indicated symbol with timeframe and shift. If local history is empty (not loaded), function returns 0.
For the current chart, the information about bars open times is in the predefined array named Time[].
Chodzi o to, że świeca Time[0] nie zawsze może być aktualna w funkcji start() .
W sumie mówimy abstrakcyjnie o problemie.. bo nie wiemy gdzie dokłądnie problem.. nie aktualne HL świecy czy kurs..
Bo może RefreshRates() wystarczy?
datetime iTime( string symbol, int timeframe, int shift)
Returns Time value for the bar of indicated symbol with timeframe and shift. If local history is empty (not loaded), function returns 0.
For the current chart, the information about bars open times is in the predefined array named Time[].
Chodzi o to, że świeca Time[0] nie zawsze może być aktualna w funkcji start() .
W sumie mówimy abstrakcyjnie o problemie.. bo nie wiemy gdzie dokłądnie problem.. nie aktualne HL świecy czy kurs..
Bo może RefreshRates() wystarczy?
R.E.P.T.I.L.E. - Robotic Electronic Person Trained for Infiltration and Logical Exploration (off-line,only e-mail)
Re: Sprawdzenie aktualizacji wykresu
Ale BarTime jest zawsze równy 0, więc jest źle.reptile pisze:BarTime == iTime(NULL, 0, 0) to warunek więc ok.
Przeczytaj uważnie reptile. iTime() dla bieżącego symbolu i TF zwraca dokładnie to samo co Time[]reptile pisze:For the current chart, the information about bars open times is in the predefined array named Time[].
Jasne że nie musi być aktualna, ale od tego robi się na początku start() warunek:reptile pisze:Chodzi o to, że świeca Time[0] nie zawsze może być aktualna w funkcji start() .
Kod: Zaznacz cały
while(IsTradeAllowed() == false) Sleep(10);
RefreshRates();
Re: Sprawdzenie aktualizacji wykresu
Ok, nie neguję, dlatego się radzęz6yszko pisze: Jest źle, bo nie podstawiasz nic pod zmienną BarTime. Poza tym uwagi reptile są słuszne. Lepszy jest mój sposób. Możesz tym sposobem sprawdzać nie tylko ostatnią ale kilka świec do tyłu.

ale przecież iTime zwraca zero tylko wtedy gdy brak historii i warunek wtedy zwróci false, gdy się uaktualni iTime nie będzie równe 0 i zwróci true.z6yszko pisze:Ale BarTime jest zawsze równy 0, więc jest źle.reptile pisze:BarTime == iTime(NULL, 0, 0) to warunek więc ok.
Re: Sprawdzenie aktualizacji wykresu
A no fakt, przyznaję racje. Czyli jeśli to problem nie cen lecz świecy to trzeba by porównać z kilku innych instrumentów święce.. albo mieć cały analizator danych.. i takie to z tym mt4.. nie mówiąc przecież o tym, że dane cen z market window mogą być inne niż na wykresie. Czyli trzeba symulować adekwatny czas dla iBarShift. To formalnie nie ma takiej opcji by Time[] i iTime dało 0. Prawda? Bo intuicja mi podpowiadała tak jak Crisowi pewnie.. że mt4 sprawdzi.. hehe
Kod: Zaznacz cały
#property copyright "reptile"
#property link "reptile"
#include <stdlib.mqh>
#include <WinUser32.mqh>
//+------------------------------------------------------------------+
int start(){
datetime dane = iTime(NULL,0,1);
string dane_ = TimeToStr(dane);
datetime xdane = Time[1];
string xdane_ = TimeToStr(xdane);
Print(dane," ",xdane);
Print(dane_," ",xdane_);
return(0);
}
//+------------------------------------------------------------------+
R.E.P.T.I.L.E. - Robotic Electronic Person Trained for Infiltration and Logical Exploration (off-line,only e-mail)