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

    11 lipca 2009 o 17:28

    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

    13 lipca 2009 o 18:52 | Odwiedź stronę WWW autora

    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

    14 lipca 2009 o 21:24

    a czy mógłbyś mi podpowiedzieć jak mniej więcej mógłbym to napisać? Naprawdę dziękuje!!

  • luktom

    16 lipca 2009 o 20:52 | Odwiedź stronę WWW autora

    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

    16 lipca 2009 o 22:36

    dziękuje....:)