Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
Mustafa
Pasjonat
Pasjonat
Posty: 769
Rejestracja: 20 lip 2010, 10:54

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Mustafa »

Nie da się, musisz dorobić dodatkowy obiekt OBJ_TEXT lub OBJ_LABEL i tam zmieniać kolor jeśli jest taka potrzeba.
Nie chodzi o to czy masz rację czy nie, tylko o to, co robisz kiedy masz rację lub jak się zachowujesz jeżeli racji nie masz.

Awatar użytkownika
xspojlerx
Pasjonat
Pasjonat
Posty: 411
Rejestracja: 06 sty 2010, 15:54

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: xspojlerx »

Ok, bo w sumie by mogło zostać że cały prostokąt zmienia kolor, ale wskaźnik tworzy dwa obiekty:

Kod: Zaznacz cały

CreateObjects("PWT1"+i, Color_1);
    CreateObjects("PWT2"+i, Color_2);
No i mogłoby tak zostać jakby zmieniało kolor tylko dla

Kod: Zaznacz cały

"PWT1"+i
ale jak robie

Kod: Zaznacz cały

ObjectSet("PWT1"+i, OBJPROP_COLOR, kolor);
to nie działa, dla pojedyńczego obiektu np PWT10 działa, ale jak zrobić z taką zmienną nazwą?

Awatar użytkownika
Mustafa
Pasjonat
Pasjonat
Posty: 769
Rejestracja: 20 lip 2010, 10:54

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Mustafa »

Zapewne te prostokąty są tworzone w pętli dlatego jego nazwa to PWT1+i
i prawdopodobnie chcesz zmieniać ostatni lub pierwszy

trzeba dopisać if'a

Kod: Zaznacz cały

if(no=="PWT10")
{ 
  zmieniam kolor
}
Nie chodzi o to czy masz rację czy nie, tylko o to, co robisz kiedy masz rację lub jak się zachowujesz jeżeli racji nie masz.

Awatar użytkownika
xspojlerx
Pasjonat
Pasjonat
Posty: 411
Rejestracja: 06 sty 2010, 15:54

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: xspojlerx »

Tak, są tworzone w pętli, ale, chcę aby kolor zmieniały wszystkie pod nazwą:
PWT1+i czyli PWT10, PWT11, PWT12, PWT149 itd...

No i nie chcę aby kolor zmieniały te pod nazwą:
PWT2+i czyli PWT20, PWT21, PWT22, PWT249 itd...

Pętla wygląda tak:

Kod: Zaznacz cały

void start() {
  datetime dt=CurTime();

  for (int i=0; i<NumberOfDays; i++) {
    DrawObjects(dt, "PWT1"+i, Begin_1, End_1);
    DrawObjects(dt, "PWT2"+i, Begin_2, End_2);
    dt=decDateTradeDay(dt);
    while (TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt);
  }
}

Awatar użytkownika
Mustafa
Pasjonat
Pasjonat
Posty: 769
Rejestracja: 20 lip 2010, 10:54

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Mustafa »

nazwa obiektu to stirng sprawdzasz czy się zgadza jego stała cześć i gotowe

Kod: Zaznacz cały

if(StringSubstr(no, 0, 4) == "PWT1")
{
   .....
}
http://bossa.pl/index.jsp?layout=2&page ... at_id=1285

-- Dodano: wtorek 2015-08-04, 13:32 --
xspojlerx pisze:Tak, są tworzone w pętli, ale, chcę aby kolor zmieniały wszystkie pod nazwą:
PWT1+i czyli PWT10, PWT11, PWT12, PWT149 itd...

No i nie chcę aby kolor zmieniały te pod nazwą:
PWT2+i czyli PWT20, PWT21, PWT22, PWT249 itd...

Pętla wygląda tak:

Kod: Zaznacz cały

void start() {
  datetime dt=CurTime();

  for (int i=0; i<NumberOfDays; i++) {
    DrawObjects(dt, "PWT1"+i, Begin_1, End_1);
    DrawObjects(dt, "PWT2"+i, Begin_2, End_2);
    dt=decDateTradeDay(dt);
    while (TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt);
  }
}
żeby było wydajniej zamiast StringSubstr do funkcji DrawObjects dodałbym parametr np. bool ustaw_kolor
a w funkcji if(ustaw_kolor) zmienie kolor

Kod: Zaznacz cały

void start() {
  datetime dt=CurTime();

  for (int i=0; i<NumberOfDays; i++) {
    DrawObjects(dt, "PWT1"+i, Begin_1, End_1, True);
    DrawObjects(dt, "PWT2"+i, Begin_2, End_2, False);
    dt=decDateTradeDay(dt);
    while (TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt);
  }
}


void DrawObjects(datetime dt, string no, string tb, string te, bool ustaw_kolor) {
  datetime t1, t2;
  double   p1, p2;
  int      b1, b2;

  t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb);
  t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te);
  b1=iBarShift(NULL, 0, t1);
  b2=iBarShift(NULL, 0, t2);
  p1=High[Highest(NULL, 0, MODE_HIGH, b1-b2, b2)];
  p2=Low [Lowest (NULL, 0, MODE_LOW , b1-b2, b2)];
  if (!HighRange) {p1=0; p2=2*p2;}
 
  ObjectSet(no, OBJPROP_TIME1 , t1);
  ObjectSet(no, OBJPROP_PRICE1, p1);
  ObjectSet(no, OBJPROP_TIME2 , t2);
  ObjectSet(no, OBJPROP_PRICE2, p2);
  
 if(ustaw_kolor)
{
  double tmp =  ((p1-p2)/Point)/10;
  color kolor = White;
  if(tmp < 10 || tmp > 20 ) kolor = Red;

  ObjectSetInteger(0, no, OBJPROP_COLOR, kolor);
  ObjectSetString(0, no, OBJPROP_TEXT, tmp);
}

}
Nie chodzi o to czy masz rację czy nie, tylko o to, co robisz kiedy masz rację lub jak się zachowujesz jeżeli racji nie masz.

Awatar użytkownika
xspojlerx
Pasjonat
Pasjonat
Posty: 411
Rejestracja: 06 sty 2010, 15:54

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: xspojlerx »

Ok, teraz wszystko fajnie działa, wielkie dzięki :)

gooral87
Stały bywalec
Stały bywalec
Posty: 28
Rejestracja: 07 paź 2010, 14:59

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: gooral87 »

Witam,

chciałbym się dowiedzieć z jakich funkcji/sposobów mogę skorzystać jeśli chcę 'zamrozić' w EA konkretny poziom ceny do czasu zamknięcia pozycji. Chodzi mi konkretnie o to że EA rozpoznając formację inside bar pamięta High i Low 'świecy matki' nawet jesli wystąpiła ona kilka świec temu i jej ekstrema nie zostały ruszone przez cenę.

Sam wpadłem tylko na roboczy pomysł ręcznego wklepania cen na sztywno jako parametr zewnętrzny no ale chciałbym iść krok dalej.

będę wdzięczny za podpowiedzi.

Awatar użytkownika
xspojlerx
Pasjonat
Pasjonat
Posty: 411
Rejestracja: 06 sty 2010, 15:54

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: xspojlerx »

Cześć, chciałem zrobić aby wskaźnik dodawał mi tekst do linii o określonej nazwie:

Kod: Zaznacz cały

 if(ObjectName(i)=="EASYORDER_SL")
no i w takim przypadku działa,

Ale jak chcę zrobić dla dwóch nazw:

Kod: Zaznacz cały

 if(ObjectName(i)=="EASYORDER_SL"||"EASYORDER_TP")
to dodaje tekst dla wszystkich linii na wykresie, bez względu na nazwę

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1522
Rejestracja: 09 sie 2009, 21:27

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: personov »

xspojlerx pisze:Cześć, chciałem zrobić aby wskaźnik dodawał mi tekst do linii o określonej nazwie:

Kod: Zaznacz cały

 if(ObjectName(i)=="EASYORDER_SL")
no i w takim przypadku działa,

Ale jak chcę zrobić dla dwóch nazw:

Kod: Zaznacz cały

 if(ObjectName(i)=="EASYORDER_SL"||"EASYORDER_TP")
to dodaje tekst dla wszystkich linii na wykresie, bez względu na nazwę
Nie wiem, czy to rozwiąże problem, ale wydaje mi się, że cała formuła nawiasu powinna wyglądać tak :

Kod: Zaznacz cały

if(ObjectName(i)=="EASYORDER_SL"||ObjectName(i)=="EASYORDER_TP")
Solą życia jest kasa.

Awatar użytkownika
xspojlerx
Pasjonat
Pasjonat
Posty: 411
Rejestracja: 06 sty 2010, 15:54

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: xspojlerx »

Działa, dziękuję :)

ODPOWIEDZ