Zabawka
wydaje mi się że pozwalają, bo czemu nie ?
na ich stronie jest nawet dział: Automatyzacja handlu, i cytat
- 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ś?
na ich stronie jest nawet dział: Automatyzacja handlu, i cytat
Testuję ten skrypt i jak na razie jest tak: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.
- 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ś?
Może mają SL/Tp więcej niż 5 pipsów jako minimumziomekz 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.
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
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
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.
źródło: http://bossa.pl/index.jsp?layout=2&page ... cat_id=984
Wiem już w czym problem

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.

zgadza się, dlatego napisałem
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 .
edit:Np. aby dystans wynosił 5 pips, należy wpisać 50 i wszystko działa, SL i TP tak samo.
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 .

Brawo !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![]()
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.
Podoba mi się że sam do tego doszedłeś.
Dodano po 3 minutach:
A tu podoba mi się że kombinujesz w dobrą stronę. Jest to dobry sposób na naukę programowania i poznania platformy.ziomekz pisze:zgadza się, dlatego napisałemedit:Np. aby dystans wynosił 5 pips, należy wpisać 50 i wszystko działa, SL i TP tak samo.
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 .
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);
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:
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:
I zacząłem kombinować z wartością o1:
-oryginalnie wyglądało to tak:
- dokonałem korekty o ten spread:
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.
Po krótkiej rozkmince, doszedłem do wniosku żeby obejść wartość spreadu przy wykorzystaniu wartości Ask oraz Bid
czyli
no ale chwila
przecież Ask-spread = Ask-(Ask-Bid) = Bid
Dlatego zostałem przy Bid:
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)
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");
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;
}
-oryginalnie wyglądało to tak:
Kod: Zaznacz cały
o1 = OrderSend(Symbol(), OP_BUYSTOP, lots, Ask+dystans*Point, 0, 0, 0);
Kod: Zaznacz cały
o1 = OrderSend(Symbol(), OP_BUYSTOP, lots, Ask-spread+dystans*Point, 0, 0, 0);
To nie pomogło.

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

czyli
Kod: Zaznacz cały
o1 = OrderSend(Symbol(), OP_BUYSTOP, lots, Ask-(Ask-Bid)+dystans*Point, 0, 0, 0);
no ale chwila



Dlatego zostałem przy Bid:
Kod: Zaznacz cały
o1 = OrderSend(Symbol(), OP_BUYSTOP, lots, Bid+dystans*Point, 0, 0, 0);
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.
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);
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);