automatyczny kolor i opis linii poziomej zależnie od TF

O jezykach programowania w platformach i nie tylko.
pim
Gaduła
Gaduła
Posty: 97
Rejestracja: 19 lut 2015, 09:52

automatyczny kolor i opis linii poziomej zależnie od TF

Nieprzeczytany post autor: pim »

Hej.

Czy ma ktoś pomysł jak zrobić żeby kolor i opis linii poziomej którą dodaje na do wykresu na TF=Weekly był np. zielony o grubości 3 i opisie kolejno Weekly1Price, Weekly2Price, Weekly3Price itd a jak przejdę na TF=Daily to linie żeby automatycznie tworzyły się niebieskie o grubości 2 i nazwie Daily1Price, Daily2Price .itd....

Czy należy to zrobić tak że po dodaniu linii EA zmienia paratmetry tej nowo utworzonej linii czy da się tak aby jeśli jestem na np. TF=Daily jakimś kodem "powiedzieć" MT4 że każdą kolejną linię ma domyślnie nazywać tak jak chcę ?
Czyli czy można poprzez MQL zmodyfikować domyślne ustawienia dodawanej linii ?

JAREK67
Maniak
Maniak
Posty: 2143
Rejestracja: 13 lip 2006, 11:21

Re: automatyczny kolor i opis linii poziomej zależnie od TF

Nieprzeczytany post autor: JAREK67 »

pim pisze:Hej.

Czy ma ktoś pomysł jak zrobić żeby kolor i opis linii poziomej którą dodaje na do wykresu na TF=Weekly był np. zielony o grubości 3 i opisie kolejno Weekly1Price, Weekly2Price, Weekly3Price itd a jak przejdę na TF=Daily to linie żeby automatycznie tworzyły się niebieskie o grubości 2 i nazwie Daily1Price, Daily2Price .itd....

Czy należy to zrobić tak że po dodaniu linii EA zmienia paratmetry tej nowo utworzonej linii czy da się tak aby jeśli jestem na np. TF=Daily jakimś kodem "powiedzieć" MT4 że każdą kolejną linię ma domyślnie nazywać tak jak chcę ?
Czyli czy można poprzez MQL zmodyfikować domyślne ustawienia dodawanej linii ?
Popatrz na to. Z opisów linii ostatecznie zrezygnowałem bo robiło się mało czytelnie na wykresie.
Każdy tf ma oddzielny kolor i grubość.
https://www.youtube.com/watch?v=YBmbnWi ... arekTrader
Mogę to podrzucić jeśli cię interesuje.

pim
Gaduła
Gaduła
Posty: 97
Rejestracja: 19 lut 2015, 09:52

Re: automatyczny kolor i opis linii poziomej zależnie od TF

Nieprzeczytany post autor: pim »

Hej. Dzięki.

Wolałbym bez potrzeby trzymania dodatkowych guzików, kresek na wykresie. Tak jak ty masz to też rozwiązanie , choć łatwiej mi będzie modyfikować naniesioną linię zaraz po utworzeniu kiedy EA stwierdzi na jakim TFie ją naniosłem ale do takiej modyfikacji potrzebny jest jeden "tick" lub kliknięcie odśwież .. a ja się zastanawiam czy można tak że jak przełącze TF to da się zmodyfikować poprzez MQL domyslne parametry liniii.

Awatar użytkownika
Pablo90
Pasjonat
Pasjonat
Posty: 1215
Rejestracja: 10 cze 2007, 15:36

Re: automatyczny kolor i opis linii poziomej zależnie od TF

Nieprzeczytany post autor: Pablo90 »

Po prostu sprawdzasz w kodzie jaki TF ma aktualnie otwarty wykres i odpowiednio modyfikujesz wartości linii. Modyfikujesz za pomocą funkcji ObjectGetInteger, ObjectGetString itp. w zależności od danej wartości.

pim
Gaduła
Gaduła
Posty: 97
Rejestracja: 19 lut 2015, 09:52

Re: automatyczny kolor i opis linii poziomej zależnie od TF

Nieprzeczytany post autor: pim »

Pablo90 pisze:Po prostu sprawdzasz w kodzie jaki TF ma aktualnie otwarty wykres i odpowiednio modyfikujesz wartości linii. Modyfikujesz za pomocą funkcji ObjectGetInteger, ObjectGetString itp. w zależności od danej wartości.
No tak, ale jak mam zmienić właściwości objekty typu OBJ_HLINE nie znając jego nazwy ani indexu ?


Zakładam że nanoszę linię z menu MT4, pokazują mi się właściwości i klikam ok bez zapamiętywania nazwy.... i teraz nie wiem jak to ugryźć.. żeby tą linie z defaultową nazwą typu: "Horizontal Line 61010" móc zmieniać ?

-- Dodano: 19 kwie 2016, 10:17 --

No nic, poddaje się... zrobię osobny guziczek do nanoszenia H-Linii i stworzę ją przy pomocy funkcji ObjectCreate wraz ze wszystkim info którę chcę.


Chyba że ktoś zna sposób aby podmienić domyślne parametry z poziomu MQL w takim okienku:
2016-04-19___11_13_57.png
-- Dodano: 19 kwie 2016, 13:18 --

Rozwiązanie (lepsze czy gorsze .. ważne że działa)

mam graficzny guziczek do tego ale można i skryptem:

Kod: Zaznacz cały

void AddAlarmHline()
{
 PlaySound ("addline.wav");

string tf1;
switch(Period())
{
  case 1: tf1="M1"; break;
  case 5: tf1="M5"; break;
  case 15: tf1="M15"; break;
  case 30: tf1="M30"; break;
  case 60: tf1="H1"; break;
  case 240: tf1="H4"; break;
  case 1440: tf1="Daily"; break;
  case 10080: tf1="Weekly"; break;
  case 43200: tf1="Monthly"; break;
    
}

string alarm_hline_name = "ALARM " + Symbol() + " " + tf1 + " "  + TimeCurrent();

color tf;

switch(Period())
{
  case 1: tf=color_m1; break;
  case 5: tf=color_m5; break;
  case 15: tf=color_m15; break;
  case 30: tf=color_m30; break;
  case 60: tf=color_H1; break;
  case 240: tf=color_H4; break;
  case 1440: tf=color_D1; break;
  case 10080: tf=color_W1; break;
  case 43200: tf=color_MN; break;
    
}

ObjectCreate(alarm_hline_name, OBJ_HLINE,0, 0, Bid -  30 * Point);
ObjectSet(alarm_hline_name, OBJPROP_STYLE, 0);
ObjectSet(alarm_hline_name, OBJPROP_COLOR, tf);
ObjectSet(alarm_hline_name, OBJPROP_WIDTH, 3);
ObjectSetText(alarm_hline_name, alarm_hline_name, 35, "Arial");
ObjectSet(alarm_hline_name, OBJPROP_SELECTED, True);

} // end Alarm_Hline

a zaraz po utworzeniu w EA mam to:

Kod: Zaznacz cały

// ============== change Alarm Line


string Name;
for(int i = ObjectsTotal(0,0,OBJ_HLINE) -1 ;i >= 0; i--)
   {
   Name = ObjectName(i);
   if (StringFind(Name, "ALARM", 0) != -1 ) ObjectSetString(0,Name,OBJPROP_TEXT,"ALARM " + NormalizeDouble(ObjectGetDouble(0,Name,OBJPROP_PRICE),Digits));
   }
	
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Awatar użytkownika
Pablo90
Pasjonat
Pasjonat
Posty: 1215
Rejestracja: 10 cze 2007, 15:36

Re: automatyczny kolor i opis linii poziomej zależnie od TF

Nieprzeczytany post autor: Pablo90 »

Możesz zrobić tak, że EA sprawdza z każdym tickiem czy została utworzona nowa linia, jeśli tak to automatycznie ustawia jej odpowiednią nazwę, po której potem się odnosisz do tego obiektu. Jeżeli nie chcesz, żeby EA modyfikowało każdą poziomą linię to możesz ręcznie przydzielać im nazwy rozpoznawane przez EA.

pim
Gaduła
Gaduła
Posty: 97
Rejestracja: 19 lut 2015, 09:52

Re: automatyczny kolor i opis linii poziomej zależnie od TF

Nieprzeczytany post autor: pim »

Pablo90 pisze:Możesz zrobić tak, że EA sprawdza z każdym tickiem czy została utworzona nowa linia, jeśli tak to automatycznie ustawia jej odpowiednią nazwę, po której potem się odnosisz do tego obiektu. Jeżeli nie chcesz, żeby EA modyfikowało każdą poziomą linię to możesz ręcznie przydzielać im nazwy rozpoznawane przez EA.
dzięki
Dokładnie tak to zrobiłem :-)

pod "Name" jest dopiero co dodana linia którą na poaczątku nazywam TEST + znacznik czasowy aby każda była niepowtatrzalna potem EA w pętli wyszukuje wszystkie H-Linie ze stringiem "TEST" w nazwie.
Jak znajdzie to zmienia wszystko co mi potrzebne i ucina znacznik czasowy :-)

Kod: Zaznacz cały

string Name,new_name;
int i,len;
for( i = ObjectsTotal(0,0,-1);i >= 0; i--)
   {
   Name = ObjectName(i);
   
  Print (Name  + " " + ObjectGet(Name,OBJPROP_PRICE));
  
   if (StringFind(Name, "TEST", 0) != -1 ) 
      {
         
         ObjectSetString(0,Name,OBJPROP_TEXT,"ALARM " + NormalizeDouble(ObjectGetDouble(0,Name,OBJPROP_PRICE),Digits));
         len =  StringLen(Name);
         new_name = StringSubstr(Name,4,len);
         len =  StringLen(new_name);
         new_name = StringSubstr(new_name,0,len-19);
        
         ObjectSetString(0,Name,OBJPROP_NAME, " ALARM " + new_name);
      }   
   }

Dziwne jest to że jak zamiast polecenia :

Kod: Zaznacz cały

for( i = ObjectsTotal(0,0,-1);i >= 0; i--)


użyję tylko do wyszukiwania objektów typu HLINE

Kod: Zaznacz cały

for( i = ObjectsTotal(0,0,OBJ_HLINE);i >= 0; i--)
to przestaje działać... a szkoda bo teraqz z każdym tickiem EA musi sprawdzać każdy obiekt

Awatar użytkownika
Pablo90
Pasjonat
Pasjonat
Posty: 1215
Rejestracja: 10 cze 2007, 15:36

Re: automatyczny kolor i opis linii poziomej zależnie od TF

Nieprzeczytany post autor: Pablo90 »

Ten kod nie działa bo zwraca Ci tylko liczbę obiektów tego typu. Jeżeli będziesz miał np. jedną linię, to pętla odniesie się tylko do pierwszego obiektu, a to niekoniecznie musi być ta linia, może być inny obiekt. Trzeba niestety przewertować wszystkie obiekty, możesz ewentualnie dodać warunek sprawdzający typ obiektu.

pim
Gaduła
Gaduła
Posty: 97
Rejestracja: 19 lut 2015, 09:52

Re: automatyczny kolor i opis linii poziomej zależnie od TF

Nieprzeczytany post autor: pim »

Pablo90 pisze:Ten kod nie działa bo zwraca Ci tylko liczbę obiektów tego typu. Jeżeli będziesz miał np. jedną linię, to pętla odniesie się tylko do pierwszego obiektu, a to niekoniecznie musi być ta linia, może być inny obiekt. Trzeba niestety przewertować wszystkie obiekty, możesz ewentualnie dodać warunek sprawdzający typ obiektu.
faktycznie :-) masz racje, zasugerowałem się gotowym kodem wziętym z internetu , można dodać jeszcze jeden warunek ale akurat u mnie nie będzie to jednak konieczne bo mam niewielką liczbę obiektów

jeszcze raz dziękuję :-)

pim
Gaduła
Gaduła
Posty: 97
Rejestracja: 19 lut 2015, 09:52

Re: automatyczny kolor i opis linii poziomej zależnie od TF

Nieprzeczytany post autor: pim »

pim pisze:

Kod: Zaznacz cały

void AddAlarmHline()
{
 PlaySound ("addline.wav");

string tf1;
switch(Period())
{
  case 1: tf1="M1"; break;
  case 5: tf1="M5"; break;
  case 15: tf1="M15"; break;
  case 30: tf1="M30"; break;
  case 60: tf1="H1"; break;
  case 240: tf1="H4"; break;
  case 1440: tf1="Daily"; break;
  case 10080: tf1="Weekly"; break;
  case 43200: tf1="Monthly"; break;
    
}

string alarm_hline_name = "ALARM " + Symbol() + " " + tf1 + " "  + TimeCurrent();



.....



zamiast TimeCurrent() jak się okazuje lepiej użyć TimeLocal()

i tą ostatnią linie która dodaje naam obiekt najlepiej zmienić na :

Kod: Zaznacz cały

string alarm_hline_name = "TEST " + Symbol() + " " + tf1 + " "  + TimeLocal();


Bo jak rynek jest zamknięty to nie można dodawać nowych linii (znacznik czasu jest w tym czasie ten sam).

ODPOWIEDZ