gdzie jest błąd

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
NiceFox
Pasjonat
Pasjonat
Posty: 454
Rejestracja: 05 lis 2009, 13:22

gdzie jest błąd

Nieprzeczytany post autor: NiceFox »

nie kompiluje się może ktoś znajdzie błąd

Kod: Zaznacz cały

#property copyright "Copyright © 2010, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+

int start()
 
int nieMaOtwartych();
{
int pos=0;
for (int i=0; i< OrdersTotal();i++)
{
if OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if (OrderSymbol()==Symbol())
   if(OrderType()==OP_BUY) pos++;
   }
   
   return (pos);
   }
Pieniądze rosną na drzewie cierpliwości.

Awatar użytkownika
gieroj
Stały bywalec
Stały bywalec
Posty: 33
Rejestracja: 25 lut 2010, 16:11

Nieprzeczytany post autor: gieroj »

Nie sprawdzałem ale obstawiam

Kod: Zaznacz cały

 int nieMaOtwartych(); 
usuń ;
"Dzień dobry, mam na imię Paweł i jestem przegrywającym."

green7
Maniak
Maniak
Posty: 2060
Rejestracja: 16 sty 2008, 18:44

Nieprzeczytany post autor: green7 »

NiceFox pisze:if OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
i dodaj ( po if ...
Green
Obrazek
Obrazek

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

Nieprzeczytany post autor: LowcaG »

kod jest w ogole bez sensu.
1) Funkcja start jest zle zdefiniowana - brak otwarcia i zamkniecia nawiasow klamrowych.
2) pesudo definicja funkcji int nieMaOtwartych(); (nie powinno byc zadnego srednika)

3) Jak juz zostalo wspomniane, brak nawiasu otwierajacego w ifie

4) Z racji, ze nie ma ciala funkcji start , nie ma tez co sie wykonywac
(deifnicje funkcji maja to do siebie, ze aby je uzyc trzeba je wywolac)

Awatar użytkownika
NiceFox
Pasjonat
Pasjonat
Posty: 454
Rejestracja: 05 lis 2009, 13:22

Nieprzeczytany post autor: NiceFox »

nie mogę znaleźć błędu, gdzieś w starcie, pomóżcie')' - wrong parameters count C:\Program Files\XTB-Trader 4 PLN\experts\Piramida5.mq4 (52, 73)
.

Kod: Zaznacz cały

int countOrdersByRef(int oMagic, int& all, int& buy, int& sell,
                                           int& buystop, int& sellstop,
                                           int& buylimit, int& selllimit) {

   all=0;
   buy=0;
   sell=0;
   buystop=0;
   sellstop=0;
   buylimit=0;
   selllimit=0;

   for(int i=0;i<OrdersTotal();i++) {
    if(OrderSelect(i,SELECT_BY_POS)) {
     if(OrderMagicNumber()==oMagic) {
      if(OrderSymbol()==Symbol()) {
       all++;
       if(OrderType()==OP_BUY) buy++;
       if(OrderType()==OP_SELL) sell++;
       if(OrderType()==OP_BUYSTOP) buystop++;
       if(OrderType()==OP_SELLSTOP) sellstop++;
       if(OrderType()==OP_BUYLIMIT) buylimit++;
       if(OrderType()==OP_SELLLIMIT) selllimit++;
      }
     }
    }
   }

}
int start() 
{

int cAll;
int cBuy;
int cSell;
int cBuyStop;
int cSellStop;
int cBuyLimit;
int cSellLimit;

countOrdersByRef(cAll,cBuy,cSell,cBuyStop,cSellStop,cBuyLimit,cSellLimit);

// dalej odwołujemy się do zadeklarowanych zmiennych
if(cBuy>0) 
            Alert(1); 

}
Pieniądze rosną na drzewie cierpliwości.

Awatar użytkownika
gieroj
Stały bywalec
Stały bywalec
Posty: 33
Rejestracja: 25 lut 2010, 16:11

Nieprzeczytany post autor: gieroj »

Funkcja którą napisałeś nic nie zwraca liczy sobie ile jest pozycji ale nie zwraca nam żadnego wyniku.

U mnie funkcja zliczająca ile jest otwartych pozycji danego typu wygląda tak :

Kod: Zaznacz cały

int checkorders(int typ)//sprawdza ile jest otwartych pozycji danego typu 0-buy 1-sell 2-buylimit ...
{
int trades=0;

   for (int i=OrdersTotal()-1; i>=0; i--)
   {                                               
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {
         if (OrderSymbol()==Symbol()&& OrderMagicNumber() == magic){
           switch(typ){
            case 0: { if (OrderType()==OP_BUY)trades++; break;}
            case 1: { if (OrderType()==OP_SELL)trades++; break;}
            case 2: { if (OrderType()==OP_BUYLIMIT)trades++; break;}
            case 3: { if (OrderType()==OP_SELLLIMIT)trades++; break;}
            case 4: { if (OrderType()==OP_BUYSTOP)trades++; break;}
            case 5: { if (OrderType()==OP_SELLSTOP)trades++; break;}
           } 
         }  
      }   
   }
 return(trades);  
}
Teraz w funkcji start dajesz odwołanie:

Kod: Zaznacz cały

int start()
{
if (checkorders(0)>0) 
  Print("Masz otwarta pozycje BUY ");

return(0);
}
magic zadeklaruj sobie na początku EA jako zmienna globalną jest wygodniej :)

Kod: Zaznacz cały

extern int magic=7766;
Ostatnio zmieniony 08 gru 2010, 14:19 przez gieroj, łącznie zmieniany 1 raz.
"Dzień dobry, mam na imię Paweł i jestem przegrywającym."

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

Nieprzeczytany post autor: LowcaG »

gieroj pisze:Funkcja którą napisałeś nic nie zwraca liczy sobie ile jest pozycji ale nie zwraca nam żadnego wyniku.
Zwraca zwraca...

Blad jest w tym, że nie podales jako parametr oMagic, masz 7 parametrow a powinno byc 8

Awatar użytkownika
NiceFox
Pasjonat
Pasjonat
Posty: 454
Rejestracja: 05 lis 2009, 13:22

Nieprzeczytany post autor: NiceFox »

czy można zapisać dla megica i bez megica w jednym module?

Kod: Zaznacz cały

//============================= spr 1====================================
int checkorders(int typ)//sprawdza ile jest otwartych pozycji danego typu 0-buy 1-sell 2-buylimit ...
{
int trades=0;

   for (int i=OrdersTotal()-1; i>=0; i--)
   {                                               
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {
        if (OrderSymbol()==Symbol()))

         {
           switch(typ){
            case 0: { if (OrderType()==OP_BUY)trades++; break;}
            case 1: { if (OrderType()==OP_SELL)trades++; break;}
            case 2: { if (OrderType()==OP_BUYLIMIT)trades++; break;}
            case 3: { if (OrderType()==OP_SELLLIMIT)trades++; break;}
            case 4: { if (OrderType()==OP_BUYSTOP)trades++; break;}
            case 5: { if (OrderType()==OP_SELLSTOP)trades++; break;}
           }
           
         } 
      }   
   }
 return(trades); 
}
//============================= spr 2 ====================================
int checkorders_1(int typ)//sprawdza ile jest otwartych pozycji danego typu 0-buy 1-sell 2-buylimit ...
{
int trades_1=0;

   for (int j=OrdersTotal()-1; j>=0; j--)
   {                                               
      if (OrderSelect(j,SELECT_BY_POS,MODE_TRADES)==true)
      {
       
 if (OrderSymbol()==Symbol())&& OrderMagicNumber() == magic)
         {
           switch(typ){
            case 6: { if (OrderType()==OP_BUY)trades_1++; break;}
            case 7: { if (OrderType()==OP_SELL)trades_1++; break;}
            case 8: { if (OrderType()==OP_BUYLIMIT)trades_1++; break;}
            case 9: { if (OrderType()==OP_SELLLIMIT)trades_1++; break;}
            case 10: { if (OrderType()==OP_BUYSTOP)trades_1++; break;}
            case 11: { if (OrderType()==OP_SELLSTOP)trades_1++; break;}
           }
           
         } 
      }   
   }
 return(trades_1); 
}
Pieniądze rosną na drzewie cierpliwości.

green7
Maniak
Maniak
Posty: 2060
Rejestracja: 16 sty 2008, 18:44

Nieprzeczytany post autor: green7 »

Ło rany .... Czy obie te funkcje pisała ta sama osoba ? Bo jak tak to zupełnie nie kumam podejścia. ....
Tak czy siak odpowiadając na pytanie: da się. Dodaj do parametrów funkcji parametr magic, i jeśli równy będzie on przykładowo -1 to nie sprawdzasz go po orderselect. Wtedy możesz wywołując funkcje z odpowiednimi parametrami zliczac ordery dla wybranego magicno, lub wszystkie.
Pozatym po cholerę tak kombinujesz z parametrem typ ? Przecież to pozbawione zupełnie sensu. Cały ten switch możesz wyrzucić i zastąpić linią: if (OrderType() == typ) trades++
zastanów się co wtedy będziesz podawał przy wywołaniu jako parametr typ : czyż nie zrobi się wtedy prosto jasno i przejrzyście?
Green
Obrazek
Obrazek

Awatar użytkownika
NiceFox
Pasjonat
Pasjonat
Posty: 454
Rejestracja: 05 lis 2009, 13:22

Nieprzeczytany post autor: NiceFox »

Kod jest gieroja nie mój. Nie jestem pewien czy coś takiego miałeś na myśli?

Kod: Zaznacz cały

int checkorders(int typ)//sprawdza ile jest otwartych pozycji danego typu 0-buy 1-sell 2-buylimit ...
{
int trades=0;

   for (int i=OrdersTotal()-1; i>=0; i--)
   {                                               
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {
        if (OrderSymbol()==Symbol()&& OrderMagicNumber() == magic_2)

         {
           switch(typ){
            case 0: { if (OrderType()==OP_BUY)trades++; break;}
            case 1: { if (OrderType()==OP_SELL)trades++; break;}
            case 2: { if (OrderType()==OP_BUYLIMIT)trades++; break;}
            case 3: { if (OrderType()==OP_SELLLIMIT)trades++; break;}
            
           }
           if (OrderSymbol()==Symbol()&& OrderMagicNumber() == magic_1)
           {
           switch(typ){
            case 4: { if (OrderType()==OP_BUY)trades++; break;}
            case 5: { if (OrderType()==OP_SELL)trades++; break;}
            case 6: { if (OrderType()==OP_BUYLIMIT)trades++; break;}
            case 7: { if (OrderType()==OP_SELLLIMIT)trades++; break;} 
           
           }
           
           }
           
           
         } 
      }   
   }
 return(trades); 
}
Pieniądze rosną na drzewie cierpliwości.

ODPOWIEDZ