Zabawka

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
forekrz
Stały bywalec
Stały bywalec
Posty: 21
Rejestracja: 28 lip 2010, 09:31

Nieprzeczytany post autor: forekrz »

Myślę, że jest to spowodowane zachowaniem serwera. Ja testowałem na XTB i też działa ale czasami jest dłuższy czas odpowiedzi serwera.

Dodano po 4 minutach:

Możesz jeszcze sprawdzić czy nie ma jakieś wskazówki w Dzienniku
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

ziomekz pisze: czemu na tej bossie nie?
A oni w ogóle pozwalają na automaty?
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
ziomekz
Stały bywalec
Stały bywalec
Posty: 72
Rejestracja: 01 wrz 2010, 13:48

Nieprzeczytany post autor: ziomekz »

wydaje mi się że pozwalają, bo czemu nie ?
na ich stronie jest nawet dział: Automatyzacja handlu, i cytat
Platforma transakcyjna BOSSAFX daje szerokie możliwości rozwijania systemów automatycznych. W środowisku platformy można tworzyć, ulepszać i testować systemy automatyczne, które nie tylko będą generować sygnały, lecz także otwierać i zamykać pozycje.
Testuję ten skrypt i jak na razie jest tak:
- na AM: wszystko działa, skrypt otwiera 2 pozycje oczekujące oddalone od ceny w ustalonym dystansie, jeśli jedna z pozycji zostanie osiągnięta, włączają się poprawnie SL i TP.

- na Bossa: skrypt otwiera 1 czasem dwie pozycje oczekujące, ale nie włącza SL ani TP jeśli pozycja oczekująca zostanie osiągnięta.

Ciekawe, mają zablokowane coś?

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

ziomekz pisze:- na Bossa: skrypt otwiera 1 czasem dwie pozycje oczekujące, ale nie włącza SL ani TP jeśli pozycja oczekująca zostanie osiągnięta.
Może mają SL/Tp więcej niż 5 pipsów jako minimum
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
ziomekz
Stały bywalec
Stały bywalec
Posty: 72
Rejestracja: 01 wrz 2010, 13:48

Nieprzeczytany post autor: ziomekz »

nie, limit SL i TP na większości par wynosi zero, sprawdziłem to i na stronie też jest
źródło: http://bossa.pl/index.jsp?layout=2&page ... cat_id=984

Wiem już w czym problem :lol:

Bossa ostatnio zmieniła swoją ofertę, notowania są teraz z dokładnością do 5 miejsc po przecinku. Działa to na razie na demie, a na Real zmiany zostaną wprowadzone 24.10.10. Zmniejszony zostanie także spread np. dla Edka 1.8 pips (obecnie 2 pips).

Dlatego w ustawieniach skryptu oraz Zabawki trzeba wpisywać wartości przemnożone przez 10. Np. aby dystans wynosił 5 pips, należy wpisać 50 i wszystko działa, SL i TP tak samo. :wink:

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

Jeśli notowania masz do 5 miejsc po przecinku to SL zamiast 5 trzeba dać 50.
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
ziomekz
Stały bywalec
Stały bywalec
Posty: 72
Rejestracja: 01 wrz 2010, 13:48

Nieprzeczytany post autor: ziomekz »

zgadza się, dlatego napisałem
Np. aby dystans wynosił 5 pips, należy wpisać 50 i wszystko działa, SL i TP tak samo.
edit:

Zauważyłem, że kiedy wrzucamy skrypt na wykres, ustawiamy odległość od ceny powiedzmy na 5 pips, to zlecenia oczekujące ustawią się:
- na sell stop -5 pips od ceny
- na buy stop +5 +spread od ceny
skoro buy stop jest odsunięty od obecnej ceny więcej niż sell stop jest to trochę niekorzystne, można by wprowadzić zmienną spread do której każdy wpisywałby aktualny spread na parze na jakiej gra, w ten sposób zlecenie oczekujące buy stop można by postawić niżej o ten spread i tym samym w równej odległości od ceny, tak jak sell stop . :idea:

Awatar użytkownika
forekrz
Stały bywalec
Stały bywalec
Posty: 21
Rejestracja: 28 lip 2010, 09:31

Nieprzeczytany post autor: forekrz »

ziomekz pisze:nie, limit SL i TP na większości par wynosi zero, sprawdziłem to i na stronie też jest
źródło: http://bossa.pl/index.jsp?layout=2&page ... cat_id=984

Wiem już w czym problem :lol:

Bossa ostatnio zmieniła swoją ofertę, notowania są teraz z dokładnością do 5 miejsc po przecinku. Działa to na razie na demie, a na Real zmiany zostaną wprowadzone 24.10.10. Zmniejszony zostanie także spread np. dla Edka 1.8 pips (obecnie 2 pips).

Dlatego w ustawieniach skryptu oraz Zabawki trzeba wpisywać wartości przemnożone przez 10. Np. aby dystans wynosił 5 pips, należy wpisać 50 i wszystko działa, SL i TP tak samo. :wink:
Brawo !
Podoba mi się że sam do tego doszedłeś.

Dodano po 3 minutach:
ziomekz pisze:zgadza się, dlatego napisałem
Np. aby dystans wynosił 5 pips, należy wpisać 50 i wszystko działa, SL i TP tak samo.
edit:

Zauważyłem, że kiedy wrzucamy skrypt na wykres, ustawiamy odległość od ceny powiedzmy na 5 pips, to zlecenia oczekujące ustawią się:
- na sell stop -5 pips od ceny
- na buy stop +5 +spread od ceny
skoro buy stop jest odsunięty od obecnej ceny więcej niż sell stop jest to trochę niekorzystne, można by wprowadzić zmienną spread do której każdy wpisywałby aktualny spread na parze na jakiej gra, w ten sposób zlecenie oczekujące buy stop można by postawić niżej o ten spread i tym samym w równej odległości od ceny, tak jak sell stop . :idea:
A tu podoba mi się że kombinujesz w dobrą stronę. Jest to dobry sposób na naukę programowania i poznania platformy.

Poradzisz sobie z dołożeniem tej zmiennej "spred"? Podpowiem tylko że nie trzeba jej wpisywać z palca ale odczytać z serwera:
spread = MarketInfo(Symbol(), MODE_SPREAD);

Awatar użytkownika
ziomekz
Stały bywalec
Stały bywalec
Posty: 72
Rejestracja: 01 wrz 2010, 13:48

Nieprzeczytany post autor: ziomekz »

Wiesz co, poradziłem sobie , ale nie wiem czy jest sens przeprowadzać tą operację z spreadem.
Na początek zerknij na przerobiony kod twojego skryptu:

Kod: Zaznacz cały

void start()
{
   double lots, spread, dystans, o1, o2;
   //int o1, o2;
   
   lots = GlobalVariableGet("lots");
   dystans = GlobalVariableGet("dystans");
   spread = GlobalVariableGet("spread");
Na początku dodałem zmienną spread (musiała być typu double, w bossa na edku spread wynosi 1.8 )

Potem dodałem warunek sprawdzający czy wpisany spread jest większy od zera:

Kod: Zaznacz cały

if (spread==0) 
   {
      GlobalVariableSet("spread", 0);
      Alert("Brak wartości: spread"); 
      return;
   }
I zacząłem kombinować z wartością o1:

-oryginalnie wyglądało to tak:

Kod: Zaznacz cały

o1 = OrderSend(Symbol(), OP_BUYSTOP, lots, Ask+dystans*Point, 0, 0, 0);
- dokonałem korekty o ten spread:

Kod: Zaznacz cały

o1 = OrderSend(Symbol(), OP_BUYSTOP, lots, Ask-spread+dystans*Point, 0, 0, 0);
Po uruchomieniu skryptu okazało się że zlecenie oczekujące Buy Stop nie jest zakładane w ogóle. Możliwe że nie można mieszać parametru INT z DOUBLE, dlatego zmieniłem wszystkie zmienne na double (razem z o1 i o2)
To nie pomogło. :roll:

Po krótkiej rozkmince, doszedłem do wniosku żeby obejść wartość spreadu przy wykorzystaniu wartości Ask oraz Bid :D
czyli

Kod: Zaznacz cały

o1 = OrderSend(Symbol(), OP_BUYSTOP, lots, Ask-(Ask-Bid)+dystans*Point, 0, 0, 0);

no ale chwila :shock: :idea: przecież Ask-spread = Ask-(Ask-Bid) = Bid :lol:

Dlatego zostałem przy Bid:

Kod: Zaznacz cały

o1 = OrderSend(Symbol(), OP_BUYSTOP, lots, Bid+dystans*Point, 0, 0, 0);
I co się teraz okazało? Dla przykładu ustalmy że ustawiamy odległość (dystans) = 5 pips. Skrypt działa, uruchamiając go, ustawia 2 zlecenia oczekujące oddalone od aktualnej ceny (Bid) o tą samą wartość (do góry) dla Buy stop, oraz (na dół) dla Sell stop.
Jednak po chwili ... kiedy cena Ask dochodzi do wartości zlecenia Buy stop - zlecenie oczekujące otwiera się (jesteśmy stratni), zlecenie otwiera się na poziomie +5 pips od wcześniejszej ceny rynkowej ale dla ceny Aks !

Faktyczna cena Bid znajduje się nieco niżej (niżej właśnie o spread), zatem aby zawrzeć zlecenie Buy, należy ustawić oczekujące Buy stop na poziomie Ask (czyli tak jak było w twoim skrypcie, oryginalnie), wtedy faktyczna cena Bid znajdzie się na właściwym poziomie (+5 pips)

zresztą, zerknijcie na rysunki w załączniku. W oryginalnej wersji zlecenie oczekujące będzie wystawione wyżej (po cenie Ask, czyli ze spreadem) i otworzy się dla ceny Bid = +5 pipsów od poziomu.

W zmienionej wersji zlecenie oczekujące będzie wystawione niżej (po cenie Bid, czyli bez spreadu) i otworzy się dla ceny Bid = +3 pipsów od poziomu, ale na wykresie zobaczymy oba zlecenia oczekujące (Buy Stop i Sell Stop) rozmieszczone symetrycznie +5 i -5 pipsów od aktualnej ceny.

Jakby ktoś chciał to zmieniony skrypt jest w załączniku (Open2Pendings1.mq4)
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Awatar użytkownika
forekrz
Stały bywalec
Stały bywalec
Posty: 21
Rejestracja: 28 lip 2010, 09:31

Nieprzeczytany post autor: forekrz »

To masz błąd:
o1 = OrderSend(Symbol(), OP_BUYSTOP, lots, Ask-spread+dystans*Point, 0, 0, 0);

Powinno być:
o1 = OrderSend(Symbol(), OP_BUYSTOP, lots, Ask-(spread+dystans)*Point, 0, 0, 0);


=========================================================
Ask - Bid to jest to samo co MarketInfo(Symbol(), MODE_SPREAD);

tylko to ostatnie jest bardziej uniwesalne bo możesz odczytać spread innych symboli np.
MarketInfo("GBPUSD", MODE_SPREAD);

ODPOWIEDZ