Ograniczenie błędu 134

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
mike_05
Maniak
Maniak
Posty: 1668
Rejestracja: 02 wrz 2010, 11:55

Ograniczenie błędu 134

Nieprzeczytany post autor: mike_05 »

Potrzebny kawałek kodu do dodania do EA. Opiszę problem.

System ma dodaną górną granice składania ilości pozycji na każdy świeczkę. Na jednym wykresie na 4H mam 30 pozycji, na drugim 10 pozycji na 1H. Jeżeli któraś pozycja jest zamykana, system w jej miejsce otwiera następna według zadanego limitu ilościowego. Przy sporej zmienności moze to byc do ~100 pozycji równocześnie, ale jak śledzę logi, jest to z reguły ok 60-70 pozycji jednocześnie maksymalnie. Z ukrytym SL i TP na jedna pozycję daje to tylko 2 zapytania do serwera, pierwsze open, drugie zamknij. Problem zaczyna sie w sytuacji, kiedy jest błąd 134. Za każdym wywołaniem do serwera OPEN, będzie zwracany ten błąd aż do momentu, gdy wolny depozyt pozwoli otworzy zlecenie. A to może trwać kilka godzin. W ten sposób do jednego brokera poszło mi wczoraj 170000 zapytań na serwer, na co mi na razie delikatnie zwrócono uwagę z prośbą o korektę ustawień EA.

Ma ktoś jakiś pomysł?
Jeżeli chcesz odnieść sukces, naucz się cenić ludzi.

259
Maniak
Maniak
Posty: 3968
Rejestracja: 15 cze 2011, 23:20

Nieprzeczytany post autor: 259 »

No i słusznie - takich co robią sztuczny tłok się wyrzuca :-)

A dlaczego nie sprawdzisz najpierw czy masz wystarczający margin?
Wystarczy coś takiego o ile dobrze pamiętam:

Kod: Zaznacz cały

if (CzyJestMargin(lots)) OrderSend()...

bool CzyJestMargin(double lots){
double wolnaKasa = AccountEquity();
double minMargin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
minMargin *= lots;
return (wolnaKasa >= minMargin);
}
Sprawdź dokładniej bo piszę teraz w biegu na kolanie to coś mogłem pokręcić.
Przykładów obliczania minimalnego marginu jest na pęczki.

Dodano po 5 minutach:

Pewnie, że pokręciłem :-)
Powinno być tak:

Kod: Zaznacz cały

if (CzyJestMargin(lots)) OrderSend()...

bool CzyJestMargin(double lots){
double minMargin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
minMargin *= lots;
return (AccountFreeMargin() >= minMargin);
}
AccountFreeMargin() zamiast AccountEquity():
Jakże często ludzie mają już gotową opinię zanim zdążą pojąć istotę rzeczy.
A gdy już ta istota w pełni do nich dotrze, jakże często muszą zmagać się z konsekwencjami swojej opinii ;-)

Awatar użytkownika
mike_05
Maniak
Maniak
Posty: 1668
Rejestracja: 02 wrz 2010, 11:55

Nieprzeczytany post autor: mike_05 »

Poprawiłem a i tak zawiesili mi konto od 2 do 10 GMT i to na dodatek z otwartymi pozycjami.
Jeżeli chcesz odnieść sukces, naucz się cenić ludzi.

259
Maniak
Maniak
Posty: 3968
Rejestracja: 15 cze 2011, 23:20

Nieprzeczytany post autor: 259 »

mike_05 pisze:Poprawiłem a i tak zawiesili mi konto od 2 do 10 GMT i to na dodatek z otwartymi pozycjami.
Z tego powodu czy innego?
W ./logs i ./experts/logs możesz zobaczyć co się działo.
Jeżeli zlecenia były odrzucane powinna być odpowiednia informacja.

Jest wiele powodów dla których broker może zawiesić konto.
Pomijając złośliwość czy brak wyobrażni to może być zbyt częste wysyłanie zleceń, przekroczenie dopuszczalnej ilości jednocześnie handlowanych lotów, zbyt krótki czas trwania transakcji itp. Trzeba sprawdzić w regulaminie jakie są ograniczenia.
Jakże często ludzie mają już gotową opinię zanim zdążą pojąć istotę rzeczy.
A gdy już ta istota w pełni do nich dotrze, jakże często muszą zmagać się z konsekwencjami swojej opinii ;-)

Awatar użytkownika
mike_05
Maniak
Maniak
Posty: 1668
Rejestracja: 02 wrz 2010, 11:55

Nieprzeczytany post autor: mike_05 »

[Not enough money] tego najwięcej było, ale już nie ma
[Trade timeout] tego trochę ale ping do brokera koszmarny
[Trade context is busy] a to jak mi zrobili read only
dziś tylko 230 transakcji zamkniętych
Jeżeli chcesz odnieść sukces, naucz się cenić ludzi.

259
Maniak
Maniak
Posty: 3968
Rejestracja: 15 cze 2011, 23:20

Nieprzeczytany post autor: 259 »

mike_05 pisze:[Not enough money] tego najwięcej było, ale już nie ma
[Trade timeout] tego trochę ale ping do brokera koszmarny
[Trade context is busy] a to jak mi zrobili read only
dziś tylko 230 transakcji zamkniętych
A co Ci broker powiedział?
Jakże często ludzie mają już gotową opinię zanim zdążą pojąć istotę rzeczy.
A gdy już ta istota w pełni do nich dotrze, jakże często muszą zmagać się z konsekwencjami swojej opinii ;-)

Awatar użytkownika
mike_05
Maniak
Maniak
Posty: 1668
Rejestracja: 02 wrz 2010, 11:55

Nieprzeczytany post autor: mike_05 »

Konto odwiesił. Co prawda dziś odbijałem stratę, ale i tak po bandach jade od -30% -> +60% ->-30% dzisiaj.
To tak jak ten koleś obok <-
Jeżeli chcesz odnieść sukces, naucz się cenić ludzi.

259
Maniak
Maniak
Posty: 3968
Rejestracja: 15 cze 2011, 23:20

Nieprzeczytany post autor: 259 »

mike_05 pisze:Konto odwiesił. Co prawda dziś odbijałem stratę, ale i tak po bandach jade od -30% -> +60% ->-30% dzisiaj.
To tak jak ten koleś obok <-
Ok, ale czy wiesz jaka była przyczyna zawieszenia. Bo może nadal będziesz robił coś co mu się nie spodoba i znów podpadniesz.
Jakże często ludzie mają już gotową opinię zanim zdążą pojąć istotę rzeczy.
A gdy już ta istota w pełni do nich dotrze, jakże często muszą zmagać się z konsekwencjami swojej opinii ;-)

Awatar użytkownika
mike_05
Maniak
Maniak
Posty: 1668
Rejestracja: 02 wrz 2010, 11:55

Nieprzeczytany post autor: mike_05 »

Głownie o ilość request, przeglądając logi przed poprawka twoją, miałem np. 3 godziny zapytań OPEN a odpowiedź No money tak kilkanaście na minutę.

Dodano po 4 minutach:

A pomysł mi wpadł, ale chyba wiem jak to zrobić już. EA na wykresie testu pokazuje przeważający czas trwania testu equity ponad balance nawet powyżej 10% w porywach. Konstruuję taki zamykasz całego koszyka, jak equity przekroczy zadany próg.
Jeżeli chcesz odnieść sukces, naucz się cenić ludzi.

ODPOWIEDZ