średnia ze średniej ze średniej itd :)

O jezykach programowania w platformach i nie tylko.
rrozak
Stały bywalec
Stały bywalec
Posty: 76
Rejestracja: 19 mar 2010, 16:43

średnia ze średniej ze średniej itd :)

Nieprzeczytany post autor: rrozak »

Witam,

Próbuję napisać w MT4 wskaźnik który, w pewnym uproszczeniu, liczy średnią ze średniej itd kilka razy. Efektem finalnym wyliczeń powinna być ta ostateczna średnia, a nie cały wachlarz średnich pośrednich. Niby sprawa banalna, tym bardziej że jest instrukcja iMAOnArray wyliczająca średnią z tablicy.

Kod: Zaznacz cały

#property copyright "Copyright © 2010, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 4 
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Silver
#property indicator_color4 Yellow
#property  indicator_width1  2

extern int okres=4;
double e1[], e2[], e3[], e4[], e5[], e6[];

int init()
  {

// SetIndexBuffer(0,e1);
// SetIndexBuffer(1,e2);
// SetIndexBuffer(2,e3);
SetIndexBuffer(3,e4);

SetIndexStyle (0,DRAW_LINE,STYLE_SOLID);
SetIndexStyle (1,DRAW_LINE,STYLE_SOLID);
SetIndexStyle (2,DRAW_LINE,STYLE_SOLID);
SetIndexStyle (3,DRAW_LINE,STYLE_SOLID);
  return(0);
  }

int deinit()
  {

   return(0);
  }

int start()
  {
   int i,  limit;
   
   Comment("0=", e3[0], " 1=", e3[1], " 2=", e3[2], " 3=", e3[3]);
   
   int counted_bars=IndicatorCounted();

   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
  
   for(i=0; i<limit; i++)
      e1[i]=iMA(NULL,0,okres,0,MODE_EMA,PRICE_CLOSE,i);
     
   for(i=0; i<limit; i++)
     e2[i]=iMAOnArray(e1,Bars,okres,0,MODE_EMA,i);
  
   for(i=0; i<limit; i++)
     e3[i]=iMAOnArray(e2,Bars,okres,0,MODE_EMA,i);

   for(i=0; i<limit; i++)
     e4[i]=iMAOnArray(e3,Bars,okres,0,MODE_EMA,i);

   for(i=0; i<limit; i++)
     e5[i]=iMAOnArray(e4,Bars,okres,0,MODE_EMA,i);

   for(i=0; i<limit; i++)
     e6[i]=iMAOnArray(e5,Bars,okres,0,MODE_EMA,i);
  
  return(0);
  }
Powyższy kod jednak nie działa. Albo inaczej - działa pod warunkiem, że tablice z wynikami pośrednimi, są przyłączane do buforów wskaźników instrukcją SetIndexBuffer. I tego nie rozumiem. Bo co ma piernik do wiatraka?
Czy to taka cecha MT4, czy gdzieś popełniłem błąd?

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

Nieprzeczytany post autor: Tig3r »

rrozak pisze:Efektem finalnym wyliczeń powinna być ta ostateczna średnia
A raczej prosta :)

rrozak pisze:Czy to taka cecha MT4, czy gdzieś popełniłem błąd?
To cecha MT4
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
LesioS
Gaduła
Gaduła
Posty: 151
Rejestracja: 24 sie 2007, 08:43

Nieprzeczytany post autor: LesioS »

Taki wskaźnik nazywa się TRIX...
Gdyby ciężka praca prowadziła do bogactwa, to najbogatsi byliby niewolnicy.
Musisz wiedzieć, czego chcesz, wierzyć, że to osiągniesz i działać, by to zrealizować.
Najbardziej niebezpieczna broń na Ziemi: ludzki mózg...

rrozak
Stały bywalec
Stały bywalec
Posty: 76
Rejestracja: 19 mar 2010, 16:43

Nieprzeczytany post autor: rrozak »

Tig3r pisze:
rrozak pisze:Efektem finalnym wyliczeń powinna być ta ostateczna średnia
A raczej prosta :)

No, prawie :)
Wyjaśnię: przeglądając śmieci na dysku, natknąłem się na wskaźnik, który przed laty używałem w MetaStocku. Wskaźnik ten u mnie nazywa się T3 ale kto jest jego autorem i skąd pochodzi nie pamiętam. Prawdopodobnie z grupy newsowej pl.bzines.wgpw. W każdym razie, jak na średnią, dobrze opisuje trend. Jego formuła wygląda następująco ( w MStock language):

Kod: Zaznacz cały

Periods:=10;
a:=0.7;
e1:=Mov(C,Periods,E);
e2:=Mov(e1,Periods,E);
e3:=Mov(e2,Periods,E);
e4:=Mov(e3,Periods,E);
e5:=Mov(e4,Periods,E);
e6:=Mov(e5,Periods,E);
c1:=-a*a*a;
c2:=3*a*a+3*a*a*a;
c3:=-6*a*a-3*a-3*a*a*a;
c4:=1+3*a+a*a*a+3*a*a;
c1*e6+c2*e5+c3*e4+c4*e3;
Tig3r pisze:
rrozak pisze:Czy to taka cecha MT4, czy gdzieś popełniłem błąd?
To cecha MT4
Czyli pozostaje samemu skrobnąć funkcję liczącą średnią.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

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

Nieprzeczytany post autor: Tig3r »

Czyli pozostaje samemu skrobnąć funkcję liczącą średnią.
Nie ma takiej potrzeby. Sam podałeś rozwiązanie:
rrozak pisze:SetIndexBuffer
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

rrozak
Stały bywalec
Stały bywalec
Posty: 76
Rejestracja: 19 mar 2010, 16:43

Nieprzeczytany post autor: rrozak »

Myślałem o tym, że można narysować niepotrzebne średnie cienką lub przezroczystą kredką, ale nie lubię takich nieeleganckich rozwiązań :)

Swoją drogą to dziwne, że funkcja operująca na tablicach, działa tylko wtedy, gdy tablica jest powiązana ze wskaźnikiem.

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

Nieprzeczytany post autor: Tig3r »

Nie wiem po co kombinujesz, robisz wszystko na buforach a wyświetlasz tylko jednej końcowy
Tak właściwie to jaki masz problem?
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

rrozak
Stały bywalec
Stały bywalec
Posty: 76
Rejestracja: 19 mar 2010, 16:43

Nieprzeczytany post autor: rrozak »

Taki, że nie chcę rysować 5 niepotrzebnych średnich. Jeśli powiąże tablice z buforami, to średnie będą narysowane. Czy niekoniecznie ?

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

Nieprzeczytany post autor: Tig3r »

To czy średnie będą rysowana to już zależy od Ciebie
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

rrozak
Stały bywalec
Stały bywalec
Posty: 76
Rejestracja: 19 mar 2010, 16:43

Nieprzeczytany post autor: rrozak »

Ok, już mam :)
SetIndexStyle (0,DRAW_NONE,STYLE_SOLID);

ODPOWIEDZ