kod do poprawki

O jezykach programowania w platformach i nie tylko.
gregorio99
Gaduła
Gaduła
Posty: 231
Rejestracja: 09 lut 2010, 21:16

kod do poprawki

Nieprzeczytany post autor: gregorio99 »

Chciałbym gdy zakończy się tworzenie białej świeczki system wyświetlił mi dany komunikat. Co jest źle w tym skrypcie, że ciągle jest wyświetlany komunikat, non stop i przy każdej świeczce?

Kod: Zaznacz cały

bool findd()
{
   if (Close[1] > Open[1])     // biala
  
      return(true);
  }

int start()
{
    if (findd())
      {
         Alert("Swieczka biala");
       }
 
   return(0);
}

LowcaG
Pasjonat
Pasjonat
Posty: 1068
Rejestracja: 05 paź 2007, 15:39

Nieprzeczytany post autor: LowcaG »

funkcja start wywoluje sie co Tick, czyli co tick aktualnej swieczki jest spelnion warunek close[1]>open[1] (jezeli faktycznie byla swieczka biala).

musisz funkcje find wywolywac tylko jak jest nowa swieczka, czyli uzywasz funkcji

Kod: Zaznacz cały

bool NewBar()
{
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
      return(false);
   }
}  
a w Twoim start przykladowo

Kod: Zaznacz cały

 if(NewBar())
    if ( (find())
      Alert("swieszka biala");

gregorio99
Gaduła
Gaduła
Posty: 231
Rejestracja: 09 lut 2010, 21:16

Nieprzeczytany post autor: gregorio99 »

LowcaG - dzięki za dobre naprowadzenie, właśnie tak czułem, że akurat czegoś podobnego mi brakuje.

Tak czy owak kod nie działa jeszcze tak jak należy, tylko że teraz nie wiem, co może być tego przyczyną. Chyba że zrobiłem jakiś głupi błąd. Za wszelkie uwagi będę wdzięczny

Kod: Zaznacz cały

bool NewBar()
{
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
      return(false);
   }
}  

bool findd()
{
   if (Close[1] > Open[1])     // biala
 
      return(true);
  }

int start()
{
    if(NewBar()){
         if (findd()){
            Alert("swieczka biala"); }}

 
   return(0);
} 

LowcaG
Pasjonat
Pasjonat
Posty: 1068
Rejestracja: 05 paź 2007, 15:39

Nieprzeczytany post autor: LowcaG »

moze w find dodaje else i return(False), tak na szybko nie przychodzi mi nic do glowy

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

Nieprzeczytany post autor: Pierz Andrzej »

prawdopodobnie błąd masz tutaj :

Kod: Zaznacz cały

bool findd() 
{ 
   if (Close[1] > Open[1])     // biala 
  
      return(true); 
  }

zamień na :

Kod: Zaznacz cały

bool findd() 
{ 
   if (Close[1] > Open[1])     return(true); // biala 
  
      
  }
wstawiajac komentarz po if-ie zakończyłeś warunek
wiec return byl dla kazdego wywołania

pzdr Andrzej
z poważaniem
Andrzej Pierz
FOREX-SERVICE

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

Nieprzeczytany post autor: Tig3r »

Pierz Andrzej
Ale to jest to samo :) komentarz jest ignorowany a po if jest szukana pierwsza lina dla niego lub blok {}
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

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

Nieprzeczytany post autor: Pierz Andrzej »

Tig3r pisze:Pierz Andrzej
Ale to jest to samo :) komentarz jest ignorowany a po if jest szukana pierwsza lina dla niego lub blok {}
ja chyba faktycznie wczoraj przesadziłem bo słabo z myśleniem :D

... hmmm to powiem sczerze że nie widze innego błedu :)

no chyba ze faktycznie cza dac

Kod: Zaznacz cały

bool findd() 
{ 
   if (Close[1] > Open[1])     // biala 
  
      return(true); 
      return(false);
  }
no ale i tak powinna po niespelnieniu wrunku funkcja zwracac false

pzdr Andrzej

ODPOWIEDZ