ICustom z KAMA

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
oiro
Pasjonat
Pasjonat
Posty: 423
Rejestracja: 05 mar 2008, 00:40

ICustom z KAMA

Nieprzeczytany post autor: oiro »

Witam,

mam problem, piszę strategie opartą na zewnętrznym wskaźniku KAMA i chciałbym odnieść się do niego. Wartość wskaźnika odczytuje z funkcji
KAMA_1P=iCustom(Symbol(),0,"KAMA",kama_period_1,fast_ma_period_1,slow_ma_period_1,0,0);

i tutaj problem ponieważ zmiennej nie pobiera, dlaczego??
Jak testue strategie to po przerwaniu pojawiają się na wykresie linie średnich ale wartość KAMA_1P jest cały czas trwania strategi niezmiena i jakaś z kosmosu 2434554646- coś w tym stylu.
Jak to naprawić??
Z góry wielkie dzięki za pomoc
Pozdrawiam

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

Nieprzeczytany post autor: Tig3r »

oiro pisze:2434554646-
Taka mniej więcej jest EMPTY_VALUE czyli pusta wartość

jednym słowem nic nie pobierasz, zrób sobie Alert przy tym i sprawdzisz czy się w ogóle ten kod wykonuje, jeśli tak sprawdź czy ustawienie shift=1 pomoże
======================================================
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 »

Ja bym dodał Twoją zdefiniowaną wartość wskaźnika do

Kod: Zaznacz cały

Comment() 
i na wykresie sprawdzał, czy wyświetla wartość jaką powinien.
A kombinował bym raczej z numerem buforu. Nie znam tego wskaźnika.
Ile ma buforów ? Ty wywołujesz pierwszy ( "0" ).
Solą życia jest kasa.

Awatar użytkownika
CoVal
Gaduła
Gaduła
Posty: 320
Rejestracja: 06 paź 2005, 22:45

Nieprzeczytany post autor: CoVal »

1. rzuc tez okiem w logi - moze tam wpisuje ci cos ciekawego, np. ze nie znajduje wskaznika o nazwie "KAMA"...

2. pierwszy bufor bedzie mial numer 0, ale to nie znaczy, ze jest on tym ktory chcesz tak na prawde wyciagnac... poeksperymentuj z kolejnymi numerami...

chyba, ze masz nieskompilowany kod wskaznika KAMA i jestes w stanie precyzyjne ustalic ze na pewno wyciagasz ta wartosc jaka chcesz....

3. poeksperymentuj tez z parametrami jakie tam wrzucasz - byc moze jest ich za malo lub za duzo lub sa zlego typu....

najlepiej tak jak podpowiada personov - wrzuc sobie do Comment wszystkie mozliwe kombinacje buforow i parametrow - w ten sposob znajdziesz ten wlasciwy.

Awatar użytkownika
oiro
Pasjonat
Pasjonat
Posty: 423
Rejestracja: 05 mar 2008, 00:40

Nieprzeczytany post autor: oiro »

dziękuje za podpowiedzi, ale to już zrobiłem, właśnie alert pokazuje wartość wskaźnika, błędów nie wywala, kod wskaźnika:
//+------------------------------------------------------------------+
//| KAMA.mq4 |
//| Copyright? 2009, Walter Choy. |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright? 2009, Walter Choy."
#property link ""

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_color2 Red
#property indicator_color3 Red
//---- input parameters
extern int kama_period = 10;
extern double fast_ma_period = 2.0;
extern double slow_ma_period = 30.0;
//---- buffers
double KAMA[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,KAMA);
SetIndexLabel(0, "KAMA");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
//----
int i = Bars - counted_bars;

double fastest = 2 / (fast_ma_period + 1);
double slowest = 2 / (slow_ma_period + 1);

while(i>0){
double er = 1;
double signal = MathAbs(Close - Close[i+kama_period]);
double noise = 0;
for (int j=0; j<kama_period; j++)
noise += MathAbs(Close[i+j] - Close[i+j+1]);
if (noise > 0)
er = signal / noise;
double sc = MathPow((er * (fastest - slowest) + slowest), 2);
KAMA = KAMA[i+1] + sc * (Close - KAMA[i+1]);
i--;
}
//----
return(0);
}
//+------------------------------------------------------------------+

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

Nieprzeczytany post autor: personov »

Wskaźnik KAMA nie ma wartości na aktualnej świecy. Pierwsza dostępna jest na świecy poprzedniej. Daj we wskaźniku shift 1 :

Kod: Zaznacz cały

double kama=iCustom(Symbol(),Period(),"KAMA",10,2.0,30.0,0,1);
Z resztą zobacz na wykres wskaźnika - linia rysowana jest do świecy poprzedniej. Na aktualnej świecy linni nie ma.
Solą życia jest kasa.

ODPOWIEDZ