datetime expiration

O jezykach programowania w platformach i nie tylko.
mana
Bywalec
Bywalec
Posty: 12
Rejestracja: 25 maja 2014, 01:14

datetime expiration

Nieprzeczytany post autor: mana »

Pytanie. Jak wpisać expiration w OrderSend(....OP_BAYSTOP...) , aby zlecenie zamknęło się po określonym czasie np.15 minut od wystawienia zlecenia - bez jego aktywacji?

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Re: datetime expiration

Nieprzeczytany post autor: personov »

Kod: Zaznacz cały

CurTime()+(expiration_pending*60)
expiration_pending to ilość minut.
Z tego co wiem to istnieje minimalna wartość tych minut w zależności od brokera.
Przetestuj sobie.
Solą życia jest kasa.

mana
Bywalec
Bywalec
Posty: 12
Rejestracja: 25 maja 2014, 01:14

Re: datetime expiration

Nieprzeczytany post autor: mana »

Bardzo dziękuję, tego jeszcze nie spróbowałem . Dam znać. Pozdrawiam

mana
Bywalec
Bywalec
Posty: 12
Rejestracja: 25 maja 2014, 01:14

Re: datetime expiration

Nieprzeczytany post autor: mana »

Przykro mi, ale to nie działa. Wypróbowałem kilkanaście różnych opcji połączeń z datetime, int, double. Połączeń z pełną rozbudowaną opcją :
datetime t =((TimeDayOfYear(OrderOpenTime()) == DayOfYear())&&(Hour() == Hour()) && (Minute()== Minute()+(expiration_pending*60)));
gdzie e_p był zadany czas w sekundach i inne opcje - I NIC. Zero reakcji.
Ludzie myślcie jak wyłączyć nie aktywny stop po pewnym , określonym czasie. Pozdrawiam.

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Re: datetime expiration

Nieprzeczytany post autor: personov »

Nie wiem co Ty kombinowałeś, ale czas wygaśnięcia zlecenia oczekujacego to przedostatnia wartość w całym nawiasie OrderSend() zlecenia oczekującego.
Poniżej masz przykład :

Kod: Zaznacz cały

OrderSend(Symbol(),OP_BUYSTOP,lot,distansIBH,5,distansIBH-SLB,distansIBH+TPB,"",MagicNumber,CurTime()+(expiration_pending*60*Period()),Green);
Wystarczy, że tam umieścisz swoje wartości i po określonym czasie zlecenie zostanie skasowane.
Jest jeszcze możliwość skasowania zlecenia oczekującego na zasadzie funkcji kasującej, ale to bardziej skomplikowane.
Czyli określasz sobie godziny i jak nadejdzie ta godzina to funkcja "kasuj" zaczyna działać - kasuje zlecenia. Nie zamyka tylko kasuje, bo zlecenie nie zostało jeszcze aktywowane.
Solą życia jest kasa.

mana
Bywalec
Bywalec
Posty: 12
Rejestracja: 25 maja 2014, 01:14

Re: datetime expiration

Nieprzeczytany post autor: mana »

Witam. Dziękuję za lekcję programowania, ale zależy mi na umieszczeniu kasowania STOPA w automacie. Tam nie mogę ręcznie wpisać godziny kasowania , ale musi to wykonać automat- czyli ja zadaję tylko ile minut ma być aktywny STOP lub LIMIT i po tym czasie ma się skasować i uruchomić nowy. Może rzeczywiście bardziej potrzebna byłaby funkcja kasująca. Próbowałem na zasadzie OrderClose , ale tak , jak piszesz zlecenie nie zostało jeszcze aktywowane i dlatego nie działało.
Jest OrderExpiration , ale to jest void i nie wiem jak to ugryźć. Pozdrawiam

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Re: datetime expiration

Nieprzeczytany post autor: personov »

Skoro chcesz to zalatwić w taki sposób to na końcu kodu ( poza funkcją start() ) wklej funkcje :

Kod: Zaznacz cały

void KasujBuy() 
{int i;
 int totalOrders= OrdersTotal();
 for (i = totalOrders-1; i >=0; i--) 
 {OrderSelect(i, SELECT_BY_POS, MODE_TRADES); 
  if (OrderSymbol() == Symbol()&& MagicNumber==OrderMagicNumber()) 
  {if (OrderType() == OP_BUYSTOP) 
  {OrderDelete(OrderTicket());}}}} 
void KasujSell() 
{int i;
 int totalOrders= OrdersTotal();
 for (i = totalOrders-1; i >=0; i--) 
 {OrderSelect(i, SELECT_BY_POS, MODE_TRADES); 
  if (OrderSymbol() == Symbol()&& MagicNumber==OrderMagicNumber()) 
  {if (OrderType() == OP_SELLSTOP) 
  {OrderDelete(OrderTicket());}}}} 
I w kodzie w funkcji start po spełnieniu danej godziny wywołaj funkcję :
KasujBuy(); lub KasujSell();
Pamiętaj oczywiście, że MagicNumber ma się nazywać tak samo jak u ciebie w kodzie.
Solą życia jest kasa.

mana
Bywalec
Bywalec
Posty: 12
Rejestracja: 25 maja 2014, 01:14

Re: datetime expiration

Nieprzeczytany post autor: mana »

Jesteś Wielki . Bardzo dziękuję. Cały piątek siedziałem nad tym - doszedłem do podobnych wniosków , ale nie byłem pewien.
Jednak dzisiaj sprawdziłem jeszcze raz Twoją ostatnią wersję z ...*Period())na końcu. W różnych czasach. Wcześniej robiłem to tylko na M1 i M5 - ZADZIAŁAŁO na M15. Działa rewelacyjnie cały dzisiejszy dzień automat działał bez zarzutu. Co 15 minut kasował STOP i uruchamiał nowy. Na 4 uruchomione wersje programu w trzech walutach tylko na australijczyku zatrzymał się o 13,45 i dał 31 pipsów straty do 18,30.W sumie na AUD/$ Y/$ i EU/$ dał 545 $ zysku przy 0.2 lota na każdym.
Jutro dalej próby i jak będzie OK to podziałam na realu.Pozdrawiam

ODPOWIEDZ