wyświetlanie linii

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

aby wskaźnik narysował historię trzeba przy uruchomieniu najlepiej (aby się wykonał tylko raz) skorzystać z pętli i przeliczyć X świec wstecz
przykład:

Kod: Zaznacz cały

int counted_bars=IndicatorCounted();
for(int=0,i<counted_bars;i++)
{
bufor[i]=...
}

można też dodać limi aby np max 100 świec wstecz liczył to dodajesz jako 2gą linię:

Kod: Zaznacz cały

if(counted_bars>100) counted_bars=100;
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

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

Nieprzeczytany post autor: personov »

Zrobiłem tak w bloku void start() :

Kod: Zaznacz cały

int i = 0;
int counted_bars=IndicatorCounted(); 
   for(i=0;i<counted_bars;i++) 
   { 
   v2[i]=0; 
   v3[i]=0;
   }
I teraz nic nie wyświetla na wykresie.

Dodano po 5 minutach:

Jak dam :

Kod: Zaznacz cały

int counted_bars=IndicatorCounted(); 
   for(i=0;i<counted_bars;i++) 
   { 
   v2[i]=...moje obliczenia...; 
   v3[i]=...moje obliczenia...;
   }
wyświetla mi tylko aktualna wartość v2 i v3 w postaci poziomych linii. Czyli tak jakby oblicza, że wszystkie wsteczne wartości v2 i v3 były identyczne z aktualnymi.
Solą życia jest kasa.

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

Kod: Zaznacz cały

counted_bars=IndicatorCounted(); 
to wymaga odświeżenia ceny
możesz też dać np

Kod: Zaznacz cały

counted_bars=100;
lub

Kod: Zaznacz cały

counted_bars=Bars;
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

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

Nieprzeczytany post autor: personov »

Nie poradzilem sobie z tym, żeby rysowało historię po załadowaniu wskaźnika.
Na razie mam tak :

Kod: Zaznacz cały

#property indicator_chart_window
#property indicator_buffers 2
double v2[],v3[];
/////////////////////////////////////////////////////////////////////////////////////////////////// 
void init() 
{ 
   SetIndexBuffer(0,v2);
   SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,1,Red);
   SetIndexBuffer(1,v3);
   SetIndexStyle (1,DRAW_LINE,STYLE_SOLID,1,Red);  
} 
/////////////////////////////////////////////////////////////////////////////////////////////////// 
void deinit() 
{ 
} 
/////////////////////////////////////////////////////////////////////////////////////////////////// 
void start() 
{  
   v2[0] = ..obliczenia1..;
   v3[0] = ..obliczenia1..;
   } 
Więc rysuje mi linie od momentu włączenia wskaźnika.
Tig3r mi podpowiedział co zrobić żeby rysowało historię i tak próbowałem zrobić :

Kod: Zaznacz cały

#property indicator_chart_window
#property indicator_buffers 2
double v2[],v3[];
/////////////////////////////////////////////////////////////////////////////////////////////////// 
void init() 
{ 
   SetIndexBuffer(0,v2);
   SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,1,Red);
   SetIndexBuffer(1,v3);
   SetIndexStyle (1,DRAW_LINE,STYLE_SOLID,1,Red);  
} 
/////////////////////////////////////////////////////////////////////////////////////////////////// 
void deinit() 
{ 
} 
/////////////////////////////////////////////////////////////////////////////////////////////////// 
void start() 
{  
   v2[0] = ..obliczenia1..;
   v3[0] = ..obliczenia1..;
int counted_bars=IndicatorCounted(); 
   for(i=0;i<counted_bars;i++) 
   { 
   v2[i]=...obliczenia ?...; //co tutaj ?
   v3[i]=...obliczenia ?..; //co tutaj ?
   }
   } 
Rozumiem, że te obliczenia dla v2 i v3 nie mogą być takie same jak dla v2[0] i v3[0] ?
Bo jeśli dam take same to wyświetla poziome linie.
Moglibyście mi dac jakiś przykład jak ma bć obliczana wartość dla ?
Przeglądałem różne wskaźniki, ale nic nie mogę podobnego znaleść.
Solą życia jest kasa.

Awatar użytkownika
Esco
Przyjaciel Forum
Przyjaciel Forum
Posty: 2603
Rejestracja: 11 kwie 2010, 20:56

Nieprzeczytany post autor: Esco »

Obliczenia

to wskaźnik który wywołujesz przez iCustom?

Dodano po 7 minutach:

Musisz w kolejnych "Obliczeniach" używać danych z wcześniejszych świeć odwołując się do poprzednich elementów. (przez zmienna i)

Dosłownie petla for ma taką składnie:

dla i od 0 do ostatniej świecy obliczaj wartość na wykresie.

Niżej masz przykładowy kod który rysuje linie przedstawiająca różnice miedzy High i Low świec obliczając wartości dla całego dostępnego wykresu.

Kod: Zaznacz cały

int start()

  {
  
   int limit;
   int counted_bars = IndicatorCounted();
   //---- check for possible errors
   if (counted_bars<0) return(-1);
   //---- last counted bar will be recounted
   if (counted_bars>0) counted_bars--;
   limit = Bars - counted_bars;

   for(int i=limit; i>=0; i--)
   {
     Obliczenia1[i] = MathAbs(High[i]-Low[i]);     
   }

      return(0);
  }

ODPOWIEDZ