Przerobienie na funkcje Tema(Close,period)

O jezykach programowania w platformach i nie tylko.
lukibest
Bywalec
Bywalec
Posty: 7
Rejestracja: 23 lut 2012, 19:24

Przerobienie na funkcje Tema(Close,period)

Nieprzeczytany post autor: lukibest »

Witam

Potrzebuje do swojego systemu wskaznik Tema w takiej postaci TEMA(close,period)

Nie wiem co zle robie ale nie dzialała tzn zmienna Var1 ktora powinna miec wartosc funkcji Tema(close,4) to jest pusta, Zle cos przekazuje ?

Robie to tak:

Kod: Zaznacz cały



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

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 DarkBlue
#property  indicator_width1  2
//---- input parameters
extern int       EMA_period=4;
//---- buffers
string txt;
double TemaBuffer[];
double Ema[];
double EmaOfEma[];
double EmaOfEmaOfEma[];
double Var1;
extern int Apply_To_Price=1; 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers(5);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,Var1);
   SetIndexBuffer(1,TemaBuffer);
   SetIndexBuffer(2,Ema);
   SetIndexBuffer(3,EmaOfEma);
   SetIndexBuffer(4,EmaOfEmaOfEma);

   IndicatorShortName("TEMA("+EMA_period+")");
    
    
    
    switch(Apply_To_Price)
    
      {
      case 1:
         {txt="Open";break;}
      case 2:
         {txt="High";break;}
      case 3:
         {txt="Low"; break;}
      case 4:
         {txt="Median"; break;}
      case 5:
         {txt="Typical"; break;}
      case 6:
         {txt="WghtdClose"; break;}
   	default: 
         {txt="Close";}
      }
//----
   return(0);
  }

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

//---- ===========PRZEKZUJE DO VAR1 FUNKCJE TEMA====

Var1 = Tema(Apply_To_Price,4);
   
   
   return(0);
  }
  
  //===================================================
 // ===================================================
 //======================FUNKCJA TEMA=================

double Tema(int Cena, int cykl)
{
   int i,limit,limit2,limit3,counted_bars=IndicatorCounted();
//----
   if (counted_bars==0)
      {
      limit=Bars-1;
      limit2=limit-EMA_period;
      limit3=limit2-EMA_period;
      }
   if (counted_bars>0)
      {
      limit=Bars-counted_bars-1;
      limit2=limit;
      limit3=limit2;
      }
   for (i=limit;i>=0;i--) Ema[i]=iMA(NULL,0,cykl,0,MODE_EMA,Cena,i);
   for (i=limit2;i>=0;i--) EmaOfEma[i]=iMAOnArray(Ema,0,cykl,0,MODE_EMA,i);
   for (i=limit3;i>=0;i--) EmaOfEmaOfEma[i]=iMAOnArray(EmaOfEma,0,cykl,0,MODE_EMA,i);
   for (i=limit3;i>=0;i--) TemaBuffer[i]=3*Ema[i]-3*EmaOfEma[i]+EmaOfEmaOfEma[i];


return(TemaBuffer);


}
//+------------------------------------------------------------------+


Dodano po 1 godzinach 43 minutach:



Ogolnie to problem jedyny jaki jest to przy wywaołaniu tutaj:
Var1 = Tema(Apply_To_Price,4);

w Var1 nie przypisuje zadnych wartosci ...

Pytanie jak wyciagnac te wartosci z tej funkcji ?
Ostatnio zmieniony 04 mar 2012, 15:09 przez lukibest, łącznie zmieniany 1 raz.

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

Nieprzeczytany post autor: Tig3r »

wygląda ok na pierwszy rzut oka, może musisz poczekać aż:

Kod: Zaznacz cały

Bars > EMA_period^3
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

lukibest
Bywalec
Bywalec
Posty: 7
Rejestracja: 23 lut 2012, 19:24

Nieprzeczytany post autor: lukibest »

Funkcka Tema działa i jezeli wyswietlam TemaBuffer to rysuje ok. Problem jest to ze chcę mieć wartosc tej funkcji w Var1, jak to zrobic bo to przypisanie co jest nie dziala

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Nieprzeczytany post autor: Pierz Andrzej »

bo dop zadeklarowanej zmiennej double chcesz przypisac cala tablice ;)

jezeli potrzebujesz miec ostatnia wartosc przekaz :

Kod: Zaznacz cały

return(TemaBuffer[0]); 
pozdrawiam
Andrzej Pierz
z poważaniem
Andrzej Pierz
FOREX-SERVICE

lukibest
Bywalec
Bywalec
Posty: 7
Rejestracja: 23 lut 2012, 19:24

Nieprzeczytany post autor: lukibest »

Okej, Thx Andrzej za info, zmienilem troche przerobilem,wydaje mi sie ze tak jak powinno byc ale jest taki problem ze czasami wykres wskoczy a czasami "wyskoczy" zniknia. O co chodzi? Nie znam jeszcze dobrze mq4?

Kod: Zaznacz cały

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

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 DarkBlue
#property  indicator_width1  2
//---- input parameters
extern int       EMA_period=4;
//---- buffers
string txt;
double TemaBuffer[];
double Ema[];
double EmaOfEma[];
double EmaOfEmaOfEma[];
double Var1[];
double Var2[];
double Var3[];
double Var4[];
double Var5[];
 int i,limit,limit2,limit3;
 
int n=4, Av=12, Av1=8, Av2=10;
extern int Apply_To_Price=1; 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers(5);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,Var1);
   SetIndexBuffer(1,TemaBuffer);
   SetIndexBuffer(2,Ema);
   SetIndexBuffer(3,EmaOfEma);
   SetIndexBuffer(4,EmaOfEmaOfEma);

   IndicatorShortName("TEMA("+EMA_period+")");
    
    
    
    switch(Apply_To_Price)
    
      {
      case 1:
         {txt="Open";break;}
      case 2:
         {txt="High";break;}
      case 3:
         {txt="Low"; break;}
      case 4:
         {txt="Median"; break;}
      case 5:
         {txt="Typical"; break;}
      case 6:
         {txt="WghtdClose"; break;}
   	default: 
         {txt="Close";}
      }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
//----

  int counted_bars=IndicatorCounted();
  if (counted_bars==0)
      {
      limit=Bars-1;
      limit2=limit-EMA_period;
      limit3=limit2-EMA_period;
      }
   if (counted_bars>0)
      {
      limit=Bars-counted_bars-1;
      limit2=limit;
      limit3=limit2;
      }
      
    for (i=limit3;i>=0;i--) 
    {
   Var1[i] = Tema(Apply_To_Price,n);
  
    //Alert(Var1[i]);
    }
     
 
   return(0);
  }
    
double Tema(int Cena, int cykl)
{
    Ema[i]=iMA(NULL,0,cykl,0,MODE_EMA,Cena,i);
    EmaOfEma[i]=iMAOnArray(Ema,0,cykl,0,MODE_EMA,i);
    EmaOfEmaOfEma[i]=iMAOnArray(EmaOfEma,0,cykl,0,MODE_EMA,i);  
    TemaBuffer[i]=3*Ema[i]-3*EmaOfEma[i]+EmaOfEmaOfEma[i];
   //Alert(TemaBuffer[i]);
  
return(TemaBuffer[i]);
}




Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Nieprzeczytany post autor: Pierz Andrzej »

a cos Ty kolego teraz to tak pogmatwal :)
powiedz mi co chcesz osiagnac pzez przypisanie do Var ?? a ja postaram Ci sie pomoc ;)

pozdrawiam
Andrzej Pierz
z poważaniem
Andrzej Pierz
FOREX-SERVICE

lukibest
Bywalec
Bywalec
Posty: 7
Rejestracja: 23 lut 2012, 19:24

Nieprzeczytany post autor: lukibest »

Moze bedzie faktycznie łatwiej, chce przerobić z amibrokera tą funkcję

Kod: Zaznacz cały

n=25; Av=12; Av1=16; Av2=2; stp=2;

Var1= TEMA(Close,n);
Var2= TEMA(var1,av);
Var3= (var1-var2)+var1;
Var1= TEMA(var3,av1);
Var4= MA((var1-var2)+var1,av2);
Var5=(Var1-Var2)+Var1;

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Nieprzeczytany post autor: Pierz Andrzej »

Witam

troche zabawy z tym bedziesz mial ;)

jezeli wzor jest ok dla TEMA

to przedewszystkim musisz cos tu pozmieniac :

Kod: Zaznacz cały

Var1= TEMA(Close,n); 
Var2= TEMA(var1,av);
bo dla Var1 przekazujesz jako pierwszy parametr int z jakiej ceny ma obliczac srednia
a przy Var2 jako pierwszy parametr w swojej funkcji bedziesz chcial przekazac double

pozdrawiam
Andrzej

lukibest
Bywalec
Bywalec
Posty: 7
Rejestracja: 23 lut 2012, 19:24

Nieprzeczytany post autor: lukibest »

Dopisalem sygnaly buy i sell do tych funkcji i skopiowalem do nowo utworzonego pliku strategii ale cos przyczepia sie do SetIndexBuffer(), Rozumiem ze nie moge w pliku strategi miec wyswietlania ani obliczen tylko warunki buy,sell ? chcialbym zrobic strategie gdy Var1 przetnie(mniejsze) Var4 to buy. Mozesz mnie naprowadzic jak to zrobic zebym mogl potestowac... jakos importowac caly plik tam gdzie sa obliczana TEMA ze zmiennymi i tylko dac warunek ?

ODPOWIEDZ