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
ICustom z KAMA
Taka mniej więcej jest EMPTY_VALUE czyli pusta wartośćoiro pisze:2434554646-
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ć..
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
Ja bym dodał Twoją zdefiniowaną wartość wskaźnika do 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" ).
Kod: Zaznacz cały
Comment()
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.
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.
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.
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);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| 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);
}
//+------------------------------------------------------------------+
Wskaźnik KAMA nie ma wartości na aktualnej świecy. Pierwsza dostępna jest na świecy poprzedniej. Daj we wskaźniku shift 1 :
Z resztą zobacz na wykres wskaźnika - linia rysowana jest do świecy poprzedniej. Na aktualnej świecy linni nie ma.
Kod: Zaznacz cały
double kama=iCustom(Symbol(),Period(),"KAMA",10,2.0,30.0,0,1);
Solą życia jest kasa.