Histogram Indior Question
Strona 1 z 2 12 OstatniOstatni
Pokaż wyniki od 1 do 10 z 15

Wątek: Histogram Indior Question

  1. #1
    Cześć,
    Czy ktoś mógłby mi pomóc, publikując bezwzględny minimalny kod wymagany do wykreślenia wartości jako histogramu? (Wartość, nad którą pracuję, to na przykład różnica między pipami Pair1 i Pair2).

    Robiłem to, kradnąc kawałki tu i tam, ale z fragmentów, które skopiowałem z innych wskaźników, nie mogę wymyślić, jak określić punkt 0, z którego paski histogramu mają pochodzić, ani liczby z powrotem pręty do obliczenia. Chciałbym też mieć ustalony zakres /- dla histogramu.

    Dziękuję bardzo.
    Jan

  2. #2
    Cześć John, Hope, to przybliża cię o krok. Zamiast czegoś bardziej użytecznego, po prostu kreśli położenie zamknięcia na każdej świecy, jako procent wysokości świecy. Zakres podokna wskaźnika jest ustawiany przez: #property indior_minimum -10 #property indior_maximum 110 Levels (linie przerywane, opcjonalnie) narysowane za pomocą: #property indior_level1 100 #property indior_level2 0 Liczba pasków histogramu ustawiana jest przez pętlę: for (int i = 0; ilt; Bars; i ) {0 = prawy (najnowszy) pasek na wykresie Bary = predefiniowana zmienna podająca liczbę słupków na wykresie Dawid Wstawiony kod/ -------------- -------------------------------------------------- - /| Histogram sample.mq4 |/ ----------------------------------------------- ------------------- #property indior_separate_window #property indior_minimum -10 #property indior_maximum 110 #property indior_level1 100 #property indior_level2 0 #property indior_buffers 1 double HistBuffer # 91; # 93;/ ----------------------------------------------- ------------------- int init () {// ---------------------- -------------------------------------------- SetIndexBuffer (0, HistBuffer ); SetIndexStyle (0, DRAW_HISTOGRAM, STYLE_SOLID, 3, czerwony); IndiorDigits (0); return (0); }/ ---------------------------------------------- -------------------- int deinit () {// --------------------- --------------------------------------------- return (0) ; }/ ---------------------------------------------- -------------------- int start () {// --------------------- --------------------------------------------- dla (int i = 0; ilt; Bars; i ) {if (High # 91; i # 93; -Low # 91; i # 93; gt; 0) HistBuffer # 91; i # 93; = 100 * (Zamknij # 91; i # 93; -Low # 91; i # 93(High # 91; i # 93; -Low # 91; i # 93; } return (0); }

  3. #3
    Cześć David, Wielkie dzięki! To na pewno mi pomoże na mojej drodze. Wszystko co najlepsze, John

  4. #4
    Ok, coś w tym działa. Są jednak pewne problemy. Najpierw pozwól mi wyjaśnić, co próbuję zrobić. Chcę porównać różnicę między parami 1 i 2 (w tym przypadku EURUSD i GBPUSD). Używam ceny otwarcia dnia jako punktu zerowego. Tak więc bierzemy otwartą cenę w wysokości 1.6120 i odejmujemy obecną cenę 1.6100 i widzimy, że w tym momencie cena spadła o 20 pipsów. Zrób to samo dla drugiej pary i wymyśl ruch 40 pip (na przykład). Powiedzmy, że mamy GBPUSD = (- 20) i EURUSD = (- 40). Widzimy, że obie pary schodzą z dołu, a EUR jest przedni w dolnym ruchu o 20 pipsów. Próbuję zrobić mały histogram, który pokazuje mi tę różnicę. Poniższy kod (który został wycięty i wklejony przez mnie ze wskazania Swingmana i tego z góry) robi to, czego chcę. W tej chwili wyświetla się tylko cena z otwartego na histogramie (dla jednej pary), a to prowadzi do wydania numeru 1. Problem # 1) W tej chwili wskaźnik rysuje zaznaczenie za pomocą haczyka. Co jest świetne, ale jeśli wczytujesz je na nowy wykres, musisz poczekać godzinyminutydni, aby wypełnić je danymi. Czy istnieje sposób na wywołanie ostatniego tiknięcia (myślę, że to jest to samo co blisko?) I zapełnienie wszystkich słupków innych niż bieżący pasek? Czy jest lepsze połączenie niż MarketInfo Mode_Bid, aby to obliczyć? Problem # 2) Jest to oczywiście bardziej zaawansowane, ale byłoby możliwe oznaczenie blipu w górnejdolnej części histogramu, aby wskazać wysokiniski, jak na korektorach stereo, ponieważ paski histo mogą uderzyć w highlow i następnie zamknąć przed zamknięciem? Problem 3) Teraz ręcznie wpisuję datę rozpoczęcia. Jaki byłby kod, aby wskaźnik automatycznie uruchamiał się przy otwartej ostatniej świecy o godzinie 00:00? Mój pomysł może być głupi, ale i tak chciałbym go zagrać do końca. Mam nadzieję, że wykorzystam ten wskaźnik do wizualizacji zakresu różnicy pip pomiędzy skorelowanymi parami. Rozumiem, że jeśli codziennie dostrzegasz zakres korelacji, możesz wejść do handlu, gdy jesteś w najszerszym zakresie, i powrócić do centrum. Jeśli ktoś ma pomysły na temat któregokolwiek z powyższych punktów, to ja jestem uszy. W końcu to jest coś, co chcę napisać samemu jako proces uczenia się, ale twoja pomoc w kierowaniu mną we właściwym kierunku byłaby doceniona. Dziękujemy John Wstawiony kod/ ------------------------------------------- ----------------------- /| Histogram sample.mq4 |/ ----------------------------------------------- ------------------- #property indior_separate_window #property indior_minimum -100 #property indior_maximum 150 #property indior_level1 100 #property indior_level2 -150 #property indior_buffers 1 double HistBuffer # 91; # 93 ;; łańcuch zewnętrzny Pair1 = GBPUSD; łańcuch zewnętrzny Para2 = EURUSD; extern int StartDate = D'2009.7.8 00:00 '; zewnętrzny ciąg StartingTimeCorr = 2009.07.08 00:00; extern int TFperiod = 60;extern int moreBars = 0; podwójne ExtMapBuffer1 # 91; # 93 ;; podwójne ExtMapBuffer2 # 91; # 93 ;; podwójne dPoint; int iWindow; int firstBar; int _BarsCount, _LastBar; int init () {SetIndexBuffer (0, HistBuffer); SetIndexStyle (0, DRAW_HISTOGRAM, STYLE_SOLID, 3, czerwony); IndiorDigits (4); return (0); }/ ---------------------------------------------- -------------------- int deinit () {return (0); }/ ---------------------------------------------- -------------------- int start () {double Price_1 = MarketInfo (Pair1, MODE_ASK); double Open_Pair1 = iOpen (Pair1, PERIOD_M1, iBarShift (NULL, PERIOD_M1, {StartDate}, True)); firstBar = iBarShift (NULL, TFperiod, StrToTime (StartingTimeCorr), true); if (firstBar lt; 0) {Alert (StartingTimeCorr wydaje się być nieprawidłowy.); return (0); } RefreshRates (); ArrayInitialize (ExtMapBuffer1, 0.0); ArrayInitialize (ExtMapBuffer2, 0.0); _BarsCount = WindowBarsPerChart () więcejBarów 1; int _FirstBar = firstBar; int _LastBar = _FirstBar - _BarsCount moreBars 1; if (_LastBar lt; 0) {_LastBar = 0; _BarsCount = _FirstBar moreBars 1; } int i = 0;/ilt; Bars; i ) {//if (High # 91; i # 93; -Low # 91; i # 93; gt; 0) HistBuffer # 91; i # 93; = (((Cena_1) - (Open_Pair1)) * 10000); } return (0); }

  5. #5
    Ok. Mam mniej lub więcej pracy. Dziwnie; Dostaję różne wyniki, gdy jest na różnych wykresach, chociaż obie mapy powinny wywoływać te same informacje. Jakieś pomysły? Wstawiony kod/ --------------------------------------------- --------------------- /| Różnica JM_Pip v1.006.mq4 |/ ----------------------------------------------- ------------------- #property indior_separate_window #property indior_minimum -200 #property indior_maximum 200 #property indior_level1 100 #property indior_level2 -100 #property indior_level3 -50 #property indior_level4 50 #property indior_level5 0 #property indior_buffers 1/---- parametry wejściowe kolor zewnętrzny FontColor = Red; extern int FontSize = 18; extern string FontType = Arial Black; łańcuch zewnętrzny Pair1 = GBPUSD; łańcuch zewnętrzny Para2 = EURUSD; extern int StartDate = D'2009.7.8 00:00 '; zewnętrzny ciąg StartingTimeCorr = 2009.07.08 00:00; extern int TFperiod = 60; extern int moreBars = 0; zewnętrzny podwójny zasięg = 200;/---- variables int iWindow; int firstBar; int _BarsCount, _LastBar; double HistBuffer # 91; # 93 ;; podwójne ExtMapBuffer1 # 91; # 93 ;; podwójne ExtMapBuffer2 # 91; # 93 ;; podwójne dPoint;/ ----------------------------------------------- ------------------- /| Funkcja inicjalizacji wskaźnika niestandardowego |/ ----------------------------------------------- ------------------- int init () {SetIndexBuffer (0, HistBuffer); SetIndexStyle (0, DRAW_HISTOGRAM, STYLE_SOLID, 3, czerwony); IndiorDigits (0); return (0); }/ ---------------------------------------------- -------------------- /| Indywidualna funkcja deinicjalizacji wskaźnika |/ ----------------------------------------------- ------------------- int deinit () {ObjectDelete (Pip_Diff_Label); ObjectDelete (Buy_Sell_Label); return (0); }/ ---------------------------------------------- -------------------- int start () {double Price_1 = MarketInfo (Pair1, MODE_ASK); double Price_2 = MarketInfo (Pair2, MODE_ASK); double Open_Pair1 = iOpen (Pair1, PERIOD_M1, iBarShift (NULL, PERIOD_M1, {StartDate}, True)); double Open_Pair2 = iOpen (Pair2, PERIOD_M1, iBarShift (NULL, PERIOD_M1, {StartDate}, True)); double Variance1 = ((Price_1-Open_Pair1) * 10000); double Variance2 = ((Price_2-Open_Pair2) * 10000); double Differential = Variance1-Variance2; int Output1 = Variance1; int Wyjście2 = Zmienność2; firstBar = iBarShift (NULL, TFperiod, StrToTime (StartingTimeCorr), true); if (firstBar lt; 0) {Alert (StartingTimeCorr wydaje się być nieprawidłowy.); return (0); } RefreshRates (); ArrayInitialize (ExtMapBuffer1, 0.0); ArrayInitialize (ExtMapBuffer2, 0.0); _BarsCount = WindowBarsPerChart () więcejBarów 1; int _FirstBar = firstBar; int _LastBar = _FirstBar - _BarsCount moreBars 1; if (_LastBar lt; 0) {_LastBar = 0;_BarsCount = _FirstBar moreBars 1; } int i = 0;/ilt; Bars; i )/Dodaj pogrubioną liczbę do ciągu histogramu w łańcuchu Pip_Diff = DoubleToStr (Differential, 0); ObjectCreate (Pip_Diff_Label, OBJ_LABEL, 1, 0, 0); ObjectSetText (Pip_Diff_Label, Pip_Diff, FontSize, FontType, FontColor); ObjectSet (Pip_Diff_Label, OBJPROP_CORNER, 1); ObjectSet (Pip_Diff_Label, OBJPROP_XDISTANCE, 1); ObjectSet (Pip_Diff_Label, OBJPROP_YDISTANCE, 1); {HistBuffer # 91; i # 93; = Różnicowy; IndiorShortName (Differential Pair2 = ( Output2 ) Pair1 = ( Output1 )); } return (0); }

  6. #6

    Cytat Zamieszczone przez ;
    Dziwnie; Dostaję różne wyniki, gdy jest na różnych wykresach, chociaż obie mapy powinny wywoływać te same informacje. Jakieś pomysły?
    iBarShift (NULL, .....) zwróci numer świecy pary, do której dołączony jest wykres. Być może iBarShift (Pair1, .....) itp. Będzie działać lepiej? Przepraszam, nie mam czasu na szczegółowe zapoznawanie się z kodem, więc domyślam się.

  7. #7

  8. #8
    Czy ktoś mógłby mi dać szybki pomysł, w jaki sposób wprowadzasz dane do tablicy? Byłem przez pomoc MT4, ale w tym względzie jest to dla mnie zbyt tajemnicze. Zasadniczo mam 20 wartości, które chcę uśrednić. Używam innej matematyki do tworzenia tych wartości, więc nie mogę po prostu użyć [cena zamknięcia, okres 20] na przykład. Tak więc dla każdego paska tworzę liczbę. Chcę przecenić ostatnie 20 taktów tego numeru i zrobić dla niego trochę matematyki. Zgaduję, że tablica jest sposobem, aby to zrobić, ale nie wiem, od czego zacząć. Wszelkie wskazówki byłyby bardzo mile widziane. Dzięki John

  9. #9
    podwójna myarra [20]; myarray [0] = wartość1;/pierwsza wartość myarray [1] = wartość2;/druga wartość. . . myarray [19] = value20;/20. średnia wartość = 0; dla (int i = 0; ilt; 20; i ) {averageval = averageval myarray [i]; } averageval = averageval20;

  10. #10
    Cześć Evan, Bardzo dziękuję za to. Czy możesz pomóc w krótkim wyjaśnieniu, co robi dla mnie i i co robi w powyższym kodzie? Rozumiem, że dodaje 1 do siebie i tak dalej, ale jestem z tym trochę nieostrożny. Dzięki John

Uprawnienia umieszczania postów

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Używamy cookies
Używamy cookies, aby jak najlepiej dostosować witrynę do Twoich potrzeb. Kontynuowanie przeglądania tej strony, oznacza zgodę na używanie plików cookies. Aby uzyskać więcej informacji zapoznaj się z naszą Polityką Prywatności.