funkcja - pauza po 2 stratnych transakcjach

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
Jacek_fx
Stały bywalec
Stały bywalec
Posty: 74
Rejestracja: 18 lis 2007, 11:23

funkcja - pauza po 2 stratnych transakcjach

Nieprzeczytany post autor: Jacek_fx »

witam

czy posiada ktoś taką funkcję jak w tytule, lub mógłby na szybko napisać, że po 2 stratnych transakcjach, EA "odpoczywa" i nie zawiera transakcji przez np. 120 minut

Pozdrawiam
Jacek

Awatar użytkownika
Jacek_fx
Stały bywalec
Stały bywalec
Posty: 74
Rejestracja: 18 lis 2007, 11:23

Nieprzeczytany post autor: Jacek_fx »

witam

czy naprawdę nikt nie jest w stanie mi pomóc?

Awatar użytkownika
Esco
Przyjaciel Forum
Przyjaciel Forum
Posty: 2603
Rejestracja: 11 kwie 2010, 20:56

Nieprzeczytany post autor: Esco »

inkrementacja zmiennej globalnej po każdym stratnym zleceniu i sprawdzanie warunku przed otwarciem kolejnego.

Cobong
Stały bywalec
Stały bywalec
Posty: 38
Rejestracja: 05 wrz 2009, 16:57

Re: funkcja - pauza po 2 stratnych transakcjach

Nieprzeczytany post autor: Cobong »

Jacek_fx pisze:witam

czy posiada ktoś taką funkcję jak w tytule, lub mógłby na szybko napisać, że po 2 stratnych transakcjach, EA "odpoczywa" i nie zawiera transakcji przez np. 120 minut

Pozdrawiam
Jacek

Kod: Zaznacz cały


//-------------------------------------------------------------------//
//                Sprawdzanie historii transkacji                    //
//-------------------------------------------------------------------//
//funkcja sprawdza czy w danym dniu nie byla wykonan juz transakcja
 
double SprHistoryBad(int TotalHst, int DzienRok, int Test)
{  
  int k, IleZlych=0;
  
      for(k=0;k<TotalHst;k++)
      {
         OrderSelect(k, SELECT_BY_POS, MODE_HISTORY);
          
             if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && TimeDayOfYear(OrderCloseTime())==DzienRok && OrderProfit()<0) 
             { 
               IleZlych++;
               if(Test == 1)  Print ("Historia: na symbolu ",Symbol()," dzis bylo juz ",IleZlych," dokonanych STRATNYCH transakcja");
               if(IleZlych >= HistoryBad) break; //zatrzymuje sprawdzanie jak juz wiadomo ze znalazl wystarczajaco duzo
             }                          
      }
      
  return(IleZlych); 
}

To jedna z moich funkcji, HistoryBad ustawiasz w EA np jako zmienną extern aby sobie ją dowolnie definiować. Wprowadź również zmienną TotalHist (czyli funkcja TotalHistory(), oraz aktualny dzień roku np 156 (oczywiście wywołał to z funkcji daty).
Ludzkie słabości i ludzka siła do ich pokonywania...

Awatar użytkownika
Jacek_fx
Stały bywalec
Stały bywalec
Posty: 74
Rejestracja: 18 lis 2007, 11:23

Nieprzeczytany post autor: Jacek_fx »

właśnie zapomniałem napisać: 2 stratnych transakcjach pod rząd...
czy da się jakoś szybko przerobić Twoją funkcję żeby sprawdzało czy są dwie stratne transakcje po sobie?

Pozdrawiam

Awatar użytkownika
siersciuch
Pasjonat
Pasjonat
Posty: 407
Rejestracja: 06 kwie 2010, 20:31

Nieprzeczytany post autor: siersciuch »

przed startem{} dajesz sobie

Kod: Zaznacz cały

if(loseHistory()<3)
{........ TU WKLEJSZA CAŁA FUNKCJE START CZYLI TWOJ EA............}
a tu masz funkcje która musisz wklić całkiem na zewnatrz wszystkich nawiasów

Kod: Zaznacz cały

int loseHistory()
{
   int sum = 0;
   for(int i=OrdersHistoryTotal()-1;i>=0;i--)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      if(OrderProfit()<0) sum++;else break;
   }
   return(sum);
} 
[/code]
jeżeli będziesz uparty, prawdopodobnie częściej odniesiesz sukces, niż doznasz porażki.

Awatar użytkownika
Jacek_fx
Stały bywalec
Stały bywalec
Posty: 74
Rejestracja: 18 lis 2007, 11:23

Nieprzeczytany post autor: Jacek_fx »

1. ten pierwszy warunek dać trzeba przed funkcją start czy można można bezpośrednio przed funkcją odpowiedzialną za otwarcie transakcji?

2. Jak ustawić czas tej przerwy w grze?

Pozdrawiam

Awatar użytkownika
siersciuch
Pasjonat
Pasjonat
Posty: 407
Rejestracja: 06 kwie 2010, 20:31

Nieprzeczytany post autor: siersciuch »

mozesz sobie dac przed otwarciem tranzakcji, tam nie ustawiasz czasu przerwy tylko ilość stratnych pod rząd, wiec jak bedzie dwie stratne wtedy twój robot przestanie grać, aby grał zpowrotem musisz go odnowa odpalic. Wiec jak bedziesz robił test na historycznych to sie nie sprawdzi bo robot poprostu przestanie grać. A jak chcesz ustawić czas jak dlugo ma niegrac po dwoch stratnych to trzeba dopisać pare warunków


moze to tak wygladać

Kod: Zaznacz cały

if(loseHistory()<3)
{
       long=OrderSend(Symbol(),OP_BUY,lot,Ask,3,Bid-25*Point,Bid+100*Point);
}
jeżeli będziesz uparty, prawdopodobnie częściej odniesiesz sukces, niż doznasz porażki.

Awatar użytkownika
Jacek_fx
Stały bywalec
Stały bywalec
Posty: 74
Rejestracja: 18 lis 2007, 11:23

Nieprzeczytany post autor: Jacek_fx »

hmm... kombinuję trochę i zastanawiam się tylko czy wystarczy zamienić w tej funkcji break na sleep(x) żeby działało jak w opisie wyżej ? czy może funkcja wymaga większej modyfikacji?

Awatar użytkownika
siersciuch
Pasjonat
Pasjonat
Posty: 407
Rejestracja: 06 kwie 2010, 20:31

Nieprzeczytany post autor: siersciuch »

nietrzeba nic zmieniać, na warunku sobie zmienisz, nigdy nie używałem funkcji sleep ale zapewne bedzie to tak wygladac

Dajesz ten warunek

Kod: Zaznacz cały

if(loseHistory()>3) 
{
     Sleep(................TUtaj wpisujesz wartosć czasu w milisekundach................)
     sum=0;
}


zamiast tego

Kod: Zaznacz cały

if(loseHistory()<3)
{
       long=OrderSend(Symbol(),OP_BUY,lot,Ask,3,Bid-25*Point,Bid+100*Point);
}

spróbuj czy działa
jeżeli będziesz uparty, prawdopodobnie częściej odniesiesz sukces, niż doznasz porażki.

ODPOWIEDZ