datetime expiration
datetime expiration
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?
Re: datetime expiration
Kod: Zaznacz cały
CurTime()+(expiration_pending*60)
Z tego co wiem to istnieje minimalna wartość tych minut w zależności od brokera.
Przetestuj sobie.
Solą życia jest kasa.
Re: datetime expiration
Bardzo dziękuję, tego jeszcze nie spróbowałem . Dam znać. Pozdrawiam
Re: datetime expiration
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.
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.
Re: datetime expiration
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 :
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.
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);
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.
Re: datetime expiration
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
Jest OrderExpiration , ale to jest void i nie wiem jak to ugryźć. Pozdrawiam
Re: datetime expiration
Skoro chcesz to zalatwić w taki sposób to na końcu kodu ( poza funkcją start() ) wklej funkcje :
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.
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());}}}}
KasujBuy(); lub KasujSell();
Pamiętaj oczywiście, że MagicNumber ma się nazywać tak samo jak u ciebie w kodzie.
Solą życia jest kasa.
Re: datetime expiration
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
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