Skrypt obrazujący czyszczenie stopów

O jezykach programowania w platformach i nie tylko.
MkubuxK
Pasjonat
Pasjonat
Posty: 1051
Rejestracja: 20 maja 2009, 18:27

Skrypt obrazujący czyszczenie stopów

Nieprzeczytany post autor: MkubuxK »

Mam problem z funkcją ObjectCreate. Nie wiem czemu ale nie rysuje mi strzałek odpowiednio nad świeczką lub pod świeczką.

Napisałem prostą funkcję obrazującą czyszczenie stopów na danym TFie ale coś jest nie tak. Jest już dość późno a jutro chciałbym ją dalej rozbudować a tak tkwie w miejscu. Mam nadzieję że ktoś szybko wyłapie błąd.

Kod: Zaznacz cały

for(int a=1;a<1000;a++){
      //sprawdza czy spadkowa
         if(Open[a]-Close[a]>=0) { //spadkowa


         // pobiera najwieksza wartosc dla ostatnich x swieczek i porownuje ja z najwieksza wartoscia ostatniej zamknietej swieczki. czyli jesli High poprzedniej swieczki bylo ponad highest 5 ostatnich swieczek a zamknela sie spadkowo to oznacza ze wyczyscili stopy i obrali kierunek spadkowy


              if(High[a]>High[iHighest("EURUSD",0,MODE_HIGH,(a+liczbaSwieczek),(a+1))]){

            // jesli spelnia warunki rysuje odpowiednia strzałkę

                  ObjectCreate(a,OBJ_ARROW,0,Time[a],High[a]);
                  ObjectSet(a,OBJPROP_ARROWCODE,242);
              }
      
      
          }
          
          
        else{
         
          if(Low[a]<Low[iLowest("EURUSD",0,MODE_LOW,(a+liczbaSwieczek),(a+1))]){
          
               ObjectCreate(a,OBJ_ARROW,0,Time[a],Low[a]);
               ObjectSet(a,OBJPROP_ARROWCODE,241);
            
          }
  
       }
      }
fx-forum

krys3000
Stały bywalec
Stały bywalec
Posty: 47
Rejestracja: 20 wrz 2011, 09:41

Nieprzeczytany post autor: krys3000 »

tak na pierwszy rzut oka to bym zamiast "a+liczbaSwieczek" wpisał "liczbaSwieczek".
Krzysiek

MkubuxK
Pasjonat
Pasjonat
Posty: 1051
Rejestracja: 20 maja 2009, 18:27

Nieprzeczytany post autor: MkubuxK »

krys3000 pisze:tak na pierwszy rzut oka to bym zamiast "a+liczbaSwieczek" wpisał "liczbaSwieczek".
Krzysiek
Musi być a+ liczbaswieczek, gdyż przy następnej wywolaniu w petli ( a wywoluje sie ona 1000 razy ) musi cofać się coraz bardziej do tyłu. Przy samym liczbaSwieczek funkcja przestała by działać po liczbie świeczek.
fx-forum

krys3000
Stały bywalec
Stały bywalec
Posty: 47
Rejestracja: 20 wrz 2011, 09:41

Nieprzeczytany post autor: krys3000 »

Cofanie zapewnia Ci parametr a, za każdym razem cofasz się o jedną świeczkę do tyłu, natomiast "a+liczbaSwieczek" wydłuża Ci za każdym wywołaniem okres dla jakiego badasz. Załóżmy, że LiczbaSwieczek =10 to dla a=1 okres badany będzie 11, dla a=2 okres=12, przy czym okres liczony jest zawsze od świeczki,której dotyczy ostatni parametr a,a nie od bieżącej świeczki jak zapewne sądzisz.. Tak więc powiększanie długości okresu nie jest potrzebne.

Dodano po 29 minutach:

No i oczywiście błąd,którego szukałeś to a jako parametr funkcji

Kod: Zaznacz cały

ObjectCreate(a,OBJ_ARROW,0,Time[a],Low[a]); 
ObjectSet(a,OBJPROP_ARROWCODE,241); 
musi być zamienione na DoubleToStr(a,1)

Kod: Zaznacz cały

ObjectCreate(DoubleToStr(a,1),OBJ_ARROW,0,Time[a],Low[a]); 
ObjectSet(DoubleToStr(a,1),OBJPROP_ARROWCODE,241); 
Parametr musi być typu string.

Krzysiek

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

Nieprzeczytany post autor: Pierz Andrzej »

krys3000 pisze:musi być zamienione na DoubleToStr(a,1)
nie musi ;) ... samo sobie przekonwertuje ;)

co do reszty masz jka najbardziej racje

nie

Kod: Zaznacz cały

(a+liczbaSwieczek)
tylko

Kod: Zaznacz cały

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

krys3000
Stały bywalec
Stały bywalec
Posty: 47
Rejestracja: 20 wrz 2011, 09:41

Nieprzeczytany post autor: krys3000 »

też sądziłem, że przekonwertuje samo, ale testy wykazały, że w tym wypadku nie ma automatycznej konwersji.
Otrzymujemy komunikat:

2011.11.21 13:51:57 Czyszczenie_stopow EURUSD,M5: name parameter for ObjectSet function must be a string

I chyba dlatego MkubuxK nie mógł znaleźć przyczyny.

Krzysiek

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

Nieprzeczytany post autor: Pierz Andrzej »

No tak , blad faktycznie jest .. hmm bylem pewien ze przekonwertuje :D

no ale zeby nie bylo bledu to polecal bym dwa wyjscia :

Kod: Zaznacz cały

(""+a,.....)

Kod: Zaznacz cały

(StringContacte("",a),...)
pozdrawiam
Andrzej Pierz
z poważaniem
Andrzej Pierz
FOREX-SERVICE

MkubuxK
Pasjonat
Pasjonat
Posty: 1051
Rejestracja: 20 maja 2009, 18:27

Nieprzeczytany post autor: MkubuxK »

krys3000 pisze:Cofanie zapewnia Ci parametr a, za każdym razem cofasz się o jedną świeczkę do tyłu, natomiast "a+liczbaSwieczek" wydłuża Ci za każdym wywołaniem okres dla jakiego badasz. Załóżmy, że LiczbaSwieczek =10 to dla a=1 okres badany będzie 11, dla a=2 okres=12, przy czym okres liczony jest zawsze od świeczki,której dotyczy ostatni parametr a,a nie od bieżącej świeczki jak zapewne sądzisz.. Tak więc powiększanie długości okresu nie jest potrzebne.

Dodano po 29 minutach:

No i oczywiście błąd,którego szukałeś to a jako parametr funkcji

Kod: Zaznacz cały

ObjectCreate(a,OBJ_ARROW,0,Time[a],Low[a]); 
ObjectSet(a,OBJPROP_ARROWCODE,241); 
musi być zamienione na DoubleToStr(a,1)

Kod: Zaznacz cały

ObjectCreate(DoubleToStr(a,1),OBJ_ARROW,0,Time[a],Low[a]); 
ObjectSet(DoubleToStr(a,1),OBJPROP_ARROWCODE,241); 
Parametr musi być typu string.

Krzysiek
Dziękuję za pomoc. Wydawało mi się że Int konwertuje automatycznie bo nie widziałem funkcji do konwersji Int do Stringa. Ale prędzej czy później bym do tego doszedł bo widziałem przykłady właśnie z tą funkcją. Natomiast ten drugi szczegół jest znacznie bardziej istotny bo wpływa na cały algorytm - tutaj głowiłbym się znacznie dłużej co jest nie tak że część strzałek rysuje dobrze a potem już nie. Siadam więc dalej rozwijać pomysł.
fx-forum

krys3000
Stały bywalec
Stały bywalec
Posty: 47
Rejestracja: 20 wrz 2011, 09:41

Nieprzeczytany post autor: krys3000 »

Andrzej, wyjaśnij mi proszę czemu lepiej sklejać stringi niż konwertować DoubleToStr(). Sklejanie działa szybciej?

Krzysiek

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

Nieprzeczytany post autor: Pierz Andrzej »

W tym przypadku pwenie szybciej i lepiej jest uzycia "sklejania" niz konwersj za pomoca doubletostr chocby dlatego ze zmienna a jest zmienna int nie double .....

no i napewno roznily by sie nazwy

moja by byla np 1 Twoja 1.0 :) ale to taka "mala bzdura"

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

ODPOWIEDZ