Lepsze komentarze na wykresie
Kategoria: Repozytorium kodu MQL4 |
5 lipca 2009 o 00:21 |
Odpowiedzi: 5 |
Permalink
Nie trzeba długo programować w MQLu, aby zacząć narzekać na domyślny mechanizm nanoszenia komentarzy na wykres. W przypadku większej ilości danych, które chcemy wyświetlić na wykresie eleganckim posunięciem będzie stworzenie sobie do tego celu funkcji pomocniczych.
Poniżej prezentuję przykładowe dwie funkcję, których sam używam w projektach:
string writeBuffer="";
void write(string text1="",string text2="") {
if(text2!="") {
writeBuffer=StringConcatenate(writeBuffer,text1,": ",text2,"\n");
} else {
writeBuffer=StringConcatenate(writeBuffer,text1,"\n");
}
}
void writeOut() {
Comment(writeBuffer);
writeBuffer="";
}
Teraz krótko: jak tego używać i co dzięki temu zyskujemy. Użycie jest bardzo proste i elastyczne, prześledźmy je na kodzie poniżej:
extern int sl=80; // przykładowy parametr EA
int start() {
write(); // dodajemy pustą linię
write("Test wyświetlania komentarzy"); // dodajemy prosty tekst
write("Stop loss",sl); // dodajemy linię z wyświetlaniem zmiennej
f();
writeOut();
}
void f() {
write("Funkcja f()");
}
// oczywiście na końcu doklejamy kod z pierwszego listingu
// zawierający definicję zmiennej i funkcji
Rozwiązanie z wykorzystaniem funkcji write i writeOut jest dobre, ponieważ:
- Taki kod wygląda znacznie ładniej…
- …i zajmuje o wiele mniej niż doklejanie kolejnych wartości do zmiennej
- Odpadają nam problemy związane z koniecznością pamiętania o zasięgach zmiennych, a także problemy z wyświetlaniem komentarzy z wywołanych funkcji
- Znacznie upraszcza drukowanie zmiennych (nie trzeba się bawić w ręczne doklejanie np znaku “:”)
Tylko nie zapomnijcie dać writeOut() na końcu funkcji start ;)
5 odpowiedzi do wpisu "Lepsze komentarze na wykresie"
aaaa
a czy mógłby mi ktoś przysłać na mój email adrina_paz@o2.pl przykład jak zrobić aby średnie były liczone w pewnym przedziale czasowym, tzn. dajmy za przykład USA, kontrakty są notowane prawie przez całą dobę i średnie np 15 dniowa ciągle się zmienia, chociaż sesji nie ma i wiele razy zdarza się tak, że na zkońćzeniu sesji średnia 15 dniowa jest nad 45 a na przed otwrciem sesji na kotraktach średnia 15 jest pod 45 dniową ( ponieważ notowane przez całą noc i południe kotrakty ciągle się zmieniały ) a mnie interesuje, aby napisać taką funkcje, któa zwracałaby średnią typu smoothed liczoną w godzinach 15.30 - 22, tak aby odzwierciedlała tylko i wyłącznie notowania w czasie trwania sesji... Z góy dziękuje, naprawdę jest to dla mnie sprawa priorytetowa, więc bardzo porszę oszybką odpowiedź Pozdrawiam
luktom
Musisz to ręcznie policzyć - tzn. nie ma gotowej funkcji, która by to zrobiła, więc musisz ręcznie dla każdej świeczki sprawdzać czy się kwalifikuje do podanego przedziału czasowego i dla świeczek spełniających warunek czasu liczyć wg formuły dla smoothed moving average.
aaaa
a czy mógłbyś mi podpowiedzieć jak mniej więcej mógłbym to napisać? Naprawdę dziękuje!!
luktom
Wybrać pętlą for dane które spełniają kryteria czasu, a następnie na tychże danych zastosować funkcję liczącą średnie z tablicy (iMAOnArray).
aaaa
dziękuje....:)