prosba o proste przykladowe EA

O jezykach programowania w platformach i nie tylko.
2009
Stały bywalec
Stały bywalec
Posty: 31
Rejestracja: 13 sty 2009, 21:16

Nieprzeczytany post autor: 2009 »

witam
Tig3r pisze:Jeśli otwierasz po BID to zamykasz po ASK i odwrotnie.
Czyli tu masz błąd.

I masz również tu błąd(zdaje się - dziwny zapis):

Kod: Zaznacz cały

for(int i = OrdersTotal(); i != 0;  i = OrdersTotal()) 
O dokładniej ostatnia cześć czyli to:

Kod: Zaznacz cały

 i = OrdersTotal()
powinno być jak coś

Kod: Zaznacz cały

i--;
ja bym dał po prostu:

Kod: Zaznacz cały

int total=OrdersTotal();
for(int i=0;i <=total; i++){

Kod: Zaznacz cały

for(int i = OrdersTotal(); i != 0;  i = OrdersTotal()) 
tak petla dziala wkolo az do zamkniecia zlecenia

a przez to ze nie jest wykonywany

Kod: Zaznacz cały

return(0);  }
skrypt nie zapomina ticket

...
co do cen ASK i BID to dosc dziwne bo w skrypcie ktory wyslalem ... da sie otworzyc i zamknac jedynie po cenach BID i BID !
ale prawdopodobnie przez ta "nieprawidlowa" petle




... chcialbym napisac taka funkcje ktora by zwracala ticket po tym jaki zlecenie ma komentarz
ale nie wiem jak zdefiniowac " int powrotticketu "(kod ponizej)
moze poraz kolejny jakis kolega lub kolezanka wskazalby mi wlasciwa droge?

tak szczerze to chcialbym napisac EA ktore na koniec obslugiwalo by ze 100 zlecen... wiec musze miec funkcje ktora by je rozpoznawala...

Kod: Zaznacz cały

 how_order("s1");

         .......................................
 
void how_order(string JAKIE)
{ 
  for (int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--) 
  { 
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); 
    if (	OrderComment() == JAKIE) 
               { 
                int powrotticketu = OrderTicket() ;
               
               } 
  } 
}
ale po powrocie z fukncji
how_order

w powrotticketu jest 0.... ?



Dziekuje koledze Andrzejowi za wyszukiwanie obiektow

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

Nieprzeczytany post autor: Pierz Andrzej »

witam jak chcesz zwrocic wartosc to musisz uzyc return() to raz
dwa funkcja void jest funkcja "wykonywalna" nie zwracajaca wartosci
do zwracania wartosci uzywasz

Kod: Zaznacz cały

int
double
bool
datetime
w zaleznosci co chcesz zwrocic ;)
czyli Twoja funkcja powinna wygladac raczej tak

Kod: Zaznacz cały

 how_order("s1"); 

         ....................................... 
  
int how_order(string JAKIE) 
{ 
  for (int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--) 
  { 
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); 
    if (   OrderComment() == JAKIE) 
               { 
                return(OrderTicket() ); 
                
               } 
  } 
return(0);
} 
pzdr Andrzej

Dodano po 3 minutach:

ale taka funkcja zwroci Ci tylko pierwsza napotkana pozycje z szukanym komentarzem
a jezeli jest ich wiecej to proponuje zamiast zwracania wartosci to zapis do tablicy ;)

pzdr Andrzej
z poważaniem
Andrzej Pierz
FOREX-SERVICE

2009
Stały bywalec
Stały bywalec
Posty: 31
Rejestracja: 13 sty 2009, 21:16

Nieprzeczytany post autor: 2009 »

Pierz Andrzej pisze: pzdr Andrzej
nie wiem jak dziekowac :) ...
cos wspanialego, zazdroszcze opanowania mql4...


a moze jakis przyklad z tablica ?
bo wiem ze metoda prob i bledow bedzie problem...

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

Nieprzeczytany post autor: Pierz Andrzej »

2009 pisze:
Pierz Andrzej pisze: pzdr Andrzej
nie wiem jak dziekowac :) ...
cos wspanialego, zazdroszcze opanowania mql4...


a moze jakis przyklad z tablica ?
bo wiem ze metoda prob i bledow bedzie problem...

Kod: Zaznacz cały

int tablica[100];
int i;
 how_order("s1"); 

         ....................................... 
  
 how_order(string JAKIE) 
{ 
  i=0;
  for (int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--) 
  { 
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); 
    if (   OrderComment() == JAKIE) 
               { 
                tablica[i]=OrderTicket(); 
                i++;
               } 
  } 
 
} 
wartosc zmiennej wskazywac bedzie ilosc danych w tablicy ;)
pzdr Andrzej
z poważaniem
Andrzej Pierz
FOREX-SERVICE

2009
Stały bywalec
Stały bywalec
Posty: 31
Rejestracja: 13 sty 2009, 21:16

Nieprzeczytany post autor: 2009 »

kolego Andrzeju :) naprawde nie wiem jak sie odwdziecze ...


mam jeszcze jeden problem chcialem napisac taka funkcje ktora by podawala mi ilosc zlecen oczekujacych

Kod: Zaznacz cały

void ilezlecen()
{ 
  int oczekujace =0;
  for (int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--) 
  { 
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); 
    if (OrderType() == OP_SELLSTOP) 
    {oczekujace++;}
    
    if (OrderType() == OP_BUYSTOP) 
    {oczekujace++;}

  } 
return(oczekujace); 
}
ale cos to nie chce dzialac jak "zaplanowalem"
pewnie znowu cos zle zdefiniowalen z powrotem danych,
ale to pewnie dlatego bo nie wiem jak to zrobic poprawie


z gory dziekuje niesamowicie :) !
pozdrawiam

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

Nieprzeczytany post autor: Pierz Andrzej »

nie

Kod: Zaznacz cały

void
tylko funkcja void nic nie zwraca ;) tylko wykonuje

tzn chcesz wyslac zlecenie uzyj void
chcesz wiedziec ile jest pozycji uzyj int
chcesz wiedziec jaka wartosc lota uzyj double
chcesz znac komentarz uzyj string

pzdr Andrzej
z poważaniem
Andrzej Pierz
FOREX-SERVICE

2009
Stały bywalec
Stały bywalec
Posty: 31
Rejestracja: 13 sty 2009, 21:16

Nieprzeczytany post autor: 2009 »

Pierz Andrzej pisze:nie

Kod: Zaznacz cały

void
tylko funkcja void nic nie zwraca ;) tylko wykonuje

tzn chcesz wyslac zlecenie uzyj void
chcesz wiedziec ile jest pozycji uzyj int
chcesz wiedziec jaka wartosc lota uzyj double
chcesz znac komentarz uzyj string

pzdr Andrzej
dziekuje dziekuje, zaczyna to mi przypominac prawdziwa pomoc dla poczatkujacych, jestem ogromnie wdzieczny dla Andrzeja oraz Tig3r za cierpliwosc :)

i niestety na dzisiaj juz musze skonczyc programowanie (jade na ryby)
a jutro ide do pracy ... czyli wieczorem bede mial troszeczke czasu

Dziekuje! :)

2009
Stały bywalec
Stały bywalec
Posty: 31
Rejestracja: 13 sty 2009, 21:16

Nieprzeczytany post autor: 2009 »

Panowie :) witam ponownie


chcialbym napisac kilka funkcji odnosnie historii konta
ale mam problem, nie umiem i nie moge znalesc informacji...

funkcja

Kod: Zaznacz cały

OrderHistoryTotal()
zwraca ilosc zamknietych zlecen...

ale nie wiem jak sie sprawdza dane zlecen historycznych


-jak sprawdzic rozmiar Lot'a ostatniej zamknietej pozycji ??

-jak sprawdzic laczny profit zlecen (danego okresu czasu) np tego dnia ??


prosilbym o przyklad...
z gory dziekuje
Pozdrawiam :)

StudenTM84
Stały bywalec
Stały bywalec
Posty: 53
Rejestracja: 07 maja 2009, 21:08

Nieprzeczytany post autor: StudenTM84 »

jeśli chodzi o pierwsze pytanie to ja bym to zrobił tak:

Kod: Zaznacz cały

double lot = 0.1;
double last_lot = 0;

if(OrderHistoryTotal()<1)   //gdy nie było żadnych zleceń w poprzednim okresie
last_lot = 0; // to wartość ostatniego lota = 0 (możesz również ustawić na last_lot = lot (czyli wartość, którą ustawiłeś początkowo dla lota)
else        // w innym przypadku
      {
OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY); // korzystamy z funkcji orderselect
last_lot = OrderLots(); // indeks w orderselekt powinien byc przesuniety w dół o 1 
// wynika to z operacji na tablicach (pierwszy index zaczyna się od zera a ostatni kończy się na n-1
//no i przypisujemy zmiennej last_lot wartość lota z ostatniej historii :)
    }
Natomiast jeśli chodzi o łączny profit w danym czasie to jest już chyba trochę bardziej skomplikowane (ja w takie coś się nie bawiłem :P)
Pozdrawiam
Pewnych rzeczy nie można odkryć;
lecz tego nie stwierdzisz odgadywaniem ani snuciem domysłów;
nie, musisz być cierpliwy i przeprowadzić doświadczenia,
aż odkryjesz, że nie możesz czegoś poznać.
Mark Twain :)

2009
Stały bywalec
Stały bywalec
Posty: 31
Rejestracja: 13 sty 2009, 21:16

Nieprzeczytany post autor: 2009 »

StudenTM84 pisze:jeśli chodzi o pierwsze pytanie to ja bym to zrobił tak:

Kod: Zaznacz cały

double lot = 0.1;
double last_lot = 0;

if(OrderHistoryTotal()<1)   //gdy nie było żadnych zleceń w poprzednim okresie
last_lot = 0; // to wartość ostatniego lota = 0 (możesz również ustawić na last_lot = lot (czyli wartość, którą ustawiłeś początkowo dla lota)
else        // w innym przypadku
      {
OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY); // korzystamy z funkcji orderselect
last_lot = OrderLots(); // indeks w orderselekt powinien byc przesuniety w dół o 1 
// wynika to z operacji na tablicach (pierwszy index zaczyna się od zera a ostatni kończy się na n-1
//no i przypisujemy zmiennej last_lot wartość lota z ostatniej historii :)
    }
Natomiast jeśli chodzi o łączny profit w danym czasie to jest już chyba trochę bardziej skomplikowane (ja w takie coś się nie bawiłem :P)
Pozdrawiam
DZIEKUJE
jasniej sie chyba nie dalo :)


ja nie znalem :

Kod: Zaznacz cały

OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY); 
i w tym tkwil caly moj problem


ze zliczaniem profitu w danym okresie czasu byc moze juz sobie poradze...
a bynajmniej bede probowal

pozdrawiam

ODPOWIEDZ