Label + OBJPROP_YDISTANCE (help)

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
reptile
Maniak
Maniak
Posty: 2799
Rejestracja: 13 gru 2008, 13:48

Label + OBJPROP_YDISTANCE (help)

Nieprzeczytany post autor: reptile »

Czy można pobrać OBJPROP_YDISTANCE linii poziomej?

Kod: Zaznacz cały

double line1= ObjectGet(HLine1, OBJPROP_YDISTANCE);
Zmienna line1 u mnie w dowolnym ObjectSetText i stałej odległości w Label od top = 0.000000 czyli nic nie odczytało

Chcę ustawić label na tej samej wysokości ceny co linia pozioma HLine1

Kod: Zaznacz cały

ObjectSet("Label1", OBJPROP_YDISTANCE, line1);
Coś pomieszałem?
R.E.P.T.I.L.E. - Robotic Electronic Person Trained for Infiltration and Logical Exploration (off-line,only e-mail)

gUral
Uczestnik
Uczestnik
Posty: 2
Rejestracja: 03 cze 2010, 15:25

Nieprzeczytany post autor: gUral »

Jeśli chodzi o linię poziomą to nie można pobrać OBJPROP_YDISTANCE ponieważ jest ona przypisana do ceny, możemy tylko pobrać OBJPROP_PRICE1.

Objekt Label ustawiamy podajac jako współrzędne odleglosc w pikselach od danego rogu i nie ma mozliwości (chyba) przeliczenia pikseli na skale ceny, wiec raczej nie ustawisz Label przy zadanej cenie. Rozwiazeniem jest OBJ_TEXT któremu podajesz cene i czas jako współrzędne więc możesz go powiązać z poziomą linia.

pzdr

Awatar użytkownika
xamael
Gaduła
Gaduła
Posty: 108
Rejestracja: 09 cze 2009, 14:54

Nieprzeczytany post autor: xamael »

reptile nie pamiętam jak to było z labelem ale najlepiej pobrać cene i uzyc obiektu text, chociaż w sumie może i label też da się po cenie.
spróbuj

Kod: Zaznacz cały

double line1= ObjectGet(HLine1, OBJPROP_PRICE1);
ObjectSet("Label1", OBJPROP_PRICE1, line1);
albo

Kod: Zaznacz cały

ObjectCreate("Text1",..Opcje dla OBJ_TEXT..); //Na Time[0] oczywiscie
double line1= ObjectGet(HLine1, OBJPROP_PRICE1);
ObjectSet("Text1", OBJPROP_PRICE1, line1);
druga zadziała na bank, co do pierwszej nie mam jak sprawdzic

Dodano po 2 minutach:

gUral witaj na forum ;)
Trzymając się systemu: 82% skuteczności || Grając wbrew systemowi: 8% skuteczności. Dyscyplina jest autorem większości zwycięstw.

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

OBJ_TEXT OBJ_LABEL

Nieprzeczytany post autor: reptile »

gUral pisze:Rozwiazeniem jest OBJ_TEXT któremu podajesz cene i czas jako współrzędne więc możesz go powiązać z poziomą linia.
powiązałem już, ale irytuje mnie forma współrzędnej i fakt że obiekt ma zawieszenie na środku a Label ma opcje wyboru narożnika. Ta niedogodność rozszerzającego się tekstu i justowanie do środka .. nie wiem jak to łatwo opanować, by zawsze mieć wyrównanie tekstu do prawej lub lewej
gUral pisze:Objekt Label ustawiamy podajac jako współrzędne odleglosc w pikselach od danego rogu i nie ma mozliwości (chyba) przeliczenia pikseli na skale ceny, wiec raczej nie ustawisz Label przy zadanej cenie.
Zacząłem kombinować z window, ale wrr... skala (jeszcze nie wiem jak jest liczona hehe)

Kod: Zaznacz cały

double skala=(((WindowPriceMax()-WindowPriceMin())/Point) /WindowBarsPerChart());
Jeśli chodzi o linię poziomą to nie można pobrać OBJPROP_YDISTANCE ponieważ jest ona przypisana do ceny, możemy tylko pobrać OBJPROP_PRICE1.
Czyli wewnętrznie w mt4 nie ma 2 zmiennej, więc jest zero :(
xamael pisze:reptile nie pamiętam jak to było z labelem ale najlepiej pobrać cene i uzyc obiektu text, chociaż w sumie może i label też da się po cenie.
spróbuj
Trochę tych Labelków chciałbym użyć, a fakt, że rozplanowanie ich "po czasie" z pomocą OBJ_TEXT nie jest łatwe to mam zagadkę, w sumie już widzę, że sprawa mi się komplikuje :D
R.E.P.T.I.L.E. - Robotic Electronic Person Trained for Infiltration and Logical Exploration (off-line,only e-mail)

Awatar użytkownika
xamael
Gaduła
Gaduła
Posty: 108
Rejestracja: 09 cze 2009, 14:54

Nieprzeczytany post autor: xamael »

nie wiem czy ci to pomorze, ale ja kombinowałem tak ze skoro masz na monitorze stała podziałke to dzieliłem wykres właśnie na podstawie WIndowsPriceMax i Min, oraz na czasie od FirstVisibleBar do Time[0]. jak nie szurasz rozmieszczeniem okien, to mozna nawet sie tak pobawić w pseudo pixele ;)
Trzymając się systemu: 82% skuteczności || Grając wbrew systemowi: 8% skuteczności. Dyscyplina jest autorem większości zwycięstw.

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

Nieprzeczytany post autor: reptile »

Pozostało pogratulować w mql opcji textowych :lol:
Niezbyt mi to wychodzi.

Jak wygląda więc u was wyrównywanie obiektu OBJ_TEXT ? Poprzez liczenie długości znaków ? :shock:
Czy też jest jakaś prostsza metoda, bo jak na razie to mi to wygląda na skomplikowane lub sam sobie komplikuje przez niewiedzę ? :?
Jak są różne relacje między obiektami [ich długość] + [długość tekstu] to by uniknąć kolizji robi się chyba sieczka, bo ciężko "zawiesić wymiarowanie na jakiejś siatce" żeby się samo równało przy różnych wariantach zmiennych takiej siatki. hmm
R.E.P.T.I.L.E. - Robotic Electronic Person Trained for Infiltration and Logical Exploration (off-line,only e-mail)

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Nieprzeczytany post autor: Pierz Andrzej »

juz teraz nie pamietam bo bawilem sie tym ponad rok temu :) .. ale musisz do obliczania odleglosci uzyc wielkosci czcionki .....

pzdr Andrzej
z poważaniem
Andrzej Pierz
FOREX-SERVICE

gUral
Uczestnik
Uczestnik
Posty: 2
Rejestracja: 03 cze 2010, 15:25

Nieprzeczytany post autor: gUral »

Kod: Zaznacz cały

void rysuj_obj_text(string obiekt)
{
  static double wsp_price=0.5;    // text bedzie w polowie skali ceny
  static double wsp_time=0.5;     //                      skali czasu 
  static double price_min=0;
  static double price_max=0;
  static datetime data_0=0; 
  static int first_bar=0;
  static int ilosc_bar=0;
  
  
  double price;
  datetime data;
  int indeks;
      
 // ----- jesli siatka okna sie zmieni to pozycjonujemy obiekt 
  
  if ( price_min!=WindowPriceMin() || price_max!WindowPriceMax() || first_bar!=WindowBarsPerChart() || ilosc_bar!=WindowBarsPerChart() || data_0!=Time[0] )   
  {     
       
       price_min=WindowPriceMin();
       price_max=WindowPriceMax();
       data_0=Time[0];
       first_bar=WindowFirstVisibleBar();
       ilosc_bar=WindowBarsPerChart();
       
    // ----------- szukanie srodka skali ceny    
       price=NormalizeDouble(price_max-(wsp_price*(price_max-price_min)),Digits);
 
      // --------- skala czasu 
  
 
   
       indeks=NormalizeDouble(first_bar-(wsp_time*WindowBarsPerChart()),0);      
  
       if (indeks < 0 )   //--- jesli indeks ujemny to trzeba stworzyc date
       {
         data=Time[0]+(Period()*60*(-indeks));
         Alert(TimeToStr(data));  
       }
       else
       {
         data=Time[indeks];
       }
  
       ObjectCreate(obiekt,OBJ_TEXT,0,data,price);
       ObjectSetText(obiekt,obiekt,10); 
       ObjectSet(obiekt,OBJPROP_PRICE1,price);
       ObjectSet(obiekt,OBJPROP_TIME1,data);
  
  }
}
funkcja rysuje obiekt na srodku wykresu, po zmianie siatki wykresu ustawia go w tym samym miejscu. Wypadałoby odświeżać ta funkcje częściej niż po ticku więc lepsze jest EA niż wskaźnik ale to zależy od potrzeb :wink:
Jesli chodzi o kilka-kilkanascie obiektów text to juz troche kombinatoryki jest :D

ODPOWIEDZ