PDA

Zobacz pełną wersję : Nie mogę tego dłużej! (iMaOnArray)



garasox
05-02-2010 09:08, 09:08
Cześć wszystkim! Przejdę od razu do rzeczy:

To jest kod:


podwójne AUX [22];
podwójne EMASMAANGLE = 0;
int j = 0;
dla (j = 0; jlt; 21; j )
AUX [j] = iCustom (NULL, 0, SMAAngle, 0, j);

EMASMAANGLE = iMAOnArray (AUX, 21,21,0, MODE_EMA, j);

Alert (EMASMAANGLE);


Czy nie powinienem dać mi ostrzeżenia z EMA (21) o ostatnich 21 wartościach wskaźnika kąta EMA?
To zwraca 0 zamiast !!

Dziękuję Ci!

ICORSAC
12-06-2021 19:11, 19:11
Podczas publikowania takich problemów należy podać więcej szczegółów. Zwykle ignoruję takie niekompletne posty. Zgaduję, że widzisz wyskakujące okienko z 0 jako kąt. Jeśli tak, to jest to prosty problem - musisz sformatować wartość EMASMANGLE na łańcuch z podwójnego. W tym celu użyj funkcji DoubleToString (). Szczegółowe informacje znajdziesz w Pomocy. Jeśli się mylę, musisz podać więcej szczegółów.

CRIGUOX
12-06-2021 20:32, 20:32
Również, jeśli publikujesz kod, lepiej użyć tagów kodu forum. Ułatwia czytanie, a prawdopodobieństwo otrzymania odpowiedzi jest większe. Luks

mruizh
12-06-2021 21:53, 21:53
Przykro mi, spędziłem tyle godzin próbując to naprawić, że założyłem, że przez umieszczenie kodu ktoś będzie wiedział, który problem był lol, zmieniłem ten kod na ten: Wstawiony kod podwójny AUX # 91; 21 # 93 ;; podwójne EMASMAANGLE = 0; int j = 0; dla (j = 0; jlt; 21; j ) {AUX # 91; 20-j # 93; = iCustom (NULL, 0, SMAAngle, 0, j); } EMASMAANGLE = iMAOnArray (AUX, 21,21,0, MODE_EMA, 0); Alert (DoubleToStr (EMASMAANGLE, 8)); Jednym z problemów jest to, czego już nauczyłeś mnie poprawiać. Teraz, gdy alarm popup jest wyświetlany poprawnie, potrzebuję wartości, którą pokazuje ona jako EMA (21) wartości przechowywanych w zmiennej AUX. Ale wartość, którą otrzymuję, nie jest zgodna z wartością na wykresie i powinny być takie same. Już sprawdziłem wartości przechowywane w AUX z alertami i są one przechowywane poprawnie, więc błąd znajduje się we Wprowadzonym kodzie iMAOnArray (AUX, 21,21,0, MODE_EMA, 0); Przy okazji sprawdziłem również zmianę kolejności danych AUX i nie wykonałem żadnej pracy. Jeszcze jedno: dziękuję za pomoc!

ICORSAC
12-06-2021 23:13, 23:13
Aby skorygować fałszywe wrażenie, które ty i inni mająście, większość programistów nie może po prostu spojrzeć na dziesiątki linii kodu i dowiedzieć się, co jest nie tak, chyba że jest to oczywiste. Nawet przy naszym własnym kodzie nie jest to możliwe i staje się procesem eliminacji. Znowu zgaduję. Wydaje mi się, że chcesz obliczyć wartości dla całej tablicy, nie tylko ostatnich 21 wartości. Myślę, że wywołanie powinno być iMAOnArray (AUX, 0, 21,0, MODE_EMA, j);

mruizh
12-07-2021 00:34, 00:34
Tak, mam na myśli to, że spędziłem tak dużo czasu na tym, że nie mogłem zrozumieć, co mówisz Jeśli chodzi o to, co próbuję uzyskać, postaram się opisać to, więc nie musisz zgadywać hehe .... Mam wskaźnik (SMAAngle), który ma jedną wartość liczbową z każdym taktem (nie jest to ciągła linia, tylko 1 wartość na każdym takcie) Następnie nad tym wskaźnikiem wstawiam EMA z okresem = 21 i przesuń 0, zastosowany oczywiście do wartości ten wskaźnik. To, co chcę uzyskać, to tylko ostatnia wartość tej EMA. Tak więc z kodowaniem: * Tablica AUX ma 21 (i tylko 21) ostatnich wartości wskaźnika SMAAngle * Sprawdziłem wartości w tablicy AUX i prawidłowo zapisują wartości wskaźnika SMAAngle * Wziąłem Wstawiony kod EMASMAANGLE = iMAOnArray (AUX, 21,21,0, MODE_EMA, 0); z iteracji, ponieważ chcę tylko najnowszej wartości. Czy EMASMAANGLE nie powinien zwracać ostatniej wartości EMA (21) wskaźnika SMAAngle?

ICORSAC
12-07-2021 01:55, 01:55
Jeśli interesuje Cię tylko wartość najnowszego paska, kod, który napiszesz, powinien zadziałać. Powinienem jednak wskazać, że inne wartości nie będą właściwe i założyłem, że to był problem. Nie jestem bardzo znany z IMAOnArray (), więc to, co zwykle robię w tej sytuacji, to znajdowanie działającego kodu i porównanie go z moim kodem, a następnie spróbuj znaleźć problem poprzez proces eliminacji. Istnieje kilka wskaźników, które pochodzą z MT4, takich jak MACD i ATR, które używają IMAOnArray (). Sugerowałbym, żebyś się z nimi zapoznał i być może znajdziesz problem.

vctrgrr
12-07-2021 03:16, 03:16
I hope this can provide some help. PHP Code: <code><span style=”color: #000000”> <span style=”color: #0000BB”></span><span style=”color: #FF8000”>//----buffers
</span><span style=”color: #0000BB”>doubleAUX</span><span style=”color: #007700”>#91;#93;;
</span><span style=”color: #0000BB”>doubleEMASMAANGLE</span><span style=”color: #007700”>#91;#93;;
</span><span style=”color: #FF8000”>//------------------------
</span><span style=”color: #007700”>for(</span><span style=”color: #0000BB”>intj</span><span style=”color: #007700”>=</span><span style=”color: #0000BB”>0</span><span style=”color: #007700”>;</span><span style=”color: #0000BB”>j</span><span style=”color: #007700”>lt;</span><span style=”color: #0000BB”>21</span><span style=”color: #007700”>;</span><span style=”color: #0000BB”>j</span><span style=”color: #007700”> )
{
</span><span style=”color: #0000BB”>AUX</span><span style=”color: #007700”>#91;</span><span style=”color: #0000BB”>j</span><span style=”color: #007700”>#93;=</span><span style=”color: #0000BB”>iCustom</span><span style=”color: #007700”>(</span><span style=”color: #0000BB”>NULL</span><span style=”color: #007700”>,</span><span style=”color: #0000BB”>0</span><span style=”color: #007700”>,</span><span style=”color: #DD0000”>”SMAAngle”</span><span style=”color: #007700”>,</span><span style=”color: #FF8000”>/*entercustomindiorparametershereifnecessary*/</span><span style=”color: #007700”>,</span><span style=”color: #0000BB”>0</span><span style=”color: #007700”>,</span><span style=”color: #0000BB”>j</span><span style=”color: #007700”>);
}
</span><span style=”color: #0000BB”>intcounted_bars</span><span style=”color: #007700”>=</span><span style=”color: #0000BB”>IndiorCounted</span><span style=”color: #007700”>();
</span><span style=”color: #0000BB”>intlimit</span><span style=”color: #007700”>=</span><span style=”color: #0000BB”>Bars</span><span style=”color: #007700”>-</span><span style=”color: #0000BB”>counted_bars</span><span style=”color: #007700”>;
for(</span><span style=”color: #0000BB”>inti</span><span style=”color: #007700”>=</span><span style=”color: #0000BB”>0</span><span style=”color: #007700”>;</span><span style=”color: #0000BB”>i</span><span style=”color: #007700”>lt;</span><span style=”color: #0000BB”>limit</span><span style=”color: #007700”>;</span><span style=”color: #0000BB”>i</span><span style=”color: #007700”> )
{
</span><span style=”color: #0000BB”>EMASMAANGLE</span><span style=”color: #007700”>#91;</span><span style=”color: #0000BB”>i</span><span style=”color: #007700”>#93;=</span><span style=”color: #0000BB”>iMAOnArray</span><span style=”color: #007700”>(</span><span style=”color: #0000BB”>AUX</span><span style=”color: #007700”>,</span><span style=”color: #0000BB”>Bars</span><span style=”color: #007700”>,</span><span style=”color: #0000BB”>21</span><span style=”color: #007700”>,</span><span style=”color: #0000BB”>0</span><span style=”color: #007700”>,</span><span style=”color: #0000BB”>MODE_EMA</span><span style=”color: #007700”>,</span><span style=”color: #0000BB”>i</span><span style=”color: #007700”>);
</span><span style=”color: #0000BB”>Alert</span><span style=”color: #007700”>(</span><span style=”color: #0000BB”>DoubleToStr</span><span style=”color: #007700”>(</span><span style=”color: #0000BB”>EMASMAANGLE</span><span style=”color: #007700”>#91;</span><span style=”color: #0000BB”>i</span><span style=”color: #007700”>#93;,</span><span style=”color: #0000BB”>8</span><span style=”color: #007700”>));
}
</span><span style=”color: #0000BB”></span> </span> </code>

mruizh
12-07-2021 04:36, 04:36
Ok, będę badał wskaźniki, które sugerujesz CodeMeister. Unaiz, kod, który udostępniłeś, otrzyma wyskakujące okienko z wartością 0. Dziękuję za pomoc i czas, jeśli dostanę rozwiązanie, opublikuję to.

ICORSAC
12-07-2021 05:57, 05:57
Dziś rano przypomniałem sobie coś o iMAOnArray (). Nie można go używać w EA. Pamiętam, że zmagałem się z tym przez wiele godzin - tak jak ty i nareszcie, gdy szukałem przykładowego kodu, odkryłem ten wątek dyskusji, który potwierdził moje podejrzenia. W efekcie użyłem iMAOnArray () w indykatorze i pobierając wartości za pomocą iCustom (). Niestety nie pamiętam tego w moich wcześniejszych odpowiedziach. Nie trać więcej czasu, wątpię, czy da się to zrobić.
http://forum.mql4.com/9228

mruizh
12-07-2021 07:18, 07:18
Dziękuję bardzo!! Myślę, że najmądrzejszym rozwiązaniem będzie teraz zastosowanie formuły EMA21 do tablicy, którą otrzymałem z danymi. Sprawdzałem, ale nie mogę znaleźć formuły EMA używanej w metatrader, użyłem tej podanej w poniższym linku:
http://stockcharts.com/school/doku.php?id=chart_school:technical_indiors:moving_ averages#exponential_moving_aPo użyciu tej formuły otrzymałem następujący kod: Wstawiony kod double AUX1 = 0; podwójne EMASMAANGLE = 0; int j = 0; dla (j = 0; jlt; 21; j ) {AUX1 = EMASMAANGLE; EMASMAANGLE = iCustom (NULL, 0, SMAAngle, 0, j 21) AUX1; } AUX1 = EMASMAANGLE; EMASMAANGLE = AUX121; j = 0; dla (j = 0; jlt; 21; j ) {AUX1 = EMASMAANGLE; EMASMAANGLE = AUX1 ((iCustom (NULL, 0, SMAAngle, 0, 20-j) -AUX1))11; }/EMA (aktualny) = ((Cena (aktualny) - EMA (prev)) x Mnożnik) EMA (prev) Alert (DoubleToStr (EMASMAANGLE, 8)); Nie daje mi dokładnej liczby obliczonej przez wykres, ale myślę, że jest tak blisko, jak to zrobię ^ _ ^ Thx ponownie

alxokgooxstero
12-07-2021 08:39, 08:39
Cześć wszystkim! Przejdę od razu do rzeczy: Oto kod: podwójne AUX [22]; podwójne EMASMAANGLE = 0; int j = 0; dla (j = 0; jlt; 21; j ) AUX [j] = iCustom (NULL, 0, SMAAngle, 0, j); EMASMAANGLE = iMAOnArray (AUX, 21,21,0, MODE_EMA, j); Alert (EMASMAANGLE); Czy nie powinienem dać mi ostrzeżenia z EMA (21) z ostatnich 21 wartości wskaźnika EMAAngle? To zwraca 0 zamiast !! Dziękuję Ci!
Cześć Armagedoom, Możesz użyć podstawowych obliczeń ema: Kod PHP: <code> <span style = ”color: # 000000”> <span style = ”color: # 0000BB”> </span> <span style = ”color: # FF8000 ”>/ConvertEmaPeriod (21) toSmoothFactor:
</span> <span style =” color: # 0000BB ”> doubleSF </span> <span style =” color: # 007700 ”> = </span > <span style = ”color: # 0000BB”> 2.0 </span> <span style = ”color: # 007700”>(</span> <span style = ”color: # 0000BB”> 21 </span> <span style = ”color: # 007700”> </span> <span style = ”color: # 0000BB”> 1 </span> <span style = ”color: # 007700”>);
<span> <span style = ”color: # FF8000”>/Defineinitialemavalue:
</span> <span style = ”color: # 0000BB”> doubleEmaSmaAngle </span> <span style = ”color: # 007700 ”> = </span> <span style =” color: # 0000BB ”> iCustom </span> <span style =” color: # 007700 ”> (</span> <span style =” color: # 0000BB ” > NULL </span> <span style = ”color: # 007700”>, </span> <span style = ”color: # 0000BB”> 0 </span> <span style = ”color: # 007700”>, </span> <span style = ”color: # DD0000”> ”SMAAngle” </span> <span style = ”color: # 007700”>, </span> <span style = ”color: # 0000BB”> 0 </span> <span style = ”color: # 007700”>, </span> <span style = ”color: # 0000BB”> 21 </span> <span style = ”color: # 007700”>);
</span > <span style = ”color: # FF8000”>/Iteratethenextema, startfromtheoldestdata:
</span> <span style = ”color: # 007700”> for (</span> <span style = ”color: # 0000BB ”> j </span> <span style =” color: # 007700 ”> = </span> <span style =” color: # 0000BB ”> 20 </span> <span style =” color: # 007700 ”>; </Span> <span style =” color: # 0000BB ”> j </span> <span style =” color: # 007700 ”> gt; = </span> <span style =” color: # 0000BB ”> 0 </span> <span style =” color: # 007700 ”>; </span> <span style =” color: # 0000BB ”> j </span> <span style =” color: # 007700 ”> -)
</span> <span style = ”color: # 0000BB”> EmaSmaAngle </span> <span style = ”color: # 007700”> = </span> <span style = ”color: # 0000BB ”> EmaSmaAngle </span> <span style =” color: # 007700 ”> </span > <span style = ”color: # 0000BB”> SF </span> <span style = ”color: # 007700”> * (</span> <span style = ”color: # 0000BB”> iCustom </span> <span style = ”color: # 007700”> (</span> <span style = ”color: # 0000BB”> NULL </span> <span style = ”color: # 007700”>, </span> <span style = ”color: # 0000BB”> 0 </span> <span style = ”color: # 007700”>, </span> <span style = ”color: # DD0000”> ”SMAAngle” </span> <span style = ”color: # 007700”>, </span> <span style = ”color: # 0000BB”> 0 </span> <span style = ”color: # 007700”>, </span> <span style = ”Color: # 0000BB”> j </span> <span style = ”color: # 007700”>) - </span> <span style = ”color: # 0000BB”> EmaSmaAngle </span> <span style = ” color: # 007700 ”>);
</span> <span style =” color: # 0000BB ”> Alert </span> <span style =” color: # 007700 ”> (</span> <span style = ”color: # 0000BB”> EmaSmaAngle </span> <span style = ”color: # 007700”>);
</span> <span style = ”color: # 0000BB”> </span> </span> </code>

garasox
12-07-2021 09:59, 09:59
Mam teraz ten sam problem, poważnie sfrustrowany.

Dziś rano przypomniałem sobie coś o iMAOnArray (). Nie można go używać w EA. Pamiętam, że zmagałem się z tym przez wiele godzin - tak jak ty i nareszcie, gdy szukałem przykładowego kodu, odkryłem ten wątek dyskusji, który potwierdził moje podejrzenia. W efekcie użyłem iMAOnArray () w indykatorze i pobierając wartości za pomocą iCustom (). Niestety nie pamiętam tego w moich wcześniejszych odpowiedziach. Nie trać więcej czasu, wątpię, czy da się to zrobić.
http://forum.mql4.com/9228Używam iMAOnArray () w moim wskaźniku, i nadal zwraca 0 i zawiedli całą moją pracę.

ICORSAC
12-07-2021 11:20, 11:20
Istnieje wiele próbek kodu za pomocą iMAOnArray () w wskaźnikach. Wystarczy przejrzeć kilka i porównać je z kodem.