Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
remyg
Bywalec
Bywalec
Posty: 15
Rejestracja: 26 maja 2012, 19:04

Nieprzeczytany post autor: remyg »

Ostatnia metoda jest super. Podzielę się nieco krótszym kodem

Kod: Zaznacz cały

bool NextBar(){
   static datetime bar = 0;
   if (bar == Time[0]) return(false);
   bar = Time[0];
   return(true);
}
W start() dajemy

Kod: Zaznacz cały

if (!NextBar()) return;
wszystko co nad tym będzie co tick, wszystko co pod tym co bar.

kliwus
Stały bywalec
Stały bywalec
Posty: 26
Rejestracja: 26 sie 2012, 23:21

Nieprzeczytany post autor: kliwus »

Witam
Mam mały problem z odwołaniem się do zmiennej w funkcji ObjectSetText. W pętli for robie sobie liczenie do 10 i posiadam zmienne np. asd1, asd2, asd3, ..., asd10 do których mam przypisany wynik w double

ObjectSetText("name name"+x+"",DoubleToStr(asd"+x+"",2), gtxt, fnt, color);

Zmienna x jest dodawana w pętli czyli for (x=1; x<=10; x++)

Zamieniałem asd(0-1) wcześniej na string i nie miałem wtedy doubletostr bo nie był potrzebny skoro double zamieniłem wcześniej na string. Wciąż przy kompilacji wypluwa błędy.

Czy jest na to sposób aby zapakować tą zmienną tak by działała poprawnie z pętlą for?

Pozdrawiam

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

Nieprzeczytany post autor: reptile »

ObjectSetText("name name"+x+"",DoubleToStr(asd"+x+"",2), gtxt, fnt, color);

ObjectSetText("name name"+x, gtxt, fnt, color);

ObjectSetText("name name"+"asd"+DoubleToStr(x,2),gtxt, fnt, color);

DoubleToStr = double to string a nie str to str
R.E.P.T.I.L.E. - Robotic Electronic Person Trained for Infiltration and Logical Exploration (off-line,only e-mail)

Tsubasa
Bywalec
Bywalec
Posty: 10
Rejestracja: 26 gru 2011, 11:52

Nieprzeczytany post autor: Tsubasa »

Dzień dobry,
napisałem mały programik, który ma 3 cele:
1) wyznaczyć maksymalną wartość (high) z określonego zbioru świec,
2) wyświetlić wartość maksymalną na wykresie głównym,
3) wyświetlić liczbę, która podporządkowana jest do numeru świecy z maksymalną wartością.

Mam duży problem tylko z trzecim punktem. Funkcja IBarshift tutaj znajdzie zastosowanie?
Będę wdzięczny za pomoc.



Oto kod:

#property indicator_chart_window

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{return(0);}

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{return(0);}

//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()

{
double wysoko; // --------------------------------przyporządkowanie stałej
wysoko == High[iHighest(NULL,0,MODE_HIGH,10,20)]; // --------------------------------ze zbioru 10 świec, od 20tej wstecz znajdź najwyższą
Print wysoko; //--------------------------------wyświetl wartośc świecy
Print ??? //--------------------------------wyświetl która to świeca, jaki ma numer z przedziału <-20,-30>

return(0);
}
//+------------------------------------------------------------------+

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

Nieprzeczytany post autor: reptile »

iHighest dotyczy array czyli wysoko[] musi byc tak ową no i pętla for która ziteruje te 20 świec na danym TF
R.E.P.T.I.L.E. - Robotic Electronic Person Trained for Infiltration and Logical Exploration (off-line,only e-mail)

Tsubasa
Bywalec
Bywalec
Posty: 10
Rejestracja: 26 gru 2011, 11:52

Nieprzeczytany post autor: Tsubasa »

reptile pisze:iHighest dotyczy array czyli wysoko[] musi byc tak ową no i pętla for która ziteruje te 20 świec na danym TF
-------------------------------------------------------------------------------------
Dobrze, dodam kod z "i--".
Chodź liczyłem, że uda się bez pętli, że będzie komenda, która odpowiada za przyporządkowanie dla max high i wyświetli od razu numer świecy;/ :)

Ale jak wyciągnąć teraz tą wartość "i" dla max high??
Coś na tej zasadzie??

if wysoko == High[iHighest(NULL,0,MODE_HIGH,10,i+20) to b=i;
gdzie b to będzie moja liczba porządkowa max high świecy:D

Sprawdzę sam i pomajstruje
Dzięki.
--------------------------------------------------------------------------------------

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

Nieprzeczytany post autor: reptile »

Zobacz w helpie przykład.. jest tylko paradoks co do tego że w seri 20 swiec możęsz miec wiecej niz 1 swiece z takim samym high wiec zdecyduj która cie interesuje :P
R.E.P.T.I.L.E. - Robotic Electronic Person Trained for Infiltration and Logical Exploration (off-line,only e-mail)

kliwus
Stały bywalec
Stały bywalec
Posty: 26
Rejestracja: 26 sie 2012, 23:21

Nieprzeczytany post autor: kliwus »

ObjectSetText("name name"+x, gtxt, fnt, color);
W tym przypadku nie mam żadnych efektów po za tym, że robi mi obiekty i przypisuje jedynie Label.
ObjectSetText("name name"+"asd"+DoubleToStr(x,2),gtxt, fnt, color);
Tu jest już inaczej, początek zmiennej asd czyta jako chyba tekst, jeśli zrobie
ObjectSetText("name"+x+"", +asd+DoubleToStr((+x),2), gtxt,fnt,colorblue);

wywala, że nie ma zdefiniowanej zmiennej, a jeśli ją zdefiniuje

double asd;

to jest efekt taki, że mam wartości 0.000000 i końcówkę liczb wyjętych ze zmiennej x, która czy będzie miała wartości w double czy int to i tak pokaże swoją wartość tylko w przypadku double to jest wartość np. 1.00, itd.
Nie mam już pomysłu na to, ale może też wszystkiego nie sprawdziłem, bo początkujący jestem. Wniosek dla mnie taki, że ObjectSetText nie potrafi połączyć dwóch zmiennych

Próbowałem wrzucić wartości zmiennej asd1, asd2, asd3, ... asd10 do tablicy asd i potem w pętli odwoływać się do niej, ale tu krzyczy, że asd1, asd2, asd3, ... asd10 są już zdefiniowane i mają swoją wartość i nie można przypisać tego do tablicy no i tu na dziś się zatrzymałem :(.

Pozdrawiam[/quote][/code]

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

Nieprzeczytany post autor: reptile »

Wrzuc no caly kod bo z tej dyskusji nic - zobacz w helpie ObjectSetText
ObjectSetText("name"+x+"", +asd+DoubleToStr((+x),2), gtxt,fnt,colorblue);
ObjectSetText("name"+x+""+asd+DoubleToStr(x,2), gtxt,fnt,colorblue);
R.E.P.T.I.L.E. - Robotic Electronic Person Trained for Infiltration and Logical Exploration (off-line,only e-mail)

kliwus
Stały bywalec
Stały bywalec
Posty: 26
Rejestracja: 26 sie 2012, 23:21

Nieprzeczytany post autor: kliwus »

reptile pisze:Wrzuc no caly kod bo z tej dyskusji nic - zobacz w helpie ObjectSetText
ObjectSetText("name"+x+"", +asd+DoubleToStr((+x),2), gtxt,fnt,colorblue);
ObjectSetText("name"+x+""+asd+DoubleToStr(x,2), gtxt,fnt,colorblue);
Wrzucam kawałek wypociń, dodatkowo doszedłem do tego, że warunki też się nie sprawdzają

Pierw małe objaśnienie, więc w zmiennej double przechowuje wartość wskażnika iMA i odpowiednie interwały, pętle for zmieniłem na liczenie co 10 począwszy od 31 do 111 do odpowiedniego rozłożenia na wykresie i wygląda to tak
...
int start()
{
HideTestIndicators(true);
string
us500 = Symbol();

int
counted_bars = IndicatorCounted();

double
asd31 = iMA(us500, 1, smaperiod1, 0, MODE_MA, PRICE_MA, 0),
asd41 = iMA(us500, 5, smaperiod1, 0, MODE_MA, PRICE_MA, 0),
asd51 = iMA(us500, 15, smaperiod1, 0, MODE_MA, PRICE_MA, 0),
asd61 = iMA(us500, 30, smaperiod1, 0, MODE_MA, PRICE_MA, 0),
asd71 = iMA(us500, 60, smaperiod1, 0, MODE_MA, PRICE_MA, 0),
asd81 = iMA(us500, 240, smaperiod1, 0, MODE_MA, PRICE_MA, 0),
asd91 = iMA(us500, 1440, smaperiod1, 0, MODE_MA, PRICE_MA, 0),
asd101 = iMA(us500, 10080, smaperiod1, 0, MODE_MA, PRICE_MA, 0),
asd111 = iMA(us500, 43200, smaperiod1, 0, MODE_MA, PRICE_MA, 0),
asdclose = iClose(us500, 1440, 0);

double asd;
int x;
for (x=31; x<=111; x=x+10){

ObjectCreate("name"+x+"", OBJ_LABEL, WindowFind("TI ("+Symbol()+")"), 0, 0);
if ("asdclose" < "asd"+x+""){
ObjectSetText("name"+x+"",+asd+DoubleToStr((+x),2), gtxt, fnt, Colorred);
} else {
ObjectSetText("name"+x+"",+asd+DoubleToStr((+x),2), gtxt, fnt, Colorgreen);
}
ObjectSet("name"+x+"", OBJPROP_CORNER, 0);
ObjectSet("name"+x+"", OBJPROP_XDISTANCE, 81);
ObjectSet("name"+x+"", OBJPROP_YDISTANCE, x);
}

return(0);
}

Pozdrawiam

ODPOWIEDZ